From 8ef79bc9aee65baea5dbca2e888a5eb14e93db5a Mon Sep 17 00:00:00 2001 From: forge-bot Date: Tue, 14 Jul 2026 06:31:55 +0000 Subject: [PATCH] =?UTF-8?q?TA=20=EC=97=AD=ED=95=A0=20Spring=20=EA=B2=BD?= =?UTF-8?q?=EA=B3=84=20smoke=20(role-ta-live-1522-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runtime/rolematrix/domain/RoleMatrix.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/com/klaroworks/runtime/rolematrix/domain/RoleMatrix.java diff --git a/src/main/java/com/klaroworks/runtime/rolematrix/domain/RoleMatrix.java b/src/main/java/com/klaroworks/runtime/rolematrix/domain/RoleMatrix.java new file mode 100644 index 0000000..e127daa --- /dev/null +++ b/src/main/java/com/klaroworks/runtime/rolematrix/domain/RoleMatrix.java @@ -0,0 +1,69 @@ +package com.klaroworks.runtime.rolematrix.domain; + +import jakarta.persistence.*; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + +/** 역할 매트릭스 엔티티 */ +@Entity +@Table(name = "role_matrices") +public class RoleMatrix { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, unique = true) + private String name; + + @Column(length = 1000) + private String description; + + @ElementCollection(fetch = FetchType.EAGER) + @CollectionTable(name = "role_matrix_permissions", joinColumns = @JoinColumn(name = "role_matrix_id")) + @Column(name = "permission_id") + private List permissionIds = new ArrayList<>(); + + @Column(nullable = false, updatable = false) + private Instant createdAt; + + @Column(nullable = false) + private Instant updatedAt; + + @Version + private Long version; + + protected RoleMatrix() {} + + private RoleMatrix(String name, String description) { + this.name = name; + this.description = description; + this.createdAt = Instant.now(); + this.updatedAt = Instant.now(); + } + + public static RoleMatrix create(String name, String description) { + return new RoleMatrix(name, description); + } + + public void update(String name, String description) { + if (name != null) this.name = name; + if (description != null) this.description = description; + this.updatedAt = Instant.now(); + } + + public void syncPermissions(List permissionIds) { + this.permissionIds.clear(); + if (permissionIds != null) this.permissionIds.addAll(permissionIds); + this.updatedAt = Instant.now(); + } + + public Long getId() { return id; } + public String getName() { return name; } + public String getDescription() { return description; } + public List getPermissionIds() { return List.copyOf(permissionIds); } + public Instant getCreatedAt() { return createdAt; } + public Instant getUpdatedAt() { return updatedAt; } + public Long getVersion() { return version; } +}