diff --git a/back/src/main/java/com/back/domain/job/job/entity/Job.java b/back/src/main/java/com/back/domain/job/job/entity/Job.java new file mode 100644 index 00000000..a4e04d32 --- /dev/null +++ b/back/src/main/java/com/back/domain/job/job/entity/Job.java @@ -0,0 +1,34 @@ +package com.back.domain.job.job.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Entity +@Table(name = "job") +@Getter @Setter +@NoArgsConstructor +public class Job extends BaseEntity { + @Column(name = "name", nullable = false, unique = true) + private String name; + + @Column(name = "description", columnDefinition = "TEXT") + private String description; + + @OneToMany(mappedBy = "job", cascade = CascadeType.ALL) + private List aliases; + + public Job(String name, String description) { + this.name = name; + this.description = description; + } + + public void addAlias(JobAlias alias) { + aliases.add(alias); + alias.setJob(this); + } +} diff --git a/back/src/main/java/com/back/domain/job/job/entity/JobAlias.java b/back/src/main/java/com/back/domain/job/job/entity/JobAlias.java new file mode 100644 index 00000000..5d77c85c --- /dev/null +++ b/back/src/main/java/com/back/domain/job/job/entity/JobAlias.java @@ -0,0 +1,25 @@ +package com.back.domain.job.job.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "job_alias") +@Getter @Setter +@NoArgsConstructor +public class JobAlias extends BaseEntity { + @Column(name = "name", nullable = false) + private String name; // 사용자가 입력한 직군 이름 + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "job_id") + private Job job; // 표준 Job 연결 (NULL이면 pending 상태) + + public JobAlias(String name) { + this.name = name; + this.job = null; // 기본적으로 연결된 Job이 없음 (pending 상태) + } +} diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmap.java b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmap.java new file mode 100644 index 00000000..00546906 --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmap.java @@ -0,0 +1,25 @@ +package com.back.domain.roadmap.roadmap.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "job_roadmap") +@Getter @Setter +@NoArgsConstructor +public class JobRoadmap extends BaseEntity { + @Column(name = "job_id", nullable = false) + private Long jobId; // Job FK + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "root_node_id", nullable = false) + private RoadmapNode rootNode; + + public JobRoadmap(Long jobId, RoadmapNode rootNode) { + this.jobId = jobId; + this.rootNode = rootNode; + } +} diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmapNodeStat.java b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmapNodeStat.java new file mode 100644 index 00000000..bc75b026 --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/JobRoadmapNodeStat.java @@ -0,0 +1,23 @@ +package com.back.domain.roadmap.roadmap.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "job_roadmap_node_stat") +@Getter @Setter +@NoArgsConstructor +public class JobRoadmapNodeStat extends BaseEntity { + @Column(name = "step_order") + private Integer stepOrder; + + @Column(name = "weight", nullable = false) + private Double weight = 0.0; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "node_id", nullable = false) + private RoadmapNode node; +} diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/entity/MentorRoadmap.java b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/MentorRoadmap.java new file mode 100644 index 00000000..9ae1cdfd --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/MentorRoadmap.java @@ -0,0 +1,33 @@ +package com.back.domain.roadmap.roadmap.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "mentor_roadmap") +@Getter @Setter +@NoArgsConstructor +public class MentorRoadmap extends BaseEntity { + @Column(name = "title", nullable = false) + private String title; + + @Column(name = "description", columnDefinition = "TEXT") + private String description; + + @Column(name = "mentor_id", nullable = false) + private Long mentorId; // Mentor 엔티티 FK + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "root_node_id", nullable = false) + private RoadmapNode rootNode; + + public MentorRoadmap(Long mentorId, String title, String description, RoadmapNode rootNode) { + this.mentorId = mentorId; + this.title = title; + this.description = description; + this.rootNode = rootNode; + } +} diff --git a/back/src/main/java/com/back/domain/roadmap/roadmap/entity/RoadmapNode.java b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/RoadmapNode.java new file mode 100644 index 00000000..02b043a1 --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/roadmap/entity/RoadmapNode.java @@ -0,0 +1,47 @@ +package com.back.domain.roadmap.roadmap.entity; + +import com.back.domain.roadmap.task.entity.Task; +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Entity +@Table(name = "roadmap_node") +@Getter @Setter +@NoArgsConstructor +public class RoadmapNode extends BaseEntity { + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private RoadmapNode parent; + + @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true) + private List children; + + @Column(name = "step_order", nullable = false) + private int stepOrder = 0; + + @Column(name = "raw_task_name") + private String rawTaskName; // 원본 Task 입력값 + + @Column(name = "description", columnDefinition = "TEXT") + private String description; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "task_id") + private Task task; // 표준 Task + + public RoadmapNode(String rawTaskName, String description, Task task) { + this.rawTaskName = rawTaskName; + this.description = description; + this.task = task; + } + + public void addChild(RoadmapNode child) { + children.add(child); + child.setParent(this); + } +} diff --git a/back/src/main/java/com/back/domain/roadmap/task/entity/Task.java b/back/src/main/java/com/back/domain/roadmap/task/entity/Task.java new file mode 100644 index 00000000..c31fd4a3 --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/task/entity/Task.java @@ -0,0 +1,30 @@ +package com.back.domain.roadmap.task.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Entity +@Table(name = "task") +@Getter @Setter +@NoArgsConstructor +public class Task extends BaseEntity { + @Column(name = "name", nullable = false, unique = true) + private String name; + + @OneToMany(mappedBy = "task", cascade = CascadeType.ALL) + private List aliases; + + public Task(String name) { + this.name = name; + } + + public void addAlias(TaskAlias alias) { + aliases.add(alias); + alias.setTask(this); + } +} diff --git a/back/src/main/java/com/back/domain/roadmap/task/entity/TaskAlias.java b/back/src/main/java/com/back/domain/roadmap/task/entity/TaskAlias.java new file mode 100644 index 00000000..4716e1a8 --- /dev/null +++ b/back/src/main/java/com/back/domain/roadmap/task/entity/TaskAlias.java @@ -0,0 +1,25 @@ +package com.back.domain.roadmap.task.entity; + +import com.back.global.jpa.BaseEntity; +import jakarta.persistence.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "task_alias") +@Getter @Setter +@NoArgsConstructor +public class TaskAlias extends BaseEntity { + @Column(name = "name", nullable = false) + private String name; // 사용자가 입력한 Task 이름 + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "task_id") + private Task task; // 표준 Task 연결 (NULL이면 pending 상태) + + public TaskAlias(String name) { + this.name = name; + this.task = null; // 기본적으로 연결된 Task가 없음 (pending 상태) + } +}