1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-27 07:49:22 +00:00
comunicapiv2/src/controllers/PostsController.ts

94 lines
2.7 KiB
TypeScript

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";
import { SurveyHelper } from "../helpers/SurveyHelper";
import { SurveyController } from "./SurveyController";
/**
* 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(h, p));
}
h.send(list);
}
/**
* Turn a post object into an API entry
*
* @param h Request handler
* @param p The post
*/
public static async PostToAPI(h: RequestHandler, p: Post) : Promise<any> {
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.hasMovie ? p.movieID : null,
video_info: p.hasMovie ?
MoviesController.MovieToAPI(await MoviesHelper.GetInfo(p.movieID)) : null,
// Countdown timer specific
time_end: p.hasTimeEnd ? p.timeEnd : null,
// Weblink specific
link_url: !p.hasLink ? null : p.link.url,
link_title: !p.hasLink ? null : p.link.title,
link_description: !p.hasLink ? null : p.link.description,
link_image: !p.hasLink ? null : p.link.image,
// Survey specific
data_survey: !p.hasSurvey ? null : await SurveyController.SurveyToAPI(h, await SurveyHelper.GetInfo(p.id)),
};
return data;
}
}