서비스와 레파지토리
Last updated
Last updated
// message.repository.ts
import {readFile, writeFile} from 'fs/promises'
// readFile, writeFile은 파일시스템에 접근하기 위해 import 한다.
export class MessagesRepository {
async findOne(id : string) {
const contents = await readFile("messages.json", 'utf-8')
const messages = JSON.parse(contents)
return messages[id]
}
async findAll() {
const contents = await readFile("messages.json", 'utf-8')
const messages = JSON.parse(contents)
return messages
}
async create(content : string) {
const contents = await readFile("messages.json", 'utf-8')
const messages = JSON.parse(contents)
const id = Math.floor(Math.random() * 999)
messages[id] = {id, content}
await writeFile('messages.json', JSON.stringify(messages))
}
}// message.service.ts
import { MessagesRepository } from "./messages.repository";
export class MessagesService {
messagesRepo : MessagesRepository
constructor() {
// 서비스가 자체적인 의존성을 생성
// 리포지토리가 없으면 서비스는 정상 작동하지 않음.
this.messagesRepo = new MessagesRepository()
}
findOne(id : string){
return this.messagesRepo.findOne(id)
}
findAll() {
return this.messagesRepo.findAll()
}
create(content : string) {
return this.messagesRepo.create(content)
}
}
// messages.controller.ts
import { Controller, Get, Post, Body, Param } from "@nestjs/common";
import { CreateMessageDto } from "./dtos/create-message.dto";
import { MessagesService } from "./messages.service";
@Controller('messages')
export class MessagesController {
messagesService : MessagesService;
constructor() {
// 이렇게 의존성을 넣는것은 좋은 방법이 아님
this.messagesService = new MessagesService()
}
@Get('/')
listMessages () {
return this.messagesService.findAll()
}
@Post()
createMessages(@Body() body : CreateMessageDto) {
return this.messagesService.create(body.content)
}
@Get('/:id')
getMessages(@Param('id') id : string) {
return this.messagesService.findOne(id)
}
}import { ... NotFoundException } from 'nestjs/common'
@Controller('messages')
export class MessagesController {
messagesService : MessagesService;
...
@Get('/:id')
async getMessages(@Param('id') id : string) {
const message = await this.messagesService.findOne(id)
if(!message) {
throw new NotFoundException('message not found')
}
return message
}
}