Skip to content

Commit d6101e9

Browse files
feat: 프로젝트 컨트롤러에 프로젝트 참여 엔드포인트 구현
- joinProject로 회원이 프로젝트 링크로 프로젝트에 참여할 수 있도록 한다. - JoinProjectRequestDto로 '/join' 엔드포인트의 요청형식을 검증한다. Co-Authored-By: Suhjeong Kim <[email protected]>
1 parent 4159679 commit d6101e9

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { IsNotEmpty, IsUUID } from 'class-validator';
2+
3+
export class JoinProjectRequestDto {
4+
@IsNotEmpty()
5+
@IsUUID(4, {message: "not uuid"})
6+
inviteLinkId: string;
7+
}

backend/src/project/project.controller.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
1-
import { Body, Controller, Get, Post, Req, UseGuards } from '@nestjs/common';
1+
import {
2+
Body,
3+
Controller,
4+
Get,
5+
NotFoundException,
6+
Post,
7+
Req,
8+
Res,
9+
UseGuards,
10+
} from '@nestjs/common';
211
import { ProjectService } from './service/project.service';
312
import { CreateProjectRequestDto } from './dto/CreateProjectRequest.dto';
413
import { MemberRequest } from 'src/common/guard/authentication.guard';
14+
import { JoinProjectRequestDto } from './dto/JoinProjectRequest.dto';
15+
import { Response } from 'express';
516

617
@Controller('project')
718
export class ProjectController {
@@ -33,4 +44,26 @@ export class ProjectController {
3344
);
3445
return;
3546
}
47+
48+
@Post('/join')
49+
async joinProject(
50+
@Req() request: MemberRequest,
51+
@Body() body: JoinProjectRequestDto,
52+
@Res() response: Response,
53+
) {
54+
const project = await this.projectService.getProjectByLinkId(
55+
body.inviteLinkId,
56+
);
57+
if (!project) throw new NotFoundException();
58+
59+
const isProjectMember = await this.projectService.isProjectMember(
60+
project,
61+
request.member,
62+
);
63+
if (isProjectMember)
64+
return response.status(200).send({ projectId: project.id });
65+
66+
await this.projectService.addMember(body.inviteLinkId, request.member);
67+
return response.status(201).send();
68+
}
3669
}

0 commit comments

Comments
 (0)