Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/main/java/umc7th/bulk/group/entity/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import jakarta.persistence.*;
import lombok.*;
import umc7th.bulk.global.BaseTimeEntity;
import umc7th.bulk.user.domain.User;

import java.time.LocalDateTime;
import java.util.List;

@Entity
@Getter
Expand All @@ -28,6 +30,21 @@ public class Group extends BaseTimeEntity {

private LocalDateTime endDate;

@OneToMany(mappedBy = "group", fetch = FetchType.LAZY)
private List<User> members;

public boolean isFull() {
return members != null & members.size() >= 10;
}

public void addMember(User user) {
if (isFull()) {
throw new RuntimeException("그룹이 이미 가득 찼습니다.");
}
members.add(user);
user.setGroup(this);
}

public Group(String groupName, int currentStage, LocalDateTime endDate) {
this.groupName = groupName;
this.currentStage = currentStage;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package umc7th.bulk.group.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import umc7th.bulk.group.entity.Group;

import java.util.Optional;

public interface GroupRepository extends JpaRepository<Group, Long> {

// 그룹 인원 수가 10 이하인 그룹 찾는 메서드, 없으면 새로 생성
@Query("SELECT g FROM Group g WHERE SIZE(g.members) < 10 ORDER BY g.groupId ASC")
Optional<Group> findGroupWithSpace();
}
6 changes: 3 additions & 3 deletions src/main/java/umc7th/bulk/user/config/KakaoOAuth2Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
//@ConfigurationProperties(prefix = "spring.security.oauth2.client.registration.kakao")
public class KakaoOAuth2Config {

private String clientId = "9555ae675b3e27488bd10e7f09ea12bd";
private String clientId;

private String clientSecret = "V1LPr6eQPAHRTKIcmeXczG63dkdlaUrF";
private String clientSecret;

private String redirectUri = "https://bulkapp.site/home";
private String redirectUri;
}
10 changes: 10 additions & 0 deletions src/main/java/umc7th/bulk/user/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,14 @@ public void updateGoalNutrition(MealPlanRequestDTO.TargetNutritionDTO targetNutr
this.BMR = targetNutritionDTO.getBmr();
this.TDEE = targetNutritionDTO.getTdee();
}

public void setGroup(Group group) {
if (this.group != null) {
this.group.getMembers().remove(this);
}
this.group = group;
if (!group.getMembers().contains(this)) {
group.getMembers().add(this);
}
}
}
18 changes: 18 additions & 0 deletions src/main/java/umc7th/bulk/user/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,17 @@
import umc7th.bulk.character.repository.BulkCharacterRepository;
import umc7th.bulk.global.error.GeneralErrorCode;
import umc7th.bulk.global.error.exception.CustomException;
import umc7th.bulk.group.entity.Group;
import umc7th.bulk.group.repository.GroupRepository;
import umc7th.bulk.user.annotation.CurrentUser;
import umc7th.bulk.user.domain.User;
import umc7th.bulk.user.exception.UserErrorCode;
import umc7th.bulk.user.exception.UserException;
import umc7th.bulk.user.principal.PrincipalDetails;
import umc7th.bulk.user.repository.UserRepository;

import java.time.LocalDateTime;

import static umc7th.bulk.user.dto.UserDTO.*;

@Service
Expand All @@ -32,6 +36,7 @@ public class UserService {
private final WebClient webClient;
private final OAuth2AuthorizedClientService authorizedClientService;
private final BulkCharacterRepository bulkCharacterRepository;
private final GroupRepository groupRepository;

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

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

// 기존 그룹 중 10명 미만인 그룹 찾기 (없으면 새 그룹 생성)
Group group = groupRepository.findGroupWithSpace().orElseGet(() -> {
Group newGroup = Group.builder()
.groupName("Group_" + System.currentTimeMillis()) // 유니크한 그룹 이름 생성
.currentStage(1)
.endDate(LocalDateTime.now().plusDays(7)) // 그룹 종료일 7일 후 설정
.build();
return groupRepository.save(newGroup);
});

User user = User.builder()
.kakaoId(kakaoId)
.email(email)
Expand All @@ -67,8 +82,11 @@ public User saveUser(String kakaoId, String email, String gender, String birthye
.curCarbos(0L)
.curProteins(0L)
.curFats(0L)
.group(group)
.build();

group.addMember(user);

return userRepository.save(user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import umc7th.bulk.character.entity.BulkCharacter;
import umc7th.bulk.character.repository.BulkCharacterRepository;
import umc7th.bulk.global.jwt.util.JwtProvider;
import umc7th.bulk.group.entity.Group;
import umc7th.bulk.group.repository.GroupRepository;
import umc7th.bulk.user.domain.User;
import umc7th.bulk.user.dto.UserRequestDTO;
import umc7th.bulk.user.dto.UserResponseDTO;
Expand All @@ -15,6 +17,8 @@
import umc7th.bulk.user.exception.UserException;
import umc7th.bulk.user.repository.UserRepository;

import java.time.LocalDateTime;


@Slf4j
@Service
Expand All @@ -25,6 +29,7 @@ public class UserCommandServiceImpl implements UserCommandService {
private final PasswordEncoder encoder;
private final JwtProvider jwtProvider;
private final BulkCharacterRepository bulkCharacterRepository;
private final GroupRepository groupRepository;

@Override
public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) {
Expand Down Expand Up @@ -57,13 +62,27 @@ public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) {
.build();
bulkCharacterRepository.save(bulkCharacter);

// 기존 그룹 중 10명 미만인 그룹 찾기 (없으면 새 그룹 생성)
Group group = groupRepository.findGroupWithSpace().orElseGet(() -> {
Group newGroup = Group.builder()
.groupName("Group_" + System.currentTimeMillis()) // 유니크한 그룹 이름 생성
.currentStage(1)
.endDate(LocalDateTime.now().plusDays(7)) // 그룹 종료일 7일 후 설정
.build();
return groupRepository.save(newGroup);
});



// User 저장 (BulkCharacter 포함)
User user = User.builder()
.email(emailKey)
.password(encodedPassword)
.accessToken(accessToken)
.refreshToken(refreshToken)
.bulkCharacter(bulkCharacter) // 🔥 BulkCharacter 설정
.recordComplete(false)
.group(group)
.build();

try {
Expand Down