Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v1.3.0 #271

Merged
merged 35 commits into from
Jul 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c40f77e
[FIX] 크루 도메인 μΆ”κ°€ (#195)
mikekks May 20, 2024
b6f7e1d
[FIX] κ²Œμ‹œκΈ€ λͺ©λ‘ 및 상세 쑰회 μ‹œ updatedDate -> createdDate둜 λ³€κ²½ (#200)
sgh002400 May 23, 2024
64afced
[FEAT] λͺ¨μž„ μ‹ μ²­μž 리슀트 쑰회 API λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (#201)
mikekks May 31, 2024
bd2a192
[FIX] λ©”μ΄μ»€μŠ€ νŒ€μž₯ 버그 & λΌμš°νŒ… κ·œμΉ™ μˆ˜μ • (#208)
mikekks Jun 4, 2024
7b01ce6
[FIX] 였λ₯˜ μˆ˜μ • (#210)
mikekks Jun 6, 2024
869625d
[FEAT] 곡지사항 κ΄€λ ¨ API λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (#223)
mikekks Jun 22, 2024
3f9df90
[FIX] λΌμš°νŒ… κ·œμΉ™ νŽΈμ§‘ (#228)
mikekks Jun 23, 2024
73f9d3f
[FEAT] λͺ¨μž„ κ²Œμ‹œκΈ€ λͺ©λ‘ 쑰회 V2 API κ΅¬ν˜„ (#211)
yeseul106 Jun 24, 2024
7c278a8
[FIX] Open API Spec에 λ§žμΆ°μ„œ κ²Œμ‹œκΈ€ λͺ©λ‘ 쑰회 API νŒŒλΌλ―Έν„° ꡬ쑰 μˆ˜μ • (#232)
yeseul106 Jun 25, 2024
eb8d5e7
[FIX] Open API Spec에 λ§žμΆ°μ„œ 쿼리 νŒŒλΌλ―Έν„° νƒ€μž… 지정 (#234)
yeseul106 Jun 25, 2024
bb55929
[CHORE] id 데이터 μΆ”κ°€ (#236)
mikekks Jun 29, 2024
dbd5043
[FIX] Comment μ‚­μ œ μ‹œ λ“±λ‘λœ Exception으둜 λ˜μ§€λ„λ‘ λ³€κ²½
rdd9223 Jun 30, 2024
f8d8412
[FIX] Comment UserId μ°Έμ‘° 방식 λ³€κ²½
rdd9223 Jun 22, 2024
4aa45cb
[FIX] Comment μ‚­μ œ μ‹œ λ“±λ‘λœ Exception으둜 λ˜μ§€λ„λ‘ λ³€κ²½
rdd9223 Jun 22, 2024
6623f66
[ENV] `post/v1` 으둜 μ—”λ“œν¬μΈνŠΈλ₯Ό 받지 λͺ»ν•˜λŠ” 문제 μˆ˜μ •
rdd9223 Jun 30, 2024
3d9c928
[REFACTOR] λŒ“κΈ€μ„ 찾지 λͺ»ν–ˆμ„ 경우의 μ—λŸ¬λ©”μ‹œμ§€ 등둝
rdd9223 Jun 30, 2024
2d10f30
[FIX] Comment 객체 μƒμ„±μ‹œμ— `userId`도 μ„€μ •ν•˜λ„λ‘ λ³€κ²½
rdd9223 Jun 30, 2024
5d3f7e7
[TEST] μ‹€νŒ¨ν•˜λŠ” λŒ“κΈ€ μ‚­μ œ κ΄€λ ¨ ν…ŒμŠ€νŠΈμ½”λ“œ μˆ˜μ •
rdd9223 Jun 30, 2024
8c18f37
[FEAT] λŒ“κΈ€ μ‹ κ³ ν•˜κΈ° V2 API κ΅¬ν˜„
rdd9223 Jun 15, 2024
0e77040
[FIX] μ—λŸ¬λ©”μ‹œμ§€ ErrorStatus κ°’ μΆ”κ°€ 및 μ½”λ“œ λ¦¬νŒ©ν† λ§
rdd9223 Jun 30, 2024
ebf006b
[REFACTOR] μ˜ˆμ™Έ 객체 처리 방식 λ³€κ²½ 및 ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„±
rdd9223 Jun 30, 2024
11d9495
[FEAT] λ©˜μ…˜ μ‚¬μš©μž 쑰회 API κ΅¬ν˜„ (#240)
mikekks Jul 2, 2024
b0a1aa9
[FEAT] λͺ¨μž„ κ²Œμ‹œλ¬Ό & λŒ“κΈ€μ—μ„œ λ©˜μ…˜ V2 API κ΅¬ν˜„ (#242)
sgh002400 Jul 7, 2024
118eb1c
[feature/#214] λŒ“κΈ€ μˆ˜μ • V2 API κ΅¬ν˜„ (#243)
rdd9223 Jul 9, 2024
400b9fa
[FIX] λΌμš°νŒ… κ·œμΉ™ νŽΈμ§‘ (#246)
mikekks Jul 9, 2024
b4c0040
[FEAT] λŒ€λŒ“κΈ€ κΈ°λŠ₯ κ΅¬ν˜„ (#248)
mikekks Jul 18, 2024
9f40227
[FIX] userId -> orgId둜 μˆ˜μ • 및 orgId ν•„μš”ν•œ λ‘œμ§μ— 데이터 μΆ”κ°€ (#251)
mikekks Jul 19, 2024
f346d14
[FIX] λŒ“κΈ€ μž‘μ„± μ•Œλ¦Ό μ‹œ λΉ„λ°€λ¬Έμžμ—΄ 제거 (#252)
sgh002400 Jul 19, 2024
f7761a0
[FIX] λΉ„λ°€λ¬Έμžμ—΄ νŒ¨ν„΄ μˆ˜μ • (#255)
sgh002400 Jul 20, 2024
664d7a3
[CHORE] μ•Œλ¦Ό 메세지 λ³€κ²½ (#257)
mikekks Jul 22, 2024
f91dbd7
[FIX] ν”Όλ“œ μž‘μ„± API μˆ˜μ • (#262)
mikekks Jul 23, 2024
c45afa0
[CHORE] λŒ“κΈ€ μ‚­μ œ κΈ°λŠ₯ μˆ˜μ • 및 λŒ“κΈ€ μˆ˜μ • 둜직 일뢀 μˆ˜μ • (#260)
mikekks Jul 23, 2024
5784dd4
[FIX] μ’‹μ•„μš” 수 버그 μˆ˜μ • (#264)
mikekks Jul 23, 2024
4a723c3
[FIX] λ©˜μ…˜ μ•Œλ¦Ό 멘트 λ³€κ²½ (#267)
mikekks Jul 24, 2024
67dc9d1
[CHORE] 큰 λ”°μ˜΄ν‘œ μΆ”κ°€ (#269)
mikekks Jul 24, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,6 @@ services:
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- AWS_REGION=${AWS_REGION}
- JWT_SECRET=${JWT_SECRET}
depends_on:
- nestjs
logging:
driver: "json-file"
options:
Expand Down Expand Up @@ -132,12 +130,20 @@ services:
caddy.route_2.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_3: /user/v2/*
caddy.route_3.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_4: /meeting/v2/*
caddy.route_4: /meeting/v2
caddy.route_4.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_5: /post/v2
caddy.route_5: /meeting/v2/*
caddy.route_5.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_6: /comment/v2
caddy.route_6: /post/v2
caddy.route_6.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_7: /post/v2/*
caddy.route_7.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_8: /comment/v2
caddy.route_8.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_9: /comment/v2/*
caddy.route_9.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_10: /notice/v2
caddy.route_10.reverse_proxy: "{{ upstreams 4000 }}"

nestjs-blue:
image: makerscrew/server:latest
Expand Down Expand Up @@ -221,12 +227,20 @@ services:
caddy.route_2.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_3: /user/v2/*
caddy.route_3.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_4: /meeting/v2/*
caddy.route_4: /meeting/v2
caddy.route_4.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_5: /post/v2
caddy.route_5: /meeting/v2/*
caddy.route_5.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_6: /comment/v2
caddy.route_6: /post/v2
caddy.route_6.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_7: /post/v2/*
caddy.route_7.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_8: /comment/v2
caddy.route_8.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_9: /comment/v2/*
caddy.route_9.reverse_proxy: "{{ upstreams 4000 }}"
caddy.route_10: /notice/v2
caddy.route_10.reverse_proxy: "{{ upstreams 4000 }}"

networks:
caddy:
Expand Down
6 changes: 6 additions & 0 deletions main/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@ dependencies {
// MapStruct
implementation 'org.mapstruct:mapstruct:1.5.3.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final'

// queryDsl
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.sopt.makers.crew.main.comment.v2;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;

import java.security.Principal;

import org.sopt.makers.crew.main.comment.v2.dto.query.CommentV2GetCommentsQueryDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2MentionUserInCommentRequestDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2UpdateCommentBodyDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2CreateCommentResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2GetCommentsResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2ReportCommentResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2UpdateCommentResponseDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;

public interface CommentV2Api {

@Operation(summary = "λͺ¨μž„ κ²Œμ‹œκΈ€ λŒ“κΈ€ μž‘μ„±")
@ResponseStatus(HttpStatus.CREATED)
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "성곡"),
})
ResponseEntity<CommentV2CreateCommentResponseDto> createComment(
@Valid @RequestBody CommentV2CreateCommentBodyDto requestBody, Principal principal);

@Operation(summary = "λͺ¨μž„ κ²Œμ‹œκΈ€ λŒ“κΈ€ μˆ˜μ •")
@ResponseStatus(HttpStatus.OK)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "성곡"),
})
ResponseEntity<CommentV2UpdateCommentResponseDto> updateComment(
@PathVariable Integer commentId,
@Valid @RequestBody CommentV2UpdateCommentBodyDto requestBody,
Principal principal);

@Operation(summary = "λŒ“κΈ€ μ‹ κ³ ν•˜κΈ°")
@ResponseStatus(HttpStatus.CREATED)
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "성곡"),
})
ResponseEntity<CommentV2ReportCommentResponseDto> reportComment(
@PathVariable Integer commentId, Principal principal);

@Operation(summary = "λͺ¨μž„ κ²Œμ‹œκΈ€ λŒ“κΈ€ μ‚­μ œ")
@ResponseStatus(HttpStatus.NO_CONTENT)
@ApiResponses(value = {
@ApiResponse(responseCode = "204", description = "성곡"),
})
ResponseEntity<Void> deleteComment(Principal principal, @PathVariable Integer commentId);

@Operation(summary = "λŒ“κΈ€μ—μ„œ μœ μ € λ©˜μ…˜")
@ResponseStatus(HttpStatus.OK)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "성곡"),
})
ResponseEntity<Void> mentionUserInComment(
@Valid @RequestBody CommentV2MentionUserInCommentRequestDto requestBody,
Principal principal);

@Operation(summary = "λͺ¨μž„ κ²Œμ‹œκΈ€ λŒ“κΈ€ 리슀트 쑰회")
@ResponseStatus(HttpStatus.OK)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "성곡"),
})
ResponseEntity<CommentV2GetCommentsResponseDto> getComments(@Valid @ModelAttribute CommentV2GetCommentsQueryDto requestBody, Principal principal);
}
Original file line number Diff line number Diff line change
@@ -1,42 +1,101 @@
package org.sopt.makers.crew.main.comment.v2;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;

import java.security.Principal;

import lombok.RequiredArgsConstructor;

import org.sopt.makers.crew.main.comment.v2.dto.query.CommentV2GetCommentsQueryDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2MentionUserInCommentRequestDto;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2UpdateCommentBodyDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2CreateCommentResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2GetCommentsResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2ReportCommentResponseDto;
import org.sopt.makers.crew.main.comment.v2.dto.response.CommentV2UpdateCommentResponseDto;
import org.sopt.makers.crew.main.comment.v2.service.CommentV2Service;
import org.sopt.makers.crew.main.common.util.UserUtil;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/comment/v2")
@RequiredArgsConstructor
@Tag(name = "λŒ“κΈ€/λŒ€λŒ“κΈ€")
public class CommentV2Controller {

private final CommentV2Service commentV2Service;

@Operation(summary = "λͺ¨μž„ κ²Œμ‹œκΈ€ λŒ“κΈ€ μž‘μ„±")
@PostMapping()
@ResponseStatus(HttpStatus.CREATED)
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "성곡"),
})
public ResponseEntity<CommentV2CreateCommentResponseDto> createComment(
@Valid @RequestBody CommentV2CreateCommentBodyDto requestBody, Principal principal) {
Integer userId = UserUtil.getUserId(principal);
return ResponseEntity.ok(commentV2Service.createComment(requestBody, userId));
}
public class CommentV2Controller implements CommentV2Api {

private final CommentV2Service commentV2Service;

@Override
@PostMapping()
public ResponseEntity<CommentV2CreateCommentResponseDto> createComment(
@Valid @RequestBody CommentV2CreateCommentBodyDto requestBody, Principal principal) {
Integer userId = UserUtil.getUserId(principal);
return ResponseEntity.ok(commentV2Service.createComment(requestBody, userId));
}

@Override
@PutMapping("/{commentId}")
public ResponseEntity<CommentV2UpdateCommentResponseDto> updateComment(
@PathVariable Integer commentId,
@Valid @RequestBody CommentV2UpdateCommentBodyDto requestBody,
Principal principal) {
Integer userId = UserUtil.getUserId(principal);
return ResponseEntity.ok(
commentV2Service.updateComment(commentId, requestBody.getContents(), userId));
}

@Override
@PostMapping("/{commentId}/report")
public ResponseEntity<CommentV2ReportCommentResponseDto> reportComment(
@PathVariable Integer commentId, Principal principal) {
Integer userId = UserUtil.getUserId(principal);
return ResponseEntity.ok(commentV2Service.reportComment(commentId, userId));
}

@Override
@DeleteMapping("/{commentId}")
public ResponseEntity<Void> deleteComment(
Principal principal,
@PathVariable Integer commentId) {
Integer userId = UserUtil.getUserId(principal);

commentV2Service.deleteComment(commentId, userId);

return ResponseEntity.noContent().build();
}

@Override
@PostMapping("/mention")
public ResponseEntity<Void> mentionUserInComment(
@Valid @RequestBody CommentV2MentionUserInCommentRequestDto requestBody,
Principal principal) {
Integer userId = UserUtil.getUserId(principal);
commentV2Service.mentionUserInComment(requestBody, userId);
return ResponseEntity.status(HttpStatus.OK).build();
}

@Override
@GetMapping
public ResponseEntity<CommentV2GetCommentsResponseDto> getComments(
@Valid @ModelAttribute CommentV2GetCommentsQueryDto requestBody,
Principal principal) {

Integer userId = UserUtil.getUserId(principal);
CommentV2GetCommentsResponseDto commentDtos = commentV2Service.getComments(requestBody.getPostId(),
requestBody.getPage(), requestBody.getTake(), userId);

return ResponseEntity.status(HttpStatus.OK).body(commentDtos);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.sopt.makers.crew.main.comment.v2.dto;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.sopt.makers.crew.main.comment.v2.dto.request.CommentV2CreateCommentBodyDto;
import org.sopt.makers.crew.main.entity.comment.Comment;
import org.sopt.makers.crew.main.entity.post.Post;
import org.sopt.makers.crew.main.entity.user.User;

@Mapper(componentModel = "spring")
public interface CommentMapper {
@Mapping(source = "post", target = "post")
@Mapping(source = "requestBody.contents", target = "contents")
@Mapping(source = "user", target = "user")
@Mapping(source = "user.id", target = "userId")
@Mapping(target = "likeCount", constant = "0")
Comment toComment(CommentV2CreateCommentBodyDto requestBody, Post post, User user, int depth, int order,
Integer parentId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.sopt.makers.crew.main.comment.v2.dto.query;

import org.sopt.makers.crew.main.common.pagination.dto.PageOptionsDto;

import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Getter;

@Getter
public class CommentV2GetCommentsQueryDto extends PageOptionsDto {

@NotNull
private final Integer postId;

@Builder
public CommentV2GetCommentsQueryDto(Integer page, Integer take, Integer postId) {
super(page, take);
this.postId = postId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,18 @@
@Schema(description = "λŒ“κΈ€ 생성 request body dto")
public class CommentV2CreateCommentBodyDto {

@Schema(example = "1", required = true, description = "κ²Œμ‹œκΈ€ ID")
@NotNull
private Integer postId;
@Schema(example = "1", required = true, description = "κ²Œμ‹œκΈ€ ID")
@NotNull
private Integer postId;

@Schema(example = "μ•Œκ³ λ³΄λ©΄ μ“Έλ°μžˆλŠ” 개발 ν”„λ‘œμ„ΈμŠ€", required = true, description = "λŒ“κΈ€ λ‚΄μš©")
@NotEmpty
private String contents;
@Schema(example = "μ•Œκ³ λ³΄λ©΄ μ“Έλ°μžˆλŠ” 개발 ν”„λ‘œμ„ΈμŠ€", required = true, description = "λŒ“κΈ€ λ‚΄μš©")
@NotEmpty
private String contents;

@Schema(example = "λŒ“κΈ€/λŒ€λŒ“κΈ€ μ—¬λΆ€", required = true, description = "true")
private boolean isParent;

@Schema(example = "λŒ€λŒ“κΈ€μΈ 경우, λŒ“κΈ€μ˜ id", required = true, description = "1")
private Integer parentCommentId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.sopt.makers.crew.main.comment.v2.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;

import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
@Schema(description = "λŒ“κΈ€μ—μ„œ μœ μ € μ–ΈκΈ‰ request body dto")
public class CommentV2MentionUserInCommentRequestDto {

/**
* 주의!! : ν•„λ“œλͺ…은 userIds μ΄μ§€λ§Œ μ‹€μ œ μš”μ²­λ°›λŠ” 값은 orgId μž…λ‹ˆλ‹€.
*/

@Schema(example = "[111, 112, 113]", required = true, description = "μ–ΈκΈ‰ν•  μœ μ € ID")
@NotEmpty
private List<Integer> userIds;

@Schema(example = "1", required = true, description = "κ²Œμ‹œκΈ€ ID")
@NotNull
private Integer postId;

@Schema(example = "λ©˜μ…˜λ‚΄μš©~~", required = true, description = "λ©˜μ…˜ λ‚΄μš©")
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.sopt.makers.crew.main.comment.v2.dto.request;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "λŒ“κΈ€ μ—…λ°μ΄νŠΈ request body dto")
public class CommentV2UpdateCommentBodyDto {

@Schema(example = "μ•Œκ³ λ³΄λ©΄ μ“Έλ°μžˆλŠ” 개발 ν”„λ‘œμ„ΈμŠ€", description = "λŒ“κΈ€ λ‚΄μš©")
@NotEmpty
private String contents;

}
Loading
Loading