This commit is contained in:
Viktoria Polyakova
2026-01-25 15:57:18 +03:00
parent 9626c9f3be
commit 0a9c3f5bc4
2809 changed files with 182961 additions and 0 deletions

188
API_ANALYSIS.md Normal file
View File

@@ -0,0 +1,188 @@
# Анализ соответствия API чата между Android приложением и бэкендом
## Обзор
Проанализированы API чата в Android приложении и бэкенд-системе для выявления соответствий и несоответствий.
## Android API (ChatApiService.kt)
### Доступные эндпоинты:
1. **Провайдеры чата**
- `GET /api/chat/providers` - Получение списка провайдеров чата
2. **Чаты**
- `GET /api/chat/chats` - Получение списка чатов
- `GET /api/chat/chats/{chatId}` - Получение конкретного чата
- `DELETE /api/chat/chats/{chatId}` - Удаление чата
3. **Сообщения чата**
- `GET /api/chat/chats/{chatId}/messages` - Получение сообщений чата
- `POST /api/chat/chats/{chatId}/messages` - Отправка сообщения
- `PUT /api/chat/chats/{chatId}/messages/{messageId}/status/{status}` - Обновление статуса сообщения
- `PUT /api/chat/chats/{chatId}/status/read` - Отметка всех сообщений как прочитанных
4. **Непрочитанные сообщения**
- `GET /api/chat/unseen-count` - Получение количества непрочитанных сообщений
## Бэкенд API (NestJS)
### Доступные эндпоинты:
#### ChatController (api/chat/chats)
- `POST /api/chat/chats/personal` - Создание личного чата
- `POST /api/chat/chats/group` - Создание группового чата
- `POST /api/chat/chats/external` - Создание внешнего чата
- `GET /api/chat/chats/group/exists/:entityId` - Проверка существования чата по entity
- `GET /api/chat/chats` - Получение чатов с пагинацией
- `GET /api/chat/chats/find` - Поиск чатов (простой)
- `GET /api/chat/chats/find/full` - Поиск чатов (полный)
- `GET /api/chat/chats/find/full/personal` - Поиск личных чатов
- `GET /api/chat/chats/find/full/by-message-content` - Поиск по содержанию сообщений
- `GET /api/chat/chats/:chatId` - Получение чата по ID
- `PATCH /api/chat/chats/group/:chatId` - Обновление группового чата
- `DELETE /api/chat/chats/:chatId` - Удаление чата
- `PUT /api/chat/chats/:chatId/pin/:messageId` - Закрепление сообщения
- `PUT /api/chat/chats/:chatId/unpin/:messageId` - Открепление сообщения
- `PUT /api/chat/chats/:chatId/status/:status` - Обновление статуса сообщений
- `POST /api/chat/chats/:chatId/contact` - Создание контакта и лида
#### ChatMessageController (api/chat/chats/:chatId/messages)
- `POST /api/chat/chats/:chatId/messages` - Создание сообщения
- `GET /api/chat/chats/:chatId/messages` - Получение сообщений
- `GET /api/chat/chats/:chatId/messages/:messageId` - Получение конкретного сообщения
- `PUT /api/chat/chats/:chatId/messages/:messageId` - Обновление сообщения
- `DELETE /api/chat/chats/:chatId/messages/:messageId` - Удаление сообщения
- `POST /api/chat/chats/:chatId/messages/status/:status` - Обновление статуса сообщений (массовое)
- `PUT /api/chat/chats/:chatId/messages/:messageId/status/:status` - Обновление статуса сообщения
- `PUT /api/chat/chats/:chatId/messages/:messageId/react/:reaction` - Реакция на сообщение
- `PUT /api/chat/chats/:chatId/messages/:messageId/unreact/:reactionId` - Удаление реакции
#### MultichatController (api/chat)
- `GET /api/chat/unseen-count` - Получение количества непрочитанных сообщений
## Соответствия API
### ✅ Полностью соответствующие эндпоинты:
1. **Получение списка провайдеров**
- Android: `GET /api/chat/providers`
- Backend: `GET /api/chat/providers`
2. **Получение списка чатов**
- Android: `GET /api/chat/chats`
- Backend: `GET /api/chat/chats`
3. **Получение конкретного чата**
- Android: `GET /api/chat/chats/{chatId}`
- Backend: `GET /api/chat/chats/:chatId`
4. **Удаление чата**
- Android: `DELETE /api/chat/chats/{chatId}`
- Backend: `DELETE /api/chat/chats/:chatId`
5. **Получение сообщений чата**
- Android: `GET /api/chat/chats/{chatId}/messages`
- Backend: `GET /api/chat/chats/:chatId/messages`
6. **Отправка сообщения**
- Android: `POST /api/chat/chats/{chatId}/messages`
- Backend: `POST /api/chat/chats/:chatId/messages`
7. **Обновление статуса сообщения**
- Android: `PUT /api/chat/chats/{chatId}/messages/{messageId}/status/{status}`
- Backend: `PUT /api/chat/chats/:chatId/messages/:messageId/status/:status`
8. **Получение количества непрочитанных сообщений**
- Android: `GET /api/chat/unseen-count`
- Backend: `GET /api/chat/unseen-count`
## Несоответствия и недостающие функции
### ❌ Отсутствующие в Android API:
1. **Создание чатов**
- Личные чаты: `POST /api/chat/chats/personal`
- Групповые чаты: `POST /api/chat/chats/group`
- Внешние чаты: `POST /api/chat/chats/external`
2. **Поиск чатов**
- Простой поиск: `GET /api/chat/chats/find`
- Полный поиск: `GET /api/chat/chats/find/full`
- Поиск по имени пользователя: `GET /api/chat/chats/find/full/personal`
- Поиск по содержанию сообщений: `GET /api/chat/chats/find/full/by-message-content`
3. **Управление чатами**
- Обновление группового чата: `PATCH /api/chat/chats/group/:chatId`
- Закрепление сообщений: `PUT /api/chat/chats/:chatId/pin/:messageId`
- Открепление сообщений: `PUT /api/chat/chats/:chatId/unpin/:messageId`
- Создание контактов: `POST /api/chat/chats/:chatId/contact`
4. **Расширенное управление сообщениями**
- Массовое обновление статуса: `POST /api/chat/chats/:chatId/messages/status/:status`
- Реакции на сообщения: `PUT /api/chat/chats/:chatId/messages/:messageId/react/:reaction`
- Удаление реакций: `PUT /api/chat/chats/:chatId/messages/:messageId/unreact/:reactionId`
- Удаление сообщений: `DELETE /api/chat/chats/:chatId/messages/:messageId`
5. **Дополнительные функции**
- Проверка существования чата: `GET /api/chat/chats/group/exists/:entityId`
## Рекомендации по улучшению Android API
### 1. Добавить создание чатов
```kotlin
// Добавить в ChatApiService
@POST("api/chat/chats/personal")
suspend fun createPersonalChat(@Body request: CreatePersonalChatRequest): Response<Chat>
@POST("api/chat/chats/group")
suspend fun createGroupChat(@Body request: CreateGroupChatRequest): Response<Chat>
@POST("api/chat/chats/external")
suspend fun createExternalChat(@Body request: CreateExternalChatRequest): Response<Chat>
```
### 2. Добавить поиск чатов
```kotlin
// Добавить в ChatApiService
@GET("api/chat/chats/find")
suspend fun findChats(@QueryMap filters: Map<String, String>): Response<ChatsResponse>
@GET("api/chat/chats/find/full")
suspend fun findChatsFull(@QueryMap filters: Map<String, String>): Response<ChatsResponse>
```
### 3. Добавить управление сообщениями
```kotlin
// Добавить в ChatApiService
@DELETE("api/chat/chats/{chatId}/messages/{messageId}")
suspend fun deleteMessage(@Path("chatId") chatId: Long, @Path("messageId") messageId: Long): Response<Unit>
@PUT("api/chat/chats/{chatId}/messages/{messageId}/react/{reaction}")
suspend fun reactToMessage(
@Path("chatId") chatId: Long,
@Path("messageId") messageId: Long,
@Path("reaction") reaction: String
): Response<ChatMessage>
@POST("api/chat/chats/{chatId}/messages/status/{status}")
suspend fun updateMessagesStatus(
@Path("chatId") chatId: Long,
@Path("status") status: String,
@Body messageIds: List<Long>
): Response<List<ChatMessage>>
```
### 4. Добавить управление чатами
```kotlin
// Добавить в ChatApiService
@PUT("api/chat/chats/{chatId}/pin/{messageId}")
suspend fun pinMessage(@Path("chatId") chatId: Long, @Path("messageId") messageId: Long): Response<Chat>
@PUT("api/chat/chats/{chatId}/unpin/{messageId}")
suspend fun unpinMessage(@Path("chatId") chatId: Long, @Path("messageId") messageId: Long): Response<Chat>
```
## Заключение
Android API имеет хорошее соответствие с бэкендом для базовых операций (получение чатов, сообщений, отправка сообщений), но отсутствует множество функций для полноценного управления чатами. Для создания полноценного чат-клиента рекомендуется расширить Android API в соответствии с доступными бэкенд-эндпоинтами.