feat(role): Add many-to-many relationship for Menus in M_Role and update RoleResponse

This commit is contained in:
Habib Fatkhul Rohman 2025-11-03 14:35:57 +07:00
parent 474c3c6205
commit e3127c075d
5 changed files with 12 additions and 2 deletions

View File

@ -13,6 +13,7 @@ type M_Role struct {
Client M_Client `gorm:"foreignKey:ClientID;references:ID"`
RoleMenus []M_Role_Menu `gorm:"foreignKey:RoleID;references:ID" json:"role_menus"`
Menus []M_Menu `gorm:"many2many:m_role_menus;joinForeignKey:RoleID;JoinReferences:MenuID" json:"menus"`
RolePermissions []M_Role_Permission `gorm:"foreignKey:RoleID;references:ID" json:"role_permissions"`
UserRoles []M_User_Role `gorm:"foreignKey:RoleID;references:ID" json:"user_roles"`
Users []M_User `gorm:"many2many:m_user_roles;" json:"users"`

View File

@ -10,6 +10,4 @@ type M_Role_Menu struct {
Role M_Role `gorm:"foreignKey:RoleID;references:ID"`
Menu M_Menu `gorm:"foreignKey:MenuID;references:ID"`
FullAuditTrail
}

View File

@ -96,6 +96,7 @@ type RoleResponse struct {
// ClientID string `json:"client_id"`
Client pkgdto.IdNameResponse `json:"client"`
Permissions []RolePermissionsResponse `json:"permissions,omitempty"`
Menus []pkgdto.IdNameResponse `json:"menus,omitempty"`
}
type RolePermissionsResponse struct {

View File

@ -190,6 +190,7 @@ func (r *roleRepository) GetRoleByID(ctx context.Context, tx *gorm.DB, id string
Where("id = ?", id).
Preload("Client").
Preload("Permissions").
Preload("Menus").
First(&role).Error; err != nil {
return entities.M_Role{}, err
}

View File

@ -479,6 +479,14 @@ func ToRoleResponse(role entities.M_Role) dto.RoleResponse {
}
}
var menus []pkgdto.IdNameResponse
for _, m := range role.Menus {
menus = append(menus, pkgdto.IdNameResponse{
ID: m.ID.String(),
Name: m.Name,
})
}
return dto.RoleResponse{
ID: role.ID.String(),
Name: role.Name,
@ -488,6 +496,7 @@ func ToRoleResponse(role entities.M_Role) dto.RoleResponse {
HomeUrl: role.HomeUrl,
Client: client,
Permissions: permissions,
Menus: menus,
}
}