From ac641cf0ce7938df6d106cc86962f08025986d49 Mon Sep 17 00:00:00 2001 From: bjkim Date: Mon, 4 Aug 2025 16:28:34 +0900 Subject: [PATCH] =?UTF-8?q?[ADD]=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20?= =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../etri/autoflow/entity/ProjectEntity.java | 5 +++ .../autoflow/entity/ProjectPermission.java | 8 ++++ .../autoflow/entity/UserProjectMapEntity.java | 44 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 src/main/java/kr/re/etri/autoflow/entity/ProjectPermission.java create mode 100644 src/main/java/kr/re/etri/autoflow/entity/UserProjectMapEntity.java diff --git a/src/main/java/kr/re/etri/autoflow/entity/ProjectEntity.java b/src/main/java/kr/re/etri/autoflow/entity/ProjectEntity.java index 1abcaf0..d43f16f 100644 --- a/src/main/java/kr/re/etri/autoflow/entity/ProjectEntity.java +++ b/src/main/java/kr/re/etri/autoflow/entity/ProjectEntity.java @@ -9,6 +9,8 @@ import org.springframework.data.annotation.LastModifiedDate; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; @Schema(description = "프로젝트") @Comment("프로젝트") @@ -77,4 +79,7 @@ public class ProjectEntity { @Schema(description = "수정 유저 이름", example = "시스템") @Comment("수정 유저 이름") private String modUserNm; + + @OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true) + private List userMappings = new ArrayList<>(); } diff --git a/src/main/java/kr/re/etri/autoflow/entity/ProjectPermission.java b/src/main/java/kr/re/etri/autoflow/entity/ProjectPermission.java new file mode 100644 index 0000000..47db9ab --- /dev/null +++ b/src/main/java/kr/re/etri/autoflow/entity/ProjectPermission.java @@ -0,0 +1,8 @@ +package kr.re.etri.autoflow.entity; + +public enum ProjectPermission { + CREATE, + READ, + UPDATE, + DELETE +} \ No newline at end of file diff --git a/src/main/java/kr/re/etri/autoflow/entity/UserProjectMapEntity.java b/src/main/java/kr/re/etri/autoflow/entity/UserProjectMapEntity.java new file mode 100644 index 0000000..5c4fab2 --- /dev/null +++ b/src/main/java/kr/re/etri/autoflow/entity/UserProjectMapEntity.java @@ -0,0 +1,44 @@ +package kr.re.etri.autoflow.entity; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.persistence.*; +import kr.re.etri.autoflow.models.User; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.HashSet; +import java.util.Set; + +@Entity +@Table(name = "tb_user_project_map") +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "유저-프로젝트 매핑 정보") +public class UserProjectMapEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Schema(description = "매핑 ID", example = "1") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(nullable = false) + @Schema(description = "프로젝트 정보") + private ProjectEntity project; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(nullable = false) + @Schema(description = "사용자 정보") + private User user; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "tb_user_project_permission", joinColumns = @JoinColumn(name = "user_project_id")) + @Enumerated(EnumType.STRING) + @Column(length = 20) + @Schema(description = "권한 목록", example = "[\"READ\", \"WRITE\"]") + private Set permissions = new HashSet<>(); +}