Chat interno 1-a-1 entre usuarios de la plataforma (addon skeen_chat + pagina Chat con badge de no leidos)

This commit is contained in:
2026-08-28 08:23:56 +00:00
parent d47c054ffc
commit 681c0a9173
14 changed files with 607 additions and 2 deletions

View File

@@ -544,6 +544,27 @@ export interface Receta {
contenido: string;
}
// ---- Chat interno ----
export interface ChatUser {
id: number;
name: string;
role: FrontendRole;
unread: number;
last_message: string | null;
last_date: string | null;
last_mine: boolean | null;
}
export interface ChatMessage {
id: number;
sender_id: number;
recipient_id: number;
body: string;
is_read: boolean;
mine: boolean;
date: string | null;
}
export interface Diagnostico {
id: number;
name: string;
@@ -894,6 +915,27 @@ export const odooApi = {
return data;
},
// Chat interno entre usuarios de la plataforma
async getChatUsers(): Promise<{ status: string; users: ChatUser[] }> {
const { data } = await axios.post(`${ODOO_BASE}/skeen/frontend/v1/chat/users`);
return data;
},
async getChatMessages(userId: number, sinceId?: number): Promise<{ status: string; messages: ChatMessage[] }> {
const { data } = await axios.post(`${ODOO_BASE}/skeen/frontend/v1/chat/messages`, { user_id: userId, since_id: sinceId || undefined });
return data;
},
async sendChatMessage(userId: number, message: string): Promise<{ status: string; message: ChatMessage }> {
const { data } = await axios.post(`${ODOO_BASE}/skeen/frontend/v1/chat/send`, { user_id: userId, message });
return data;
},
async getChatUnreadCount(): Promise<{ status: string; unread: number }> {
const { data } = await axios.post(`${ODOO_BASE}/skeen/frontend/v1/chat/unread_count`);
return data;
},
async getAvailableSlots(date: string, servicio_id: number): Promise<{ status: string; slots: { time: number; time_str: string }[] }> {
const { data } = await axios.get(`${ODOO_BASE}/skeen/frontend/v1/appointments/slots`, { params: { date, servicio_id } });
return data;