From 28d07ea2b022fa59859e80dd38901115f836e32a Mon Sep 17 00:00:00 2001 From: Habib Fatkhul Rohman Date: Sat, 25 Oct 2025 01:38:01 +0700 Subject: [PATCH] feat: Enhance maintenance group role entities with cascading constraints and add role-user relationship --- database/entities/m_maintenance_group_entity.go | 4 ++-- database/entities/m_maintenance_group_role_entity.go | 12 +++++++----- ...ty.go => m_maintenance_group_role_user_entity.go} | 6 ++++-- database/migration.go | 2 ++ .../seeders/seeds/maintenance_group_role_seed.go | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) rename database/entities/{m_maintenance_group_user_entity.go => m_maintenance_group_role_user_entity.go} (52%) diff --git a/database/entities/m_maintenance_group_entity.go b/database/entities/m_maintenance_group_entity.go index 1f58438..9ac0135 100644 --- a/database/entities/m_maintenance_group_entity.go +++ b/database/entities/m_maintenance_group_entity.go @@ -10,7 +10,7 @@ type M_MaintenanceGroup struct { ClientID uuid.UUID `gorm:"type:uuid;not null;index" json:"client_id"` Client M_Client `gorm:"foreignKey:ClientID;references:ID"` - MaintenanceGroupRoles []M_MaintenanceGroupRole `gorm:"foreignKey:MaintenanceGroupID;references:ID" json:"maintenance_group_roles"` - + MaintenanceGroupRoles []M_MaintenanceGroupRole `gorm:"foreignKey:MaintenanceGroupID;references:ID;constraint:OnDelete:CASCADE;onUpdate:CASCADE;"` + FullAuditTrail } diff --git a/database/entities/m_maintenance_group_role_entity.go b/database/entities/m_maintenance_group_role_entity.go index a76b7e5..4cc9f76 100644 --- a/database/entities/m_maintenance_group_role_entity.go +++ b/database/entities/m_maintenance_group_role_entity.go @@ -3,12 +3,14 @@ package entities import "github.com/google/uuid" type M_MaintenanceGroupRole struct { - MaintenanceGroupID uuid.UUID `gorm:"type:uuid;not null;index" json:"maintenance_group_id"` - RoleID uuid.UUID `gorm:"type:uuid;not null;index" json:"role_id"` - Level int `gorm:"not null" json:"level"` + ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"` + MaintenanceGroupID uuid.UUID `gorm:"type:uuid;not null;index"` + RoleID uuid.UUID `gorm:"type:uuid;not null;index"` + Level *int `gorm:"type:int;not null;index"` - MaintenanceGroup M_MaintenanceGroup `gorm:"foreignKey:MaintenanceGroupID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"maintenance_group"` - Role M_Role `gorm:"foreignKey:RoleID;references:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE" json:"role"` + MaintenanceGroup M_MaintenanceGroup `gorm:"foreignKey:MaintenanceGroupID;references:ID"` + MaintenanceGroupRoleUsers []M_MaintenanceGroupRoleUser `gorm:"foreignKey:MaintenanceGroupRoleID;references:ID;constraint:OnDelete:CASCADE;onUpdate:CASCADE;"` + Role M_Role `gorm:"foreignKey:RoleID;references:ID;constraint:OnDelete:CASCADE;onUpdate:CASCADE;"` FullAuditTrail } diff --git a/database/entities/m_maintenance_group_user_entity.go b/database/entities/m_maintenance_group_role_user_entity.go similarity index 52% rename from database/entities/m_maintenance_group_user_entity.go rename to database/entities/m_maintenance_group_role_user_entity.go index 0935e82..1424bab 100644 --- a/database/entities/m_maintenance_group_user_entity.go +++ b/database/entities/m_maintenance_group_role_user_entity.go @@ -2,11 +2,13 @@ package entities import "github.com/google/uuid" -type M_MaintenanceGroupUser struct { +type M_MaintenanceGroupRoleUser struct { ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"` MaintenanceGroupRoleID uuid.UUID `gorm:"type:uuid;not null;index" json:"maintenance_group_role_id"` UserID uuid.UUID `gorm:"type:uuid;not null;index" json:"user_id"` - ClientID uuid.UUID `gorm:"type:uuid;not null;index" json:"client_id"` + + MaintenanceGroupRole M_MaintenanceGroupRole `gorm:"foreignKey:MaintenanceGroupRoleID;references:ID;constraint:OnDelete:CASCADE;onUpdate:CASCADE;"` + User M_User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;onUpdate:CASCADE;"` FullAuditTrail } diff --git a/database/migration.go b/database/migration.go index 727ec78..08bee7b 100644 --- a/database/migration.go +++ b/database/migration.go @@ -19,6 +19,7 @@ func Migrate(db *gorm.DB) error { &entities.M_Role_Permission{}, &entities.M_MaintenanceGroup{}, &entities.M_MaintenanceGroupRole{}, + &entities.M_MaintenanceGroupRoleUser{}, ); err != nil { return err } @@ -41,6 +42,7 @@ func MigrateFresh(db *gorm.DB) error { &entities.M_Role_Permission{}, &entities.M_MaintenanceGroup{}, &entities.M_MaintenanceGroupRole{}, + &entities.M_MaintenanceGroupRoleUser{}, ); err != nil { return err } diff --git a/database/seeders/seeds/maintenance_group_role_seed.go b/database/seeders/seeds/maintenance_group_role_seed.go index 61def48..4d4326b 100644 --- a/database/seeders/seeds/maintenance_group_role_seed.go +++ b/database/seeders/seeds/maintenance_group_role_seed.go @@ -49,7 +49,7 @@ func ListMaintenanceGroupRoleSeeder(db *gorm.DB) error { if err := db.FirstOrCreate(&maintenanceGroupRole, entities.M_MaintenanceGroupRole{ MaintenanceGroupID: maintenanceGroup.ID, RoleID: role.ID, - Level: data.Level, + Level: &data.Level, }).Error; err != nil { return err }