- 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.
63 lines
1.4 KiB
TypeScript
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`);
|
|
},
|
|
};
|