import { Comment } from "../entities/Comment"; import { DatabaseHelper } from "./DatabaseHelper"; import { unlinkSync, existsSync } from "fs"; import { LikesHelper, LikesType } from "./LikesHelper"; import { mysql_date, time } from "../utils/DateUtils"; /** * Comments helper * * @author Pierre HUBERT */ const COMMENTS_TABLE = "commentaires"; export class CommentsHelper { /** * Create a new comment * * @param comment Information about the comment to create */ public static async Create(comment: Comment) : Promise { return await DatabaseHelper.InsertRow(COMMENTS_TABLE, { ID_texte: comment.postID, ID_personne: comment.userID, date_envoi: mysql_date(), time_insert: time(), commentaire: comment.content, image_commentaire: comment.hasImage ? comment.imagePath : "" }); } /** * Get the comments of a POST * * @param postID Target post ID */ public static async Get(postID: number) : Promise> { const results = await DatabaseHelper.Query({ table: COMMENTS_TABLE, where: { ID_texte: postID }, order: "ID" }); return results.map(this.DbToComment); } /** * Permanently delete a comment * * @param comment Information about the comment to delete */ public static async Delete(comment: Comment) { // Delete associated image (if any) if(comment.hasImage && existsSync(comment.imageSysPath)) { unlinkSync(comment.imageSysPath); } // Delete likes associated with the comment await LikesHelper.DeleteAll(comment.id, LikesType.COMMENT); // Delete the comment from the database await DatabaseHelper.DeleteRows(COMMENTS_TABLE, { ID: comment.id }) } /** * Delete all the comments associated to a post * * @param postID Target post ID */ public static async DeleteAll(postID: number) { // Get the comments of the post for(const comment of await this.Get(postID)) { await this.Delete(comment); } } /** * 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 }); } }