mirror of
https://gitlab.com/mbugroup/lti-api.git
synced 2026-05-25 15:55:44 +00:00
add api bulk update status daily checklist; change hpp real to estimate
This commit is contained in:
@@ -1,13 +1,22 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
"context"
|
||||
"time"
|
||||
|
||||
m "gitlab.com/mbugroup/lti-api.git/internal/middleware"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gitlab.com/mbugroup/lti-api.git/internal/common/repository"
|
||||
entity "gitlab.com/mbugroup/lti-api.git/internal/entities"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type DailyChecklistRepository interface {
|
||||
repository.BaseRepository[entity.DailyChecklist]
|
||||
ListScopedChecklistIDs(c *fiber.Ctx, ids []uint) ([]uint, error)
|
||||
BulkUpdateStatus(ctx context.Context, ids []uint, status string, rejectReason *string) error
|
||||
ListByIDsWithKandang(ctx context.Context, ids []uint) ([]entity.DailyChecklist, error)
|
||||
}
|
||||
|
||||
type DailyChecklistRepositoryImpl struct {
|
||||
@@ -19,3 +28,70 @@ func NewDailyChecklistRepository(db *gorm.DB) DailyChecklistRepository {
|
||||
BaseRepositoryImpl: repository.NewBaseRepository[entity.DailyChecklist](db),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *DailyChecklistRepositoryImpl) ListScopedChecklistIDs(c *fiber.Ctx, ids []uint) ([]uint, error) {
|
||||
if len(ids) == 0 {
|
||||
return []uint{}, nil
|
||||
}
|
||||
|
||||
db := r.DB().WithContext(c.Context()).
|
||||
Table("daily_checklists dc").
|
||||
Select("dc.id").
|
||||
Joins("JOIN kandang_groups k ON k.id = dc.kandang_id").
|
||||
Joins("JOIN locations loc ON loc.id = k.location_id").
|
||||
Joins("JOIN areas a ON a.id = loc.area_id").
|
||||
Where("dc.id IN ?", ids)
|
||||
|
||||
db, err := m.ApplyLocationAreaScope(c, db, "loc.id", "a.id")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var scopedIDs []uint
|
||||
if err := db.Pluck("dc.id", &scopedIDs).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return scopedIDs, nil
|
||||
}
|
||||
|
||||
func (r *DailyChecklistRepositoryImpl) BulkUpdateStatus(ctx context.Context, ids []uint, status string, rejectReason *string) error {
|
||||
if len(ids) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
updateBody := map[string]any{
|
||||
"status": status,
|
||||
"reject_reason": rejectReason,
|
||||
"updated_at": time.Now(),
|
||||
}
|
||||
|
||||
return r.DB().WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
result := tx.Model(&entity.DailyChecklist{}).
|
||||
Where("id IN ?", ids).
|
||||
Updates(updateBody)
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
if result.RowsAffected != int64(len(ids)) {
|
||||
return gorm.ErrRecordNotFound
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func (r *DailyChecklistRepositoryImpl) ListByIDsWithKandang(ctx context.Context, ids []uint) ([]entity.DailyChecklist, error) {
|
||||
if len(ids) == 0 {
|
||||
return []entity.DailyChecklist{}, nil
|
||||
}
|
||||
|
||||
var items []entity.DailyChecklist
|
||||
if err := r.DB().WithContext(ctx).
|
||||
Where("id IN ?", ids).
|
||||
Preload("Kandang").
|
||||
Find(&items).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return items, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user