-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPostCommandController.java
More file actions
81 lines (65 loc) · 4.24 KB
/
PostCommandController.java
File metadata and controls
81 lines (65 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package bst.bobsoolting.post.command.application.controller;
import bst.bobsoolting.member.query.service.MemberQueryService;
import bst.bobsoolting.post.command.application.controller.docs.PostCommandControllerDocs;
import bst.bobsoolting.post.command.application.dto.PostDTO;
import bst.bobsoolting.post.command.application.mapper.PostConverter;
import bst.bobsoolting.post.command.application.service.PostCommandService;
import bst.bobsoolting.post.command.domain.vo.request.RequestCreatePostVO;
import bst.bobsoolting.post.command.domain.vo.request.RequestUpdatePostVO;
import bst.bobsoolting.post.command.domain.vo.response.ResponseCreatePostVO;
import bst.bobsoolting.post.command.domain.vo.response.ResponseUpdatePostVO;
import bst.bobsoolting.util.SecurityUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.HttpHeaders;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequiredArgsConstructor
public class PostCommandController implements PostCommandControllerDocs {
private final PostCommandService postCommandService;
private final PostConverter postConverter;
private final MemberQueryService memberQueryService;
private final SecurityUtil securityUtil;
@PostMapping
public ResponseEntity<?> createPost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @RequestBody RequestCreatePostVO request) {
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(Collections.singletonMap("message", "Unauthorized access"));
PostDTO created = postCommandService.createPost(request, memberId);
ResponseCreatePostVO response = postConverter.fromDTOToCreateVO(created);
return ResponseEntity.ok(response);
}
@PutMapping("/{postId}")
public ResponseEntity<?> updatePost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @PathVariable Long postId, @RequestBody RequestUpdatePostVO request) {
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(Collections.singletonMap("message", "Unauthorized access"));
PostDTO updated = postCommandService.updatePost(memberId, postId, request);
ResponseUpdatePostVO response = postConverter.fromDTOToUpdateVO(updated);
return ResponseEntity.ok(response);
}
@PatchMapping("/{postId}/recruit-status")
public ResponseEntity<Map<String, String>> updateRecruitmentStatus(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @PathVariable("postId") Long postId) {
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(Collections.singletonMap("message", "Unauthorized access"));
postCommandService.updateRecruitmentStatus(memberId, postId);
Map<String, String> response = new HashMap<>();
response.put("message", "모집 상태가 변경되었습니다.");
return ResponseEntity.ok(response);
}
@PatchMapping("/{postId}")
public ResponseEntity<Map<String, String>> softDeletePost(@RequestHeader(HttpHeaders.AUTHORIZATION) String token, @PathVariable("postId") Long postId) {
String kakaoId = securityUtil.getKakaoIdFromToken(token.replace("Bearer ", ""));
String memberId = memberQueryService.getMemberIdByKakaoId(kakaoId);
if (memberId == null) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(Collections.singletonMap("message", "Unauthorized access"));
postCommandService.deletePost(memberId, postId);
Map<String, String> response = new HashMap<>();
response.put("message", "해당 게시글이 삭제되었습니다.");
return ResponseEntity.ok(response);
}
}