Skip to content

Commit a063cfa

Browse files
authored
feat: 로드맵 도메인 엔티티 구현 (#21)
1 parent 4d09fb5 commit a063cfa

File tree

8 files changed

+242
-0
lines changed

8 files changed

+242
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.back.domain.job.job.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
import java.util.List;
10+
11+
@Entity
12+
@Table(name = "job")
13+
@Getter @Setter
14+
@NoArgsConstructor
15+
public class Job extends BaseEntity {
16+
@Column(name = "name", nullable = false, unique = true)
17+
private String name;
18+
19+
@Column(name = "description", columnDefinition = "TEXT")
20+
private String description;
21+
22+
@OneToMany(mappedBy = "job", cascade = CascadeType.ALL)
23+
private List<JobAlias> aliases;
24+
25+
public Job(String name, String description) {
26+
this.name = name;
27+
this.description = description;
28+
}
29+
30+
public void addAlias(JobAlias alias) {
31+
aliases.add(alias);
32+
alias.setJob(this);
33+
}
34+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.back.domain.job.job.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Table(name = "job_alias")
11+
@Getter @Setter
12+
@NoArgsConstructor
13+
public class JobAlias extends BaseEntity {
14+
@Column(name = "name", nullable = false)
15+
private String name; // 사용자가 입력한 직군 이름
16+
17+
@ManyToOne(fetch = FetchType.LAZY)
18+
@JoinColumn(name = "job_id")
19+
private Job job; // 표준 Job 연결 (NULL이면 pending 상태)
20+
21+
public JobAlias(String name) {
22+
this.name = name;
23+
this.job = null; // 기본적으로 연결된 Job이 없음 (pending 상태)
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.back.domain.roadmap.roadmap.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Table(name = "job_roadmap")
11+
@Getter @Setter
12+
@NoArgsConstructor
13+
public class JobRoadmap extends BaseEntity {
14+
@Column(name = "job_id", nullable = false)
15+
private Long jobId; // Job FK
16+
17+
@OneToOne(fetch = FetchType.LAZY)
18+
@JoinColumn(name = "root_node_id", nullable = false)
19+
private RoadmapNode rootNode;
20+
21+
public JobRoadmap(Long jobId, RoadmapNode rootNode) {
22+
this.jobId = jobId;
23+
this.rootNode = rootNode;
24+
}
25+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.back.domain.roadmap.roadmap.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Table(name = "job_roadmap_node_stat")
11+
@Getter @Setter
12+
@NoArgsConstructor
13+
public class JobRoadmapNodeStat extends BaseEntity {
14+
@Column(name = "step_order")
15+
private Integer stepOrder;
16+
17+
@Column(name = "weight", nullable = false)
18+
private Double weight = 0.0;
19+
20+
@OneToOne(fetch = FetchType.LAZY)
21+
@JoinColumn(name = "node_id", nullable = false)
22+
private RoadmapNode node;
23+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.back.domain.roadmap.roadmap.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Table(name = "mentor_roadmap")
11+
@Getter @Setter
12+
@NoArgsConstructor
13+
public class MentorRoadmap extends BaseEntity {
14+
@Column(name = "title", nullable = false)
15+
private String title;
16+
17+
@Column(name = "description", columnDefinition = "TEXT")
18+
private String description;
19+
20+
@Column(name = "mentor_id", nullable = false)
21+
private Long mentorId; // Mentor 엔티티 FK
22+
23+
@OneToOne(fetch = FetchType.LAZY)
24+
@JoinColumn(name = "root_node_id", nullable = false)
25+
private RoadmapNode rootNode;
26+
27+
public MentorRoadmap(Long mentorId, String title, String description, RoadmapNode rootNode) {
28+
this.mentorId = mentorId;
29+
this.title = title;
30+
this.description = description;
31+
this.rootNode = rootNode;
32+
}
33+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.back.domain.roadmap.roadmap.entity;
2+
3+
import com.back.domain.roadmap.task.entity.Task;
4+
import com.back.global.jpa.BaseEntity;
5+
import jakarta.persistence.*;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
10+
import java.util.List;
11+
12+
@Entity
13+
@Table(name = "roadmap_node")
14+
@Getter @Setter
15+
@NoArgsConstructor
16+
public class RoadmapNode extends BaseEntity {
17+
@ManyToOne(fetch = FetchType.LAZY)
18+
@JoinColumn(name = "parent_id")
19+
private RoadmapNode parent;
20+
21+
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
22+
private List<RoadmapNode> children;
23+
24+
@Column(name = "step_order", nullable = false)
25+
private int stepOrder = 0;
26+
27+
@Column(name = "raw_task_name")
28+
private String rawTaskName; // 원본 Task 입력값
29+
30+
@Column(name = "description", columnDefinition = "TEXT")
31+
private String description;
32+
33+
@ManyToOne(fetch = FetchType.LAZY)
34+
@JoinColumn(name = "task_id")
35+
private Task task; // 표준 Task
36+
37+
public RoadmapNode(String rawTaskName, String description, Task task) {
38+
this.rawTaskName = rawTaskName;
39+
this.description = description;
40+
this.task = task;
41+
}
42+
43+
public void addChild(RoadmapNode child) {
44+
children.add(child);
45+
child.setParent(this);
46+
}
47+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.back.domain.roadmap.task.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
import java.util.List;
10+
11+
@Entity
12+
@Table(name = "task")
13+
@Getter @Setter
14+
@NoArgsConstructor
15+
public class Task extends BaseEntity {
16+
@Column(name = "name", nullable = false, unique = true)
17+
private String name;
18+
19+
@OneToMany(mappedBy = "task", cascade = CascadeType.ALL)
20+
private List<TaskAlias> aliases;
21+
22+
public Task(String name) {
23+
this.name = name;
24+
}
25+
26+
public void addAlias(TaskAlias alias) {
27+
aliases.add(alias);
28+
alias.setTask(this);
29+
}
30+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.back.domain.roadmap.task.entity;
2+
3+
import com.back.global.jpa.BaseEntity;
4+
import jakarta.persistence.*;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@Entity
10+
@Table(name = "task_alias")
11+
@Getter @Setter
12+
@NoArgsConstructor
13+
public class TaskAlias extends BaseEntity {
14+
@Column(name = "name", nullable = false)
15+
private String name; // 사용자가 입력한 Task 이름
16+
17+
@ManyToOne(fetch = FetchType.LAZY)
18+
@JoinColumn(name = "task_id")
19+
private Task task; // 표준 Task 연결 (NULL이면 pending 상태)
20+
21+
public TaskAlias(String name) {
22+
this.name = name;
23+
this.task = null; // 기본적으로 연결된 Task가 없음 (pending 상태)
24+
}
25+
}

0 commit comments

Comments
 (0)