Skip to content

Commit

Permalink
feat/#66: feat post api, modify dto
Browse files Browse the repository at this point in the history
  • Loading branch information
hobiJeong committed Nov 29, 2023
1 parent 37e1837 commit 7d80f29
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 5 deletions.
25 changes: 22 additions & 3 deletions src/apis/notice-boards/controllers/notice-boards.controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,28 @@
import { Controller, Delete, Get, Patch, Post } from '@nestjs/common';
import {
Body,
Controller,
Delete,
Get,
Param,
ParseIntPipe,
Patch,
Post,
} from '@nestjs/common';
import { CreateNoticeBoardDto } from '../dto/create-notice-board.dto';
import { NoticeBoardsService } from '../services/notice-boards.service';

@Controller('notice-boards')
export class NoticeBoardsController {
@Post()
create() {}
constructor(private readonly noticeBoardService: NoticeBoardsService) {}

@Post(':userId')
create(
// 추후 develop에 guard가 merge 될 시에 수정
@Param('userId', ParseIntPipe) userId: number,
@Body() createNoticeBoardDto: CreateNoticeBoardDto,
) {
return this.noticeBoardService.create(userId, createNoticeBoardDto);
}

@Get()
findAll() {}
Expand Down
3 changes: 2 additions & 1 deletion src/apis/notice-boards/dto/create-notice-board.dto.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { IsNotEmpty, Length } from 'class-validator';
import { NOTICE_BOARD_TITLE_LENGTH } from '../constants/notice-board.constant';
import { NoticeBoardDto } from './notice-board.dto';

export class NoticeBoardDto
export class CreateNoticeBoardDto
implements Pick<NoticeBoardDto, 'title' | 'description'>
{
@Length(NOTICE_BOARD_TITLE_LENGTH.MIN, NOTICE_BOARD_TITLE_LENGTH.MAX)
Expand Down
6 changes: 6 additions & 0 deletions src/apis/notice-boards/dto/notice-board.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,10 @@ export class NoticeBoardDto
hit: number;
allowComment: number;
userId: number;

constructor(noticeBoardDto: Partial<NoticeBoardDto> = {}) {
super();

Object.assign(this, noticeBoardDto);
}
}
3 changes: 3 additions & 0 deletions src/apis/notice-boards/notice-boards.module.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import { Module } from '@nestjs/common';
import { NoticeBoardsController } from './controllers/notice-boards.controller';
import { NoticeBoardsService } from './services/notice-boards.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { NoticeBoard } from '@src/entities/NoticeBoard';

@Module({
imports: [TypeOrmModule.forFeature([NoticeBoard])],
controllers: [NoticeBoardsController],
providers: [NoticeBoardsService],
})
Expand Down
51 changes: 50 additions & 1 deletion src/apis/notice-boards/services/notice-boards.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,53 @@
import { Injectable } from '@nestjs/common';
import { CreateNoticeBoardDto } from '../dto/create-notice-board.dto';
import { DataSource, Repository } from 'typeorm';
import { InjectRepository } from '@nestjs/typeorm';
import { NoticeBoard } from '@src/entities/NoticeBoard';
import { NoticeBoardDto } from '../dto/notice-board.dto';
import { HttpInternalServerErrorException } from '@src/http-exceptions/exceptions/http-internal-server-error.exception';
import { COMMON_ERROR_CODE } from '@src/constants/error/common/common-error-code.constant';

@Injectable()
export class NoticeBoardsService {}
export class NoticeBoardsService {
constructor(
private readonly dataSource: DataSource,
@InjectRepository(NoticeBoard)
private readonly noticeBoardRepository: Repository<NoticeBoard>,
) {}
async create(userId: number, createNoticeBoardDto: CreateNoticeBoardDto) {
const queryRunner = this.dataSource.createQueryRunner();

await queryRunner.connect();
await queryRunner.startTransaction();

try {
const entityManager = queryRunner.manager;

const newPost = await entityManager
.withRepository(this.noticeBoardRepository)
.save({
userId,
...createNoticeBoardDto,
});

await queryRunner.commitTransaction();

return new NoticeBoardDto(newPost);
} catch (error) {
if (queryRunner.isTransactionActive) {
await queryRunner.rollbackTransaction();
}

console.error(error);
throw new HttpInternalServerErrorException({
code: COMMON_ERROR_CODE.SERVER_ERROR,
ctx: '공지게시글 생성 중 알 수 없는 에러',
stack: error.stack,
});
} finally {
if (!queryRunner.isReleased) {
await queryRunner.release();
}
}
}
}

0 comments on commit 7d80f29

Please sign in to comment.