Feat[BE-127] Creating project flock kandang get all with soma query param

This commit is contained in:
aguhh18
2025-11-06 17:57:10 +07:00
parent d587a793fe
commit 663d5129bb
4 changed files with 126 additions and 66 deletions
@@ -45,22 +45,6 @@ func NewProjectFlockKandangService(repo repository.ProjectFlockKandangRepository
}
}
func (s projectFlockKandangService) withRelations(db *gorm.DB) *gorm.DB {
return db.
Preload("ProjectFlock").
Preload("ProjectFlock.Fcr").
Preload("ProjectFlock.Area").
Preload("ProjectFlock.Location").
Preload("ProjectFlock.CreatedUser").
Preload("ProjectFlock.Kandangs").
Preload("ProjectFlock.KandangHistory").
Preload("Kandang").
Preload("Chickins").
Preload("Chickins.CreatedUser").
Preload("Chickins.ProductWarehouse")
}
func (s projectFlockKandangService) GetAll(c *fiber.Ctx, params *validation.Query) ([]dto.ProjectFlockKandangWithAvailableQtysDTO, int64, error) {
if err := s.Validate.Struct(params); err != nil {
return nil, 0, err
@@ -75,55 +59,33 @@ func (s projectFlockKandangService) GetAll(c *fiber.Ctx, params *validation.Quer
offset := (params.Page - 1) * params.Limit
projectFlockKandangs, total, err := s.Repository.GetAll(c.Context(), offset, params.Limit, func(db *gorm.DB) *gorm.DB {
db = s.withRelations(db)
if params.Search != "" {
db = db.Where(
db.Where("LOWER(kandang.name) LIKE LOWER(?)", "%"+params.Search+"%").
Or("LOWER(project_flock.flock_name) LIKE LOWER(?)", "%"+params.Search+"%"),
)
}
if params.ProjectFlockId > 0 {
db = db.Where("project_flock_kandangs.project_flock_id = ?", params.ProjectFlockId)
}
if params.KandangId > 0 {
db = db.Where("project_flock_kandangs.kandang_id = ?", params.KandangId)
}
if params.Category != "" {
db = db.Where("project_flock.category = ?", params.Category)
}
if params.AreaId > 0 {
db = db.Where("project_flock.area_id = ?", params.AreaId)
}
sortBy := "project_flock_id ASC, created_at ASC"
if params.SortBy != "" {
sortOrder := "ASC"
if params.SortOrder == "DESC" {
sortOrder = "DESC"
}
switch params.SortBy {
case "created_at":
sortBy = "project_flock_kandangs.created_at " + sortOrder
case "period":
sortBy = "project_flock.period " + sortOrder
}
}
return db.Order(sortBy)
})
projectFlockKandangs, total, err := s.Repository.GetAllWithFilters(c.Context(), offset, params.Limit, params)
if err != nil {
s.Log.Errorf("Failed to get projectFlockKandangs: %+v", err)
return nil, 0, err
}
var results []dto.ProjectFlockKandangWithAvailableQtysDTO
if s.ApprovalSvc != nil {
projectFlockKandangIDs := make([]uint, len(projectFlockKandangs))
for i, pfk := range projectFlockKandangs {
projectFlockKandangIDs[i] = pfk.Id
}
approvalMap, err := s.ApprovalSvc.LatestByTargets(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandangIDs, func(db *gorm.DB) *gorm.DB {
return db.Preload("ActionUser")
})
if err != nil {
s.Log.Warnf("Failed to fetch approvals for projectFlockKandangs: %+v", err)
} else {
for i := range projectFlockKandangs {
if approval, ok := approvalMap[projectFlockKandangs[i].Id]; ok {
projectFlockKandangs[i].LatestApproval = approval
}
}
}
}
results := make([]dto.ProjectFlockKandangWithAvailableQtysDTO, 0)
for i := range projectFlockKandangs {
availableQtys, err := s.getAvailableQuantities(c, &projectFlockKandangs[i])
if err != nil {