1
0
mirror of https://gitlab.com/comunic/comunicapiv2 synced 2024-11-22 13:29:22 +00:00

Remove conversation: Can delete conversation messages

This commit is contained in:
Pierre HUBERT 2019-12-07 18:06:41 +01:00
parent c9ee727629
commit 5a253f114c
4 changed files with 78 additions and 0 deletions

View File

@ -306,6 +306,19 @@ export class ConversationsController {
h.send(list.map(e => this.UnreadConversationToAPI(e)));
}
/**
* Request a conversation
*
* @param h Request handler
*/
public static async DeleteConversation(h: RequestHandler) {
const convID = await this.GetPostConversationId("conversationID", h);
await ConversationsHelper.RemoveUserFromConversation(h.getUserId(), convID);
h.success("The conversation has been deleted.");
}
/**
* Get and return safely a conversation ID specified in a $_POST Request
*

View File

@ -71,6 +71,8 @@ export const Routes : Route[] = [
{path: "/conversations/get_list_unread", cb: (h) => ConversationsController.GetListUnread(h)},
{path: "/conversations/delete", cb: (h) => ConversationsController.DeleteConversation(h)},
// Search controller
{path: "/search/user", cb: (h) => SearchController.SearchUser(h)},

View File

@ -43,4 +43,8 @@ export class ConversationMessage implements ConversationMessageInfo {
get imageURL() : string {
return pathUserData(this.imagePath);
}
get imageSysPath() : string {
return pathUserData(this.imagePath, true);
}
}

View File

@ -3,6 +3,7 @@ import { DatabaseHelper } from "./DatabaseHelper";
import { time } from "../utils/DateUtils";
import { ConversationMessage, BaseConversationMessage } from "../entities/ConversationMessage";
import { UnreadConversation } from "../entities/UnreadConversation";
import { existsSync, unlinkSync } from "fs";
/**
* Conversations helper
@ -456,6 +457,64 @@ export class ConversationsHelper {
});
}
/**
* Remove a user from a conversation
*
* @param userID Target user ID
* @param convID Target conversation ID
*/
public static async RemoveUserFromConversation(userID: number, convID: number) {
if(await this.IsUserModerator(userID, convID))
await this.DeleteConversations(convID);
//else
// Delete the membersip fot
// TODO : implement
}
/**
* Delete a conversation
*
* @param convID The ID of the conversation to delete
*/
private static async DeleteConversations(convID: number) {
// Get all the messages of the conversations
const messages = await this.GetNewMessages(convID, 0);
for (const message of messages) {
await this.DeleteMessage(message);
}
// Delete all the members of the conversation
// TODO
// Delete the conversation entry itself
// TODO
}
/**
* Delete a conversation message from the database
*
* @param m The message to delete
*/
private static async DeleteMessage(m: ConversationMessage) {
// Delete conversation message image (if any)
if(m.hasImage) {
if(existsSync(m.imageSysPath))
unlinkSync(m.imageSysPath);
}
// Delete the message from the database
await DatabaseHelper.DeleteRows(
MESSAGES_TABLE,
{
ID: m.id
}
)
}
/**
* Get the list of members of a conversation
*