1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-12-28 14:38:52 +00:00

Get & return the comments of a post

This commit is contained in:
Pierre HUBERT 2020-01-03 17:31:39 +01:00
parent 5a45096fa6
commit 2924b205fd
4 changed files with 136 additions and 1 deletions

View File

@ -0,0 +1,48 @@
import { RequestHandler } from "../entities/RequestHandler";
import { Comment } from "../entities/Comment";
import { LikesHelper, LikesType } from "../helpers/LikesHelper";
/**
* Comments controller
*
* @author Pierre HUBERT
*/
export class CommentsController {
/**
* Turn a list of comment object into API entries
*
* @param h Request handler
* @param l List of comments
*/
public static async CommentsToAPI(h: RequestHandler, l: Comment[]) : Promise<Array<any>> {
const list = [];
for (const comment of l) {
list.push(await this.CommentToAPI(h, comment));
}
return list;
}
/**
* Turn a comment into an API object
*
* @param h Request handler
* @param c Comment
*/
public static async CommentToAPI(h: RequestHandler, c: Comment) : Promise<any> {
return {
ID: c.id,
userID: c.userID,
postID: c.postID,
time_sent: c.timeSent,
content: c.content,
img_path: c.hasImage ? c.imagePath : null,
img_url: c.hasImage ? c.imageURL : null,
likes: await LikesHelper.Count(c.id, LikesType.COMMENT),
userlike: h.signedIn ? await LikesHelper.IsLiking(h.getUserId(), c.id, LikesType.COMMENT) : false
}
}
}

View File

@ -7,6 +7,8 @@ import { MoviesHelper } from "../helpers/MoviesHelper";
import { SurveyHelper } from "../helpers/SurveyHelper";
import { SurveyController } from "./SurveyController";
import { LikesHelper, LikesType } from "../helpers/LikesHelper";
import { CommentsHelper } from "../helpers/CommentsHelper";
import { CommentsController } from "./CommentsController";
/**
* Posts controller
@ -106,7 +108,7 @@ export class PostsController {
user_access: ACCESS_LEVELS_API[await PostsHelper.GetAccessLevel(h.optionnalUserID, p)],
// Load comments (if possible)
comments: await PostsHelper.AllowCommentsOnPost(p) ? "to come" : null,
comments: await PostsHelper.AllowCommentsOnPost(p) ? await CommentsController.CommentsToAPI(h, await CommentsHelper.Get(p.id)) : null,
};
return data;

39
src/entities/Comment.ts Normal file
View File

@ -0,0 +1,39 @@
import { pathUserData } from "../utils/UserDataUtils";
/**
* Single comment information
*
* @author Pierre HUBERT
*/
export interface CommentBuilder {
id: number,
timeSent: number,
userID: number,
postID: number,
content: string,
imagePath ?: string,
}
export class Comment implements CommentBuilder {
id: number; timeSent: number;
userID: number;
postID: number;
content: string;
imagePath?: string;
public constructor(info: CommentBuilder) {
for (const key in info) {
if (info.hasOwnProperty(key))
this[key] = info[key];
}
}
get hasImage() : boolean {
return this.imagePath != null && this.imagePath != "" && this.imagePath != "null";
}
get imageURL() : string {
return pathUserData(this.imagePath);
}
}

View File

@ -0,0 +1,46 @@
import { Comment } from "../entities/Comment";
import { DatabaseHelper } from "./DatabaseHelper";
/**
* Comments helper
*
* @author Pierre HUBERT
*/
const COMMENTS_TABLE = "commentaires";
export class CommentsHelper {
/**
* Get the comments of a POST
*
* @param postID Target post ID
*/
public static async Get(postID: number) : Promise<Array<Comment>> {
const results = await DatabaseHelper.Query({
table: COMMENTS_TABLE,
where: {
ID_texte: postID
},
order: "ID"
});
return results.map(this.DbToComment);
}
/**
* Turn a database entry into a Comment object
*
* @param row Database entry
*/
private static DbToComment(row: any) : Comment {
return new Comment({
id: row.ID,
userID: row.ID_personne,
postID: row.ID_texte,
timeSent: row.time_insert == null ? new Date(row.date_envoi).getTime() / 100 : row.time_insert,
content: row.commentaire,
imagePath: (row.image_commentaire != null && row.image_commentaire != "") ? row.image_commentaire.replace("file:", "") : null
});
}
}