Skip to content

Commit

Permalink
Merge pull request #80 from Team-HMH/feat/#67-swagger-challenge-api
Browse files Browse the repository at this point in the history
feat - 챌린지 관련 컨트롤러들 swagger 연결
  • Loading branch information
jumining authored Jan 18, 2024
2 parents a232e91 + 16971af commit 4bd13c3
Show file tree
Hide file tree
Showing 12 changed files with 272 additions and 86 deletions.
57 changes: 57 additions & 0 deletions src/main/java/sopt/org/HMH/domain/app/controller/AppApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package sopt.org.HMH.domain.app.controller;

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.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import sopt.org.HMH.domain.app.dto.request.AppArrayGoalTimeRequest;
import sopt.org.HMH.domain.app.dto.request.AppDeleteRequest;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.BaseResponse;

@Tag(name = "스크린타임 앱 관련 API")
@SecurityRequirement(name = "Authorization")
public interface AppApi {
@Operation(
summary = "스크린타임 제한 앱 추가 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "앱이 성공적으로 추가되었습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<?>> orderAddApp(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppArrayGoalTimeRequest request);

@Operation(
summary = "스크린타임 제한 앱 삭제 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "앱이 성공적으로 삭제되었습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<?>> orderRemoveApp(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppDeleteRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,39 +13,37 @@
import sopt.org.HMH.domain.app.dto.request.AppDeleteRequest;
import sopt.org.HMH.domain.app.service.AppService;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.ApiResponse;
import sopt.org.HMH.global.common.response.BaseResponse;
import sopt.org.HMH.global.common.response.EmptyJsonResponse;

import java.security.Principal;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/app")
public class AppController {
public class AppController implements AppApi {

private final AppService appService;

@PostMapping
public ResponseEntity<ApiResponse<?>> orderAddApp(
public ResponseEntity<BaseResponse<?>> orderAddApp(
@UserId final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppArrayGoalTimeRequest request
) {
appService.addAppsAndUpdateRemainingDailyChallenge(userId, request.apps(), os);
return ResponseEntity
.status(AppSuccess.ADD_APP_SUCCESS.getHttpStatus())
.body(ApiResponse.success(AppSuccess.ADD_APP_SUCCESS, new EmptyJsonResponse()));
.body(BaseResponse.success(AppSuccess.ADD_APP_SUCCESS, new EmptyJsonResponse()));
}

@DeleteMapping
public ResponseEntity<ApiResponse<?>> orderRemoveApp(
public ResponseEntity<BaseResponse<?>> orderRemoveApp(
@UserId final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppDeleteRequest request
) {
appService.removeAppAndUpdateRemainingDailyChallenge(userId, request, os);
return ResponseEntity
.status(AppSuccess.DELETE_APP_SUCCESS.getHttpStatus())
.body(ApiResponse.success(AppSuccess.DELETE_APP_SUCCESS, new EmptyJsonResponse()));
.body(BaseResponse.success(AppSuccess.DELETE_APP_SUCCESS, new EmptyJsonResponse()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package sopt.org.HMH.domain.challenge.controller;

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.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import sopt.org.HMH.domain.challenge.dto.request.ChallengeRequest;
import sopt.org.HMH.domain.challenge.dto.response.ChallengeResponse;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.BaseResponse;

@Tag(name = "챌린지 관련 API")
@SecurityRequirement(name = "Authorization")
public interface ChallengeApi {
@Operation(
summary = "챌린지가 끝난 후 새 챌린지 생성하는 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "챌린지가 성공적으로 추가되었습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<?>> orderAddChallenge(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final ChallengeRequest request);

@Operation(
summary = "달성현황뷰 챌린지 정보를 불러오는 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "챌린지 정보 조회에 성공했습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<ChallengeResponse>> orderGetChallenge(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os);
}

Original file line number Diff line number Diff line change
Expand Up @@ -13,36 +13,36 @@
import sopt.org.HMH.domain.challenge.dto.response.ChallengeResponse;
import sopt.org.HMH.domain.challenge.service.ChallengeService;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.ApiResponse;
import sopt.org.HMH.global.common.response.BaseResponse;
import sopt.org.HMH.global.common.response.EmptyJsonResponse;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/challenge")
public class ChallengeController {
public class ChallengeController implements ChallengeApi {

private final ChallengeService challengeService;

@PostMapping
public ResponseEntity<ApiResponse<?>> orderAddChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final ChallengeRequest request) {
public ResponseEntity<BaseResponse<?>> orderAddChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final ChallengeRequest request) {
challengeService.updateChallengeForPeriodWithInfo(
challengeService.addChallenge(userId, request.period(), request.goalTime()),
challengeService.getLastApps(userId),
os);

return ResponseEntity
.status(ChallengeSuccess.ADD_CHALLENGE_SUCCESS.getHttpStatus())
.body(ApiResponse.success(ChallengeSuccess.ADD_CHALLENGE_SUCCESS, new EmptyJsonResponse()));
.body(BaseResponse.success(ChallengeSuccess.ADD_CHALLENGE_SUCCESS, new EmptyJsonResponse()));
}

@GetMapping
public ResponseEntity<ApiResponse<ChallengeResponse>> orderGetChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os) {
public ResponseEntity<BaseResponse<ChallengeResponse>> orderGetChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os) {
return ResponseEntity
.status(ChallengeSuccess.GET_CHALLENGE_SUCCESS.getHttpStatus())
.body(ApiResponse.success(ChallengeSuccess.GET_CHALLENGE_SUCCESS,
.body(BaseResponse.success(ChallengeSuccess.GET_CHALLENGE_SUCCESS,
challengeService.getChallenge(userId, os)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package sopt.org.HMH.domain.dailychallenge.controller;

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.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import sopt.org.HMH.domain.app.dto.request.AppArrayUsageTimeRequest;
import sopt.org.HMH.domain.dailychallenge.dto.response.DailyChallengeResponse;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.BaseResponse;

@Tag(name = "일별챌린지 관련 API")
@SecurityRequirement(name = "Authorization")
public interface DailyChallengeApi {
@Operation(
summary = "홈뷰 일별 챌린지 정보 조회하는 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "일별 챌린지 정보 조회에 성공했습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<DailyChallengeResponse>> orderDetailDailyChallenge(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os);

@Operation(
summary = "사용시간과 함께 일별챌린지 정보 업데이트 요청하는 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "일별 챌린지 정보 업데이트에 성공했습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<?>> orderModifyDailyChallenge(
@UserId @Parameter(hidden = true) final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppArrayUsageTimeRequest request);

@Operation(
summary = "스크린타임 연장 시 챌린지 실패 처리하는 API",
responses = {
@ApiResponse(
responseCode = "200",
description = "챌린지 실패 요청 성공했습니다."),
@ApiResponse(
responseCode = "400",
description = "잘못된 요청입니다.",
content = @Content),
@ApiResponse(
responseCode = "500",
description = "서버 내부 오류입니다.",
content = @Content)})
ResponseEntity<BaseResponse<?>> orderModifyDailyChallengeStatusFailure(
@UserId @Parameter(hidden = true) final Long userId);
}

Original file line number Diff line number Diff line change
Expand Up @@ -13,42 +13,42 @@
import sopt.org.HMH.domain.dailychallenge.dto.response.DailyChallengeResponse;
import sopt.org.HMH.domain.dailychallenge.service.DailyChallengeService;
import sopt.org.HMH.global.auth.UserId;
import sopt.org.HMH.global.common.response.ApiResponse;
import sopt.org.HMH.global.common.response.BaseResponse;
import sopt.org.HMH.global.common.response.EmptyJsonResponse;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/dailychallenge")
public class DailyChallengeController {
public class DailyChallengeController implements DailyChallengeApi {

private final DailyChallengeService dailyChallengeService;

@GetMapping
public ResponseEntity<ApiResponse<DailyChallengeResponse>> orderDetailDailyChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os) {
public ResponseEntity<BaseResponse<DailyChallengeResponse>> orderDetailDailyChallenge(@UserId final Long userId,
@RequestHeader("OS") final String os) {
return ResponseEntity
.status(DailyChallengeSuccess.GET_DAILY_CHALLENGE_SUCCESS.getHttpStatus())
.body(ApiResponse.success(DailyChallengeSuccess.GET_DAILY_CHALLENGE_SUCCESS,
.body(BaseResponse.success(DailyChallengeSuccess.GET_DAILY_CHALLENGE_SUCCESS,
dailyChallengeService.getDailyChallenge(userId, os)));
}

@PatchMapping
public ResponseEntity<ApiResponse<?>> orderModifyDailyChallenge(
public ResponseEntity<BaseResponse<?>> orderModifyDailyChallenge(
@UserId final Long userId,
@RequestHeader("OS") final String os,
@RequestBody final AppArrayUsageTimeRequest request
) {
dailyChallengeService.modifyDailyChallengeStatus(userId, request.apps(), os);
return ResponseEntity
.status(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_SUCCESS.getHttpStatus())
.body(ApiResponse.success(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_SUCCESS, new EmptyJsonResponse()));
.body(BaseResponse.success(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_SUCCESS, new EmptyJsonResponse()));
}

@PatchMapping("/failure")
public ResponseEntity<ApiResponse<?>> orderModifyDailyChallengeStatusFailure(@UserId final Long userId) {
public ResponseEntity<BaseResponse<?>> orderModifyDailyChallengeStatusFailure(@UserId final Long userId) {
dailyChallengeService.modifyDailyChallengeStatusFailure(userId);
return ResponseEntity
.status(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_FAILURE_SUCCESS.getHttpStatus())
.body(ApiResponse.success(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_FAILURE_SUCCESS, new EmptyJsonResponse()));
.body(BaseResponse.success(DailyChallengeSuccess.MODIFY_DAILY_CHALLENGE_STATUS_FAILURE_SUCCESS, new EmptyJsonResponse()));
}
}
Loading

0 comments on commit 4bd13c3

Please sign in to comment.