728x90

- entities 작성하기

각 api폴더에 entities 폴더 만들고 entities 작성 = 테이블 만든다고 보면됨

 

++ 가격 같은거에 제약사항(최소 0 이상) 걸어주려면 글로벌 파이프 설정 필요함

https://springdream0406.tistory.com/89

 

글로벌 파이프

- 설치 yarn add class-validator class-transformer - main.ts에 GlobalPipe 설정 app.useGlobalPipes(new ValidationPipe()); ++ 추가적인 공부 필요함.

springdream0406.tistory.com

 

// 이것저것 짬뽕해서 예시로 넣음

@Entity()
export class Farm {
  @PrimaryGeneratedColumn('increment')
  farm_num: number;

  @Column({ length: 50 })
  farm_title: string;

  @Column()
  farm_address: string;

  @Min(0) // 최소값 제약
  @Column()
  farm_price: number;

  @Column({ type: 'decimal', precision: 9, scale: 6 })
  lat: number;

  @Column({ type: 'decimal', precision: 9, scale: 6 })
  lng: number;

  @Column({ nullable: false, type: 'date' })
  startDate: Date;

  @Column({ type: 'text' })
  description: string;

  @CreateDateColumn()
  createdAt: Date;
  
  @DeleteDateColumn()
  deletedAt: Date;
  
  @Column({ type: 'tinyint', default: 0 })
  user_type: number;

  @JoinColumn()
  @OneToOne(() => User)
  user: User;

  @ManyToOne(() => User)
  user: User;
}

boolean으로 타입 작성하면 tinyint로 들어감

oneToOne 의 경우 중심되는곳에 Join넣어줘야함

 

@CreateDateColumn() => 생성날짜

@UpdateDeteColumn() => 수정날짜

@DeleteDateColumn() => 삭제날짜

 

 

++

import {
  Column,
  CreateDateColumn,
  Entity,
  Generated,
  PrimaryGeneratedColumn,
  UpdateDateColumn,
  VersionColumn,
} from 'typeorm';

export enum Role {
  USER = 'user',
  ADMIN = 'admin',
}

@Entity()
export class UserModel {
  // ID
  // 자동으로 ID를 생성한다.

  // @PrimaryGeneratedColumn()
  // PrimaryColumn은 모든 테이블에서 기본적으로 존재해야한다.
  // 테이블 안에서 각각의 Row를 구분 할 수 있는 칼럼이다.
  // @PrimaryColumn()
  //
  // @PrimaryGeneratedColumn('uuid')
  // PrimaryGeneratedColumn -> 순서대로 위로 올라간다.
  // 1, 2, 3, 4, 5 -> 999999
  //
  // UUID
  // asdjdh123124-dfdasjdhfjahfkj1-asdfjashfjkashfk1-dfadfasfa

  @PrimaryGeneratedColumn()
  id: number;

  // 제목
  @Column({
    // 데이터베이스에서 인지하는 칼럼 타입
    // 자동으로 유추됨
    type: 'varchar',
    // 데이터베이스 칼럼 이름
    // 프로퍼티 이름으로 자동 유추됨
    name: 'title',
    // 값의 길이
    // 입력할 수 있는 글자의 길이가 300
    length: 300,
    // null이 가능한지
    nullable: true,
    // false면 처음 저장할때만 값 지정 가능
    // 이후에는 값 변경 불가능,
    update: true,
    // find()를 실핼할 때 기본으로 값을 불러올지
    // 기본값이 true, false면 find에서 안나옴.
    select: true,
    // 기본 값 true
    // 아무것도 입력 안했을 때 기본으로 입력되게 되는 값
    default: 'default value',
    // 칼럼중에서 유일무이한 값이 돼야하는지
    // 기본 값 false
    unique: false,
  })
  title: string;

  @Column({
    type: 'enum',
    enum: Role,
    default: Role.USER,
  })
  role: Role;

  // 데이터 생성 일자
  // 데이터가 생성되는 날짜와 시간이 자동으로 찍힌다.
  @CreateDateColumn()
  createdAt: Date;

  // 데이터 업데이트 일자
  // 데이터가 업데이트되는 날짜와 시간이 자동으로 찍힌다.
  @UpdateDateColumn()
  updatedAt: Date;

  // 데이터가 업데이트 될 때마다 1씩 올라간다.
  // 처음 생성되면 값은 1이다.
  // save() 함수가 몇번 불렸는지 기억한다.
  @VersionColumn()
  version: number;

  // 추가적인 자동생성 컬럼을 만들 수 있다.
  // ex) pk는 increment로 하고, uuid를 따로 생성가능
  @Column()
  @Generated('uuid')
  additionalId: string;
}

 

https://www.inflearn.com/course/lecture?courseSlug=nestjs-%EB%B0%B1%EC%97%94%EB%93%9C-%EC%99%84%EC%A0%84%EC%A0%95%EB%B3%B5-%EB%A7%88%EC%8A%A4%ED%84%B0-%ED%81%B4%EB%9E%98%EC%8A%A4-1&unitId=184147&category=questionDetail&tab=curriculum

 

학습 페이지

 

www.inflearn.com

 

728x90

'코딩 > TypeORM' 카테고리의 다른 글

Find Options  (0) 2024.10.15
Relationship  (0) 2024.10.15
[Entity] Table Inheritance - 클래스 상속을 이용한 테이블 늘리기  (1) 2024.10.11
사용 방법 예시들  (0) 2024.04.22
초기 설정 + 공식문서 링크  (0) 2024.04.17

+ Recent posts