Skip to content

Commit

Permalink
Merge pull request #28 from 5th-Neordinary-HACKATHON-MEETA/feature/26
Browse files Browse the repository at this point in the history
feat: 공지사항 추가 API
  • Loading branch information
JinhyeokFang authored Nov 25, 2023
2 parents 4572d13 + a8678cb commit 297775e
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 5 deletions.
26 changes: 23 additions & 3 deletions src/announcements/announcements.controller.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
import { Controller } from '@nestjs/common';
import { Body, Controller, Post, UseGuards } from '@nestjs/common';
import { AnnouncementsService } from './announcements.service';
import { JwtAuthGuard } from 'src/common/decorator/auth/jwt/jwt.guard';
import { AuthUser } from 'src/auth/auth-user.decorator';
import { User } from 'src/users/entities/users.entity';
import { CreateAnnouncementDto } from './dtos/create-announcement.dto';
import { ResponseBody, SuccessResponse } from 'src/common/response/response';
import { RESPONSE_CODE } from 'src/common/response/response.code';

@Controller('announcements')
@Controller('announcement')
export class AnnouncementsController {
constructor() {}
constructor(private readonly announcementsService: AnnouncementsService) {}

@Post()
@UseGuards(JwtAuthGuard)
async createAnnouncement(
@AuthUser() user: User,
@Body() createAnnouncementDto: CreateAnnouncementDto,
): Promise<ResponseBody> {
await this.announcementsService.createAnnouncement(
user,
createAnnouncementDto,
);
return SuccessResponse(RESPONSE_CODE[2000], null);
}
}
3 changes: 2 additions & 1 deletion src/announcements/announcements.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { Announcement } from './entities/announcement.entity';
import { AnnouncementsService } from './announcements.service';
import { AnnouncementsController } from './announcements.controller';
import { Meeting } from 'src/meetings/entities/meeting.entity';

@Module({
imports: [TypeOrmModule.forFeature([Announcement])],
imports: [TypeOrmModule.forFeature([Announcement, Meeting])],
controllers: [AnnouncementsController],
providers: [AnnouncementsService],
exports: [],
Expand Down
42 changes: 41 additions & 1 deletion src/announcements/announcements.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,46 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Announcement } from './entities/announcement.entity';
import { User } from 'src/users/entities/users.entity';
import { CreateAnnouncementDto } from './dtos/create-announcement.dto';
import { Repository } from 'typeorm';
import { Meeting } from 'src/meetings/entities/meeting.entity';
import { Exception } from 'src/common/response/exception';
import { RESPONSE_CODE } from 'src/common/response/response.code';

@Injectable()
export class AnnouncementsService {
constructor() {}
constructor(
@InjectRepository(Announcement)
private readonly announcementRepository: Repository<Announcement>,
@InjectRepository(Meeting)
private readonly meetingRepository: Repository<Meeting>,
) {}

async createAnnouncement(
user: User,
createAnnouncementDto: CreateAnnouncementDto,
) {
const meeting = await this.meetingRepository.findOne({
where: { id: createAnnouncementDto.meetingId },
relations: ['announcement'],
});

if (meeting === null) {
throw new Exception(RESPONSE_CODE[34040], null);
}

if (meeting.announcement !== null) {
throw new Exception(RESPONSE_CODE[44090], null);
}

const announcement = new Announcement();
announcement.writer = user;
announcement.content = createAnnouncementDto.content;
announcement.title = createAnnouncementDto.title;
announcement.meeting = meeting;
await this.announcementRepository.save(announcement);
meeting.announcement = announcement;
await this.meetingRepository.save(meeting);
}
}
12 changes: 12 additions & 0 deletions src/announcements/dtos/create-announcement.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { IsString } from 'class-validator';

export class CreateAnnouncementDto {
@IsString()
meetingId!: string;

@IsString()
title!: string;

@IsString()
content!: string;
}
10 changes: 10 additions & 0 deletions src/common/response/response.code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ export const RESPONSE_CODE: Record<number, ResponseCode> = {
},

//MEETING
34040: {
code: 34040,
message: '존재하지 않는 회의입니다.',
status: HttpStatus.NOT_FOUND,
},

//ANNOUNCEMENT
44090: {
code: 44090,
message: '이미 공지사항이 존재합니다.',
status: HttpStatus.CONFLICT,
},
};

0 comments on commit 297775e

Please sign in to comment.