Skip to content

Commit ca304f7

Browse files
committed
Merge branch 'dev'
2 parents 0e15479 + d79764e commit ca304f7

21 files changed

+327
-44
lines changed

โ€Žsrc/main/java/cmf/commitField/CommitFieldApplication.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
@SpringBootApplication
99
@EnableJpaAuditing
1010
@EnableScheduling
11-
public class CommitFieldApplication {
11+
public class
12+
CommitFieldApplication {
1213
public static void main(String[] args) {
1314
SpringApplication.run(CommitFieldApplication.class, args);
1415
}

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import lombok.extern.slf4j.Slf4j;
88
import org.springframework.context.ApplicationEventPublisher;
99
import org.springframework.data.redis.core.StringRedisTemplate;
10+
import org.springframework.messaging.simp.SimpMessagingTemplate;
1011
import org.springframework.scheduling.annotation.Scheduled;
1112
import org.springframework.stereotype.Service;
1213

@@ -23,9 +24,32 @@ public class CommitScheduler {
2324
private final UserRepository userRepository;
2425
private final StringRedisTemplate redisTemplate;
2526
private final AtomicInteger counter = new AtomicInteger(0);
27+
private final SimpMessagingTemplate messagingTemplate;
2628

2729
private final ApplicationEventPublisher eventPublisher;
2830

31+
// TODO: ํ™•์žฅ์‹œ ์ถ”๊ฐ€
32+
33+
// @Scheduled(fixedRate = 60000) // 1๋ถ„๋งˆ๋‹ค ์‹คํ–‰
34+
// public void updateMatchCommitCounts() {
35+
// Map<Object, Object> entries = redisTemplate.opsForHash().entries("active_matches");
36+
//
37+
// Map<String, MatchSession> activeMatches = new HashMap<>();
38+
// for (Map.Entry<Object, Object> entry : entries.entrySet()) {
39+
// if (entry.getKey() instanceof String && entry.getValue() instanceof MatchSession) {
40+
// activeMatches.put((String) entry.getKey(), (MatchSession) entry.getValue());
41+
// }
42+
// }
43+
//
44+
// for (MatchSession match : activeMatches.values()) {
45+
// long player1Commits = Long.parseLong(redisTemplate.opsForValue().get("commit_active:"+match.getPlayer1()));
46+
// long player2Commits = Long.parseLong(redisTemplate.opsForValue().get("commit_active:"+match.getPlayer2()));
47+
//
48+
// redisTemplate.opsForHash().put("active_matches", match.getMatchId(), match);
49+
//
50+
// messagingTemplate.convertAndSend("/topic/match/" + match.getMatchId(), match);
51+
// }
52+
// }
2953

3054
@Scheduled(fixedRate = 60000) // 1๋ถ„๋งˆ๋‹ค ์‹คํ–‰
3155
public void updateUserCommits() {

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

Lines changed: 2 additions & 1 deletion
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.noti.noti.service.NotiService;
55
import cmf.commitField.domain.user.dto.UserInfoDto;
6+
import cmf.commitField.domain.user.entity.Tier;
67
import cmf.commitField.domain.user.entity.User;
78
import cmf.commitField.domain.user.repository.UserRepository;
89
import lombok.RequiredArgsConstructor;
@@ -23,7 +24,7 @@ public UserInfoDto updateUserTier(String username){
2324
User user = userRepository.findByUsername(username).get();
2425
long seasonCommitCount;
2526
seasonCommitCount = totalCommitService.getSeasonCommits(user.getUsername(), LocalDateTime.of(2025,03,01,0,0), LocalDateTime.of(2025,05,31,23,59)).getTotalCommitContributions();
26-
user.setTier(User.Tier.getLevelByExp((int)seasonCommitCount));
27+
user.setTier(Tier.getLevelByExp((int)seasonCommitCount));
2728
System.out.println(username+"์œ ์ € ๋ ˆ๋ฒจ ์—…! ํ˜„์žฌ ํ‹ฐ์–ด: "+user.getTier());
2829
userRepository.save(user);
2930

โ€Žsrc/main/java/cmf/commitField/domain/commit/totalCommit/config/WebConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public class WebConfig implements WebMvcConfigurer {
88
@Override
99
public void addCorsMappings(CorsRegistry registry) {
1010
registry.addMapping("/**")
11-
.allowedOrigins("http://localhost:8090") // ํ”„๋ก ํŠธ์—”๋“œ ๋„๋ฉ”์ธ
11+
.allowedOrigins("http://localhost:5173") // ํ”„๋ก ํŠธ์—”๋“œ ๋„๋ฉ”์ธ
1212
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
1313
.allowedHeaders("*")
1414
.allowCredentials(true);

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

Lines changed: 3 additions & 2 deletions
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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package cmf.commitField.domain.user.controller;
2+
3+
import cmf.commitField.domain.user.service.MatchService;
4+
import lombok.RequiredArgsConstructor;
5+
import org.springframework.http.ResponseEntity;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.RequestMapping;
8+
import org.springframework.web.bind.annotation.RequestParam;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
@RestController
12+
@RequiredArgsConstructor
13+
@RequestMapping("/match")
14+
public class MatchController {
15+
private final MatchService matchService;
16+
17+
@PostMapping("/request")
18+
public ResponseEntity<String> requestMatch(@RequestParam String userId, @RequestParam int duration) {
19+
matchService.enqueueUser(userId, duration);
20+
return ResponseEntity.ok("๋งค์นญ ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋จ");
21+
}
22+
}

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

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package cmf.commitField.domain.user.controller;
22

33
import cmf.commitField.domain.commit.totalCommit.service.TotalCommitService;
4+
import cmf.commitField.domain.user.dto.UserChatInfoDto;
45
import cmf.commitField.domain.user.dto.UserInfoDto;
6+
import cmf.commitField.domain.user.dto.UserRegacyDto;
57
import cmf.commitField.domain.user.entity.CustomOAuth2User;
68
import cmf.commitField.domain.user.service.UserService;
79
import lombok.RequiredArgsConstructor;
@@ -11,14 +13,27 @@
1113
import org.springframework.web.bind.annotation.RequestMapping;
1214
import org.springframework.web.bind.annotation.RestController;
1315

16+
import java.util.List;
17+
1418
@RestController
1519
@RequestMapping("/api/user")
1620
@RequiredArgsConstructor
1721
public class UserController {
1822
private final UserService userService;
1923
private final TotalCommitService totalCommitService;
2024

21-
@GetMapping("info")
25+
@GetMapping("/chatinfo")
26+
public ResponseEntity<UserChatInfoDto> getUserChatInfo(@AuthenticationPrincipal CustomOAuth2User oAuth2User){
27+
String username = oAuth2User.getName();
28+
29+
//์œ ์ € ์ •๋ณด์˜ ์กฐํšŒ
30+
//์ด ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์œ ์ €์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๊ณ , ์กฐํšŒํ•œ ์œ ์ €๋ฅผ active ์ƒํƒœ๋กœ ๋งŒ๋“ ๋‹ค.
31+
UserChatInfoDto userChatInfoDto = userService.showUserChatInfo(username);
32+
33+
return ResponseEntity.ok(userChatInfoDto);
34+
}
35+
36+
@GetMapping("/info")
2237
public ResponseEntity<UserInfoDto> getUserInfo(@AuthenticationPrincipal CustomOAuth2User oAuth2User){
2338
String username = oAuth2User.getName();
2439

@@ -28,4 +43,11 @@ public ResponseEntity<UserInfoDto> getUserInfo(@AuthenticationPrincipal CustomOA
2843

2944
return ResponseEntity.ok(userInfoDto);
3045
}
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+
}
3153
}
Lines changed: 13 additions & 0 deletions
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 UserChatInfoDto {
9+
private long id;
10+
private String username;
11+
private String nickname;
12+
private String email;
13+
}

โ€Žsrc/main/java/cmf/commitField/domain/user/dto/UserInfoDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
public class UserInfoDto {
1111

1212
private String username;
13+
private String nickname;
1314
private String email;
1415
private String avatarUrl;
1516
private LocalDateTime createdAt;
Lines changed: 13 additions & 0 deletions
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+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package cmf.commitField.domain.user.entity;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
6+
@Data
7+
@AllArgsConstructor
8+
public class MatchSession {
9+
private String matchId;
10+
private String player1;
11+
private String player2;
12+
private int matchDuration; // 1/3/5์‹œ๊ฐ„
13+
private long startTime;
14+
private int player1Commits;
15+
private int player2Commits;
16+
17+
public MatchSession(String matchId, String player1, String player2, int matchDuration) {
18+
this.matchId = matchId;
19+
this.player1 = player1;
20+
this.player2 = player2;
21+
this.matchDuration = matchDuration;
22+
this.startTime = System.currentTimeMillis();
23+
this.player1Commits = 0;
24+
this.player2Commits = 0;
25+
}
26+
27+
public boolean isTimeUp() {
28+
return System.currentTimeMillis() - startTime >= matchDuration * 3600000;
29+
}
30+
}
Lines changed: 31 additions & 0 deletions
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+
}
Lines changed: 34 additions & 0 deletions
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

Lines changed: 5 additions & 31 deletions
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;
Lines changed: 16 additions & 0 deletions
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+
}

0 commit comments

Comments
ย (0)