mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2025-06-20 08:35:17 +00:00
Can get the list of conversations
This commit is contained in:
88
src/helpers/ConversationsHelper.ts
Normal file
88
src/helpers/ConversationsHelper.ts
Normal file
@ -0,0 +1,88 @@
|
||||
import { Conversation } from "../entities/Conversation";
|
||||
import { DatabaseHelper } from "./DatabaseHelper";
|
||||
|
||||
/**
|
||||
* Conversations helper
|
||||
*
|
||||
* @author Pierre HUBERT
|
||||
*/
|
||||
|
||||
const LIST_TABLE = "comunic_conversations_list";
|
||||
const USERS_TABLE = "comunic_conversations_users";
|
||||
const MESSAGES_TABLE = "comunic_conversations_messages";
|
||||
|
||||
export class ConversationsHelper {
|
||||
|
||||
/**
|
||||
* Get the list of conversations of the user
|
||||
*
|
||||
* @param userID Target user ID
|
||||
*/
|
||||
public static async GetListUser(userID: number) : Promise<Array<Conversation>> {
|
||||
|
||||
// Fetch the list of conversations
|
||||
const result = await DatabaseHelper.Query({
|
||||
fields: [
|
||||
"*",
|
||||
"l.id as id",
|
||||
"l.user_id as owner_id" // The field conflits with user.user_id
|
||||
],
|
||||
table: LIST_TABLE + " l",
|
||||
joins: [
|
||||
|
||||
// Joins with conversation members table
|
||||
{
|
||||
table: USERS_TABLE + " u",
|
||||
condition: "l.id = u.conv_id"
|
||||
}
|
||||
|
||||
],
|
||||
where: {
|
||||
"u.user_id": userID
|
||||
},
|
||||
order: "l.last_active DESC"
|
||||
});
|
||||
|
||||
const list = [];
|
||||
for (const el of result) {
|
||||
list.push(await this.DBToConversationInfo(el));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the list of members of a conversation
|
||||
*
|
||||
* @param convID The ID of the target conversation
|
||||
*/
|
||||
private static async GetConversationMembers(convID : number): Promise<Array<number>> {
|
||||
const result = await DatabaseHelper.Query({
|
||||
table: USERS_TABLE,
|
||||
where: {
|
||||
"conv_id": convID
|
||||
},
|
||||
fields: ["user_id"]
|
||||
});
|
||||
|
||||
return result.map((e) => e.user_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn a database entry into a conversation object
|
||||
*
|
||||
* @param row
|
||||
*/
|
||||
private static async DBToConversationInfo(row: any) : Promise<Conversation> {
|
||||
return {
|
||||
id: row.id,
|
||||
ownerID: row.owner_id,
|
||||
name: row.name,
|
||||
lastActive: row.last_active,
|
||||
timeCreate: row.time_add,
|
||||
following: row.following,
|
||||
sawLastMessage: row.saw_last_message,
|
||||
members: await this.GetConversationMembers(row.id)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user