From ebb8280c8d6bbcd96e94bb310fbc5c403ad7e5ae Mon Sep 17 00:00:00 2001 From: jaeyeon Date: Thu, 18 Dec 2025 18:50:19 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=97=83=EF=B8=8F=20=20Comment:=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EC=84=A0=EC=8A=A4=20=ED=97=A4=EB=8D=94=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../animalmission/controller/AnimalMissionController.java | 3 +++ .../com/pbl/insaroad/domain/animalmission/data/Crane.java | 3 +++ .../com/pbl/insaroad/domain/animalmission/data/Haetae.java | 3 +++ .../com/pbl/insaroad/domain/animalmission/data/Magpie.java | 3 +++ .../com/pbl/insaroad/domain/animalmission/data/Tiger.java | 3 +++ .../com/pbl/insaroad/domain/animalmission/data/Turtle.java | 3 +++ .../animalmission/dto/request/AnimalMissionSubmitRequest.java | 3 +++ .../animalmission/dto/response/DescriptionResponse.java | 3 +++ .../domain/animalmission/dto/response/ResultTextSegment.java | 3 +++ .../pbl/insaroad/domain/animalmission/entity/AnimalType.java | 3 +++ .../animalmission/exception/AnimalMissionErrorCode.java | 4 ++++ .../domain/animalmission/service/AnimalMissionService.java | 3 +++ 12 files changed, 37 insertions(+) diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/controller/AnimalMissionController.java b/src/main/java/com/pbl/insaroad/domain/animalmission/controller/AnimalMissionController.java index b283200..abc9572 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/controller/AnimalMissionController.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/controller/AnimalMissionController.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.controller; import jakarta.validation.Valid; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Crane.java b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Crane.java index d284a4e..9c3061b 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Crane.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Crane.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.data; import java.util.Arrays; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Haetae.java b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Haetae.java index 5c98137..5edd0f6 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Haetae.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Haetae.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.data; import java.util.Arrays; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Magpie.java b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Magpie.java index 02ba9f7..830d5bb 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Magpie.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Magpie.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.data; import java.util.Arrays; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Tiger.java b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Tiger.java index 32a7da5..ac51eb6 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Tiger.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Tiger.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.data; import java.util.Arrays; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Turtle.java b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Turtle.java index c12cd08..cc99b5f 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/data/Turtle.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/data/Turtle.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.data; import java.util.Arrays; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java index 914314f..90b8c92 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.dto.request; import java.util.List; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/DescriptionResponse.java b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/DescriptionResponse.java index 03a1bee..a04d65a 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/DescriptionResponse.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/DescriptionResponse.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.dto.response; import java.util.List; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/ResultTextSegment.java b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/ResultTextSegment.java index ec6fba5..36945fb 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/ResultTextSegment.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/response/ResultTextSegment.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.dto.response; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/entity/AnimalType.java b/src/main/java/com/pbl/insaroad/domain/animalmission/entity/AnimalType.java index 297510e..60d999a 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/entity/AnimalType.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/entity/AnimalType.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.entity; import lombok.Getter; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java b/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java index 4906d59..4a147da 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java @@ -1,6 +1,10 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.exception; import org.springframework.http.HttpStatus; + import com.pbl.insaroad.global.exception.model.BaseErrorCode; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java b/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java index 7f1cbcc..f4bd7ae 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java @@ -1,3 +1,6 @@ +/* + * Copyright (c) SKU PBL Team4 + */ package com.pbl.insaroad.domain.animalmission.service; import java.util.*; From d040aa96bfedb529210f779ad3a3460ed6682f08 Mon Sep 17 00:00:00 2001 From: jaeyeon Date: Thu, 18 Dec 2025 19:03:57 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9C=A8=20Feat:=20=EB=8F=99=EB=AC=BC=20?= =?UTF-8?q?=EB=AF=B8=EC=85=98=20userCode=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/AnimalMissionSubmitRequest.java | 5 ++++ .../exception/AnimalMissionErrorCode.java | 2 ++ .../service/AnimalMissionService.java | 24 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java index 90b8c92..e1bd5ee 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/dto/request/AnimalMissionSubmitRequest.java @@ -5,6 +5,7 @@ import java.util.List; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; @@ -21,6 +22,10 @@ @Schema(description = "동물 미션 테스트 결과 제출 요청") public class AnimalMissionSubmitRequest { + @NotBlank(message = "사용자 코드는 필수입니다.") + @Schema(description = "사용자 코드 (3자리)", example = "123") + private String userCode; + @NotNull @Size(min = 2, max = 2, message = "문양은 2개를 선택해야 합니다.") @Schema(description = "문양 선택 (2개)", example = "[\"TIGER\", \"CRANE\"]") private List patternAnimals; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java b/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java index 4a147da..e61a0f5 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/exception/AnimalMissionErrorCode.java @@ -14,6 +14,8 @@ @AllArgsConstructor public enum AnimalMissionErrorCode implements BaseErrorCode { DUPLICATE_PATTERN_ANIMALS("ANIMAL_4001", "patternAnimals에 중복된 동물이 있습니다.", HttpStatus.BAD_REQUEST), + USER_NOT_FOUND("ANIMAL_4002", "사용자를 찾을 수 없습니다.", HttpStatus.NOT_FOUND), + USER_NOT_STAGE_3("ANIMAL_4003", "사용자의 스테이지가 3이 아닙니다.", HttpStatus.BAD_REQUEST), ; private final String code; diff --git a/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java b/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java index f4bd7ae..12017da 100644 --- a/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java +++ b/src/main/java/com/pbl/insaroad/domain/animalmission/service/AnimalMissionService.java @@ -6,6 +6,7 @@ import java.util.*; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.pbl.insaroad.domain.animalmission.data.Crane; import com.pbl.insaroad.domain.animalmission.data.Haetae; @@ -16,14 +17,21 @@ import com.pbl.insaroad.domain.animalmission.dto.response.AnimalResultResponse; import com.pbl.insaroad.domain.animalmission.entity.AnimalType; import com.pbl.insaroad.domain.animalmission.exception.AnimalMissionErrorCode; +import com.pbl.insaroad.domain.user.entity.User; +import com.pbl.insaroad.domain.user.repository.UserRepository; import com.pbl.insaroad.global.exception.CustomException; +import lombok.RequiredArgsConstructor; + @Service +@RequiredArgsConstructor public class AnimalMissionService { // 동물 타입별 결과 응답을 저장하는 Map private static final Map ANIMAL_RESULTS = new HashMap<>(); + private final UserRepository userRepository; + static { ANIMAL_RESULTS.put(AnimalType.TIGER, Tiger.CONTENT); ANIMAL_RESULTS.put(AnimalType.MAGPIE, Magpie.CONTENT); @@ -33,10 +41,22 @@ public class AnimalMissionService { } // 동물 미션 제출 처리 메서드 + @Transactional public AnimalResultResponse submitAnimalMission(AnimalMissionSubmitRequest request) { // 0. patternAnimals 중복 검증 validateNoDuplicatePatternAnimals(request.getPatternAnimals()); + // 사용자 조회 + User user = + userRepository + .findByCode(request.getUserCode()) + .orElseThrow(() -> new CustomException(AnimalMissionErrorCode.USER_NOT_FOUND)); + + // 사용자 스테이지 검증 + if (user.getStage() != 3) { + throw new CustomException(AnimalMissionErrorCode.USER_NOT_STAGE_3); + } + // 1. 동물별 점수 집계 Map scoreMap = calculateScores(request); @@ -60,6 +80,10 @@ public AnimalResultResponse submitAnimalMission(AnimalMissionSubmitRequest reque .orElse(request.getPaintingAnimal()); } + // 스테이지가 3이면 미션 완료 처리 + user.completeMission(); + userRepository.save(user); + return ANIMAL_RESULTS.get(resultAnimal); }