package service import ( "github.com/rs/zerolog" ppidDataCategoriesRepository "go-humas-be/app/module/ppid_data_categories/repository" "go-humas-be/app/module/ppid_datas/mapper" "go-humas-be/app/module/ppid_datas/repository" "go-humas-be/app/module/ppid_datas/request" "go-humas-be/app/module/ppid_datas/response" userLevelsRepository "go-humas-be/app/module/user_levels/repository" usersRepository "go-humas-be/app/module/users/repository" "go-humas-be/utils/paginator" utilSvc "go-humas-be/utils/service" ) // PpidDatasService type ppidDatasService struct { Repo repository.PpidDatasRepository PpidDataCategoriesRepo ppidDataCategoriesRepository.PpidDataCategoriesRepository UsersRepo usersRepository.UsersRepository UserLevelsRepo userLevelsRepository.UserLevelsRepository Log zerolog.Logger } // PpidDatasService define interface of IPpidDatasService type PpidDatasService interface { All(req request.PpidDatasQueryRequest) (ppidDatas []*response.PpidDatasResponse, paging paginator.Pagination, err error) Show(id uint) (ppidDatas *response.PpidDatasResponse, err error) Save(req request.PpidDatasCreateRequest, authToken string) (err error) Update(id uint, req request.PpidDatasUpdateRequest) (err error) Delete(id uint) error } // NewPpidDatasService init PpidDatasService func NewPpidDatasService(repo repository.PpidDatasRepository, ppidCategoriesRepository ppidDataCategoriesRepository.PpidDataCategoriesRepository, usersRepo usersRepository.UsersRepository, userLevelsRepo userLevelsRepository.UserLevelsRepository, log zerolog.Logger) PpidDatasService { return &ppidDatasService{ Repo: repo, PpidDataCategoriesRepo: ppidCategoriesRepository, UsersRepo: usersRepo, UserLevelsRepo: userLevelsRepo, Log: log, } } // All implement interface of PpidDatasService func (_i *ppidDatasService) All(req request.PpidDatasQueryRequest) (ppidDatass []*response.PpidDatasResponse, paging paginator.Pagination, err error) { results, paging, err := _i.Repo.GetAll(req) if err != nil { return } for _, result := range results { ppidDatass = append(ppidDatass, mapper.PpidDatasResponseMapper(_i.Log, _i.PpidDataCategoriesRepo, _i.UsersRepo, result)) } return } func (_i *ppidDatasService) Show(id uint) (ppidDatas *response.PpidDatasResponse, err error) { result, err := _i.Repo.FindOne(id) if err != nil { return nil, err } return mapper.PpidDatasResponseMapper(_i.Log, _i.PpidDataCategoriesRepo, _i.UsersRepo, result), nil } func (_i *ppidDatasService) Save(req request.PpidDatasCreateRequest, authToken string) (err error) { _i.Log.Info().Interface("data", req).Msg("") newReq := req.ToEntity() createdBy := utilSvc.GetUserInfo(_i.Log, _i.UsersRepo, authToken) newReq.CreatedById = &createdBy.ID newReq.LevelGroupId = &createdBy.UserLevelId userLevels, err := _i.UserLevelsRepo.FindOne(uint(createdBy.UserLevelId)) if err != nil { return err } newReq.Group = userLevels.Group return _i.Repo.Create(newReq) } func (_i *ppidDatasService) Update(id uint, req request.PpidDatasUpdateRequest) (err error) { _i.Log.Info().Interface("data", req).Msg("") return _i.Repo.Update(id, req.ToEntity()) } func (_i *ppidDatasService) Delete(id uint) error { result, err := _i.Repo.FindOne(id) if err != nil { return err } isActive := false result.IsActive = &isActive return _i.Repo.Delete(id) }