@PostMapping("/todos/{todoId}/comments")
public ResponseEntity<CommentSaveResponse> saveComment(
@Auth AuthUser authUser,
@PathVariable long todoId,
@Valid @RequestBody CommentSaveRequest commentSaveRequest
) {
return ResponseEntity.ok(commentService.saveComment(authUser, todoId, commentSaveRequest));
}
@GetMapping("/todos/{todoId}/comments")
public ResponseEntity<List<CommentResponse>> getComments(@PathVariable long todoId) {
return ResponseEntity.ok(commentService.getComments(todoId));
}
@PostMapping("/todos/{todoId}/managers")
public ResponseEntity<ManagerSaveResponse> saveManager(
@Auth AuthUser authUser,
@PathVariable long todoId,
@Valid @RequestBody ManagerSaveRequest managerSaveRequest
) {
return ResponseEntity.ok(managerService.saveManager(authUser, todoId, managerSaveRequest));
}
@GetMapping("/todos/{todoId}/managers")
public ResponseEntity<List<ManagerResponse>> getMembers(@PathVariable long todoId) {
return ResponseEntity.ok(managerService.getManagers(todoId));
}
RESTful API 설계 원칙에 맞지 않는다.
리소스간 관계 표현이 비효율적이다.
comments, managers 가 todoId 의 하위 리소스처럼 보이는데
만약 comments, managers 가 다른 엔티티에도 속할 수 있다면,
엔드포인트가 일관되지 않을 수 있다.
@PostMapping("/comments")
public ResponseEntity<CommentSaveResponse> saveComment(
@Auth AuthUser authUser,
@RequestParam long todoId,
@Valid @RequestBody CommentSaveRequest commentSaveRequest
) {
return ResponseEntity.ok(commentService.saveComment(authUser, todoId, commentSaveRequest));
}
@GetMapping("/comments")
public ResponseEntity<List<CommentResponse>> getComments(@RequestParam long todoId) {
return ResponseEntity.ok(commentService.getComments(todoId));
}
@PostMapping("/managers")
public ResponseEntity<ManagerSaveResponse> saveManager(
@Auth AuthUser authUser,
@RequestParam long todoId,
@Valid @RequestBody ManagerSaveRequest managerSaveRequest
) {
return ResponseEntity.ok(managerService.saveManager(authUser, todoId, managerSaveRequest));
}
@GetMapping("/managers")
public ResponseEntity<List<ManagerResponse>> getMembers(@RequestParam long todoId) {
return ResponseEntity.ok(managerService.getManagers(todoId));
}
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SignupRequest {
@NotBlank @Email
private String email;
@NotBlank
private String password;
@NotBlank
private String userRole;
}
password 에 정규식 validation 이 없음.
개인정보가 쉽게 노출되는 등 보안이 위험할 수 있다.
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class SignupRequest {
@NotBlank @Email
private String email;
@NotBlank
@Pattern(regexp = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{8,}$", message = "비밀번호는 8자 이상이어야 하고, 숫자와 대문자를 포함해야 합니다.")
private String password;
@NotBlank
private String userRole;
}