diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/converter/StoreConverter.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/converter/StoreConverter.java" index a0f4834..1b51bcd 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/converter/StoreConverter.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/converter/StoreConverter.java" @@ -1,5 +1,6 @@ package com.umc.demo.converter; +import com.umc.demo.domain.Mission; import com.umc.demo.domain.Review; import com.umc.demo.web.dto.StoreRequestDTO; import com.umc.demo.web.dto.StoreResponseDTO; @@ -21,4 +22,19 @@ public static StoreResponseDTO.CreateReviewResultDTO toCreateReviewResultDTO(Rev .createdAt(LocalDateTime.now()) .build(); } + + public static Mission toMission(StoreRequestDTO.MissionDTO request){ + return Mission.builder() + .reward(request.getReward()) + .deadline(request.getDeadline()) + .missionSpec(request.getMissionSpec()) + .build(); + } + + public static StoreResponseDTO.CreateMissionResultDTO toCreateReviewResultDTO(Mission mission){ + return StoreResponseDTO.CreateMissionResultDTO.builder() + .missionId(mission.getId()) + .createdAt(LocalDateTime.now()) + .build(); + } } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/domain/Mission.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/domain/Mission.java" index 92d8c4f..6c779d6 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/domain/Mission.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/domain/Mission.java" @@ -45,4 +45,11 @@ public class Mission extends BaseEntity { @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL) private List memberMissionList = new ArrayList<>(); + + public void setStore(Store store){ + if (this.store != null) + store.getReviewList().remove(this); + this.store = store; + store.getMissionList().add(this); + } } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/repository/MissionRepository.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/repository/MissionRepository.java" new file mode 100644 index 0000000..9441572 --- /dev/null +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/repository/MissionRepository.java" @@ -0,0 +1,7 @@ +package com.umc.demo.repository; + +import com.umc.demo.domain.Mission; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MissionRepository extends JpaRepository { +} diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandService.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandService.java" index a9d8544..597f38c 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandService.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandService.java" @@ -1,9 +1,11 @@ package com.umc.demo.service.StoreService; +import com.umc.demo.domain.Mission; import com.umc.demo.domain.Review; import com.umc.demo.web.dto.StoreRequestDTO; public interface StoreCommandService { Review createReview(Long memberId, Long storeId, StoreRequestDTO.ReveiwDTO request); + Mission createMission(Long storeId, StoreRequestDTO.MissionDTO request); } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandServiceImpl.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandServiceImpl.java" index 649b6ce..4d51ca5 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandServiceImpl.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/service/StoreService/StoreCommandServiceImpl.java" @@ -1,8 +1,10 @@ package com.umc.demo.service.StoreService; import com.umc.demo.converter.StoreConverter; +import com.umc.demo.domain.Mission; import com.umc.demo.domain.Review; import com.umc.demo.repository.MemberRepository; +import com.umc.demo.repository.MissionRepository; import com.umc.demo.repository.ReviewRepository; import com.umc.demo.repository.StoreRepository; import com.umc.demo.web.dto.StoreRequestDTO; @@ -20,6 +22,7 @@ public class StoreCommandServiceImpl implements StoreCommandService{ private final MemberRepository memberRepository; private final StoreRepository storeRepository; + private final MissionRepository missionRepository; @Override public Review createReview(Long memberId, Long storeId, StoreRequestDTO.ReveiwDTO request) { @@ -31,4 +34,14 @@ public Review createReview(Long memberId, Long storeId, StoreRequestDTO.ReveiwDT return reviewRepository.save(review); } + + @Override + public Mission createMission(Long storeId, StoreRequestDTO.MissionDTO request) { + + Mission mission = StoreConverter.toMission(request); + + mission.setStore(storeRepository.findById(storeId).get()); + + return missionRepository.save(mission); + } } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/controller/StoreRestController.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/controller/StoreRestController.java" index cf5074c..b846935 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/controller/StoreRestController.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/controller/StoreRestController.java" @@ -8,6 +8,7 @@ import com.umc.demo.validation.annotation.ExistMember; import com.umc.demo.validation.annotation.ExistStore; import com.umc.demo.web.dto.StoreRequestDTO; +import com.umc.demo.web.dto.StoreResponseDTO.CreateMissionResultDTO; import com.umc.demo.web.dto.StoreResponseDTO.CreateReviewResultDTO; import javax.validation.Valid; import lombok.RequiredArgsConstructor; @@ -34,4 +35,11 @@ public ApiResponse createReview(@RequestBody @Valid Store Review review = storeCommandService.createReview(memberId, storeId, request); return ApiResponse.onSuccess(StoreConverter.toCreateReviewResultDTO(review)); } + + @PostMapping("/{storeId}/missions") + public ApiResponse createMission(@RequestBody @Valid StoreRequestDTO.MissionDTO request, + @ExistStore @PathVariable(name = "storeId") Long storeId) { + Mission mission = storeCommandService.createMission(storeId, request); + return ApiResponse.onSuccess(StoreConverter.toCreateReviewResultDTO(mission)); + } } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreRequestDTO.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreRequestDTO.java" index 92c6e17..f52dcee 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreRequestDTO.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreRequestDTO.java" @@ -1,5 +1,8 @@ package com.umc.demo.web.dto; +import java.time.LocalDate; +import javax.persistence.Column; +import javax.validation.constraints.FutureOrPresent; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import lombok.Getter; @@ -15,4 +18,14 @@ public static class ReveiwDTO{ @NotBlank String body; } + + @Getter + public static class MissionDTO{ + @NotNull + Integer reward; + @FutureOrPresent + LocalDate deadline; + @NotBlank + String missionSpec; + } } diff --git "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreResponseDTO.java" "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreResponseDTO.java" index 57344c7..25f2952 100644 --- "a/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreResponseDTO.java" +++ "b/\353\235\274\354\235\264/src/main/java/com/umc/demo/web/dto/StoreResponseDTO.java" @@ -16,4 +16,13 @@ public static class CreateReviewResultDTO{ Long reviewId; LocalDateTime createdAt; } + + @Builder + @Getter + @NoArgsConstructor + @AllArgsConstructor + public static class CreateMissionResultDTO{ + Long missionId; + LocalDateTime createdAt; + } }