
Room 추가
@Post(':accommodationId/rooms')
@Private('partner')
addRoom(
@DPartner() partner: Partner,
@Body() dto: AccommodationsAddRoomDto,
@Param('accommodationId', ParseIntPipe) accommodationId: number,
) {
return this.accommodationsService.addRoomToAccommodation(
partner,
accommodationId,
dto,
);
}
@Delete(':accommodationId/rooms/:roomId')
@Private('partner')
deleteRoom(
@DPartner() partner: Partner,
@Param('accommodationId', ParseIntPipe) accommodationId: number,
@Param('roomId', ParseIntPipe) roomId: number,
) {
return this.accommodationsService.deleteRoomFromAccommodation(
partner,
accommodationId,
roomId,
);
}
- rooms 는 partner 만 post, delete 할 수 있음. => @Private() 로 가드처리.
accommodations.service.ts
async addRoomToAccommodation(
partner: Pick<Partner, 'id'>,
accommodationId: Accommodation['id'],
data: Parameters<typeof this.roomsService.createRoom>[1],
) {
const accommodation = await this.prismaService.accommodation.findUnique({
where: { id: accommodationId, partnerId: partner.id },
});
if (!accommodation) throw new ForbiddenException();
const room = await this.roomsService.createRoom(accommodationId, data);
return room;
}
- createRoom 은 rooms 의 service 에 분리해서 작성하는게 좋다.
rooms.service.ts
@Injectable()
export class RoomsService {
constructor(private readonly prismaService: PrismaService) {}
async createRoom(
accommodationId: Accommodation['id'],
dataWithoutAccommodationId: Prisma.RoomCreateWithoutAccommodationInput,
) {
const data: Prisma.RoomUncheckedCreateInput = {
accommodationId,
...dataWithoutAccommodationId,
};
const room = await this.prismaService.room.create({ data });
return room;
}
async deleteRoom(roomId: Room['id']) {
const room = await this.prismaService.room.delete({
where: { id: roomId },
});
return room;
}
Seed 생성