189 lines
9.6 KiB
Markdown
189 lines
9.6 KiB
Markdown
# Анализ соответствия 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 в соответствии с доступными бэкенд-эндпоинтами.
|