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:
parent
5a45096fa6
commit
2924b205fd
48
src/controllers/CommentsController.ts
Normal file
48
src/controllers/CommentsController.ts
Normal 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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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
39
src/entities/Comment.ts
Normal 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);
|
||||
}
|
||||
}
|
46
src/helpers/CommentsHelper.ts
Normal file
46
src/helpers/CommentsHelper.ts
Normal 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
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user