카테고리 없음

14주차 (1)

jaeoun0238 2025. 1. 27. 23:47
//card.controller.ts
import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  ParseIntPipe,
} from '@nestjs/common';
import { CardService } from './card.service';
import { CreateCardDto } from './dto/create-card.dto';
import { UpdateCardDto } from './dto/update-card.dto';

@Controller('columns/:columnId/cards')
export class CardController {
  constructor(private readonly cardService: CardService) {}

  @Post()
  create(
    @Param('columnId', ParseIntPipe) columnId: number,
    @Body() createCardDto: CreateCardDto,
  ) {
    return this.cardService.createCard(columnId, createCardDto);
  }

  @Get()
  findCards(@Param('columnId', ParseIntPipe) columnId: number) {
    return this.cardService.findCards(columnId);
  }

  @Get(':cardId')
  findCard(
    @Param('columnId', ParseIntPipe) columnId: number,
    @Param('cardId', ParseIntPipe) cardId: number,
  ) {
    return this.cardService.findCard(columnId, cardId);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateCardDto: UpdateCardDto) {
    return this.cardService.update(+id, updateCardDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.cardService.remove(+id);
  }
}
//card.service.js

import { Injectable, BadRequestException } from '@nestjs/common';
import { CreateCardDto } from './dto/create-card.dto';
import { UpdateCardDto } from './dto/update-card.dto';
import { Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { Card } from './entities/card.entity';
import _ from 'lodash';

// 카드가 만들어지는데에 필요한 정보를 정해준다
// 타입 orm을 써서 DB에 저장한다 (받아온 정보로 카드를 만든다)
// 저장한 정보를 리턴한다

@Injectable()
export class CardService {
  // 컨스트럭터 작성
  // 컨스트럭터 안에 레포지토리 연결하기
  // 크리에이트 매서드 생성
  // 파람스 해서 타입지정?

  constructor(
    @InjectRepository(Card)
    private cardRepository: Repository<Card>,
  ) {}
  async createCard(
    columnId: number,
    createCardDto: CreateCardDto,
  ): Promise<Card> {
    return await this.cardRepository.save({ columnId, ...createCardDto });
  }

  async findCards(columnId: number): Promise<Card[]> {
    return await this.cardRepository.find({
      where: { columnId },
    });
  }

  async findCard(columnId: number, cardId: number): Promise<Card> {
    const card = await this.cardRepository.findOne({
      where: { id: cardId, columnId },
    });
    if (!card) {
      throw new BadRequestException('카드가 존재하지 않습니다.');
    }

    return card;
  }

  async update(id: number, updateCardDto: UpdateCardDto) {
    return await `This action updates a #${id} card`;
  }

  async remove(id: number) {
    return await `This action removes a #${id} card`;
  }
}

공부해보니 이 pronmise<Card>에 대해서 알게 되었습니다.

constructor(
    @InjectRepository(Card)
    private cardRepository: Repository<Card>,
  ) {}

 

 

columnId와 cardId로 데이터를 비동기로 조회합니다.

데이터베이스의 조회가 완료되면 Promise<Card>가 성공(resolve) 상태로 반환됩니다.

카드가 없으면 예외(BadRequestException)가 발생합니다.

 

 

async createCard(
    columnId: number,
    createCardDto: CreateCardDto,
  ): Promise<Card> {
    return await this.cardRepository.save({ columnId, ...createCardDto });
  }

저장된 카드 데이터를 Promise<Card>로 반환합니다.

 

확실히 첫 단추부터 잘깨워야 한다고.. ㅠ create 부분을 배우면서 어떻게 하는지 감을 잡아가고 있는것 같습니다. 아무래도 express 에서 nest로 바뀌는 부분에 대해서 응용이 좀 많이 어렵게 느껴져서 적응이 너무 필요할것 같아요.. 튜터님들도 매니저님도 팀원분들도 참 많은분들이 격려도 해주고 도와주셔서 정말 힘이 쭉 빠졌었는데 기운이 났습니다 ㅜㅜ 너무너무감사하고 열심히 해보겠습니다..!!