Skip to content

Commit 802e5ec

Browse files
committed
feat: Season데이터구조 설계 및 구현& MockUser 구현
1 parent 77c7c53 commit 802e5ec

File tree

10 files changed

+187
-0
lines changed

10 files changed

+187
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package cmf.commitField.domain.mock.user.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import com.fasterxml.jackson.databind.ser.Serializers;
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.Table;
7+
import lombok.*;
8+
9+
@Entity
10+
@Getter
11+
@Setter
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
@Table(name = "mock_user")
15+
public class MockUser extends BaseEntity {
16+
private String email;
17+
private String nickname;
18+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package cmf.commitField.domain.mock.user.repository;
2+
3+
import cmf.commitField.domain.mock.user.entity.MockUser;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface MockUserRepository extends JpaRepository<MockUser, Long> {
9+
MockUser findByNickname(String nickname);
10+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cmf.commitField.domain.season.controller;
2+
3+
import cmf.commitField.domain.season.entity.Season;
4+
import cmf.commitField.domain.season.service.SeasonService;
5+
import lombok.RequiredArgsConstructor;
6+
import org.springframework.web.bind.annotation.*;
7+
8+
import javax.swing.*;
9+
import java.time.LocalDateTime;
10+
11+
@RestController
12+
@RequestMapping("/api/seasons")
13+
@RequiredArgsConstructor
14+
public class ApiV1SeasonController {
15+
private final SeasonService seasonService;
16+
17+
// 입력 예시
18+
// name: 2025 1분기
19+
// start: 2025-01-01T00:00:00Z
20+
// end: 2025-02-28T23:59:59Z
21+
@PostMapping
22+
public Season createSeason() {
23+
String name = "2025 1분기";
24+
LocalDateTime start = LocalDateTime.of(2025, 1, 1, 0, 0, 0);
25+
LocalDateTime end = LocalDateTime.of(2025, 2, 28, 23, 59, 59);
26+
27+
return seasonService.createNewSeason(name, start, end);
28+
}
29+
30+
@GetMapping("/active")
31+
public Season getActiveSeason() {
32+
return seasonService.getActiveSeason();
33+
}
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package cmf.commitField.domain.season.entity;
2+
3+
public enum Rank {
4+
SEED, // 씨앗
5+
SPROUT, // 새싹
6+
STEM, // 줄기
7+
FLOWER, // 꽃
8+
FRUIT, // 열매
9+
TREE // 나무
10+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package cmf.commitField.domain.season.entity;
2+
3+
import cmf.commitField.global.jpa.BaseEntity;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.EnumType;
6+
import jakarta.persistence.Enumerated;
7+
import jakarta.persistence.Table;
8+
import lombok.*;
9+
import lombok.experimental.SuperBuilder;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Entity
14+
@Getter
15+
@Setter
16+
@NoArgsConstructor
17+
@AllArgsConstructor
18+
@SuperBuilder
19+
@Table(name = "season")
20+
public class Season extends BaseEntity {
21+
private String name;
22+
23+
private LocalDateTime startDate;
24+
private LocalDateTime endDate;
25+
26+
@Enumerated(EnumType.STRING)
27+
private SeasonStatus status; // ACTIVE, INACTIVE
28+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package cmf.commitField.domain.season.entity;
2+
3+
public enum SeasonStatus {
4+
ACTIVE, INACTIVE
5+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cmf.commitField.domain.season.entity;
2+
3+
import cmf.commitField.domain.mock.user.entity.MockUser;
4+
import cmf.commitField.global.jpa.BaseEntity;
5+
import jakarta.persistence.*;
6+
import lombok.*;
7+
8+
import java.time.LocalDateTime;
9+
10+
@Entity
11+
@Getter
12+
@Setter
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
@Table(name = "user_season")
16+
public class UserSeason extends BaseEntity {
17+
18+
@ManyToOne
19+
@JoinColumn(name = "user_id")
20+
private MockUser user;
21+
22+
@ManyToOne
23+
@JoinColumn(name = "season_id")
24+
private Season season;
25+
26+
@Enumerated(EnumType.STRING)
27+
@Column(name = "`rank`") // 백틱(`)을 사용하여 예약어 문제 해결
28+
private Rank rank; // 예: SEED, TREE 등등
29+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package cmf.commitField.domain.season.repository;
2+
3+
import cmf.commitField.domain.season.entity.Season;
4+
import cmf.commitField.domain.season.entity.SeasonStatus;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface SeasonRepository extends JpaRepository<Season, Long> {
10+
Season findByStatus(SeasonStatus status);
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cmf.commitField.domain.season.repository;
2+
3+
import cmf.commitField.domain.mock.user.entity.MockUser;
4+
import cmf.commitField.domain.season.entity.UserSeason;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
import java.util.List;
9+
10+
@Repository
11+
public interface UserSeasonRepository extends JpaRepository<UserSeason, Long> {
12+
List<UserSeason> findByUser(MockUser user);
13+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cmf.commitField.domain.season.service;
2+
3+
import cmf.commitField.domain.season.entity.Season;
4+
import cmf.commitField.domain.season.entity.SeasonStatus;
5+
import cmf.commitField.domain.season.repository.SeasonRepository;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Service;
8+
9+
import java.time.LocalDateTime;
10+
11+
@Service
12+
@RequiredArgsConstructor
13+
public class SeasonService {
14+
private final SeasonRepository seasonRepository;
15+
16+
public Season createNewSeason(String name, LocalDateTime start, LocalDateTime end) {
17+
Season season = Season.builder()
18+
.name(name)
19+
.startDate(start)
20+
.endDate(end)
21+
.status(SeasonStatus.ACTIVE)
22+
.build();
23+
return seasonRepository.save(season);
24+
}
25+
26+
public Season getActiveSeason() {
27+
return seasonRepository.findByStatus(SeasonStatus.ACTIVE);
28+
}
29+
}

0 commit comments

Comments
 (0)