Skip to content

Commit 0a38df7

Browse files
committed
2 parents 7816088 + d79764e commit 0a38df7

File tree

12 files changed

+159
-39
lines changed

12 files changed

+159
-39
lines changed

โ€Žsrc/main/java/cmf/commitField/domain/commit/scheduler/CommitUpdateService.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService;
44
import cmf.commitField.domain.user.dto.UserInfoDto;
5+
import cmf.commitField.domain.user.entity.Tier;
56
import cmf.commitField.domain.user.entity.User;
67
import cmf.commitField.domain.user.repository.UserRepository;
78
import lombok.RequiredArgsConstructor;
@@ -22,7 +23,7 @@ public UserInfoDto updateUserTier(String username){
2223
User user = userRepository.findByUsername(username).get();
2324
long seasonCommitCount;
2425
seasonCommitCount = totalCommitService.getSeasonCommits(user.getUsername(), LocalDateTime.of(2025,03,01,0,0), LocalDateTime.of(2025,05,31,23,59)).getTotalCommitContributions();
25-
user.setTier(User.Tier.getLevelByExp((int)seasonCommitCount));
26+
user.setTier(Tier.getLevelByExp((int)seasonCommitCount));
2627
System.out.println(username+"์œ ์ € ๋ ˆ๋ฒจ ์—…! ํ˜„์žฌ ํ‹ฐ์–ด: "+user.getTier());
2728
userRepository.save(user);
2829

โ€Žsrc/main/java/cmf/commitField/domain/pet/entity/PetGrow.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44

55
@Getter
66
public enum PetGrow {
7+
//FIXME: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ˆ˜์ •, ์ฐจํ›„ 15/30์œผ๋กœ ๋ณ€๊ฒฝ ํ•„์š”
78
EGG(0),
8-
HATCH(150),
9-
GROWN(300);
9+
HATCH(20),
10+
GROWN(40);
1011

1112
private final int requiredExp;
1213

โ€Žsrc/main/java/cmf/commitField/domain/user/controller/UserController.java

+10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService;
44
import cmf.commitField.domain.user.dto.UserChatInfoDto;
55
import cmf.commitField.domain.user.dto.UserInfoDto;
6+
import cmf.commitField.domain.user.dto.UserRegacyDto;
67
import cmf.commitField.domain.user.entity.CustomOAuth2User;
78
import cmf.commitField.domain.user.service.UserService;
89
import lombok.RequiredArgsConstructor;
@@ -12,6 +13,8 @@
1213
import org.springframework.web.bind.annotation.RequestMapping;
1314
import org.springframework.web.bind.annotation.RestController;
1415

16+
import java.util.List;
17+
1518
@RestController
1619
@RequestMapping("/api/user")
1720
@RequiredArgsConstructor
@@ -40,4 +43,11 @@ public ResponseEntity<UserInfoDto> getUserInfo(@AuthenticationPrincipal CustomOA
4043

4144
return ResponseEntity.ok(userInfoDto);
4245
}
46+
47+
@GetMapping("/tierinfo")
48+
public ResponseEntity<List<UserRegacyDto>> getUserTierInfo(@AuthenticationPrincipal CustomOAuth2User oAuth2User) {
49+
String username = oAuth2User.getName();
50+
List<UserRegacyDto> tierList = userService.showUserRegacy(username);
51+
return ResponseEntity.ok(tierList);
52+
}
4353
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cmf.commitField.domain.user.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Builder
7+
@Getter
8+
public class UserRegacyDto {
9+
private long user_id;
10+
private String year;
11+
private String season;
12+
private String tier;
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package cmf.commitField.domain.user.entity;
2+
3+
public enum Tier {
4+
NONE(0), // ๋ฏธํš๋“(ํ•˜๋‚˜๋„ Commitํ•˜์ง€ ์•Š์Œ)
5+
SEED(1), // ์”จ์•—
6+
SPROUT(95), // ์ƒˆ์‹น
7+
FLOWER(189), // ๊ฝƒ
8+
FRUIT(283), // ์—ด๋งค
9+
TREE(377); // ๋‚˜๋ฌด
10+
11+
private final long requiredExp;
12+
13+
Tier(long requiredExp) {
14+
this.requiredExp = requiredExp;
15+
}
16+
17+
public long getRequiredExp() {
18+
return requiredExp;
19+
}
20+
21+
// ํ˜„์žฌ ๊ฒฝํ—˜์น˜์— ๋งž๋Š” ๋ ˆ๋ฒจ ์ฐพ๊ธฐ
22+
public static Tier getLevelByExp(long exp) {
23+
Tier currentLevel = SEED;
24+
for (Tier level : values()) {
25+
if (exp >= level.getRequiredExp()) {
26+
currentLevel = level;
27+
}
28+
}
29+
return currentLevel;
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cmf.commitField.domain.user.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
import lombok.experimental.SuperBuilder;
10+
11+
@Entity
12+
@Getter
13+
@Setter
14+
@NoArgsConstructor
15+
@AllArgsConstructor
16+
@SuperBuilder
17+
@Table(name = "tierRegacy")
18+
public class TierRegacy extends BaseEntity {
19+
private String year;
20+
private String season;
21+
22+
@Enumerated(EnumType.STRING) // DB์— ์ €์žฅ๋  ๋•Œ String ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
23+
private Tier tier;
24+
25+
public TierRegacy(User user){
26+
this.user=user;
27+
this.year="2025";
28+
}
29+
30+
@ManyToOne(fetch = FetchType.LAZY)
31+
@JoinColumn(name = "user_id", nullable = false)
32+
private User user;
33+
34+
}

โ€Žsrc/main/java/cmf/commitField/domain/user/entity/User.java

+5-31
Original file line numberDiff line numberDiff line change
@@ -44,36 +44,6 @@ public enum Role {
4444
@Enumerated(EnumType.STRING) // DB์— ์ €์žฅ๋  ๋•Œ String ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
4545
private Tier tier;
4646

47-
public enum Tier {
48-
SEED(0), // ์”จ์•—
49-
SPROUT(95), // ์ƒˆ์‹น
50-
FLOWER(189), // ๊ฝƒ
51-
FRUIT(283), // ์—ด๋งค
52-
TREE(377); // ๋‚˜๋ฌด
53-
54-
private final long requiredExp;
55-
56-
Tier(long requiredExp) {
57-
this.requiredExp = requiredExp;
58-
}
59-
60-
public long getRequiredExp() {
61-
return requiredExp;
62-
}
63-
64-
// ํ˜„์žฌ ๊ฒฝํ—˜์น˜์— ๋งž๋Š” ๋ ˆ๋ฒจ ์ฐพ๊ธฐ
65-
public static Tier getLevelByExp(long exp) {
66-
Tier currentLevel = SEED;
67-
for (Tier level : values()) {
68-
if (exp >= level.getRequiredExp()) {
69-
currentLevel = level;
70-
}
71-
}
72-
return currentLevel;
73-
}
74-
}
75-
76-
7747
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
7848
@JsonIgnore
7949
private List<ChatRoom> chatRooms = new ArrayList<>();
@@ -86,10 +56,14 @@ public static Tier getLevelByExp(long exp) {
8656
@JsonIgnore
8757
private List<ChatMsg> chatMsgs = new ArrayList<>();
8858

89-
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
59+
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST, orphanRemoval = true)
9060
@JsonIgnore
9161
private List<Pet> pets = new ArrayList<>();
9262

63+
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.PERSIST, orphanRemoval = true)
64+
@JsonIgnore
65+
private List<TierRegacy> tiers = new ArrayList<>();
66+
9367
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
9468
@JsonIgnore
9569
private List<Heart> hearts;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.user.repository;
2+
3+
import cmf.commitField.domain.user.entity.TierRegacy;
4+
import cmf.commitField.domain.user.entity.User;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
import java.util.List;
9+
import java.util.Optional;
10+
11+
@Repository
12+
public interface TierRegacyRepository extends JpaRepository<TierRegacy, Long>{
13+
Optional<TierRegacy> findById(Long id);
14+
List<TierRegacy> findByUserUsername(String username);
15+
List<TierRegacy> findByUser(User user);
16+
}

โ€Žsrc/main/java/cmf/commitField/domain/user/service/CustomOAuth2UserService.java

+19-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import cmf.commitField.domain.season.entity.Season;
99
import cmf.commitField.domain.season.service.SeasonService;
1010
import cmf.commitField.domain.user.entity.CustomOAuth2User;
11+
import cmf.commitField.domain.user.entity.Tier;
12+
import cmf.commitField.domain.user.entity.TierRegacy;
1113
import cmf.commitField.domain.user.entity.User;
14+
import cmf.commitField.domain.user.repository.TierRegacyRepository;
1215
import cmf.commitField.domain.user.repository.UserRepository;
1316
import jakarta.servlet.http.HttpServletRequest;
1417
import jakarta.servlet.http.HttpSession;
@@ -32,6 +35,7 @@
3235
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
3336
private final UserRepository userRepository;
3437
private final PetRepository petRepository;
38+
private final TierRegacyRepository tierRegacyRepository;
3539
private final HttpServletRequest request; // HttpServletRequest๋ฅผ ์ฃผ์ž… ๋ฐ›์Œ.
3640
private final CommitCacheService commitCacheService;
3741
private final TotalCommitService totalCommitService;
@@ -59,6 +63,8 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
5963

6064
User user;
6165
Pet pet;
66+
TierRegacy tierRegacy;
67+
6268
if (existingUser.isPresent()) {
6369
//์œ ์ € ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ์œ ์ € ์ •๋ณด๋ฅผ ์–ป์–ด์˜จ๋‹ค.
6470
user = existingUser.get();
@@ -75,7 +81,10 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
7581
pet = new Pet("์•Œ์•Œ", user); // TODO: ๋ณ€๊ฒฝ ํ•„์š”
7682
petRepository.save(pet);
7783

78-
// ์œ ์ € ํŽซ, ์ปค๋ฐ‹ ์นด์šดํŠธ, ๋žญํฌ๋ฅผ ์„ค์ •
84+
tierRegacy = new TierRegacy(user);
85+
tierRegacy.setSeason("winter");
86+
87+
// ์œ ์ € ํŽซ, ์ปค๋ฐ‹ ์นด์šดํŠธ, ๋žญํฌ, ์ง์ „ ์‹œ์ฆŒ ๋žญํฌ๋ฅผ ์„ค์ •
7988
user.addPets(pet);
8089
user.setCommitCount(totalCommitService.getTotalCommitCount(user.getUsername()).getTotalCommitContributions());
8190

@@ -85,9 +94,17 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) {
8594
LocalDateTime.of(2025,05,31,23,59)
8695
).getTotalCommitContributions();
8796

97+
long prevSeasonCommitCount = totalCommitService.getSeasonCommits(
98+
user.getUsername(),
99+
LocalDateTime.of(2024,12,01,00,00),
100+
LocalDateTime.of(2025,02,28,23,59)
101+
).getTotalCommitContributions();
102+
88103
user.setSeasonCommitCount(seasonCommitCount);
104+
tierRegacy.setTier(Tier.getLevelByExp(prevSeasonCommitCount));
105+
tierRegacyRepository.save(tierRegacy);
89106

90-
user.setTier(User.Tier.getLevelByExp(seasonCommitCount));
107+
user.setTier(Tier.getLevelByExp(seasonCommitCount));
91108
userRepository.save(user);
92109
// ๋กœ๊ทธ์ธํ•˜๊ฑฐ๋‚˜ ํšŒ์›๊ฐ€์ž…ํ•œ ์œ ์ €๋Š” ์ปค๋ฐ‹ ๊ธฐ๋ก์— ์ƒ๊ด€์—†์ด Redis์— ์ž…๋ ฅํ•ด๋‘”๋‹ค.
93110
commitCacheService.updateCachedCommitCount(user.getUsername(),0);

โ€Žsrc/main/java/cmf/commitField/domain/user/service/UserService.java

+24-1
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@
77
import cmf.commitField.domain.pet.service.PetService;
88
import cmf.commitField.domain.user.dto.UserChatInfoDto;
99
import cmf.commitField.domain.user.dto.UserInfoDto;
10+
import cmf.commitField.domain.user.dto.UserRegacyDto;
11+
import cmf.commitField.domain.user.entity.Tier;
12+
import cmf.commitField.domain.user.entity.TierRegacy;
1013
import cmf.commitField.domain.user.entity.User;
14+
import cmf.commitField.domain.user.repository.TierRegacyRepository;
1115
import cmf.commitField.domain.user.repository.UserRepository;
1216
import lombok.RequiredArgsConstructor;
1317
import org.springframework.data.redis.core.StringRedisTemplate;
1418
import org.springframework.stereotype.Service;
1519
import org.springframework.transaction.annotation.Transactional;
1620

1721
import java.time.LocalDateTime;
22+
import java.util.ArrayList;
23+
import java.util.List;
1824
import java.util.concurrent.TimeUnit;
1925

2026
@Service
@@ -23,6 +29,7 @@ public class UserService {
2329
private final StringRedisTemplate redisTemplate;
2430
private final UserRepository userRepository;
2531
private final PetRepository petRepository;
32+
private final TierRegacyRepository tierRegacyRepository;
2633
// FIXME: ์ˆ˜์ • ํ•„์š”
2734
private final TotalCommitService totalCommitService;
2835
private final CommitUpdateService commitUpdateService;
@@ -45,6 +52,22 @@ public UserChatInfoDto showUserChatInfo(String username) {
4552
.build();
4653
}
4754

55+
public List<UserRegacyDto> showUserRegacy(String username) {
56+
User user = userRepository.findByUsername(username).get();
57+
List<UserRegacyDto> userRegacyDtos = new ArrayList<>();
58+
for(TierRegacy tierRegacy : tierRegacyRepository.findByUser(user)){
59+
userRegacyDtos.add(
60+
UserRegacyDto.builder()
61+
.user_id(user.getId())
62+
.year(tierRegacy.getYear())
63+
.season(tierRegacy.getSeason())
64+
.tier(tierRegacy.getTier().toString())
65+
.build()
66+
);
67+
}
68+
return userRegacyDtos;
69+
}
70+
4871
@Transactional
4972
public UserInfoDto showUserInfo(String username) {
5073
User user = userRepository.findByUsername(username).get();
@@ -89,7 +112,7 @@ public boolean getExpUser(String username, long commitCount) {
89112
// ๊ฒฝํ—˜์น˜ ์ฆ๊ฐ€ ํ›„, ๋งŒ์•ฝ ๋ ˆ๋ฒจ์—…ํ•œ๋‹ค๋ฉด ๋ ˆ๋ฒจ์—… ์‹œํ‚จ๋‹ค.
90113
user.addExp(commitCount);
91114
userRepository.save(user);
92-
return !(user.getTier().equals(User.Tier.getLevelByExp(user.getSeasonCommitCount())));
115+
return !(user.getTier().equals(Tier.getLevelByExp(user.getSeasonCommitCount())));
93116
}
94117

95118
public void updateUserCommitCount(String username, long count){

โ€Žsrc/main/resources/application-dev.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ spring:
77
jpa:
88
open-in-view: false
99
hibernate:
10-
ddl-auto: update
10+
ddl-auto: create
1111
autoconfigure: # ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•  ๋•Œ๋Š” Redis์™€ Session ์„ค์ •์„ ์ œ์™ธ
1212
exclude:
1313
- org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

โ€Žsrc/main/resources/application.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ spring:
1818
jpa:
1919
open-in-view: false
2020
hibernate:
21-
ddl-auto: update
21+
ddl-auto: create
2222
properties:
2323
hibernate:
2424
default_batch_fetch_size: 100

0 commit comments

Comments
ย (0)