// - Import react components import { firebaseRef, firebaseAuth } from 'app/firebaseClient/' import { SocialError } from 'domain/common' import { Post } from 'domain/posts' import { IPostService } from 'services/posts' /** * Firbase post service * * @export * @class PostService * @implements {IPostService} */ export class PostService implements IPostService { public addPost: (userId: string, post: Post) => Promise = (userId, post) => { return new Promise((resolve,reject) => { let postRef: any = firebaseRef.child(`userPosts/${userId}/posts`).push(post) postRef.then(() => { resolve(postRef.key) }) .catch((error: any) => { reject(new SocialError(error.code,error.message)) }) }) } public updatePost: (userId: string, postId: string, post: Post) => Promise = (userId, postId, post) => { return new Promise((resolve,reject) => { let updates: any = {} updates[`userPosts/${userId}/posts/${postId}`] = post firebaseRef.update(updates).then(() => { resolve() }) .catch((error: any) => { reject(new SocialError(error.code,error.message)) }) }) } public deletePost: (userId: string, postId: string) => Promise = (userId, postId) => { return new Promise((resolve,reject) => { let updates: any = {} updates[`userPosts/${userId}/posts/${postId}`] = null firebaseRef.update(updates).then(() => { resolve() }) .catch((error: any) => { reject(new SocialError(error.code,error.message)) }) }) } public getPosts: (userId: string) => Promise<{ [postId: string]: Post }> = (userId) => { return new Promise<{ [postId: string]: Post }>((resolve,reject) => { let postsRef: any = firebaseRef.child(`userPosts/${userId}/posts`) postsRef.once('value').then((snapshot: any) => { let posts: any = snapshot.val() || {} let parsedPosts: { [postId: string]: Post } = {} Object.keys(posts).forEach((postId) => { parsedPosts[postId] = { id: postId, ...posts[postId] } }) resolve(parsedPosts) }) .catch((error: any) => { reject(new SocialError(error.code,error.message)) }) }) } public getPostById: (userId: string, postId: string) => Promise = (userId, postId) => { return new Promise((resolve,reject) => { let postsRef: any = firebaseRef.child(`userPosts/${userId}/posts/${postId}`) postsRef.once('value').then((snapshot: any) => { let newPost = snapshot.val() || {} let post: Post = { id: postId, ...newPost } resolve(post) }) .catch((error: any) => { reject(new SocialError(error.code,error.message)) }) }) } }