-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPairRoomController.java
134 lines (110 loc) · 5.61 KB
/
PairRoomController.java
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package site.coduo.pairroom.controller;
import static site.coduo.common.config.web.filter.SignInCookieFilter.SIGN_IN_COOKIE_NAME;
import java.net.URI;
import java.util.List;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import site.coduo.pairroom.controller.docs.PairRoomDocs;
import site.coduo.pairroom.controller.dto.request.ExistMemberInPairRoomResponse;
import site.coduo.pairroom.service.PairRoomService;
import site.coduo.pairroom.service.dto.PairRoomCreateRequest;
import site.coduo.pairroom.service.dto.PairRoomCreateResponse;
import site.coduo.pairroom.service.dto.PairRoomExistByEasyAccessCodeResponse;
import site.coduo.pairroom.service.dto.PairRoomExistResponse;
import site.coduo.pairroom.service.dto.PairRoomMemberResponse;
import site.coduo.pairroom.service.dto.PairRoomNameUpdateRequest;
import site.coduo.pairroom.service.dto.PairRoomReadRequest;
import site.coduo.pairroom.service.dto.PairRoomReadResponse;
import site.coduo.pairroom.service.dto.PairRoomStatusUpdateRequest;
@Slf4j
@RequiredArgsConstructor
@RestController
public class PairRoomController implements PairRoomDocs {
private final PairRoomService pairRoomService;
@PostMapping("/pair-room")
public ResponseEntity<PairRoomCreateResponse> createPairRoom(
@Valid @RequestBody final PairRoomCreateRequest request,
@CookieValue(value = SIGN_IN_COOKIE_NAME, required = false) final String token
) {
final String accessCode = pairRoomService.savePairRoom(request, token);
final PairRoomCreateResponse response = new PairRoomCreateResponse(accessCode);
return ResponseEntity.created(URI.create("/"))
.body(response);
}
@PatchMapping("/pair-room/{accessCode}/pair-swap")
public ResponseEntity<Void> updatePairRole(@PathVariable("accessCode") final String accessCode) {
pairRoomService.updateNavigatorWithDriver(accessCode);
return ResponseEntity.noContent()
.build();
}
@PatchMapping("/pair-room/{accessCode}/status")
public ResponseEntity<Void> updatePairRoomStatus(
@PathVariable("accessCode") final String accessCode,
@Valid @RequestBody final PairRoomStatusUpdateRequest request
) {
pairRoomService.updatePairRoomStatus(accessCode, request.status());
return ResponseEntity.noContent()
.build();
}
@GetMapping("/pair-room/{accessCode}")
public ResponseEntity<PairRoomReadResponse> getPairRoom(
@Valid @PathVariable("accessCode") final PairRoomReadRequest request
) {
final PairRoomReadResponse response = pairRoomService.findPairRoomAndTimer(request.accessCode());
return ResponseEntity.ok(response);
}
@GetMapping("/my-pair-rooms")
public ResponseEntity<List<PairRoomMemberResponse>> getPairRooms(
@CookieValue(SIGN_IN_COOKIE_NAME) final String token
) {
final List<PairRoomMemberResponse> pairRooms = pairRoomService.findPairRooms(token);
return ResponseEntity.ok()
.body(pairRooms);
}
@GetMapping("/pair-room/exists")
public ResponseEntity<PairRoomExistResponse> pairRoomExists(@RequestParam("access_code") final String accessCode) {
final PairRoomExistResponse response = new PairRoomExistResponse(
pairRoomService.existsByAccessCode(accessCode));
return ResponseEntity.ok(response);
}
@GetMapping("/pair-room/exists/easy")
public ResponseEntity<PairRoomExistByEasyAccessCodeResponse> pairRoomExistsByEasyAccessCode(
@RequestParam("easy_access_code") final String easyAccessCode) {
final PairRoomExistByEasyAccessCodeResponse response = pairRoomService.existsByEasyAccessCode(easyAccessCode);
return ResponseEntity.ok(response);
}
@DeleteMapping("/pair-room/{accessCode}")
public ResponseEntity<Void> deletePairRoom(@PathVariable("accessCode") final String accessCode) {
pairRoomService.deletePairRoom(accessCode);
return ResponseEntity.noContent().build();
}
@GetMapping("/member/{accessCode}/exists")
public ResponseEntity<ExistMemberInPairRoomResponse> existMemberInPairRoom(
@CookieValue(SIGN_IN_COOKIE_NAME) final String credentialToken,
@PathVariable("accessCode") final String pairRoomAccessCode
) {
final boolean existMemberInPairRoom = pairRoomService.existMemberInPairRoom(credentialToken,
pairRoomAccessCode);
final ExistMemberInPairRoomResponse response = new ExistMemberInPairRoomResponse(existMemberInPairRoom);
return ResponseEntity.ok(response);
}
@PatchMapping("/pair-room/{accessCode}/room-name")
public ResponseEntity<Void> updatePairRoomName(
@PathVariable("accessCode") final String accessCode,
@Valid @RequestBody PairRoomNameUpdateRequest pairRoomNameUpdateRequest) {
pairRoomService.updatePairRoomName(accessCode, pairRoomNameUpdateRequest.roomName());
return ResponseEntity.noContent()
.build();
}
}