Skip to content

Commit

Permalink
[FEAT] 특정 업적 상세 정보 조회 API 개발 (#314)
Browse files Browse the repository at this point in the history
  • Loading branch information
JIN-076 committed Mar 21, 2024
1 parent 07fd94b commit 2ebfa25
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.oeid.mogakgo.common.swagger.template;

import io.oeid.mogakgo.core.properties.swagger.error.SwaggerAchievementErrorExamples;
import io.oeid.mogakgo.core.properties.swagger.error.SwaggerUserAchievementErrorExamples;
import io.oeid.mogakgo.core.properties.swagger.error.SwaggerUserErrorExamples;
import io.oeid.mogakgo.domain.achievement.presentation.dto.res.AchievementInfoAPIRes;
import io.oeid.mogakgo.domain.achievement.presentation.dto.res.UserAchievementDetailAPIRes;
import io.oeid.mogakgo.exception.dto.ErrorResponse;
import io.swagger.v3.oas.annotations.Operation;
Expand Down Expand Up @@ -38,4 +40,18 @@ ResponseEntity<List<UserAchievementDetailAPIRes>> getUserAchievementDetail(
@Parameter(hidden = true) Long userId,
@Parameter(description = "업적을 조회하는 사용자 ID", required = true) Long id
);

@Operation(summary = "업적 상세 조회", description = "특정 업적에 대한 상세 정보를 조회할 때 사용하는 API")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "업적 상세 조회 성공"),
@ApiResponse(responseCode = "404", description = "요청한 데이터가 존재하지 않음",
content = @Content(
mediaType = "application/json",
schema = @Schema(implementation = ErrorResponse.class),
examples = @ExampleObject(name = "E130301", value = SwaggerAchievementErrorExamples.ACHIEVEMENT_NOT_FOUND)
))
})
ResponseEntity<AchievementInfoAPIRes> getAchievementById(
@Parameter(description = "조회하려는 업적 ID", required = true) Long achievementId
);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.oeid.mogakgo.domain.achievement.application;

import static io.oeid.mogakgo.exception.code.ErrorCode403.ACHIEVEMENT_FORBIDDEN_OPERATION;
import static io.oeid.mogakgo.exception.code.ErrorCode404.ACHIEVEMENT_NOT_FOUND;

import io.oeid.mogakgo.domain.achievement.application.dto.res.UserAchievementInfoRes;
import io.oeid.mogakgo.domain.achievement.domain.entity.Achievement;
Expand Down Expand Up @@ -36,6 +37,11 @@ public class AchievementService {
private final UserActivityJpaRepository userActivityRepository;
private final AchievementFacadeService achievementFacadeService;

public Achievement getById(Long achievementId) {
return achievementRepository.findById(achievementId)
.orElseThrow(() -> new AchievementException(ACHIEVEMENT_NOT_FOUND));
}

public List<UserAchievementInfoRes> getUserAchievementInfo(Long userId, Long id) {
User user = validateToken(userId);
validateUser(user, id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.oeid.mogakgo.common.swagger.template.AchievementSwagger;
import io.oeid.mogakgo.domain.achievement.application.AchievementService;
import io.oeid.mogakgo.domain.achievement.application.dto.res.UserAchievementInfoRes;
import io.oeid.mogakgo.domain.achievement.presentation.dto.res.AchievementInfoAPIRes;
import io.oeid.mogakgo.domain.achievement.presentation.dto.res.UserAchievementDetailAPIRes;
import java.util.List;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -32,4 +33,11 @@ public ResponseEntity<List<UserAchievementDetailAPIRes>> getUserAchievementDetai
);
}

@GetMapping("/{id}/info")
public ResponseEntity<AchievementInfoAPIRes> getAchievementById(@PathVariable Long id) {
return ResponseEntity.ok().body(
AchievementInfoAPIRes.from(achievementService.getById(id))
);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package io.oeid.mogakgo.domain.achievement.presentation.dto.res;

import io.oeid.mogakgo.domain.achievement.domain.entity.Achievement;
import io.oeid.mogakgo.domain.achievement.domain.entity.enums.RequirementType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Schema(description = "업적 상세 정보 조회 응답 DTO")
@Getter
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class AchievementInfoAPIRes {

@Schema(description = "조회할 업적 ID")
private final Long achievementId;

@Schema(description = "조회할 업적 타이틀")
private final String title;

@Schema(description = "조회할 업적 이미지 Url")
private final String imgUrl;

@Schema(description = "조회할 업적 상세 설명")
private final String description;

@Schema(description = "조회할 업적 타입")
private final RequirementType requirementType;

@Schema(description = "업적 달성을 위해 만족해야 하는 값")
private final Integer requirementValue;

public static AchievementInfoAPIRes from(Achievement achievement) {
return new AchievementInfoAPIRes(
achievement.getId(),
achievement.getTitle(),
achievement.getImgUrl(),
achievement.getDescription(),
achievement.getRequirementType(),
achievement.getRequirementValue()
);
}

}

0 comments on commit 2ebfa25

Please sign in to comment.