kontenhumas-be/app/module/menu_modules/service/menu_modules.service.go

162 lines
4.3 KiB
Go
Raw Normal View History

2026-01-15 09:04:49 +00:00
package service
import (
"github.com/rs/zerolog"
"netidhub-saas-be/app/database/entity"
"netidhub-saas-be/app/module/menu_modules/mapper"
"netidhub-saas-be/app/module/menu_modules/repository"
"netidhub-saas-be/app/module/menu_modules/request"
"netidhub-saas-be/app/module/menu_modules/response"
"netidhub-saas-be/utils/paginator"
)
// MenuModulesService
type menuModulesService struct {
Repo repository.MenuModulesRepository
Log zerolog.Logger
}
// MenuModulesService define interface of IMenuModulesService
type MenuModulesService interface {
All(req request.MenuModulesQueryRequest) (menuModules []*response.MenuModulesResponse, paging paginator.Pagination, err error)
GetByMenuId(menuId uint) (menuModules []*response.MenuModulesResponse, err error)
GetByModuleId(moduleId uint) (menuModules []*response.MenuModulesResponse, err error)
Show(id uint) (menuModule *response.MenuModulesResponse, err error)
Save(req request.MenuModulesCreateRequest) (err error)
SaveBatch(req request.MenuModulesBatchCreateRequest) (err error)
Update(id uint, req request.MenuModulesUpdateRequest) (err error)
Delete(id uint) error
}
// NewMenuModulesService init MenuModulesService
func NewMenuModulesService(repo repository.MenuModulesRepository, log zerolog.Logger) MenuModulesService {
return &menuModulesService{
Repo: repo,
Log: log,
}
}
// All implement interface of MenuModulesService
func (_i *menuModulesService) All(req request.MenuModulesQueryRequest) (menuModules []*response.MenuModulesResponse, paging paginator.Pagination, err error) {
results, paging, err := _i.Repo.GetAll(req)
if err != nil {
return
}
for _, result := range results {
menuModules = append(menuModules, mapper.MenuModulesResponseMapper(result))
}
return
}
func (_i *menuModulesService) GetByMenuId(menuId uint) (menuModules []*response.MenuModulesResponse, err error) {
results, err := _i.Repo.GetByMenuId(menuId)
if err != nil {
return nil, err
}
for _, result := range results {
menuModules = append(menuModules, mapper.MenuModulesResponseMapper(result))
}
return
}
func (_i *menuModulesService) GetByModuleId(moduleId uint) (menuModules []*response.MenuModulesResponse, err error) {
results, err := _i.Repo.GetByModuleId(moduleId)
if err != nil {
return nil, err
}
for _, result := range results {
menuModules = append(menuModules, mapper.MenuModulesResponseMapper(result))
}
return
}
func (_i *menuModulesService) Show(id uint) (menuModule *response.MenuModulesResponse, err error) {
result, err := _i.Repo.FindOne(id)
if err != nil {
return nil, err
}
return mapper.MenuModulesResponseMapper(result), nil
}
func (_i *menuModulesService) Save(req request.MenuModulesCreateRequest) (err error) {
_i.Log.Info().Interface("data", req).Msg("Creating menu module")
isActive := true
if req.IsActive != nil {
isActive = *req.IsActive
}
menuModule := &entity.MenuModules{
MenuId: req.MenuId,
ModuleId: req.ModuleId,
Position: req.Position,
ClientId: req.ClientId,
IsActive: &isActive,
}
return _i.Repo.Create(menuModule)
}
func (_i *menuModulesService) SaveBatch(req request.MenuModulesBatchCreateRequest) (err error) {
_i.Log.Info().Interface("data", req).Msg("Creating menu modules batch")
isActive := true
var menuModules []*entity.MenuModules
for idx, moduleId := range req.ModuleIds {
position := idx + 1
menuModule := &entity.MenuModules{
MenuId: req.MenuId,
ModuleId: moduleId,
Position: &position,
ClientId: req.ClientId,
IsActive: &isActive,
}
menuModules = append(menuModules, menuModule)
}
return _i.Repo.CreateBatch(menuModules)
}
func (_i *menuModulesService) Update(id uint, req request.MenuModulesUpdateRequest) (err error) {
_i.Log.Info().Interface("data", req).Msg("Updating menu module")
menuModule := &entity.MenuModules{}
if req.MenuId != nil {
menuModule.MenuId = *req.MenuId
}
if req.ModuleId != nil {
menuModule.ModuleId = *req.ModuleId
}
if req.Position != nil {
menuModule.Position = req.Position
}
if req.ClientId != nil {
menuModule.ClientId = req.ClientId
}
if req.IsActive != nil {
menuModule.IsActive = req.IsActive
}
return _i.Repo.Update(id, menuModule)
}
func (_i *menuModulesService) Delete(id uint) error {
result, err := _i.Repo.FindOne(id)
if err != nil {
return err
}
isActive := false
result.IsActive = &isActive
return _i.Repo.Update(id, result)
}