/
FlysAt
/
DataFoundry
Обзор
Документация
Войти
/
FlysAt
/
DataFoundry
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/src/api/chat.ts
84 строки
3 KB
FlysAt8
chat\front
06 май 2026, 19:31
06 май 2026, 19:31
d2ed556
Код
Авторство
О чём код?
// src/api/chat.ts import { API_BASE_URL } from './config'; export interface ChatMessage { id: number; conversation_id: number; sender_id: number; recipient_id: number; client_message_id: string | null; text: string; created_at: string; delivered_at: string | null; read_at: string | null; } export interface ChatConversation { id: number; peer_id: number; created_at: string; updated_at: string; last_message: ChatMessage | null; unread_count: number; } export const chatAPI = { // Получить список диалогов getConversations: async (token: string): Promise<ChatConversation[]> => { const response = await fetch(`${API_BASE_URL}/conversations`, { headers: { 'Authorization': `Bearer ${token}` }, }); if (!response.ok) throw new Error('Failed to load conversations'); return response.json(); }, // Получить историю сообщений getMessages: async (peerId: number, token: string, afterId?: number): Promise<ChatMessage[]> => { const url = afterId ? `${API_BASE_URL}/conversations/${peerId}/messages?after_id=${afterId}&limit=50` : `${API_BASE_URL}/conversations/${peerId}/messages?limit=50`; const response = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` }, }); if (!response.ok) throw new Error('Failed to load messages'); return response.json(); }, // Отправить сообщение через REST sendMessage: async (peerId: number, text: string, token: string, clientMessageId?: string): Promise<ChatMessage> => { const response = await fetch(`${API_BASE_URL}/conversations/${peerId}/messages`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}`, }, body: JSON.stringify({ text, client_message_id: clientMessageId || `client-${Date.now()}`, }), }); if (!response.ok) throw new Error('Failed to send message'); return response.json(); }, // Отметить сообщения как прочитанные markAsRead: async (peerId: number, messageId: number, token: string): Promise<void> => { await fetch(`${API_BASE_URL}/conversations/${peerId}/read?message_id=${messageId}`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}` }, }); }, // Получить пропущенные сообщения getMissedMessages: async (peerId: number, token: string, afterId?: number): Promise<ChatMessage[]> => { const url = afterId ? `${API_BASE_URL}/conversations/${peerId}/missed?after_id=${afterId}&limit=100` : `${API_BASE_URL}/conversations/${peerId}/missed?limit=100`; const response = await fetch(url, { headers: { 'Authorization': `Bearer ${token}` }, }); if (!response.ok) throw new Error('Failed to load missed messages'); const data = await response.json(); return data.messages; }, };