feat: integrate logging and audit trail in category service and DTOs

This commit is contained in:
Habib Fatkhul Rohman 2025-12-03 14:58:00 +07:00
parent 6c757e2065
commit cf51d7f0c9
3 changed files with 68 additions and 33 deletions

View File

@ -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 (
@ -48,5 +48,19 @@ type CategoryResponse struct {
SearchKey string `json:"search_key"`
Description string `json:"description"`
IsActive bool `json:"is_active"`
Client dto.ClientResponse `json:"client"`
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,
},
}
}

View File

@ -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,
}
}
@ -44,6 +48,7 @@ func (s *categoryService) Create(ctx context.Context, req dto.CategoryCreateRequ
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,
},
}
}

View File

@ -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)