mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-11-22 13:29:22 +00:00
Can get the list of conversations
This commit is contained in:
parent
6ad4375b2a
commit
d6eed99a1a
39
src/controllers/ConversationsController.ts
Normal file
39
src/controllers/ConversationsController.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
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)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ import { WelcomeController } from "./WelcomeController";
|
|||||||
import { RequestHandler } from "../entities/RequestHandler";
|
import { RequestHandler } from "../entities/RequestHandler";
|
||||||
import { AccountController } from "./AccountController";
|
import { AccountController } from "./AccountController";
|
||||||
import { UserController } from "./UserController";
|
import { UserController } from "./UserController";
|
||||||
|
import { ConversationsController } from "./ConversationsController";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controllers routes
|
* Controllers routes
|
||||||
@ -43,4 +44,8 @@ export const Routes : Route[] = [
|
|||||||
|
|
||||||
{path: "/user/getInfoMultiple", cb: (h) => UserController.GetMultiple(h), needLogin: false},
|
{path: "/user/getInfoMultiple", cb: (h) => UserController.GetMultiple(h), needLogin: false},
|
||||||
{path: "/user/getInfosMultiple", cb: (h) => UserController.GetMultiple(h), needLogin: false}, // Legacy
|
{path: "/user/getInfosMultiple", cb: (h) => UserController.GetMultiple(h), needLogin: false}, // Legacy
|
||||||
|
|
||||||
|
|
||||||
|
// Conversations controller
|
||||||
|
{path: "/conversations/getList", cb: (h) => ConversationsController.GetList(h)},
|
||||||
]
|
]
|
16
src/entities/Conversation.ts
Normal file
16
src/entities/Conversation.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/**
|
||||||
|
* Single conversation information
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
|
||||||
|
export interface Conversation {
|
||||||
|
id: number,
|
||||||
|
ownerID: number,
|
||||||
|
name: string,
|
||||||
|
lastActive: number,
|
||||||
|
timeCreate: number,
|
||||||
|
following: boolean,
|
||||||
|
sawLastMessage: boolean,
|
||||||
|
members: Array<number>
|
||||||
|
}
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user