Skip to content

Commit 66a75a3

Browse files
committed
feat(#197/recruit): 기존 신규 멤버 가입 로직에 학기 추가
1 parent f314721 commit 66a75a3

File tree

6 files changed

+96
-0
lines changed

6 files changed

+96
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package inha.gdgoc.domain.recruit.dto.request;
2+
3+
import com.fasterxml.jackson.databind.JsonNode;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
@Getter
11+
public class AnswerCreateRequest {
12+
private String surveyType;
13+
private String inputType;
14+
private JsonNode responseValue;
15+
}

src/main/java/inha/gdgoc/domain/recruit/dto/request/RecruitMemberRequest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import inha.gdgoc.domain.recruit.entity.RecruitMember;
44
import inha.gdgoc.domain.recruit.enums.EnrolledClassification;
55
import inha.gdgoc.domain.recruit.enums.Gender;
6+
import inha.gdgoc.global.util.SemesterCalculator;
67
import java.time.LocalDate;
78
import lombok.AllArgsConstructor;
89
import lombok.Builder;
@@ -41,6 +42,7 @@ public RecruitMember toEntity() {
4142
.major(major)
4243
.doubleMajor(doubleMajor)
4344
.isPayed(false)
45+
.admissionSemester(SemesterCalculator.currentSemester())
4446
.build();
4547
}
4648
}

src/main/java/inha/gdgoc/domain/recruit/entity/RecruitMember.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package inha.gdgoc.domain.recruit.entity;
22

33
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import inha.gdgoc.domain.recruit.enums.AdmissionSemester;
45
import inha.gdgoc.domain.recruit.enums.EnrolledClassification;
56
import inha.gdgoc.domain.recruit.enums.Gender;
67
import inha.gdgoc.global.entity.BaseEntity;
@@ -73,6 +74,10 @@ public class RecruitMember extends BaseEntity {
7374
@Column(name = "is_payed", nullable = false)
7475
private Boolean isPayed;
7576

77+
@Enumerated(EnumType.STRING)
78+
@Column(name = "admission_semester", nullable = false, length = 10)
79+
private AdmissionSemester admissionSemester;
80+
7681
@Builder.Default
7782
@OneToMany(mappedBy = "recruitMember", cascade = CascadeType.ALL, orphanRemoval = true)
7883
private List<Answer> answers = new ArrayList<>();
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package inha.gdgoc.domain.recruit.enums;
2+
3+
public enum AdmissionSemester {
4+
Y25_1, Y25_2, Y26_1, Y26_2
5+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package inha.gdgoc.global.util;
2+
3+
import inha.gdgoc.domain.recruit.enums.AdmissionSemester;
4+
5+
import java.time.LocalDate;
6+
import java.time.ZoneId;
7+
8+
public final class SemesterCalculator {
9+
private static final ZoneId KST = ZoneId.of("Asia/Seoul");
10+
11+
private SemesterCalculator() {}
12+
13+
public static AdmissionSemester currentSemester() {
14+
return of(LocalDate.now(KST));
15+
}
16+
17+
public static AdmissionSemester of(LocalDate date) {
18+
int year = date.getYear();
19+
int month = date.getMonthValue();
20+
21+
int yy;
22+
int term;
23+
24+
if (month == 1) {
25+
yy = (year - 1) % 100;
26+
term = 2;
27+
} else if (month <= 7) {
28+
yy = year % 100;
29+
term = 1;
30+
} else {
31+
yy = year % 100;
32+
term = 2;
33+
}
34+
35+
String enumName = String.format("Y%02d_%d", yy, term);
36+
try {
37+
return AdmissionSemester.valueOf(enumName);
38+
} catch (Exception ex) {
39+
throw new RuntimeException(
40+
"AdmissionSemester enum에 상수 " + enumName + " 이(가) 정의되어 있지 않습니다. " +
41+
"해당 연도/학기 상수를 추가하세요.", ex
42+
);
43+
}
44+
}
45+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-- 1) 컬럼 추가 (처음엔 NULL 허용)
2+
ALTER TABLE recruit_member
3+
ADD COLUMN admission_semester VARCHAR(10);
4+
5+
-- 2) 기존 데이터 백필
6+
-- 학기 규칙: 2~7월 = YYY_1, 8~12월 = YYY_2, 1월 = (전년도) YYY_2
7+
UPDATE recruit_member
8+
SET admission_semester = CASE
9+
WHEN EXTRACT(MONTH FROM created_at) BETWEEN 8 AND 12
10+
THEN 'Y' || to_char(created_at, 'YY') || '_2'
11+
WHEN EXTRACT(MONTH FROM created_at) BETWEEN 2 AND 7
12+
THEN 'Y' || to_char(created_at, 'YY') || '_1'
13+
WHEN EXTRACT(MONTH FROM created_at) = 1
14+
THEN 'Y' || to_char(created_at - INTERVAL '1 year', 'YY') || '_2'
15+
END
16+
WHERE admission_semester IS NULL;
17+
18+
-- 3) NOT NULL 전환 (형식 제약은 생략 가능)
19+
ALTER TABLE recruit_member
20+
ALTER COLUMN admission_semester SET NOT NULL;
21+
22+
-- (선택) 인덱스
23+
CREATE INDEX idx_recruit_member_admission_semester
24+
ON recruit_member (admission_semester);

0 commit comments

Comments
 (0)