Skip to content

Commit eca432d

Browse files
authored
Merge pull request #21 from BobSoolTing/feature/member
feat: post 응답 필드 추가
2 parents 67d5415 + 06697d6 commit eca432d

5 files changed

Lines changed: 128 additions & 6 deletions

File tree

src/main/java/bst/bobsoolting/post/command/application/controller/PostCommandController.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import bst.bobsoolting.member.query.service.MemberQueryService;
44
import bst.bobsoolting.post.command.application.controller.docs.PostCommandControllerDocs;
55
import bst.bobsoolting.post.command.application.dto.PostDTO;
6+
import bst.bobsoolting.post.command.application.mapper.PostConverter;
67
import bst.bobsoolting.post.command.application.service.PostCommandService;
78
import bst.bobsoolting.post.command.domain.vo.request.RequestCreatePostVO;
89
import bst.bobsoolting.post.command.domain.vo.request.RequestUpdatePostVO;
10+
import bst.bobsoolting.post.command.domain.vo.response.ResponseCreatePostVO;
11+
import bst.bobsoolting.post.command.domain.vo.response.ResponseUpdatePostVO;
912
import bst.bobsoolting.util.SecurityUtil;
1013
import lombok.RequiredArgsConstructor;
1114
import org.springframework.http.HttpStatus;
@@ -19,27 +22,30 @@
1922
public class PostCommandController implements PostCommandControllerDocs {
2023

2124
private final PostCommandService postCommandService;
25+
private final PostConverter postConverter;
2226
private final MemberQueryService memberQueryService;
2327
private final SecurityUtil securityUtil;
2428

2529
@PostMapping
26-
public ResponseEntity<PostDTO> createPost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @RequestBody RequestCreatePostVO request) {
30+
public ResponseEntity<ResponseCreatePostVO> createPost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @RequestBody RequestCreatePostVO request) {
2731
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
2832
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
2933
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
3034

3135
PostDTO created = postCommandService.createPost(request, memberId);
32-
return ResponseEntity.ok(created);
36+
ResponseCreatePostVO response = postConverter.fromDTOToCreateVO(created);
37+
return ResponseEntity.ok(response);
3338
}
3439

3540
@PutMapping("/{postId}")
36-
public ResponseEntity<PostDTO> updatePost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @PathVariable Long postId, @RequestBody RequestUpdatePostVO request) {
41+
public ResponseEntity<ResponseUpdatePostVO> updatePost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @PathVariable Long postId, @RequestBody RequestUpdatePostVO request) {
3742
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
3843
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
3944
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
4045

4146
PostDTO updated = postCommandService.updatePost(memberId, postId, request);
42-
return ResponseEntity.ok(updated);
47+
ResponseUpdatePostVO response = postConverter.fromDTOToUpdateVO(updated);
48+
return ResponseEntity.ok(response);
4349
}
4450

4551
@PatchMapping("/{postId}/status")

