diff --git a/modules/menu/dto/menu_dto.go b/modules/menu/dto/menu_dto.go index 6586623..5aad5e6 100644 --- a/modules/menu/dto/menu_dto.go +++ b/modules/menu/dto/menu_dto.go @@ -63,14 +63,15 @@ type ( } MenuResponse struct { - ID string `json:"id"` - Name string `json:"name"` - IconUrl string `json:"icon_url"` - Url string `json:"url"` - Sequence int `json:"sequence"` - Mode string `json:"mode"` - Status string `json:"status"` - Parent *MenuParentResponse `json:"parent"` + ID string `json:"id"` + Name string `json:"name"` + IconUrl string `json:"icon_url"` + Url string `json:"url"` + Sequence int `json:"sequence"` + Mode string `json:"mode"` + Status string `json:"status"` + Parent *MenuParentResponse `json:"parent"` + Permissions []dto.PermissionResponse `json:"permissions,omitempty"` } MenuParentResponse struct { diff --git a/modules/menu/query/menu_query.go b/modules/menu/query/menu_query.go index 92e0c8b..1612664 100644 --- a/modules/menu/query/menu_query.go +++ b/modules/menu/query/menu_query.go @@ -39,17 +39,9 @@ func (f *MenuFilter) ApplyFilters(q *gorm.DB) *gorm.DB { q = q.Where("client_id = ?", f.ClientID) } - // allow selective preloads for performance - for _, include := range f.Includes { - if include == "Parent" { - // q = q.Model(entities.M_Menu{}).Preload("Parent", func(db *gorm.DB) *gorm.DB { - // return db.Select("id", "name") - // }) - q = q.Model(entities.M_Menu{}).Preload("Parent", func(db *gorm.DB) *gorm.DB { - return db.Select("m_menus.id", "m_menus.name") - }) - } - } + q = q.Model(entities.M_Menu{}).Preload("Parent", func(db *gorm.DB) *gorm.DB { + return db.Select("m_menus.id", "m_menus.name") + }) return q } diff --git a/modules/menu/repository/menu_repository.go b/modules/menu/repository/menu_repository.go index 2f580c1..44512ff 100644 --- a/modules/menu/repository/menu_repository.go +++ b/modules/menu/repository/menu_repository.go @@ -56,7 +56,10 @@ func (m *menuRepository) GetById(ctx context.Context, tx *gorm.DB, menuId string var menu entities.M_Menu // preload Parent relation jika entitas M_Menu punya association Parent - if err := tx.WithContext(ctx).Preload("Parent").First(&menu, "id = ?", menuId).Error; err != nil { + if err := tx.WithContext(ctx). + Preload("Parent"). + Preload("Permissions"). + First(&menu, "id = ?", menuId).Error; err != nil { return entities.M_Menu{}, err } diff --git a/modules/menu/service/menu_service.go b/modules/menu/service/menu_service.go index 6b68f82..a7995c0 100644 --- a/modules/menu/service/menu_service.go +++ b/modules/menu/service/menu_service.go @@ -8,6 +8,7 @@ import ( "github.com/Caknoooo/go-gin-clean-starter/modules/auth/service" "github.com/Caknoooo/go-gin-clean-starter/modules/menu/dto" "github.com/Caknoooo/go-gin-clean-starter/modules/menu/repository" + staticDto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" "github.com/google/uuid" "gorm.io/gorm" @@ -121,6 +122,17 @@ func (m *menuService) GetById(ctx context.Context, menuId string) (dto.MenuRespo res.Parent = &dto.MenuParentResponse{ID: entity.ParentID.String()} } + if len(entity.Permissions) > 0 { + res.Permissions = make([]staticDto.PermissionResponse, 0, len(entity.Permissions)) + for _, perm := range entity.Permissions { + res.Permissions = append(res.Permissions, staticDto.PermissionResponse{ + ID: perm.ID.String(), + Name: perm.Name, + // Description: perm.Description, + // Code: perm.Code, + }) + } + } return res, nil } diff --git a/pkg/dto/response.go b/pkg/dto/response.go index 0612d35..47734f1 100644 --- a/pkg/dto/response.go +++ b/pkg/dto/response.go @@ -15,4 +15,9 @@ type ( ID string `json:"id"` Name string `json:"name"` } + + PermissionResponse struct { + ID string `json:"id"` + Name string `json:"name"` + } )