Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 카카오페이테스트결제
- 로그파일저장
- 포트원
- 테스트결제
- 좌석생성
- get
- javascript
- nestwinston
- TYPESCRIPT좌석생성
- NEST좌석생성
- ormconfig.ts
- TypeORMconfig
- Til
- 좌석내가격
- NEST좌석
- 네스트로거
- cachememory
- joi vs classvalidation
- CRUD
- 내일배움캠프
- devcamp
- Nest
- 캐시메모리DB저장
- 캐시메모리저장후DB저장
- TypeORMconfig.ts
- 자바스크립트
- Class Validation
- Live server
- 좌석만들기
- Nest.js
Archives
- Today
- Total
배씨의 개발일지
좌석 예약을 위한 시간표 만들기 본문
처음에 좌석 예약을 만들때는 좌석 하나 하나마다 예약 가능한 시간표를 만들어줬다.
그런데 이렇게 생성하고 나니 DB에 데이터가 너무 많이 저장이 되어서 다른 방법으로 시간표를 만들어야만 했다.
그래서 관계 설정으로 방에 시간표를 만들어 준 뒤 따로 저장을 해주고
예약 시 방에서 시간표를 불러와서 그 시간표id와 좌석id를 매치해서 예약을 확인하는 방법으로 로직을 구현했다.
아래 코드는 timeTable(시간표)의 entity
import {
Column,
Entity,
PrimaryGeneratedColumn,
ManyToOne,
OneToMany,
} from 'typeorm';
import { Reservation } from './reservation.entity';
import { Payment } from './payment.entity';
import { Room } from './room.entity';
@Entity({ schema: 'apple', name: 'timetable' })
export class TimeTable {
@PrimaryGeneratedColumn()
timeTableId: number;
@ManyToOne(() => Room, (room) => room.timeTable)
rooms: Room;
@ManyToOne(() => Payment, (payment) => payment.timeTable)
payments: Payment;
@OneToMany(() => Reservation, (reservation) => reservation.timeTable)
reservations: Reservation;
@Column()
roomId: number;
@Column({ type: 'varchar' })
timeSlot: string;
}
이렇게 entity파일을 생성 후
async createTimetableForSeat(
data: timeTableDto,
roomId: number,
): Promise<void> {
const { startTime, endTime } = data;
const startTimeArray = startTime.split(':');
const endTimeArray = endTime.split(':');
const startDate = new Date();
startDate.setHours(parseInt(startTimeArray[0]));
startDate.setMinutes(parseInt(startTimeArray[1]));
const endDate = new Date();
endDate.setHours(parseInt(endTimeArray[0]));
endDate.setMinutes(parseInt(endTimeArray[1]));
const timeTableRepository = this.timeTableRepository;
while (startDate < endDate) {
const timeTable = new TimeTable();
const hours = startDate.getHours().toString().padStart(2, '0');
const minutes = startDate.getMinutes().toString().padStart(2, '0');
timeTable.timeSlot = `${hours}:${minutes}`;
timeTable.roomId = roomId;
await timeTableRepository.save(timeTable); // TimeTable 저장
// 다음 시간으로 이동 (1시간 더하기)
startDate.setHours(startDate.getHours() + 1);
}
}
이렇게 startTime(영업 시작 시간)과 endTime(영업 종료 시간)을 받아서
예시 ) [09:00]~[18:00] 이런식으로 시간마다 생성을 해주었다.
'TIL' 카테고리의 다른 글
카카오페이 테스트 결제 (0) | 2023.09.13 |
---|---|
좌석 예약 하기 (0) | 2023.09.13 |
좌석 생성 2번째 - 좌석의 타입별로 가격 넣어주기 (0) | 2023.09.06 |
좌석 만들기 2번째 방법 (0) | 2023.09.05 |
최종 프로젝트 중간 점검 (0) | 2023.09.01 |
Comments