diff --git a/modules/category/dto/category_dto.go b/modules/category/dto/category_dto.go index bb4bffa..ebdedf0 100644 --- a/modules/category/dto/category_dto.go +++ b/modules/category/dto/category_dto.go @@ -3,8 +3,8 @@ package dto import ( "errors" - // staticDto "github.com/Caknoooo/go-gin-clean-starter/modules/static/dto" - "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" + "github.com/Caknoooo/go-gin-clean-starter/database/entities" + pkgdto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" ) const ( @@ -43,10 +43,24 @@ type CategoryUpdateRequest struct { } type CategoryResponse struct { - ID string `json:"id"` - Name string `json:"name"` - SearchKey string `json:"search_key"` - Description string `json:"description"` - IsActive bool `json:"is_active"` - Client dto.ClientResponse `json:"client"` + ID string `json:"id"` + Name string `json:"name"` + SearchKey string `json:"search_key"` + Description string `json:"description"` + IsActive bool `json:"is_active"` + Client pkgdto.IdNameResponse `json:"client"` +} + +func ToCategoryResponse(e entities.MCategoryEntity) CategoryResponse { + return CategoryResponse{ + ID: e.ID.String(), + Name: e.Name, + SearchKey: e.SearchKey, + Description: e.Description, + IsActive: e.IsActive, + Client: pkgdto.IdNameResponse{ + ID: e.Client.ID.String(), + Name: e.Client.Name, + }, + } } diff --git a/modules/category/service/category_service.go b/modules/category/service/category_service.go index 7469392..19f94e4 100644 --- a/modules/category/service/category_service.go +++ b/modules/category/service/category_service.go @@ -7,8 +7,10 @@ import ( "github.com/Caknoooo/go-gin-clean-starter/modules/category/dto" "github.com/Caknoooo/go-gin-clean-starter/modules/category/query" "github.com/Caknoooo/go-gin-clean-starter/modules/category/repository" - pkgdto "github.com/Caknoooo/go-gin-clean-starter/pkg/dto" + "github.com/Caknoooo/go-gin-clean-starter/pkg/constants" + "github.com/Caknoooo/go-gin-clean-starter/pkg/utils" "github.com/google/uuid" + "github.com/sirupsen/logrus" "gorm.io/gorm" ) @@ -23,12 +25,14 @@ type CategoryService interface { type categoryService struct { db *gorm.DB categoryRepo repository.CategoryRepository + log *logrus.Logger } -func NewCategoryService(categoryRepo repository.CategoryRepository, db *gorm.DB) CategoryService { +func NewCategoryService(categoryRepo repository.CategoryRepository, db *gorm.DB, log *logrus.Logger) CategoryService { return &categoryService{ categoryRepo: categoryRepo, db: db, + log: log, } } @@ -40,10 +44,11 @@ func (s *categoryService) Create(ctx context.Context, req dto.CategoryCreateRequ } }() category := entities.MCategoryEntity{ - Name: req.Name, - SearchKey: req.SearchKey, - Description: req.Description, - IsActive: req.IsActive, + Name: req.Name, + SearchKey: req.SearchKey, + Description: req.Description, + IsActive: req.IsActive, + FullAuditTrail: utils.FillAuditTrail(ctx, constants.CREATE), } clientUUID, err := uuid.Parse(req.ClientID) if err != nil { @@ -62,7 +67,13 @@ func (s *categoryService) Create(ctx context.Context, req dto.CategoryCreateRequ if err != nil { return dto.CategoryResponse{}, err } - return toCategoryResponse(result), nil + s.log.WithFields(logrus.Fields{ + "user_id": utils.GetUserID(ctx), + "action": "create", + "entity": "category", + "entity_id": created.ID.String(), + }).Info("Category created") + return dto.ToCategoryResponse(result), nil } func (s *categoryService) GetById(ctx context.Context, categoryId string) (dto.CategoryResponse, error) { @@ -70,7 +81,7 @@ func (s *categoryService) GetById(ctx context.Context, categoryId string) (dto.C if err != nil { return dto.CategoryResponse{}, err } - return toCategoryResponse(category), nil + return dto.ToCategoryResponse(category), nil } func (s *categoryService) GetAll(ctx context.Context, filter query.CategoryFilter) ([]dto.CategoryResponse, int64, error) { @@ -80,7 +91,7 @@ func (s *categoryService) GetAll(ctx context.Context, filter query.CategoryFilte } var responses []dto.CategoryResponse for _, c := range categories { - responses = append(responses, toCategoryResponse(c)) + responses = append(responses, dto.ToCategoryResponse(c)) } if responses == nil { responses = make([]dto.CategoryResponse, 0) @@ -104,6 +115,7 @@ func (s *categoryService) Update(ctx context.Context, req dto.CategoryUpdateRequ category.SearchKey = req.SearchKey category.Description = req.Description category.IsActive = req.IsActive + category.FullAuditTrail = utils.FillAuditTrail(ctx, constants.UPDATE) updated, err := s.categoryRepo.Update(ctx, tx, category) if err != nil { tx.Rollback() @@ -115,7 +127,13 @@ func (s *categoryService) Update(ctx context.Context, req dto.CategoryUpdateRequ if err != nil { return dto.CategoryResponse{}, err } - return toCategoryResponse(result), nil + s.log.WithFields(logrus.Fields{ + "user_id": utils.GetUserID(ctx), + "action": "update", + "entity": "category", + "entity_id": categoryId, + }).Info("Category updated") + return dto.ToCategoryResponse(result), nil } func (s *categoryService) Delete(ctx context.Context, categoryId string) error { @@ -125,24 +143,27 @@ func (s *categoryService) Delete(ctx context.Context, categoryId string) error { tx.Rollback() } }() + category, err := s.categoryRepo.GetById(ctx, tx, categoryId) + if err != nil { + tx.Rollback() + return err + } + category.FullAuditTrail = utils.FillAuditTrail(ctx, constants.DELETE) + if _, err := s.categoryRepo.Update(ctx, tx, category); err != nil { + tx.Rollback() + return err + } if err := s.categoryRepo.Delete(ctx, tx, categoryId); err != nil { tx.Rollback() return err } tx.Commit() + + s.log.WithFields(logrus.Fields{ + "user_id": utils.GetUserID(ctx), + "action": "delete", + "entity": "category", + "entity_id": categoryId, + }).Info("Category deleted") return nil } - -func toCategoryResponse(e entities.MCategoryEntity) dto.CategoryResponse { - return dto.CategoryResponse{ - ID: e.ID.String(), - Name: e.Name, - SearchKey: e.SearchKey, - Description: e.Description, - IsActive: e.IsActive, - Client: pkgdto.ClientResponse{ - ID: e.Client.ID.String(), - Name: e.Client.Name, - }, - } -} diff --git a/providers/core.go b/providers/core.go index f9c6e69..7a85362 100644 --- a/providers/core.go +++ b/providers/core.go @@ -181,7 +181,7 @@ func RegisterDependencies(injector *do.Injector) { maintenanceGroupServ := maintGroupService.NewMaintenanceGroupService(maintenanceGroupRepository, maintenanceGroupRoleRepository, maintenanceGroupRoleUserRepository, db) clientServ := clientService.NewClientService(clientRepository, db, log) permissionsServ := permissionsService.NewPermissionsService(permissionsRepository, db) - categoryServ := categoryService.NewCategoryService(categoryRepository, db) + categoryServ := categoryService.NewCategoryService(categoryRepository, db, log) uomServ := uomService.NewUomService(uomRepository, sequenceServ, db, log) mvendorServ := mvendorService.NewVendorService(mvendorRepository, sequenceServ, db, log) warehouseServ := warehouseService.NewWarehouseService(warehouseRepository, db, log)