102 lines
3.0 KiB
TypeScript
102 lines
3.0 KiB
TypeScript
// - 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<string> = (userId, post) => {
|
|
return new Promise<string>((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<void> = (userId, postId, post) => {
|
|
return new Promise<void>((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<void> = (userId, postId) => {
|
|
return new Promise<void>((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<Post> = (userId, postId) => {
|
|
return new Promise<Post>((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))
|
|
})
|
|
|
|
})
|
|
}
|
|
}
|