diff --git a/src/main/java/cmf/commitField/domain/pet/controller/PetController.java b/src/main/java/cmf/commitField/domain/pet/controller/PetController.java index 3181b84..dcf649a 100644 --- a/src/main/java/cmf/commitField/domain/pet/controller/PetController.java +++ b/src/main/java/cmf/commitField/domain/pet/controller/PetController.java @@ -8,11 +8,9 @@ import cmf.commitField.domain.user.entity.User; import cmf.commitField.domain.user.service.CustomOAuth2UserService; import lombok.RequiredArgsConstructor; -import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -45,14 +43,15 @@ public ResponseEntity> getUserAllPets(@AuthenticationPrincipal Cus // ************************************* // 새로운 펫 추가 - @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public Pet createPet( - @RequestParam String email, - @RequestParam String name, - @RequestPart(value = "imageFile") MultipartFile imageFile - ) throws Exception { - User user = userService.getUserByEmail(email).get(); - return petService.createPet(name, imageFile, user); + @PostMapping("/new") + public ResponseEntity createPet(@AuthenticationPrincipal CustomOAuth2User oAuth2User) throws Exception { + String username = oAuth2User.getName(); + Pet pet = petService.createPet("알알", username); + if(pet == null){ + //사용자가 현재 펫이 GROWN 상태가 아닌데도 다른 경로를 통해 요청한 경우 + ResponseEntity.badRequest(); + } + return ResponseEntity.ok(pet); } // 모든 펫 조회 diff --git a/src/main/java/cmf/commitField/domain/pet/entity/PetGrow.java b/src/main/java/cmf/commitField/domain/pet/entity/PetGrow.java index 63d0cc1..c8701be 100644 --- a/src/main/java/cmf/commitField/domain/pet/entity/PetGrow.java +++ b/src/main/java/cmf/commitField/domain/pet/entity/PetGrow.java @@ -4,10 +4,10 @@ @Getter public enum PetGrow { - //FIXME: 테스트를 위한 수정, 차후 15/30으로 변경 필요 + //FIXME: 테스트를 위한 수정, 차후 150/300으로 변경 필요 EGG(0), - HATCH(20), - GROWN(40); + HATCH(5), + GROWN(10); private final int requiredExp; diff --git a/src/main/java/cmf/commitField/domain/pet/repository/PetRepository.java b/src/main/java/cmf/commitField/domain/pet/repository/PetRepository.java index 5f54bbd..85b71bf 100644 --- a/src/main/java/cmf/commitField/domain/pet/repository/PetRepository.java +++ b/src/main/java/cmf/commitField/domain/pet/repository/PetRepository.java @@ -17,4 +17,6 @@ public interface PetRepository extends JpaRepository { @Query("SELECT p FROM Pet p WHERE p.user.email = :email ORDER BY p.id DESC") List findLatestPetByUserEmail(@Param("email") String email); + @Query("SELECT p FROM Pet p WHERE p.user.username = :username ORDER BY p.id DESC") + List findLatestPetByUserUsername(@Param("username") String username); } diff --git a/src/main/java/cmf/commitField/domain/pet/service/PetService.java b/src/main/java/cmf/commitField/domain/pet/service/PetService.java index ffbcf30..de1cc6f 100644 --- a/src/main/java/cmf/commitField/domain/pet/service/PetService.java +++ b/src/main/java/cmf/commitField/domain/pet/service/PetService.java @@ -11,7 +11,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.ArrayList; @@ -27,12 +26,15 @@ public class PetService { private final S3Service s3Service; // 새로운 펫 생성 - public Pet createPet(String name, MultipartFile imageFile, User user) throws IOException { - - + public Pet createPet(String petname, String username) throws IOException { Random random = new Random(); - Pet pet = new Pet(name, user); - return petRepository.save(pet); + User user = userRepository.findByUsername(username).get(); + Pet pet = petRepository.findLatestPetByUserUsername(username).get(0); + if(pet.getGrow() != PetGrow.GROWN){ + return null; + } + Pet newPet = new Pet("알알", user); + return petRepository.save(newPet); } // 모든 펫 조회 @@ -55,7 +57,7 @@ public void deletePet(Long petId) { @Transactional public UserPetDto getExpPet(String username, long commitCount) { User user = userRepository.findByUsername(username).get(); - Pet pet = user.getPets().get(0); + Pet pet = petRepository.findLatestPetByUserUsername(username).get(0); pet.addExp(commitCount); // 경험치 증가 petRepository.save(pet); diff --git a/src/main/java/cmf/commitField/domain/user/controller/UserController.java b/src/main/java/cmf/commitField/domain/user/controller/UserController.java index 2b6ee46..29c5b7c 100644 --- a/src/main/java/cmf/commitField/domain/user/controller/UserController.java +++ b/src/main/java/cmf/commitField/domain/user/controller/UserController.java @@ -33,7 +33,7 @@ public ResponseEntity getUserChatInfo(@AuthenticationPrincipal return ResponseEntity.ok(userChatInfoDto); } - @GetMapping("/info") + @GetMapping("info") public ResponseEntity getUserInfo(@AuthenticationPrincipal CustomOAuth2User oAuth2User){ String username = oAuth2User.getName(); diff --git a/src/main/java/cmf/commitField/domain/user/service/UserService.java b/src/main/java/cmf/commitField/domain/user/service/UserService.java index 33c79db..74c81aa 100644 --- a/src/main/java/cmf/commitField/domain/user/service/UserService.java +++ b/src/main/java/cmf/commitField/domain/user/service/UserService.java @@ -3,6 +3,7 @@ import cmf.commitField.domain.commit.scheduler.CommitUpdateService; import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService; import cmf.commitField.domain.pet.entity.Pet; +import cmf.commitField.domain.pet.entity.PetGrow; import cmf.commitField.domain.pet.repository.PetRepository; import cmf.commitField.domain.pet.service.PetService; import cmf.commitField.domain.user.dto.UserChatInfoDto; @@ -73,6 +74,14 @@ public UserInfoDto showUserInfo(String username) { User user = userRepository.findByUsername(username).get(); Pet pet = petRepository.findLatestPetByUserEmail(user.getEmail()).get(0); + if(user.getTier() != Tier.getLevelByExp(user.getSeasonCommitCount())){ + user.setTier(Tier.getLevelByExp(user.getSeasonCommitCount())); + userRepository.save(user); + } + if(pet.getGrow() != PetGrow.getLevelByExp(pet.getExp())){ + pet.setGrow(PetGrow.getLevelByExp(pet.getExp())); + petRepository.save(pet); + } // 유저 정보 조회 후 active 상태가 아니면 Redis에 추가, 커밋 추적 시작 String key = "commit_active:" + user.getUsername();