프로그래밍(Web)/Javascript(TS,Node)

[바미] Typescript-restful-starter - DB 컬럼 중 'name'값을 추가하여 id, text, email외에도 name값을 추가 할 수 있도록 수정해보자!

Bami 2020. 12. 24. 18:32
728x90
반응형

수정사항


DB 컬럼 중 'name'값을 추가하여 id, text, email외에도 name값을 추가 할 수 있도록 수정.

변경 전


Sample.controller.ts


// input -> routes/Sample.route.ts 참조. 
    public async create(): Promise<Response> {
        const { text, email} = this.req.body as { text: string, email: string};
        this.sample.text = text;
        this.sample.email = email; 
        try {
            const result = await this.sampleService.save(this.sample);
            return this.res.status(200).send(result);
        } catch (ex) {
            return this.res.status(404).send({ text: "ERROR" });
        }
    }

Sample.model.ts


import { IsEmail } from "class-validator";
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity("sample")
export class Sample extends BaseEntity {

    @PrimaryGeneratedColumn() // 인덱스 자동 증가.
    public id: number;

    @Column("text")
    public text: string;

    @Column("text")
    public name: string;

    @Column("text")
    @IsEmail()
    public email: string;

}

Sample.schemas.ts


  import { number, object, string } from "joi";

  /* 구조 정의 */ 
  export const createSample = object().keys({
      text: string().required(),
      email: string().required(),
  });

  export const updateSample = object().keys({
      id: number().required(),
      text: string().required(),
      email: string().required(),
  });

  export const deleteSample = object().keys({
      id: number().required(),
  });

}

변경 후


Sample.controller.ts

    // input -> routes/Sample.route.ts 참조. 
    public async create(): Promise<Response> {

        const { text, email,name } = this.req.body as { text: string, email: string, name: string };
        this.sample.text = text;
        this.sample.email = email; 
        this.sample.name = name; // name 값 추가.
        // this.sample.email = "someone@somewhere.com";
        try {
            const result = await this.sampleService.save(this.sample);
            return this.res.status(200).send(result);
        } catch (ex) {
            return this.res.status(404).send({ text: "ERROR" });
        }
    }

Sample.model.ts


import { IsEmail } from "class-validator";
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from "typeorm";

@Entity("sample")
export class Sample extends BaseEntity {

    @PrimaryGeneratedColumn() // 인덱스 자동 증가.
    public id: number;

    @Column("text")
    public text: string;

    @Column("text")
    public name: string; // name 값 추가

    @Column("text")
    @IsEmail()
    public email: string;

}

Sample.schemas.ts


  import { number, object, string } from "joi";

  /* 구조 정의 */ 
  export const createSample = object().keys({
      text: string().required(),
      email: string().required(),
      name: string().required(), // name 값 추가
  });

  export const updateSample = object().keys({
      id: number().required(),
      text: string().required(),
      email: string().required(),
  });

  export const deleteSample = object().keys({
      id: number().required(),
  });

}

Tester


Web

  • 기존 데이터는 name값을 넣지 않았으므로 null값이 되는 것을 확인 할 수 있다.

Plan



    1. name외에도 age, phonenumber와 같은 데이터를 추가 할 수 있도록 수정 예정.
    2. 기존 데이터에서 1번에서 추가한 컬럼 값들을 넣지 않은 데이터들이 Update될 수 있도록 수정 예정.
    3. Create로 생성된 데이터 중 입력한 이름을 가진 데이터, 입력한 나이를 가진 데이터, 입력한 전화번호를 가진 데이터, 등을 
       검색하여 조회 할 수 있도록 수정 예정.
728x90
반응형