Skip to content

Commit b05d4c7

Browse files
committed
feat: 회원 랭크 기능 수정
1 parent 02c18e8 commit b05d4c7

File tree

6 files changed

+72
-11
lines changed

6 files changed

+72
-11
lines changed

src/main/java/cmf/commitField/domain/commit/sinceCommit/service/CommitCacheService.java renamed to src/main/java/cmf/commitField/domain/commit/scheduler/CommitCacheService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cmf.commitField.domain.commit.sinceCommit.service;
1+
package cmf.commitField.domain.commit.scheduler;
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package cmf.commitField.domain.commit.scheduler;
2+
3+
import org.springframework.web.bind.annotation.GetMapping;
4+
import org.springframework.web.bind.annotation.RequestMapping;
5+
import org.springframework.web.bind.annotation.RestController;
6+
7+
@RestController
8+
@RequestMapping("/api/commit")
9+
public class CommitController {
10+
@GetMapping("/get")
11+
public void getUserCommits(){
12+
// lastCommitted에서부터 새로 들어온 커밋 수를 검사해 반환한다
13+
// commitCount에서 새로 추가된 만큼의 커밋 수를 반환함
14+
// get이 실행되면 redis의 Active유저에 상태를 추가한다
15+
//
16+
}
17+
18+
public void updateUserCommitStatus(){
19+
// 커밋 수에 변화가 있을 때 실행되는 메서드
20+
// 연속 커밋 반영, 펫 반영, 랭크 반영
21+
}
22+
23+
}

src/main/java/cmf/commitField/domain/commit/scheduler/CommitScheduler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cmf.commitField.domain.commit.scheduler;
22

3-
import cmf.commitField.domain.commit.sinceCommit.service.CommitCacheService;
43
import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService;
54
import cmf.commitField.domain.user.entity.User;
65
import cmf.commitField.domain.user.repository.UserRepository;
Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,33 @@
11
package cmf.commitField.domain.season.entity;
22

3+
import lombok.Getter;
4+
5+
@Getter
36
public enum Rank {
4-
SEED, // 씨앗
5-
SPROUT, // 새싹
6-
FLOWER, // 꽃
7-
FRUIT, // 열매
8-
TREE // 나무
9-
}
7+
SEED(94), // 씨앗
8+
SPROUT(188), // 새싹
9+
FLOWER(282), // 꽃
10+
FRUIT(375), // 열매
11+
TREE(376); // 나무
12+
13+
private final int requiredExp;
14+
15+
Rank(int requiredExp) {
16+
this.requiredExp = requiredExp;
17+
}
18+
19+
public int getRequiredExp() {
20+
return requiredExp;
21+
}
22+
23+
// 현재 경험치에 맞는 레벨 찾기
24+
public static Rank getLevelByExp(int exp) {
25+
Rank currentLevel = SEED;
26+
for (Rank level : values()) {
27+
if (exp >= level.getRequiredExp()) {
28+
currentLevel = level;
29+
}
30+
}
31+
return currentLevel;
32+
}
33+
}

src/main/java/cmf/commitField/domain/user/entity/User.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import cmf.commitField.domain.chat.userChatRoom.entity.UserChatRoom;
66
import cmf.commitField.domain.heart.entity.Heart;
77
import cmf.commitField.domain.pet.entity.Pet;
8+
import cmf.commitField.domain.season.entity.Rank;
89
import cmf.commitField.global.jpa.BaseEntity;
910
import jakarta.persistence.*;
1011
import lombok.AllArgsConstructor;
@@ -39,6 +40,9 @@ public enum Role {
3940
USER, ADMIN
4041
}
4142

43+
@Enumerated(EnumType.STRING)
44+
private Rank rank;
45+
4246
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
4347
private List<ChatRoom> chatRooms = new ArrayList<>();
4448

@@ -60,6 +64,7 @@ public User(String username, String email, String nickname, String avatarUrl, Bo
6064
this.nickname=nickname;
6165
this.avatarUrl=avatarUrl;
6266
this.status= status;
67+
this.rank = Rank.SEED;
6368
this.role = Role.USER;
6469
this.chatRooms = cr;
6570
this.userChatRooms = ucr;

src/main/java/cmf/commitField/domain/user/service/CustomOAuth2UserService.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package cmf.commitField.domain.user.service;
22

3-
import cmf.commitField.domain.commit.sinceCommit.service.CommitCacheService;
3+
import cmf.commitField.domain.commit.scheduler.CommitCacheService;
44
import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService;
55
import cmf.commitField.domain.pet.entity.Pet;
66
import cmf.commitField.domain.pet.repository.PetRepository;
7+
import cmf.commitField.domain.season.entity.Rank;
78
import cmf.commitField.domain.user.entity.CustomOAuth2User;
89
import cmf.commitField.domain.user.entity.User;
910
import cmf.commitField.domain.user.repository.UserRepository;
@@ -15,6 +16,7 @@
1516
import org.springframework.security.oauth2.core.user.OAuth2User;
1617
import org.springframework.stereotype.Service;
1718

19+
import java.time.LocalDateTime;
1820
import java.util.ArrayList;
1921
import java.util.Map;
2022
import java.util.Optional;
@@ -28,6 +30,7 @@ public class CustomOAuth2UserService extends DefaultOAuth2UserService {
2830
private final CommitCacheService commitCacheService;
2931
private final TotalCommitService totalCommitService;
3032

33+
3134
@Override
3235
public OAuth2User loadUser(OAuth2UserRequest userRequest) {
3336
OAuth2User oauthUser = super.loadUser(userRequest);
@@ -60,13 +63,20 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
6063
user = new User(username, email, name, avatarUrl,true, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
6164
userRepository.save(user);
6265

63-
pet = new Pet("알알", user); // 변경 필요
66+
pet = new Pet("알알", user); // TODO: 변경 필요
6467
petRepository.save(pet);
6568

69+
// 유저 펫, 커밋 카운트, 랭크를 서렂ㅇ
6670
user.addPets(pet);
6771
user.setCommitCount(totalCommitService.getTotalCommitCount(user.getUsername()).getTotalCommitContributions());
72+
user.setRank(Rank.getLevelByExp((int) totalCommitService.getSeasonCommits(
73+
user.getUsername(),
74+
LocalDateTime.of(2025,03,01,00,00),
75+
LocalDateTime.now()).getTotalCommitContributions()
76+
)
77+
);
6878

69-
// 회원가입한 유저는 커밋 기록에 상관없이 Redis에 입력해둔다.
79+
// 로그인하거나 회원가입한 유저는 커밋 기록에 상관없이 Redis에 입력해둔다.
7080
commitCacheService.updateCachedCommitCount(user.getUsername(),0);
7181
}
7282

0 commit comments

Comments
 (0)