Files
memegoat/frontend/src/services/message.service.ts
Mathis HERRIOT f882a70343 feat: add read receipt handling based on user preferences
- Integrated `UsersService` into `MessagesService` for retrieving user preferences.
- Updated `markAsRead` functionality to respect `showReadReceipts` preference.
- Enhanced real-time read receipt notifications via `EventsGateway`.
- Added `markAsRead` method to the frontend message service.
2026-01-29 18:20:18 +01:00

63 lines
1.4 KiB
TypeScript

import api from "@/lib/api";
export interface Conversation {
id: string;
updatedAt: string;
lastMessage?: {
text: string;
createdAt: string;
};
recipient: {
uuid: string;
username: string;
displayName?: string;
avatarUrl?: string;
};
}
export interface Message {
id: string;
text: string;
createdAt: string;
senderId: string;
readAt?: string;
}
export const MessageService = {
async getConversations(): Promise<Conversation[]> {
const { data } = await api.get<Conversation[]>("/messages/conversations");
return data;
},
async getUnreadCount(): Promise<number> {
const { data } = await api.get<number>("/messages/unread-count");
return data;
},
async getMessages(conversationId: string): Promise<Message[]> {
const { data } = await api.get<Message[]>(
`/messages/conversations/${conversationId}`,
);
return data;
},
async getConversationWith(userId: string): Promise<Conversation | null> {
const { data } = await api.get<Conversation | null>(
`/messages/conversations/with/${userId}`,
);
return data;
},
async sendMessage(recipientId: string, text: string): Promise<Message> {
const { data } = await api.post<Message>("/messages", {
recipientId,
text,
});
return data;
},
async markAsRead(conversationId: string): Promise<void> {
await api.patch(`/messages/conversations/${conversationId}/read`);
},
};