Skip to content

Commit 90fe4a2

Browse files
authored
Merge pull request #67 from CommitField/feat/#65
Feat/#65
2 parents 38d6421 + 5e5558c commit 90fe4a2

File tree

11 files changed

+266
-0
lines changed

11 files changed

+266
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cmf.commitField.domain.pet.controller;
2+
3+
import cmf.commitField.domain.pet.entity.Pet;
4+
import cmf.commitField.domain.pet.service.PetService;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.web.bind.annotation.*;
7+
8+
import java.util.List;
9+
10+
@RestController
11+
@RequiredArgsConstructor
12+
@RequestMapping("/pets")
13+
public class PetController {
14+
15+
private final PetService petService;
16+
17+
// ์ƒˆ๋กœ์šด ํŽซ ์ถ”๊ฐ€
18+
@PostMapping
19+
public Pet createPet(@RequestParam String name, @RequestParam String imageUrl) {
20+
return petService.createPet(name, imageUrl);
21+
}
22+
23+
// ๋ชจ๋“  ํŽซ ์กฐํšŒ
24+
@GetMapping
25+
public List<Pet> getAllPets() {
26+
return petService.getAllPets();
27+
}
28+
29+
// ํŠน์ • ํŽซ ์กฐํšŒ
30+
@GetMapping("/{petId}")
31+
public Pet getPetById(@PathVariable Long petId) {
32+
return petService.getPetById(petId);
33+
}
34+
35+
// ํŽซ ์‚ญ์ œ
36+
@DeleteMapping("/{petId}")
37+
public void deletePet(@PathVariable Long petId) {
38+
petService.deletePet(petId);
39+
}
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package cmf.commitField.domain.pet.controller;
2+
3+
4+
import cmf.commitField.domain.pet.dto.UserPetDto;
5+
import cmf.commitField.domain.pet.entity.Pet;
6+
import cmf.commitField.domain.pet.service.PetService;
7+
import cmf.commitField.domain.pet.service.UserPetService;
8+
import cmf.commitField.domain.user.entity.User;
9+
import cmf.commitField.domain.user.service.CustomOAuth2UserService;
10+
import cmf.commitField.global.globalDto.GlobalResponse;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
import java.util.List;
15+
16+
@RestController
17+
@RequestMapping("/user-pets")
18+
@RequiredArgsConstructor
19+
public class UserPetController {
20+
21+
private final UserPetService userPetService;
22+
private final CustomOAuth2UserService customOAuth2UserService;
23+
private final PetService petService;
24+
25+
// ์œ ์ €๊ฐ€ ํŽซ์„ ๋ถ€ํ™”
26+
@PostMapping("/hatch")
27+
public GlobalResponse<UserPetDto> hatchPet(@RequestParam Long userId, @RequestParam Long petId) {
28+
User user = customOAuth2UserService.getUserById(userId).orElse(null);
29+
Pet pet = petService.getPetById(petId);
30+
UserPetDto userPetDto = new UserPetDto(userPetService.hatchPet(user, pet));
31+
return GlobalResponse.success(userPetDto);
32+
}
33+
34+
// ์œ ์ €์˜ ๋„๊ฐ ์กฐํšŒ (๋ณด์œ ํ•œ ํŽซ ๋ชฉ๋ก)
35+
@GetMapping("/collection/{userId}")
36+
public GlobalResponse<List<Pet>> getUserPetCollection(@PathVariable Long userId) {
37+
User user = customOAuth2UserService.getUserById(userId).orElse(null);
38+
return GlobalResponse.success(userPetService.getUserPetCollection(user));
39+
}
40+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package cmf.commitField.domain.pet.dto;
2+
3+
import cmf.commitField.domain.pet.entity.UserPet;
4+
import lombok.Getter;
5+
6+
@Getter
7+
public class UserPetDto {
8+
private Long userId;
9+
private String username;
10+
private Long petId;
11+
private String petName;
12+
private boolean isHatched;
13+
14+
public UserPetDto(UserPet userPet) {
15+
this.userId = userPet.getUser().getId();
16+
this.username = userPet.getUser().getUsername();
17+
this.petId = userPet.getPet().getId();
18+
this.petName = userPet.getPet().getName();
19+
this.isHatched = userPet.isHatched();
20+
}
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package cmf.commitField.domain.pet.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.Table;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
import lombok.Setter;
10+
import lombok.experimental.SuperBuilder;
11+
12+
@Entity
13+
@Getter
14+
@Setter
15+
@NoArgsConstructor
16+
@AllArgsConstructor
17+
@SuperBuilder
18+
@Table(name = "pet")
19+
public class Pet extends BaseEntity {
20+
private String name;
21+
private String imageUrl;
22+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package cmf.commitField.domain.pet.entity;
2+
3+
import cmf.commitField.domain.user.entity.User;
4+
import cmf.commitField.global.jpa.BaseEntity;
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.JoinColumn;
7+
import jakarta.persistence.ManyToOne;
8+
import jakarta.persistence.Table;
9+
import lombok.AllArgsConstructor;
10+
import lombok.Getter;
11+
import lombok.NoArgsConstructor;
12+
import lombok.Setter;
13+
import lombok.experimental.SuperBuilder;
14+
15+
@Entity
16+
@Getter
17+
@Setter
18+
@NoArgsConstructor
19+
@AllArgsConstructor
20+
@SuperBuilder
21+
@Table(name = "user_pet")
22+
public class UserPet extends BaseEntity {
23+
24+
@ManyToOne
25+
@JoinColumn(name = "user_id", nullable = false)
26+
private User user;
27+
28+
@ManyToOne
29+
@JoinColumn(name = "pet_id", nullable = false)
30+
private Pet pet;
31+
32+
private boolean isHatched; // ๋ถ€ํ™” ์—ฌ๋ถ€
33+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package cmf.commitField.domain.pet.repository;
2+
3+
import cmf.commitField.domain.pet.entity.Pet;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
import java.util.Optional;
8+
9+
@Repository
10+
public interface PetRepository extends JpaRepository<Pet, Long> {
11+
Optional<Pet> findById(Long id);
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package cmf.commitField.domain.pet.repository;
2+
3+
import cmf.commitField.domain.pet.entity.Pet;
4+
import cmf.commitField.domain.pet.entity.UserPet;
5+
import cmf.commitField.domain.user.entity.User;
6+
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.stereotype.Repository;
8+
9+
import java.util.List;
10+
11+
@Repository
12+
public interface UserPetRepository extends JpaRepository<UserPet, Long> {
13+
List<UserPet> findByUser(User user);
14+
boolean existsByUserAndPet(User user, Pet pet);
15+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package cmf.commitField.domain.pet.service;
2+
3+
import cmf.commitField.domain.pet.entity.Pet;
4+
import cmf.commitField.domain.pet.repository.PetRepository;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.stereotype.Service;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
public class PetService {
14+
15+
private final PetRepository petRepository;
16+
17+
// ์ƒˆ๋กœ์šด ํŽซ ์ƒ์„ฑ
18+
public Pet createPet(String name, String imageUrl) {
19+
Pet pet = new Pet(name, imageUrl);
20+
return petRepository.save(pet);
21+
}
22+
23+
// ๋ชจ๋“  ํŽซ ์กฐํšŒ
24+
public List<Pet> getAllPets() {
25+
return petRepository.findAll();
26+
}
27+
28+
// ํŠน์ • ํŽซ ์กฐํšŒ
29+
public Pet getPetById(Long petId) {
30+
Optional<Pet> pet = petRepository.findById(petId);
31+
return pet.orElse(null);
32+
}
33+
34+
// ํŽซ ์‚ญ์ œ
35+
public void deletePet(Long petId) {
36+
petRepository.deleteById(petId);
37+
}
38+
39+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package cmf.commitField.domain.pet.service;
2+
3+
import cmf.commitField.domain.pet.entity.Pet;
4+
import cmf.commitField.domain.pet.entity.UserPet;
5+
import cmf.commitField.domain.pet.repository.UserPetRepository;
6+
import cmf.commitField.domain.user.entity.User;
7+
import lombok.RequiredArgsConstructor;
8+
import org.springframework.stereotype.Service;
9+
10+
import java.util.List;
11+
import java.util.stream.Collectors;
12+
13+
@Service
14+
@RequiredArgsConstructor
15+
public class UserPetService {
16+
17+
private final UserPetRepository userPetRepository;
18+
19+
// ์œ ์ €๊ฐ€ ํŽซ์„ ๋ถ€ํ™”
20+
public UserPet hatchPet(User user, Pet pet) {
21+
// ๊ธฐ์กด์— ๊ฐ™์€ ํŽซ์„ ๋ถ€ํ™”ํ•œ ์ ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
22+
boolean alreadyHatched = userPetRepository.existsByUserAndPet(user, pet);
23+
24+
if (!alreadyHatched) {
25+
UserPet userPet = new UserPet(user, pet, true);
26+
return userPetRepository.save(userPet);
27+
}
28+
return null; // ์ด๋ฏธ ๋ถ€ํ™”ํ•œ ํŽซ์ด๋ฉด ์ €์žฅํ•˜์ง€ ์•Š์Œ
29+
}
30+
31+
// ์œ ์ €์˜ ๋„๊ฐ ์กฐํšŒ (๋ณด์œ ํ•œ ํŽซ ๋ชฉ๋ก)
32+
public List<Pet> getUserPetCollection(User user) {
33+
List<UserPet> userPets = userPetRepository.findByUser(user);
34+
return userPets.stream()
35+
.map(UserPet::getPet) // UserPet์—์„œ Pet๋งŒ ์ถ”์ถœ
36+
.collect(Collectors.toList());
37+
}
38+
}

โ€Žsrc/main/java/cmf/commitField/domain/user/repository/UserRepository.javaโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77

88
public interface UserRepository extends JpaRepository<User, Long> {
99
Optional<User> findByUsername(String username);
10+
Optional<User> findById(Long id);
1011
}

0 commit comments

Comments
ย (0)