Skip to content

Commit 208a9ae

Browse files
authored
Merge pull request #124 from realBULK/fix/123
[FIX] 그룹 자동 생성 구현
2 parents 7b60189 + 63dbd68 commit 208a9ae

6 files changed

Lines changed: 74 additions & 3 deletions

File tree

src/main/java/umc7th/bulk/group/entity/Group.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import jakarta.persistence.*;
44
import lombok.*;
55
import umc7th.bulk.global.BaseTimeEntity;
6+
import umc7th.bulk.user.domain.User;
67

78
import java.time.LocalDateTime;
9+
import java.util.List;
810

911
@Entity
1012
@Getter
@@ -28,6 +30,21 @@ public class Group extends BaseTimeEntity {
2830

2931
private LocalDateTime endDate;
3032

33+
@OneToMany(mappedBy = "group", fetch = FetchType.LAZY)
34+
private List<User> members;
35+
36+
public boolean isFull() {
37+
return members != null & members.size() >= 10;
38+
}
39+
40+
public void addMember(User user) {
41+
if (isFull()) {
42+
throw new RuntimeException("그룹이 이미 가득 찼습니다.");
43+
}
44+
members.add(user);
45+
user.setGroup(this);
46+
}
47+
3148
public Group(String groupName, int currentStage, LocalDateTime endDate) {
3249
this.groupName = groupName;
3350
this.currentStage = currentStage;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package umc7th.bulk.group.repository;
22

33
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.data.jpa.repository.Query;
45
import umc7th.bulk.group.entity.Group;
56

7+
import java.util.Optional;
8+
69
public interface GroupRepository extends JpaRepository<Group, Long> {
10+
11+
// 그룹 인원 수가 10 이하인 그룹 찾는 메서드, 없으면 새로 생성
12+
@Query("SELECT g FROM Group g WHERE SIZE(g.members) < 10 ORDER BY g.groupId ASC")
13+
Optional<Group> findGroupWithSpace();
714
}

src/main/java/umc7th/bulk/user/config/KakaoOAuth2Config.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
//@ConfigurationProperties(prefix = "spring.security.oauth2.client.registration.kakao")
1414
public class KakaoOAuth2Config {
1515

16-
private String clientId = "9555ae675b3e27488bd10e7f09ea12bd";
16+
private String clientId;
1717

18-
private String clientSecret = "V1LPr6eQPAHRTKIcmeXczG63dkdlaUrF";
18+
private String clientSecret;
1919

20-
private String redirectUri = "https://bulkapp.site/home";
20+
private String redirectUri;
2121
}

src/main/java/umc7th/bulk/user/domain/User.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,4 +157,14 @@ public void updateGoalNutrition(MealPlanRequestDTO.TargetNutritionDTO targetNutr
157157
this.BMR = targetNutritionDTO.getBmr();
158158
this.TDEE = targetNutritionDTO.getTdee();
159159
}
160+
161+
public void setGroup(Group group) {
162+
if (this.group != null) {
163+
this.group.getMembers().remove(this);
164+
}
165+
this.group = group;
166+
if (!group.getMembers().contains(this)) {
167+
group.getMembers().add(this);
168+
}
169+
}
160170
}

src/main/java/umc7th/bulk/user/service/UserService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,17 @@
1515
import umc7th.bulk.character.repository.BulkCharacterRepository;
1616
import umc7th.bulk.global.error.GeneralErrorCode;
1717
import umc7th.bulk.global.error.exception.CustomException;
18+
import umc7th.bulk.group.entity.Group;
19+
import umc7th.bulk.group.repository.GroupRepository;
1820
import umc7th.bulk.user.annotation.CurrentUser;
1921
import umc7th.bulk.user.domain.User;
2022
import umc7th.bulk.user.exception.UserErrorCode;
2123
import umc7th.bulk.user.exception.UserException;
2224
import umc7th.bulk.user.principal.PrincipalDetails;
2325
import umc7th.bulk.user.repository.UserRepository;
2426

27+
import java.time.LocalDateTime;
28+
2529
import static umc7th.bulk.user.dto.UserDTO.*;
2630

2731
@Service
@@ -32,6 +36,7 @@ public class UserService {
3236
private final WebClient webClient;
3337
private final OAuth2AuthorizedClientService authorizedClientService;
3438
private final BulkCharacterRepository bulkCharacterRepository;
39+
private final GroupRepository groupRepository;
3540

3641
private static final String UNLINK_URL = "https://kapi.kakao.com/v1/user/unlink";
3742

@@ -54,6 +59,16 @@ public User saveUser(String kakaoId, String email, String gender, String birthye
5459
.build();
5560
bulkCharacterRepository.save(bulkCharacter);
5661

62+
// 기존 그룹 중 10명 미만인 그룹 찾기 (없으면 새 그룹 생성)
63+
Group group = groupRepository.findGroupWithSpace().orElseGet(() -> {
64+
Group newGroup = Group.builder()
65+
.groupName("Group_" + System.currentTimeMillis()) // 유니크한 그룹 이름 생성
66+
.currentStage(1)
67+
.endDate(LocalDateTime.now().plusDays(7)) // 그룹 종료일 7일 후 설정
68+
.build();
69+
return groupRepository.save(newGroup);
70+
});
71+
5772
User user = User.builder()
5873
.kakaoId(kakaoId)
5974
.email(email)
@@ -67,8 +82,11 @@ public User saveUser(String kakaoId, String email, String gender, String birthye
6782
.curCarbos(0L)
6883
.curProteins(0L)
6984
.curFats(0L)
85+
.group(group)
7086
.build();
7187

88+
group.addMember(user);
89+
7290
return userRepository.save(user);
7391
}
7492

src/main/java/umc7th/bulk/user/service/command/UserCommandServiceImpl.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import umc7th.bulk.character.entity.BulkCharacter;
88
import umc7th.bulk.character.repository.BulkCharacterRepository;
99
import umc7th.bulk.global.jwt.util.JwtProvider;
10+
import umc7th.bulk.group.entity.Group;
11+
import umc7th.bulk.group.repository.GroupRepository;
1012
import umc7th.bulk.user.domain.User;
1113
import umc7th.bulk.user.dto.UserRequestDTO;
1214
import umc7th.bulk.user.dto.UserResponseDTO;
@@ -15,6 +17,8 @@
1517
import umc7th.bulk.user.exception.UserException;
1618
import umc7th.bulk.user.repository.UserRepository;
1719

20+
import java.time.LocalDateTime;
21+
1822

1923
@Slf4j
2024
@Service
@@ -25,6 +29,7 @@ public class UserCommandServiceImpl implements UserCommandService {
2529
private final PasswordEncoder encoder;
2630
private final JwtProvider jwtProvider;
2731
private final BulkCharacterRepository bulkCharacterRepository;
32+
private final GroupRepository groupRepository;
2833

2934
@Override
3035
public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) {
@@ -57,13 +62,27 @@ public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) {
5762
.build();
5863
bulkCharacterRepository.save(bulkCharacter);
5964

65+
// 기존 그룹 중 10명 미만인 그룹 찾기 (없으면 새 그룹 생성)
66+
Group group = groupRepository.findGroupWithSpace().orElseGet(() -> {
67+
Group newGroup = Group.builder()
68+
.groupName("Group_" + System.currentTimeMillis()) // 유니크한 그룹 이름 생성
69+
.currentStage(1)
70+
.endDate(LocalDateTime.now().plusDays(7)) // 그룹 종료일 7일 후 설정
71+
.build();
72+
return groupRepository.save(newGroup);
73+
});
74+
75+
76+
6077
// User 저장 (BulkCharacter 포함)
6178
User user = User.builder()
6279
.email(emailKey)
6380
.password(encodedPassword)
6481
.accessToken(accessToken)
6582
.refreshToken(refreshToken)
6683
.bulkCharacter(bulkCharacter) // 🔥 BulkCharacter 설정
84+
.recordComplete(false)
85+
.group(group)
6786
.build();
6887

6988
try {

0 commit comments

Comments
 (0)