diff --git a/src/app/services/Repositorys/chat/async/rooms/roomListChangeDetector.ts b/src/app/services/Repositorys/chat/async/rooms/roomListChangeDetector.ts index 95d7cf93e..1786d3ebd 100644 --- a/src/app/services/Repositorys/chat/async/rooms/roomListChangeDetector.ts +++ b/src/app/services/Repositorys/chat/async/rooms/roomListChangeDetector.ts @@ -1,5 +1,5 @@ import { TableRoom } from "../../data-source/room/rooom-local-data-source.service"; -import { RoomListItemOutPutDTO } from "../../dto/room/roomListOutputDTO"; +import { RoomListItemOutPutDTO, RoomListOutPutDTO } from "../../dto/room/roomListOutputDTO"; export function roomListDetermineChanges(serverRooms: RoomListItemOutPutDTO[], localRooms: TableRoom[]) { const serverRoomMap = new Map(serverRooms.map(room => [room.id, room])); diff --git a/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts index 936724d89..f901ff252 100644 --- a/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Result } from 'neverthrow'; import { HttpService } from 'src/app/services/http.service'; -import { RoomListOutPutDTO } from '../../dto/room/roomListOutputDTO'; +import { RoomListOutPutDTO, RoomListOutPutDTOSchema } from '../../dto/room/roomListOutputDTO'; import { RoomInputDTO, RoomInputDTOSchema } from '../../dto/room/roomInputDTO'; import { RoomOutPutDTO } from '../../dto/room/roomOutputDTO'; import { AddMemberToRoomInputDTO, AddMemberToRoomInputDTOSchema } from '../../dto/room/addMemberToRoomInputDto'; @@ -26,6 +26,8 @@ export class RoomRemoteDataSourceService { return await this.httpService.post(`${this.baseUrl}/Room`, data); } + + @APIReturn(RoomListOutPutDTOSchema) async getRoomList(): Promise> { return await this.httpService.get(`${this.baseUrl}/Room`); } diff --git a/src/app/services/Repositorys/chat/dto/room/roomListOutputDTO.ts b/src/app/services/Repositorys/chat/dto/room/roomListOutputDTO.ts index 5406257ce..bdaec9b16 100644 --- a/src/app/services/Repositorys/chat/dto/room/roomListOutputDTO.ts +++ b/src/app/services/Repositorys/chat/dto/room/roomListOutputDTO.ts @@ -4,21 +4,21 @@ const CreatedBySchema = z.object({ wxUserId: z.number(), wxFullName: z.string(), wxeMail: z.string().email(), - userPhoto: z.string() + userPhoto: z.string().nullable()// api check }); const RoomListItemOutPutDTOSchema = z.object({ id: z.string(), roomName: z.string(), createdBy: CreatedBySchema, - createdAt: z.string().datetime(), - expirationDate: z.string().datetime(), + createdAt: z.string(), + expirationDate: z.string().nullable(), // api check roomType: z.number() }); // Define the schema for the entire response -const RoomListOutPutDTOSchema = z.object({ +export const RoomListOutPutDTOSchema = z.object({ success: z.boolean(), message: z.string(), data: z.array(RoomListItemOutPutDTOSchema), diff --git a/src/app/services/Repositorys/chat/repository/room-repository.service.ts b/src/app/services/Repositorys/chat/repository/room-repository.service.ts index a70573dda..f678b011f 100644 --- a/src/app/services/Repositorys/chat/repository/room-repository.service.ts +++ b/src/app/services/Repositorys/chat/repository/room-repository.service.ts @@ -6,6 +6,7 @@ import { Store } from '@ngrx/store'; import { AddMemberToRoomInputDTO } from '../dto/room/addMemberToRoomInputDto'; import { RoomLocalDataSourceService } from '../data-source/room/rooom-local-data-source.service'; import { RoomByIdInputDTO } from '../dto/room/roomByIdInputDTO'; +import { roomListDetermineChanges } from '../async/rooms/roomListChangeDetector'; @Injectable({ providedIn: 'root' @@ -20,10 +21,12 @@ export class RoomRepositoryService { async list() { const result = await this.roomRemoteDataSourceService.getRoomList() - // const localList = await this.roomLocalDataSourceService.getRoomList() + const localList = await this.roomLocalDataSourceService.getRoomList() if(result.isOk()) { - // const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value, localList) + const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value.data, localList) + + console.log({ roomsToDelete, roomsToInsert, roomsToUpdate }) for( const roomData of result.value.data) { this.roomLocalDataSourceService.createOrUpdateRoom(roomData) } diff --git a/src/app/services/decorators/api-validate-schema.decorator.ts b/src/app/services/decorators/api-validate-schema.decorator.ts index ecc1f468e..66ce56eeb 100644 --- a/src/app/services/decorators/api-validate-schema.decorator.ts +++ b/src/app/services/decorators/api-validate-schema.decorator.ts @@ -19,14 +19,16 @@ export function APIReturn(schema: z.ZodTypeAny) { if (error instanceof ZodError) { // If validation fails, throw an error with the details // - console.log('unexpected data structure') + console.error('API unexpected data structure') + console.error(result.value) + console.error(error.errors) // Capture the Zod validation error with additional context Sentry.withScope((scope) => { scope.setTag('APIReturn', 'user'); scope.setContext('data', { data: result.value }); Sentry.captureException(error); }); - console.error('Validation failed:', error.errors); + } else { console.log('failed to setup the connection successful') // Throw any other unexpected errors