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 | 31 |
Tags
- CRUD
- Nest
- devcamp
- nestwinston
- javascript
- TypeORMconfig
- NEST좌석생성
- 테스트결제
- Class Validation
- 카카오페이테스트결제
- 좌석내가격
- cachememory
- 자바스크립트
- get
- 좌석생성
- ormconfig.ts
- joi vs classvalidation
- NEST좌석
- 로그파일저장
- 내일배움캠프
- 좌석만들기
- Live server
- TYPESCRIPT좌석생성
- 네스트로거
- 포트원
- TypeORMconfig.ts
- 캐시메모리저장후DB저장
- Til
- Nest.js
- 캐시메모리DB저장
Archives
- Today
- Total
배씨의 개발일지
좌석 만들기 준비 - Nest.js 사용 2차원 배열 사용 준비 본문
스터디 룸에서 해당하는 룸에 Type = 모양을 enum 타입으로 생성을 한 후
좌석을 만들때 그 룸에 해당하는 Type을 가져와서 해당하는 모양의 로직을 조건문으로 실행시켜 줄 예정.
좌석을 생성 해 줄 때 두 개의 수 (row, column)을 받는다.
정해진 타입의 값에 두개의 수 를 넣어 준 후 2차원 배열의 형태로 좌석의 구조를 생성.
만들어진 좌석에 Kind = 좌석의 종류 ( 1인석, 다인석, 회의실 및 좌석이 아님)를 추가해 주는 로직으로
스터디 룸 안의 좌석들의 형태와 각각의 좌석의 타입들을 기입 해 줄 예정.
로직을 구현함에 앞서 Entity파일과 dto파일 및 구조 세팅 中
컨트롤러 계층에서 Seat값에 해당하는 row와 column의 값을 가져오지 못함.
이 부분을 세팅 해주는 데에만 꼬박 하루를 보낸 것 같다..
Entity파일과 dto 파일에서 최종적으로 명시해 준 방법
import { IsNotEmpty, IsInt, Min } from 'class-validator';
export class SeatDto {
@IsInt()
@Min(0) // 음수로는 좌석을 생성 할 수 없음
readonly low: number;
@IsInt()
@Min(0) // 음수로는 좌석을 생성 할 수 없음
readonly column: number;
}
// low, column 이라는 값을 숫자 타입으로 명시 => SeatDto로 export
import {
Column,
Entity,
PrimaryGeneratedColumn,
OneToMany,
OneToOne,
Index,
ManyToOne,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn
} from 'typeorm';
import { SeatDto } from '../dto/seat/seat-dto'
// SeatDto로 export 해온 걸 import 해와서
import { Room } from './room.entity'
export enum kindEnum {
일인용 = 1,
미팅룸 = 2,
회의실 = 3,
없음 = 4
}
@Entity({ schema: 'apple', name: 'seat' })
export class Seat {
@PrimaryGeneratedColumn()
seatId: number;
@ManyToOne(()=>Room, room=>room.seats)
rooms:Room
@Column('varchar')
price: number;
@Column({ type: 'enum', enum: kindEnum, default: kindEnum.일인용 })
type: kindEnum;
@Column({ type: 'json' })
seat: SeatDto[]
// 위 코드에서 사용
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
@DeleteDateColumn()
deletedAt: Date | null;
}
import { IsNotEmpty, IsEnum, IsArray, ArrayMinSize, ArrayMaxSize, ValidateNested } from 'class-validator';
import { kindEnum } from 'src/entity/seat.entity';
import { Type } from 'class-transformer';
import { SeatDto } from './seat-dto'
export class createSeatDto {
@IsEnum(kindEnum)
@IsNotEmpty()
readonly kind: kindEnum;
@IsNotEmpty()
readonly price: number;
@IsArray()
@ArrayMinSize(1, { message: '적어도 1개의 좌석이 필요합니다.' })
// 좌석은 음수 및 0의 값이 들어 갈 수 없어서 최소 값 1개로 명시
@ArrayMaxSize(100, { message: '좌석은 최대 100개까지 가능합니다.' })
// 좌석의 최대 개수는 100개로 제한
@ValidateNested({ each: true })
@Type(() => SeatDto)
readonly seat: SeatDto[];
}
위 코드에서 나와 있듯이 Seat.dto => entity.seat => create.seat.dto 순 대로 명시 해준 후 값을 가져옴.
import {
Controller,
Post,
Get,
Put,
Delete,
Body,
Req,
Res,
Patch,
Param,
} from '@nestjs/common';
import { SeatService } from './seat.service';
import { createSeatDto } from '../dto/seat/create-seat-dto';
import { updateSeatDto } from '../dto/seat/update-seat-dto';
@Controller('seat')
export class SeatController {
constructor(private readonly seatService: SeatService) {}
@Post('/roomId')
async createSeat(
@Param('roomId') roomId: number,
@Body() data: createSeatDto, // 마지막으로 정해준 createSeatDto를 data로 명시.
) {
return this.seatService.createSeat(roomId, data);
}
이러한 방식으로 마지막으로 create.seat.dto에 명시된 값들을 가져옴
아직은 Nest가 익숙하지도 않고 2차원 배열을 생성하는 개념을 잡는 것이 너무나도 어렵다.
현재 진행 상황 = 로직 작성을 위한 entity, dto 구조 완성
date. 2023-08-22
'TIL' 카테고리의 다른 글
좌석 만들기 - Mysql DB에 2차원 배열 저장하기 (0) | 2023.08.24 |
---|---|
좌석만들기 시작 - 2차원 배열 반환 값 받아오기 (1) | 2023.08.23 |
NEST.JS JWT와 GUARD 사용하기 (0) | 2023.08.21 |
Primary key, Foreign Key (0) | 2023.08.21 |
TS-미들웨어 전역 사용하기 (0) | 2023.08.18 |
Comments