//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로 바뀌는 부분에 대해서 응용이 좀 많이 어렵게 느껴져서 적응이 너무 필요할것 같아요.. 튜터님들도 매니저님도 팀원분들도 참 많은분들이 격려도 해주고 도와주셔서 정말 힘이 쭉 빠졌었는데 기운이 났습니다 ㅜㅜ 너무너무감사하고 열심히 해보겠습니다..!!