diff --git a/doorip-api/src/main/java/org/doorip/trip/api/TodoApi.java b/doorip-api/src/main/java/org/doorip/trip/api/TodoApi.java index 0d213df..bdc83cc 100644 --- a/doorip-api/src/main/java/org/doorip/trip/api/TodoApi.java +++ b/doorip-api/src/main/java/org/doorip/trip/api/TodoApi.java @@ -102,6 +102,7 @@ ResponseEntity> getTripTodos(@Parameter(hidden = true) @UserId final Long userId, @PathVariable final Long tripId, @RequestParam final String category, + @Parameter(name = "progress", description = "complete/incomplete") @RequestParam final String progress); @Operation( diff --git a/doorip-api/src/main/java/org/doorip/trip/api/TripApi.java b/doorip-api/src/main/java/org/doorip/trip/api/TripApi.java new file mode 100644 index 0000000..ea7465c --- /dev/null +++ b/doorip-api/src/main/java/org/doorip/trip/api/TripApi.java @@ -0,0 +1,311 @@ +package org.doorip.trip.api; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.doorip.auth.UserId; +import org.doorip.common.BaseResponse; +import org.doorip.trip.dto.request.TripCreateRequest; +import org.doorip.trip.dto.request.TripEntryRequest; +import org.doorip.trip.dto.request.TripVerifyRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestParam; + +@Tag(name = "여행 관련 API") +@SecurityRequirement(name = "Authorization") +public interface TripApi { + @Operation( + summary = "여행 생성 API", + responses = { + @ApiResponse( + responseCode = "201", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "400", + description = "유효하지 않은 날짜 타입입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> createTrip(@Parameter(hidden = true) + @UserId final Long userId, + @RequestBody final TripCreateRequest request); + + @Operation( + summary = "여행 대시보드 전체 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "400", + description = "유효하지 않은 요청 파라미터 값입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> getTrips(@Parameter(hidden = true) + @UserId final Long userId, + @Parameter(name = "progress", description = "complete/incomplete") + @RequestParam final String progress); + + @Operation( + summary = "초대 코드 검증 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 여행입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> verifyCode(@RequestBody final TripVerifyRequest request); + + @Operation( + summary = "여행 입장 API", + responses = { + @ApiResponse( + responseCode = "201", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 여행입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> entryTrip(@PathVariable final Long tripId, + @Parameter(hidden = true) + @UserId final Long userId, + @RequestBody final TripEntryRequest request); + + @Operation( + summary = "여행 My TODO 상세 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 여행입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "해당 여행에 참여자로 존재하지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> getMyTodoDetail(@Parameter(hidden = true) + @UserId final Long userId, + @PathVariable final Long tripId); + + @Operation( + summary = "여행 Our TODO 상세 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 여행입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "해당 여행에 참여자로 존재하지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> getOurTodoDetail(@Parameter(hidden = true) + @UserId final Long userId, + @PathVariable final Long tripId); + + @Operation( + summary = "여행 친구 전체 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 여행입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "해당 여행에 참여자로 존재하지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> getParticipants(@Parameter(hidden = true) + @UserId final Long userId, + @PathVariable final Long tripId); +} diff --git a/doorip-api/src/main/java/org/doorip/trip/api/TripApiController.java b/doorip-api/src/main/java/org/doorip/trip/api/TripApiController.java index 8e8637d..5d61f35 100644 --- a/doorip-api/src/main/java/org/doorip/trip/api/TripApiController.java +++ b/doorip-api/src/main/java/org/doorip/trip/api/TripApiController.java @@ -18,11 +18,12 @@ @RequiredArgsConstructor @RequestMapping("/api/trips") @Controller -public class TripApiController { +public class TripApiController implements TripApi { private final TripService tripService; private final TripDetailService tripDetailService; @PostMapping + @Override public ResponseEntity> createTrip(@UserId final Long userId, @RequestBody final TripCreateRequest request) { final TripCreateResponse response = tripService.createTripAndParticipant(userId, request); @@ -30,6 +31,7 @@ public ResponseEntity> createTrip(@UserId final Long userId, } @GetMapping + @Override public ResponseEntity> getTrips(@UserId final Long userId, @RequestParam final String progress) { final TripGetResponse response = tripService.getTrips(userId, progress); @@ -37,12 +39,14 @@ public ResponseEntity> getTrips(@UserId final Long userId, } @PostMapping("/verify") - public ResponseEntity> verifyCode(@RequestBody TripVerifyRequest request) { + @Override + public ResponseEntity> verifyCode(@RequestBody final TripVerifyRequest request) { final TripResponse response = tripService.verifyCode(request); return ApiResponseUtil.success(SuccessMessage.OK, response); } @PostMapping("/{tripId}/entry") + @Override public ResponseEntity> entryTrip(@PathVariable final Long tripId, @UserId final Long userId, @RequestBody final TripEntryRequest request) { @@ -51,6 +55,7 @@ public ResponseEntity> entryTrip(@PathVariable final Long tripId } @GetMapping("/{tripId}/my") + @Override public ResponseEntity> getMyTodoDetail(@UserId final Long userId, @PathVariable final Long tripId) { final MyTodoResponse response = tripDetailService.getMyTodoDetail(userId, tripId); @@ -58,6 +63,7 @@ public ResponseEntity> getMyTodoDetail(@UserId final Long userId } @GetMapping("/{tripId}/our") + @Override public ResponseEntity> getOurTodoDetail(@UserId final Long userId, @PathVariable final Long tripId) { final OurTodoResponse response = tripDetailService.getOurTodoDetail(userId, tripId); @@ -65,6 +71,7 @@ public ResponseEntity> getOurTodoDetail(@UserId final Long userI } @GetMapping("/{tripId}/participants") + @Override public ResponseEntity> getParticipants(@UserId final Long userId, @PathVariable final Long tripId) { final TripParticipantGetResponse response = tripDetailService.getParticipants(userId, tripId); diff --git a/doorip-api/src/main/java/org/doorip/user/api/UserApi.java b/doorip-api/src/main/java/org/doorip/user/api/UserApi.java new file mode 100644 index 0000000..0125b4b --- /dev/null +++ b/doorip-api/src/main/java/org/doorip/user/api/UserApi.java @@ -0,0 +1,363 @@ +package org.doorip.user.api; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.doorip.auth.UserId; +import org.doorip.common.BaseResponse; +import org.doorip.user.dto.request.ResultUpdateRequest; +import org.doorip.user.dto.request.UserReissueRequest; +import org.doorip.user.dto.request.UserSignInRequest; +import org.doorip.user.dto.request.UserSignUpRequest; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; + +import static org.doorip.common.Constants.AUTHORIZATION; + +@Tag(name = "회원 관련 API") +public interface UserApi { + @Operation( + summary = "스플래쉬 분기 처리 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "유저의 성향 결과 값을 찾을 수 없습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> splash(@Parameter(hidden = true) + @UserId final Long userId); + + @Operation( + summary = "로그인 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "400", + description = "유효하지 않은 플랫폼 타입입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴티티 토큰의 형식이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴티티 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 로그인 중 퍼블릭 키 생성에 문제가 발생했습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 로그인 중 아이덴티티 토큰의 유효 기간이 만료되었습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴터티 토큰의 클레임 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "카카오 액세스 토큰의 정보를 조회하는 과정에서 오류가 발생하였습니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> signIn(@RequestHeader(AUTHORIZATION) final String token, + @RequestBody final UserSignInRequest request); + + @Operation( + summary = "회원가입 API", + responses = { + @ApiResponse( + responseCode = "201", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "400", + description = "유효하지 않은 플랫폼 타입입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴티티 토큰의 형식이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴티티 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 로그인 중 퍼블릭 키 생성에 문제가 발생했습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 로그인 중 아이덴티티 토큰의 유효 기간이 만료되었습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "애플 아이덴터티 토큰의 클레임 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "카카오 액세스 토큰의 정보를 조회하는 과정에서 오류가 발생하였습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "409", + description = "이미 존재하는 회입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> signUp(@RequestHeader(AUTHORIZATION) final String token, + @RequestBody final UserSignUpRequest request); + + @Operation( + security = @SecurityRequirement(name = "Authorization"), + summary = "로그아웃 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> signOut(@Parameter(hidden = true) + @UserId final Long userId); + + @Operation( + security = @SecurityRequirement(name = "Authorization"), + summary = "회원 탈퇴 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> withdraw(@Parameter(hidden = true) + @UserId final Long userId); + + @Operation( + summary = "JWT 재발급 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "리프레쉬 토큰을 찾을 수 없습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> reissue(@RequestHeader(AUTHORIZATION) final String refreshtoken, + @RequestBody final UserReissueRequest request); + + @Operation( + security = @SecurityRequirement(name = "Authorization"), + summary = "프로필 조회 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> getProfile(@Parameter(hidden = true) + @UserId final Long userId); + + @Operation( + security = @SecurityRequirement(name = "Authorization"), + summary = "프로필 성향 테스트 API", + responses = { + @ApiResponse( + responseCode = "200", + description = "요청이 성공했습니다."), + @ApiResponse( + responseCode = "400", + description = "잘못된 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "400", + description = "유효하지 않은 성향 입력 값입니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 형식이 올바르지 않습니다. Bearer 타입을 확인해 주세요.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰의 값이 올바르지 않습니다.", + content = @Content), + @ApiResponse( + responseCode = "401", + description = "액세스 토큰이 만료되었습니다. 재발급 받아주세요.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "존재하지 않는 회원입니다.", + content = @Content), + @ApiResponse( + responseCode = "404", + description = "대상을 찾을 수 없습니다.", + content = @Content), + @ApiResponse( + responseCode = "405", + description = "잘못된 HTTP method 요청입니다.", + content = @Content), + @ApiResponse( + responseCode = "500", + description = "서버 내부 오류입니다.", + content = @Content)}) + ResponseEntity> updateResult(@Parameter(hidden = true) + @UserId final Long userId, + @RequestBody final ResultUpdateRequest request); +} diff --git a/doorip-api/src/main/java/org/doorip/user/api/UserApiController.java b/doorip-api/src/main/java/org/doorip/user/api/UserApiController.java index 29347b6..d573ed6 100644 --- a/doorip-api/src/main/java/org/doorip/user/api/UserApiController.java +++ b/doorip-api/src/main/java/org/doorip/user/api/UserApiController.java @@ -22,16 +22,18 @@ @RequiredArgsConstructor @RequestMapping("/api/users") @Controller -public class UserApiController { +public class UserApiController implements UserApi { private final UserService userService; @GetMapping("/splash") + @Override public ResponseEntity> splash(@UserId final Long userId) { userService.splash(userId); return ApiResponseUtil.success(SuccessMessage.OK); } @PostMapping("/signin") + @Override public ResponseEntity> signIn(@RequestHeader(AUTHORIZATION) final String token, @RequestBody final UserSignInRequest request) { final UserSignInResponse response = userService.signIn(token, request); @@ -39,6 +41,7 @@ public ResponseEntity> signIn(@RequestHeader(AUTHORIZATION) fina } @PostMapping("/signup") + @Override public ResponseEntity> signUp(@RequestHeader(AUTHORIZATION) final String token, @RequestBody final UserSignUpRequest request) { final UserSignUpResponse response = userService.signUp(token, request); @@ -46,18 +49,21 @@ public ResponseEntity> signUp(@RequestHeader(AUTHORIZATION) fina } @PatchMapping("/signout") + @Override public ResponseEntity> signOut(@UserId final Long userId) { userService.signOut(userId); return ApiResponseUtil.success(SuccessMessage.OK); } @DeleteMapping("/withdraw") + @Override public ResponseEntity> withdraw(@UserId final Long userId) { userService.withdraw(userId); return ApiResponseUtil.success(SuccessMessage.OK); } @PostMapping("/reissue") + @Override public ResponseEntity> reissue(@RequestHeader(AUTHORIZATION) final String refreshtoken, @RequestBody final UserReissueRequest request) { final UserSignUpResponse response = userService.reissue(refreshtoken, request); @@ -65,12 +71,14 @@ public ResponseEntity> reissue(@RequestHeader(AUTHORIZATION) fin } @GetMapping("/profile") + @Override public ResponseEntity> getProfile(@UserId final Long userId) { final ProfileGetResponse response = userService.getProfile(userId); return ApiResponseUtil.success(SuccessMessage.OK, response); } @PatchMapping("/test") + @Override public ResponseEntity> updateResult(@UserId final Long userId, @RequestBody final ResultUpdateRequest request) { userService.updateResult(userId, request);