src/main/java/bst/bobsoolting/post/command/application/controller/docs/PostCommandControllerDocs.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import bst.bobsoolting.post.command.application.dto.PostDTO;
44
import bst.bobsoolting.post.command.domain.vo.request.RequestCreatePostVO;
55
import bst.bobsoolting.post.command.domain.vo.request.RequestUpdatePostVO;
6+
import bst.bobsoolting.post.command.domain.vo.response.ResponseCreatePostVO;
7+
import bst.bobsoolting.post.command.domain.vo.response.ResponseUpdatePostVO;
68
import io.swagger.v3.oas.annotations.Operation;
79
import io.swagger.v3.oas.annotations.Parameter;
810
import io.swagger.v3.oas.annotations.media.Content;
@@ -25,7 +27,7 @@ public interface PostCommandControllerDocs {
2527
@ApiResponse(responseCode = "500", description = "서버 오류")
2628
})
2729
@PostMapping
28-
ResponseEntity<PostDTO> createPost(
30+
ResponseEntity<ResponseCreatePostVO> createPost(
2931
@RequestHeader(HttpHeaders.AUTHORIZATION) String token,
3032
@RequestBody @io.swagger.v3.oas.annotations.parameters.RequestBody(
3133
content = @Content(schema = @Schema(implementation = RequestCreatePostVO.class))
@@ -40,7 +42,7 @@ ResponseEntity<PostDTO> createPost(
4042
@ApiResponse(responseCode = "500", description = "서버 오류")
4143
})
4244
@PutMapping("/{postId}")
43-
ResponseEntity<PostDTO> updatePost(
45+
ResponseEntity<ResponseUpdatePostVO> updatePost(
4446
@RequestHeader(HttpHeaders.AUTHORIZATION) String token,
4547
@Parameter(description = "게시글 ID", required = true) @PathVariable Long postId,
4648
@RequestBody @io.swagger.v3.oas.annotations.parameters.RequestBody(

src/main/java/bst/bobsoolting/post/command/application/mapper/PostConverter.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import bst.bobsoolting.post.command.domain.aggregate.entity.Post;
66
import bst.bobsoolting.post.command.domain.vo.request.RequestCreatePostVO;
77
import bst.bobsoolting.post.command.domain.vo.request.RequestUpdatePostVO;
8+
import bst.bobsoolting.post.command.domain.vo.response.ResponseCreatePostVO;
9+
import bst.bobsoolting.post.command.domain.vo.response.ResponseUpdatePostVO;
810
import org.springframework.stereotype.Component;
911

1012
import java.time.LocalDateTime;
@@ -72,4 +74,30 @@ public PostDTO toDTO(Post post) {
7274
.memberId(post.getMemberId())
7375
.build();
7476
}
77+
78+
public ResponseCreatePostVO fromDTOToCreateVO(PostDTO created) {
79+
return ResponseCreatePostVO.builder()
80+
.postId(created.getPostId())
81+
.category(created.getCategory() != null ? created.getCategory() : null)
82+
.title(created.getTitle())
83+
.content(created.getContent())
84+
.maxParticipants(created.getMaxParticipants())
85+
.date(created.getDate())
86+
.location(created.getLocation())
87+
.memberId(created.getMemberId())
88+
.build();
89+
}
90+
91+
public ResponseUpdatePostVO fromDTOToUpdateVO(PostDTO updated) {
92+
return ResponseUpdatePostVO.builder()
93+
.postId(updated.getPostId())
94+
.category(updated.getCategory() != null ? updated.getCategory() : null)
95+
.title(updated.getTitle())
96+
.content(updated.getContent())
97+
.maxParticipants(updated.getMaxParticipants())
98+
.date(updated.getDate())
99+
.location(updated.getLocation())
100+
.memberId(updated.getMemberId())
101+
.build();
102+
}
75103
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package bst.bobsoolting.post.command.domain.vo.response;
2+
3+
import bst.bobsoolting.post.command.domain.aggregate.Category;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.*;
7+
8+
import java.time.LocalDate;
9+
10+
@Getter
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
@Builder
14+
@ToString
15+
@Schema(name = "ResponseCreatePostVO", description = "게시글 등록 정보")
16+
public class ResponseCreatePostVO {
17+
@Schema(description = "게시글 ID", example = "1L")
18+
@JsonProperty("post_id")
19+
private Long postId;
20+
21+
@Schema(description = "카테고리 (FOOD, DRINK, MEETING)", example = "FOOD")
22+
private Category category;
23+
24+
@Schema(description = "제목", example = "저녁 드실 분!")
25+
private String title;
26+
27+
@Schema(description = "내용", example = "3월 15일에 저녁 드실 분 구합니다.")
28+
private String content;
29+
30+
@Schema(description = "최대 참가자 수", example = "5")
31+
@JsonProperty("max_participants")
32+
private Integer maxParticipants;
33+
34+
@Schema(description = "활동 날짜", example = "2025-03-15")
35+
private LocalDate date;
36+
37+
@Schema(description = "장소", example = "서울 강남구")
38+
private String location;
39+
40+
@Schema(description = "작성자 ID", example = "연월일 8글자 + UUID")
41+
@JsonProperty("member_id")
42+
private String memberId;
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package bst.bobsoolting.post.command.domain.vo.response;
2+
3+
import bst.bobsoolting.post.command.domain.aggregate.Category;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.*;
7+
8+
import java.time.LocalDate;
9+
10+
@Getter
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
@Builder
14+
@ToString
15+
@Schema(name = "ResponseUpdatePostVO", description = "게시글 등록 정보")
16+
public class ResponseUpdatePostVO {
17+
@Schema(description = "게시글 ID", example = "1L")
18+
@JsonProperty("post_id")
19+
private Long postId;
20+
21+
@Schema(description = "카테고리 (FOOD, DRINK, MEETING)", example = "FOOD")
22+
private Category category;
23+
24+
@Schema(description = "제목", example = "저녁 드실 분! (수정)")
25+
private String title;
26+
27+
@Schema(description = "내용", example = "3월 16일에 저녁 드실 분 구합니다.")
28+
private String content;
29+
30+
@Schema(description = "최대 참가자 수", example = "7")
31+
@JsonProperty("max_participants")
32+
private Integer maxParticipants;
33+
34+
@Schema(description = "활동 날짜", example = "2025-03-16")
35+
private LocalDate date;
36+
37+
@Schema(description = "장소", example = "서울 강서구")
38+
private String location;
39+
40+
@Schema(description = "작성자 ID", example = "연월일 8글자 + UUID")
41+
@JsonProperty("member_id")
42+
private String memberId;
43+
}

0 commit comments

Comments
 (0)