Skip to content

Commit 387c70c

Browse files
authored
[feat] member 데이터 분리 및 활동 관리 테이블 추가 (#569)
* [chore] ai, mac os 관련 ignore 항목 추가 * [feat] applicant 테이블 생성 및 member 데이터 이관 * [feat] member_activity 및 구성원 타입별 관리 테이블 생성 * [feat] 활동 관리 테이블로 데이터 복사 * [feat] 지원자 및 관리자 데이터 삭제 * [feat] 추가된 테이블 entity 생성 * ActivityStatus 엔티티 컬럼 정의 누락 수정 * [refactor] member_activity와 member 사이 연관관계 제거
1 parent 1ebdb26 commit 387c70c

11 files changed

Lines changed: 491 additions & 0 deletions

.gitignore

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,20 @@ out/
3939
spy.log
4040
src/main/generated/
4141
dynamodb-local-metadata.json
42+
43+
### mac OS ###
44+
.DS_Store
45+
46+
### AI ###
47+
CLAUDE.md
48+
AGENTS.md
49+
GEMINI.md
50+
CODEX.md
51+
.cursorrules
52+
.cursorignore
53+
.cursor/rules/
54+
.cursor/rules/*.mdc
55+
.windsurfrules
56+
.windsurf/
57+
.roo/
58+
.roo-rules/
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package org.ject.support.domain.apply.domain;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Convert;
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.EnumType;
7+
import jakarta.persistence.Enumerated;
8+
import jakarta.persistence.GeneratedValue;
9+
import jakarta.persistence.GenerationType;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.Table;
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
import lombok.*;
16+
import org.hibernate.annotations.SQLDelete;
17+
import org.hibernate.annotations.SQLRestriction;
18+
import org.ject.support.common.util.StringListConverter;
19+
import org.ject.support.domain.base.BaseTimeEntity;
20+
import org.ject.support.domain.member.CareerDetails;
21+
import org.ject.support.domain.member.ExperiencePeriod;
22+
import org.ject.support.domain.member.JobFamily;
23+
import org.ject.support.domain.member.MemberStatus;
24+
import org.ject.support.domain.member.MemberType;
25+
import org.ject.support.domain.member.Region;
26+
import org.ject.support.domain.member.Role;
27+
28+
@Entity
29+
@Getter
30+
@Builder
31+
@Table(name = "applicant")
32+
@SQLDelete(sql = "UPDATE applicant SET is_deleted = true WHERE id = ?")
33+
@SQLRestriction("is_deleted = false")
34+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
35+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
36+
public class Applicant extends BaseTimeEntity {
37+
38+
@Id
39+
@GeneratedValue(strategy = GenerationType.IDENTITY)
40+
private Long id;
41+
42+
@Column(length = 20)
43+
private String name;
44+
45+
@Column(length = 12)
46+
private String phoneNumber;
47+
48+
@Column(length = 30, nullable = false)
49+
private String email;
50+
51+
@Column(nullable = false)
52+
private Long semesterId;
53+
54+
@Enumerated(EnumType.STRING)
55+
@Column(columnDefinition = "varchar(45)")
56+
private JobFamily jobFamily;
57+
58+
@Enumerated(EnumType.STRING)
59+
@Column(columnDefinition = "varchar(10)", nullable = false)
60+
private Role role;
61+
62+
@Column(length = 255)
63+
private String pin;
64+
65+
@Enumerated(EnumType.STRING)
66+
@Column(columnDefinition = "varchar(45)", nullable = false)
67+
@Builder.Default
68+
private MemberStatus status = MemberStatus.ACTIVE;
69+
70+
@Column(name = "is_deleted", nullable = false)
71+
@Builder.Default
72+
private Boolean isDeleted = false;
73+
74+
@Enumerated(EnumType.STRING)
75+
@Column(length = 30)
76+
private CareerDetails careerDetails;
77+
78+
@Enumerated(EnumType.STRING)
79+
@Column(length = 30)
80+
private ExperiencePeriod experiencePeriod;
81+
82+
@Column(name = "domain_name", length = 50)
83+
@Convert(converter = StringListConverter.class)
84+
@Builder.Default
85+
private List<String> interestedDomains = new ArrayList<>();
86+
87+
@Enumerated(EnumType.STRING)
88+
@Column(length = 30)
89+
private Region region;
90+
91+
@Enumerated(EnumType.STRING)
92+
@Column(name = "member_type", columnDefinition = "varchar(45)", nullable = false)
93+
@Builder.Default
94+
private MemberType memberType = MemberType.SEMESTER;
95+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.ject.support.domain.member;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@AllArgsConstructor
8+
public enum ActivityStatus {
9+
ACTIVE("활동중"),
10+
COMPLETED("완주"),
11+
ENDED("활동종료"),
12+
DROPOUT("중도하차");
13+
14+
private final String description;
15+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package org.ject.support.domain.member.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.EnumType;
6+
import jakarta.persistence.Enumerated;
7+
import jakarta.persistence.FetchType;
8+
import jakarta.persistence.GeneratedValue;
9+
import jakarta.persistence.GenerationType;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.JoinColumn;
12+
import jakarta.persistence.ManyToOne;
13+
import jakarta.persistence.Table;
14+
import java.time.LocalDate;
15+
16+
import lombok.*;
17+
import org.hibernate.annotations.SQLDelete;
18+
import org.hibernate.annotations.SQLRestriction;
19+
import org.ject.support.domain.base.BaseTimeEntity;
20+
import org.ject.support.domain.member.ActivityStatus;
21+
import org.ject.support.domain.member.CareerDetails;
22+
import org.ject.support.domain.member.ExperiencePeriod;
23+
import org.ject.support.domain.member.JobFamily;
24+
import org.ject.support.domain.member.MemberType;
25+
26+
@Entity
27+
@Getter
28+
@Builder
29+
@Table(name = "member_activity")
30+
@SQLDelete(sql = "UPDATE member_activity SET is_deleted = true WHERE id = ?")
31+
@SQLRestriction("is_deleted = false")
32+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
33+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
34+
public class MemberActivity extends BaseTimeEntity {
35+
36+
@Id
37+
@GeneratedValue(strategy = GenerationType.IDENTITY)
38+
private Long id;
39+
40+
@Column(name = "member_id", nullable = false)
41+
private Long memberId;
42+
43+
@Column(name = "is_deleted", nullable = false)
44+
@Builder.Default
45+
private Boolean isDeleted = false;
46+
47+
@Enumerated(EnumType.STRING)
48+
@Column(length = 30)
49+
private CareerDetails careerDetails;
50+
51+
@Enumerated(EnumType.STRING)
52+
@Column(name = "member_type", columnDefinition = "varchar(45)", nullable = false)
53+
private MemberType memberType;
54+
55+
@Enumerated(EnumType.STRING)
56+
@Column(columnDefinition = "varchar(45)")
57+
private JobFamily jobFamily;
58+
59+
@Enumerated(EnumType.STRING)
60+
@Column(columnDefinition = "varchar(45)", nullable = false)
61+
@Builder.Default
62+
private ActivityStatus activityStatus = ActivityStatus.ACTIVE;
63+
64+
@Enumerated(EnumType.STRING)
65+
@Column(length = 30)
66+
private ExperiencePeriod experiencePeriod;
67+
68+
private LocalDate startDate;
69+
70+
private LocalDate endDate;
71+
72+
@Column(length = 100)
73+
private String memo;
74+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.ject.support.domain.member.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.FetchType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.MapsId;
9+
import jakarta.persistence.OneToOne;
10+
import jakarta.persistence.Table;
11+
import lombok.*;
12+
import org.ject.support.domain.base.BaseTimeEntity;
13+
14+
@Entity
15+
@Getter
16+
@Builder
17+
@Table(name = "member_makers")
18+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
20+
public class MemberMakers extends BaseTimeEntity {
21+
22+
@Id
23+
private Long id;
24+
25+
@MapsId
26+
@OneToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "id", nullable = false)
28+
private MemberActivity memberActivity;
29+
30+
@Column(length = 20)
31+
private String teamName;
32+
33+
@Column(length = 30)
34+
private String mentoringAvailability;
35+
36+
@Column(length = 30)
37+
private String projectSupplementAvailability;
38+
39+
@Column(length = 30)
40+
private String speakerAvailability;
41+
42+
@Column(length = 30)
43+
private String careerLevel;
44+
45+
@Column(length = 255)
46+
private String skills;
47+
48+
@Column(length = 30)
49+
private String company;
50+
51+
@Column(length = 30)
52+
private String expertTopics;
53+
54+
@Column(length = 20)
55+
private String activityCertNumber;
56+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.ject.support.domain.member.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.FetchType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.MapsId;
9+
import jakarta.persistence.OneToOne;
10+
import jakarta.persistence.Table;
11+
import lombok.*;
12+
import org.ject.support.domain.base.BaseTimeEntity;
13+
14+
@Entity
15+
@Getter
16+
@Builder
17+
@Table(name = "member_semester")
18+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
20+
public class MemberSemester extends BaseTimeEntity {
21+
22+
@Id
23+
private Long id;
24+
25+
@MapsId
26+
@OneToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "id", nullable = false)
28+
private MemberActivity memberActivity;
29+
30+
@Column(nullable = false)
31+
private Long semesterId;
32+
33+
private Long teamId;
34+
35+
@Column(length = 20)
36+
private String certNumber;
37+
38+
@Column(length = 255)
39+
private String firstReview;
40+
41+
@Column(length = 255)
42+
private String secondReview;
43+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.ject.support.domain.member.entity;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.FetchType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.JoinColumn;
8+
import jakarta.persistence.MapsId;
9+
import jakarta.persistence.OneToOne;
10+
import jakarta.persistence.Table;
11+
import lombok.*;
12+
import org.ject.support.domain.base.BaseTimeEntity;
13+
14+
@Entity
15+
@Getter
16+
@Builder
17+
@Table(name = "member_supporters")
18+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
19+
@AllArgsConstructor(access = AccessLevel.PRIVATE)
20+
public class MemberSupporters extends BaseTimeEntity {
21+
22+
@Id
23+
private Long id;
24+
25+
@MapsId
26+
@OneToOne(fetch = FetchType.LAZY)
27+
@JoinColumn(name = "id", nullable = false)
28+
private MemberActivity memberActivity;
29+
30+
@Column(length = 20)
31+
private String activityCertNumber;
32+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
-- 26-05-19 시점의 member 테이블 상태를 그대로 복사
2+
-- 제약조건은 추후 수정, 추가
3+
CREATE TABLE applicant
4+
(
5+
id bigint auto_increment primary key,
6+
created_at datetime(6) null,
7+
updated_at datetime(6) null,
8+
name varchar(20) null,
9+
phone_number varchar(12) null,
10+
email varchar(30) not null,
11+
semester_id bigint not null,
12+
job_family varchar(45) null,
13+
role varchar(10) not null,
14+
pin varchar(255) null,
15+
status varchar(45) default 'ACTIVE' not null,
16+
is_deleted tinyint(1) default 0 not null,
17+
career_details varchar(30) null,
18+
experience_period varchar(30) null,
19+
domain_name varchar(50) null,
20+
region varchar(30) null,
21+
member_type varchar(45) default 'SEMESTER' not null
22+
);
23+
24+
INSERT INTO applicant (id, created_at, updated_at, name, phone_number, email, semester_id, job_family, role, pin, status, is_deleted, career_details, experience_period, domain_name, region, member_type)
25+
SELECT id, created_at, updated_at, name, phone_number, email, semester_id, job_family, role, pin, status, is_deleted, career_details, experience_period, domain_name, region, member_type
26+
FROM member;

0 commit comments

Comments
 (0)