import { RequestHandler } from "../entities/RequestHandler"; import { ConversationsHelper } from "../helpers/ConversationsHelper"; import { Conversation } from "../entities/Conversation"; /** * Conversations controller * * @author Pierre HUBERT */ export class ConversationsController { /** * Get the list of conversations of the user * * @param handler */ public static async GetList(handler: RequestHandler) { const list = await ConversationsHelper.GetListUser(handler.getUserId()); handler.send(list.map(c => this.ConversationToAPI(c))); } /** * Get information about a single conversation * * @param handler */ public static async GetInfoSingle(handler: RequestHandler) { const conversationID = await this.GetPostConversationId("conversationID", handler); const conv = await ConversationsHelper.GetSingle(conversationID, handler.getUserId()); if(!conv) throw Error("Could not get information about the conversation (but it should have been found though) !!"); handler.send(this.ConversationToAPI(conv)); } /** * Get and return safely a conversation ID specified in a $_POST Request * * @param name The name of the POST field containing the ID of the conversation * @param handler */ private static async GetPostConversationId(name : string, handler: RequestHandler) : Promise { const convID = handler.postInt(name); // Check out whether the user belongs to the conversation or not if(!await ConversationsHelper.DoesUsersBelongsTo(handler.getUserId(), convID)) handler.error(401, "You are not allowed to perform queries on this conversation!"); return convID; } /** * Turn a conversation object into an API entry * * @param c */ private static ConversationToAPI(c : Conversation) : any { return { ID: c.id, ID_owner: c.ownerID, last_active: c.lastActive, name: c.name.length > 0 ? c.name : false, following: c.following ? 1 : 0, saw_last_message: c.sawLastMessage ? 1 : 0, members: c.members }; } }