feat(BE): enhance ProjectFlockKandang structure and approval fetching methods

This commit is contained in:
aguhh18
2026-01-07 13:39:54 +07:00
parent 0a84e427c1
commit 76d5b6b69a
3 changed files with 94 additions and 57 deletions
@@ -98,23 +98,8 @@ func (s projectFlockKandangService) GetAll(c *fiber.Ctx, params *validation.Quer
}
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
}
}
}
s.fetchProjectFlockApprovals(c, projectFlockKandangs)
s.fetchChickinApprovals(c, projectFlockKandangs)
}
return projectFlockKandangs, total, nil
@@ -130,14 +115,8 @@ func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.Proje
}
if len(projectFlockKandang.Chickins) > 0 && s.ApprovalSvc != nil {
latest, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandang.Id, nil)
if err != nil {
s.Log.Errorf("Failed to fetch latest kandang approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
}
if latest != nil {
projectFlockKandang.LatestApproval = latest
}
s.fetchProjectFlockApproval(c, projectFlockKandang)
s.fetchChickinApproval(c, projectFlockKandang)
}
availableQtyMap, err := s.getAvailableQuantities(c, projectFlockKandang)
@@ -164,6 +143,68 @@ func (s projectFlockKandangService) GetOne(c *fiber.Ctx, id uint) (*entity.Proje
return projectFlockKandang, availableQtyMap, productWarehouses, nil
}
func (s projectFlockKandangService) fetchProjectFlockApprovals(c *fiber.Ctx, projectFlockKandangs []entity.ProjectFlockKandang) {
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].LatestProjectFlockApproval = approval
}
}
}
}
func (s projectFlockKandangService) fetchChickinApprovals(c *fiber.Ctx, projectFlockKandangs []entity.ProjectFlockKandang) {
projectFlockKandangIDs := make([]uint, len(projectFlockKandangs))
for i, pfk := range projectFlockKandangs {
projectFlockKandangIDs[i] = pfk.Id
}
chickinApprovalMap, err := s.ApprovalSvc.LatestByTargets(c.Context(), utils.ApprovalWorkflowChickin, projectFlockKandangIDs, func(db *gorm.DB) *gorm.DB {
return db.Preload("ActionUser")
})
if err != nil {
s.Log.Warnf("Failed to fetch chickin approvals for projectFlockKandangs: %+v", err)
} else {
for i := range projectFlockKandangs {
if approval, ok := chickinApprovalMap[projectFlockKandangs[i].Id]; ok {
projectFlockKandangs[i].LatestChickinApproval = approval
}
}
}
}
func (s projectFlockKandangService) fetchProjectFlockApproval(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) {
latest, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowProjectFlockKandang, projectFlockKandang.Id, nil)
if err != nil {
s.Log.Errorf("Failed to fetch latest kandang approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
}
if latest != nil {
projectFlockKandang.LatestProjectFlockApproval = latest
}
}
func (s projectFlockKandangService) fetchChickinApproval(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) {
latestChickin, err := s.ApprovalSvc.LatestByTarget(c.Context(), utils.ApprovalWorkflowChickin, projectFlockKandang.Id, nil)
if err != nil {
s.Log.Errorf("Failed to fetch latest chickin approval for projectFlockKandang %d: %+v", projectFlockKandang.Id, err)
}
if latestChickin != nil {
projectFlockKandang.LatestChickinApproval = latestChickin
}
}
func (s projectFlockKandangService) getAvailableQuantities(c *fiber.Ctx, projectFlockKandang *entity.ProjectFlockKandang) (map[uint]float64, error) {
if projectFlockKandang.Kandang.Id == 0 || s.WarehouseRepo == nil || s.ProductWarehouseRepo == nil {
return nil, nil