import { RequestHandler } from "../entities/RequestHandler"; import { UserHelper } from "../helpers/UserHelper"; import { PostsHelper } from "../helpers/PostsHelper"; import { Post, PostVisibilityLevel, PostKind } from "../entities/Post"; import { MoviesController } from "./MoviesController"; import { MoviesHelper } from "../helpers/MoviesHelper"; /** * Posts controller * * @author Pierre HUBERT */ const VISIBILITY_LEVELS_API = {}; VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_PUBLIC] = "public"; VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_FRIENDS] = "friends"; VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_USER] = "private"; VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_GROUP_MEMBERS] = "members"; export class PostsController { /** * Get the posts of a user * * @param h Request handler */ public static async GetListUser(h: RequestHandler) { const userID = await h.postUserId("userID"); const startFrom = h.postInt("startFrom", 0); if(!await UserHelper.CanSeeUserPage(h.optionnalUserID, userID)) h.error(401, "You are not allowed to access this user posts !"); const posts = await PostsHelper.GetUserPosts(h.optionnalUserID, userID, startFrom); let list = []; for (const p of posts) { list.push(await this.PostToAPI(p)); } h.send(list); } /** * Turn a post object into an API entry * * @param p The post */ public static async PostToAPI(p: Post) : Promise { let data : any = { ID: p.id, useriD: p.userID, user_page_id: p.userPageID, group_id: p.groupID, post_time: p.timeCreate, content: p.hasContent ? p.content : null, visibility_level: VISIBILITY_LEVELS_API[p.visibilityLevel], kind: p.kind, // File specific file_size: !p.hasFile ? null : p.file.size, file_type: !p.hasFile ? null : p.file.type, file_path: !p.hasFile ? null : p.file.path, file_url: !p.hasFile ? null : p.file.url, // Movie specific video_id: p.kind == PostKind.POST_KIND_MOVIE ? p.movieID : null, video_info: p.kind == PostKind.POST_KIND_MOVIE ? MoviesController.MovieToAPI(await MoviesHelper.GetInfo(p.movieID)) : null }; return data; } }