add api upload documents daily checklist

This commit is contained in:
MacBook Air M1
2026-01-11 22:02:21 +07:00
parent 4ee5bf3628
commit ae41422776
9 changed files with 209 additions and 35 deletions
@@ -15,12 +15,13 @@ type PhasesRelationDTO struct {
}
type PhasesListDTO struct {
Id uint `json:"id"`
Name string `json:"name"`
Category string `json:"category"`
IsActive bool `json:"is_active"`
CreatedUser *userDTO.UserRelationDTO `json:"created_user"`
CreatedAt time.Time `json:"created_at"`
Id uint `json:"id"`
Name string `json:"name"`
Category string `json:"category"`
IsActive bool `json:"is_active"`
ActivityCount int `json:"activity_count"`
CreatedUser *userDTO.UserRelationDTO `json:"created_user"`
CreatedAt time.Time `json:"created_at"`
}
type PhasesDetailDTO struct {
@@ -44,12 +45,13 @@ func ToPhasesListDTO(e entity.Phases) PhasesListDTO {
// }
return PhasesListDTO{
Id: e.Id,
Name: e.Name,
Category: e.Category,
IsActive: e.IsActive,
CreatedAt: e.CreatedAt,
CreatedUser: createdUser,
Id: e.Id,
Name: e.Name,
Category: e.Category,
IsActive: e.IsActive,
ActivityCount: e.ActivityCount,
CreatedAt: e.CreatedAt,
CreatedUser: createdUser,
}
}
@@ -63,6 +63,40 @@ func (s phasesService) GetAll(c *fiber.Ctx, params *validation.Query) ([]entity.
s.Log.Errorf("Failed to get phasess: %+v", err)
return nil, 0, err
}
if len(phasess) > 0 {
ids := make([]uint, 0, len(phasess))
for _, phase := range phasess {
ids = append(ids, phase.Id)
}
type activityCountRow struct {
PhaseID uint
Count int64
}
var rows []activityCountRow
if err := s.Repository.DB().WithContext(c.Context()).
Table("phase_activities").
Select("phase_id, COUNT(*) AS count").
Where("phase_id IN ? AND deleted_at IS NULL", ids).
Group("phase_id").
Scan(&rows).Error; err != nil {
s.Log.Errorf("Failed to count phase activities: %+v", err)
return nil, 0, err
}
countMap := make(map[uint]int64, len(rows))
for _, row := range rows {
countMap[row.PhaseID] = row.Count
}
for i := range phasess {
if count, ok := countMap[phasess[i].Id]; ok {
phasess[i].ActivityCount = int(count)
}
}
}
return phasess, total, nil
}