import { Injectable } from '@angular/core'; import { Result } from 'neverthrow'; import { HttpService } from 'src/app/services/http.service'; import { RoomListOutPutDTO, RoomListOutPutDTOSchema } from '../../dto/room/roomListOutputDTO'; import { RoomInputDTO, RoomInputDTOSchema } from '../../dto/room/roomInputDTO'; import { RoomOutPutDTO, RoomOutPutDTOSchema } from '../../dto/room/roomOutputDTO'; import { AddMemberToRoomInputDTO, AddMemberToRoomInputDTOSchema } from '../../dto/room/addMemberToRoomInputDto'; import { ValidateSchema } from 'src/app/services/decorators/validate-schema.decorator'; import { RoomByIdInputDTO, RoomByIdInputDTOSchema } from '../../dto/room/roomByIdInputDTO'; import { RoomByIdOutputDTO, RoomByIdOutputDTOSchema } from '../../dto/room/roomByIdOutputDTO'; import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator'; import { UserRemoveListInputDTO, UserRemoveListInputDTOSchema } from '../../dto/room/userRemoveListInputDTO'; import { RoomUpdateInputDTO, RoomUpdateInputDTOSchema } from '../../dto/room/roomUpdateInputDTO'; import { RoomUpdateOutputDTO } from '../../dto/room/roomUpdateOutputDTO'; import { DataSourceReturn } from 'src/app/services/Repositorys/type'; import { SessionStore } from 'src/app/store/session.service'; import { MemberSetAdminDTO } from '../../../domain/use-case/member-admin-use-case.service'; @Injectable({ providedIn: 'root' }) export class RoomRemoteDataSourceService { private baseUrl = 'https://gdapi-dev.dyndns.info/stage/api/v2/Chat'; // Your base URL constructor(private httpService: HttpService) {} @ValidateSchema(RoomInputDTOSchema) @APIReturn(RoomOutPutDTOSchema, 'post/Room') async createRoom(data: RoomInputDTO): DataSourceReturn { return await this.httpService.post(`${this.baseUrl}/Room`, data); } @APIReturn(RoomListOutPutDTOSchema, 'get/Room') async getRoomList(): Promise> { return await this.httpService.get(`${this.baseUrl}/Room?userId=${SessionStore.user.UserId}`); } @ValidateSchema(RoomByIdInputDTOSchema) @APIReturn(RoomByIdOutputDTOSchema,'get/Room/${id}') async getRoom(id: RoomByIdInputDTO): DataSourceReturn { return await this.httpService.get(`${this.baseUrl}/Room/${id}`); } @ValidateSchema(RoomUpdateInputDTOSchema) //@APIReturn(RoomByIdOutputDTOSchema,'update/Room/${id}') async updateRoom(data: RoomUpdateInputDTO): Promise> { const id = data.roomId delete data.roomId return await this.httpService.put(`${this.baseUrl}/Room/${id}`, data); } async deleteRoom(id: string): Promise> { return await this.httpService.delete(`${this.baseUrl}/Room/${id}`, {}); } @ValidateSchema(AddMemberToRoomInputDTOSchema) async addMemberToRoom(data: AddMemberToRoomInputDTO): DataSourceReturn { return await this.httpService.post(`${this.baseUrl}/Room/${data.id}/Member`, { members:data.members }); } @ValidateSchema(UserRemoveListInputDTOSchema) async removeMemberFromRoom(data: UserRemoveListInputDTO): Promise> { return await this.httpService.delete(`${this.baseUrl}/Room/${data.id}/Member`, {members:data.members}); } async setAmin(data: MemberSetAdminDTO): Promise> { return await this.httpService.patch(`${this.baseUrl}/Room/${data.roomId}/Member/${data.memberId}/admin`); } }