import { AIChatHistory, AIAnswerResponse } from 'quickblox'; import { RemoteDialogDTO } from '../../dto/dialog/RemoteDialogDTO'; import { RemoteDialogsDTO } from '../../dto/dialog/RemoteDialogsDTO'; import { RemoteUserDTO } from '../../dto/user/RemoteUserDTO'; import { RemoteUsersDTO } from '../../dto/user/RemoteUsersDTO'; import { RemoteMessagesDTO } from '../../dto/message/RemoteMessagesDTO'; import { RemoteMessageDTO } from '../../dto/message/RemoteMessageDTO'; import { RemoteFileDTO } from '../../dto/file/RemoteFileDTO'; import { Pagination } from '../../../Domain/repository/Pagination'; import { CallBackFunction } from '../../../Domain/use_cases/base/IUseCase'; import { NotificationTypes } from '../../../Domain/entity/NotificationTypes'; import { QBUIKitConfig } from '../../../CommonTypes/CommonTypes'; // todo list of all actions - for what we need to create tests /* 0!!! не реализованы эксепшены для createDialog RemouteDataSource и и нет обрадотки эксепшенов для DTO и Mapper + 1. UML диаграмы сравнить и синхронизировать + 2. Синхронизировать сигнатуры методов в интерфейсах и реализациях + 3. Изменить все методы Promise на Promise 4. Прверить, что Not Found exception переименован в Not Found Item exception 4.1 и эксепшен Not Found Item exception генерируют только методы для одной энтити -одного элемента списки возвращают пустую коллекцию 5. Доделіваем DialogList = полцчение одного диалога, получение диалогов из Ремутедатасоурсе 6. Передалать DialogList = полцчение одного диалога, получение диалогов из Локаладатасоурсе Вернуть радотоспособность тестам других репозиториев, что уже есть ====================== Refactoring DTO for RemoteDS using RemoteDialogDTO as example create DTO for localDS - in separate branche for LocalDS изменить типы в мапперах в DTO (QB=>DTO) создать новый маппер внутри соурса под именем IDTOMapper c двумя методами Переделать тесты RemoteDS DialogRepository Нужны тесты для мапперов */ export interface IRemoteMessaging { subscribeOnSystemMessaging( notificationType: NotificationTypes, callback: CallBackFunction, ): void; subscribeOnMessaging(callback: CallBackFunction): void; releaseSubscriptions(): void; } export interface IRemoteDataSource extends IRemoteMessaging { /* позитивный тест на результат - нет эксепшена и тот диалог, который вернули, можем найти по id и среди списка всех тест на эксепшн = негативный тест на результат - это эксепшен некорректные данные эксепшны с диаграмы: коннекш фейлд, нет авторизации, запрещен доступ, некоректные данные */ createDialog(dto: RemoteDialogDTO): Promise; /* негативный тест - нет такого диалога */ updateDialog(dto: RemoteDialogDTO): Promise; /* негативный тест экспшн Как сигнализуирем, что нет такого диалога по id - эксепшеном или пустым объектом? проверить, что договаривались, на эксепшн НотФаунд Позитивный тест - нет эксепшена и вернули значение */ getDialog(dto: RemoteDialogDTO): Promise; /* негативный тест - пытаемся удалить того, которого нет - эксепшн некоректные данные позитивный тест - удалили без экспепшена тот. что был и после удаления такого нет ни по id ни при получении списком */ getDialogs(pagination?: Pagination): Promise; deleteDialog(dto: RemoteDialogDTO): Promise; deleteUsersFromDialog( dialogDto: RemoteDialogDTO, usersDTO: Array, ): Promise; getUser(dto: RemoteUserDTO): Promise; getUsers(dto: RemoteUsersDTO): Promise; getMessages( dialogId: string, pagination: Pagination, ): Promise; typingMessageStart( dialogDTO: RemoteDialogDTO, senderId: number, ): Promise; typingMessageStop( dialogDTO: RemoteDialogDTO, senderId: number, ): Promise; sendMessage(dto: RemoteMessageDTO): Promise; sendSystemMessage(dto: RemoteMessageDTO): Promise; updateMessage(dto: RemoteMessageDTO): Promise; deleteMessage(dto: RemoteMessageDTO): Promise; createFile(dto: RemoteFileDTO): Promise; getFile(dto: RemoteFileDTO): Promise; deleteFile(dto: RemoteFileDTO): Promise; subscribeToChatConnectionEvents(fileId: string): Promise; updateCurrentDialog(dto: RemoteDialogDTO, qbConfig: QBUIKitConfig): void; createAnswer( text: string, messages: AIChatHistory, smartChatAssistantId: string, ): Promise; translate( text: string, languageCode: string, smartChatAssistantId: string, ): Promise; }