package repository import ( "context" v1 "github.com/go-nunu/nunu-layout-advanced/api/v1" "github.com/go-nunu/nunu-layout-advanced/internal/model" "time" ) type GlobalLimitRepository interface { GetGlobalLimit(ctx context.Context, id int64) (*model.GlobalLimit, error) AddGlobalLimit(ctx context.Context, req *model.GlobalLimit) error UpdateGlobalLimitByHostId(ctx context.Context, req *model.GlobalLimit) error DeleteGlobalLimitByHostId(ctx context.Context, hostId int64) error IsGlobalLimitExistByHostId(ctx context.Context, hostId int64) (bool, error) GetGlobalLimitByHostId(ctx context.Context, hostId int64) (*model.GlobalLimit, error) GetGlobalLimitAllExpired(ctx context.Context,ids []int) ([]v1.GlobalLimitExpiredByHost, error) GetGlobalLimitAllHostId(ctx context.Context) ([]v1.GlobalLimitExpired, error) } func NewGlobalLimitRepository( repository *Repository, ) GlobalLimitRepository { return &globalLimitRepository{ Repository: repository, } } type globalLimitRepository struct { *Repository } func (r *globalLimitRepository) GetGlobalLimit(ctx context.Context, id int64) (*model.GlobalLimit, error) { var globalLimit model.GlobalLimit return &globalLimit, nil } func (r *globalLimitRepository) AddGlobalLimit(ctx context.Context, req *model.GlobalLimit) error { if err := r.DB(ctx).Create(&req).Error; err != nil { return err } return nil } func (r *globalLimitRepository) UpdateGlobalLimitByHostId(ctx context.Context, req *model.GlobalLimit) error { if err := r.DB(ctx).Where("host_id = ?", req.HostId).Updates(&req).Error; err != nil { return err } return nil } func (r *globalLimitRepository) DeleteGlobalLimitByHostId(ctx context.Context, hostId int64) error { if err := r.DB(ctx).Where("host_id = ?", hostId).Delete(&model.GlobalLimit{}).Error; err != nil { return err } return nil } func (r *globalLimitRepository) IsGlobalLimitExistByHostId(ctx context.Context, hostId int64) (bool, error) { var count int64 err := r.DB(ctx).Model(&model.GlobalLimit{}).Where("host_id = ?", hostId).Count(&count).Error if err != nil { return false, err } return count > 0, nil } func (r *globalLimitRepository) GetGlobalLimitByHostId(ctx context.Context, hostId int64) (*model.GlobalLimit, error) { var globalLimit model.GlobalLimit if err := r.DB(ctx).Where("host_id = ?", hostId).First(&globalLimit).Error; err != nil { return nil, err } return &globalLimit, nil } func (r *globalLimitRepository) GetGlobalLimitAllExpired(ctx context.Context,ids []int) ([]v1.GlobalLimitExpiredByHost, error) { var res []v1.GlobalLimitExpiredByHost threeDaysDuration := 30 * 24 * time.Hour targetTime := time.Now().Add(threeDaysDuration) targetTimestamp := targetTime.Unix() if err := r.DB(ctx).Table("shd_host"). Where("id IN (?)", ids). Where("nextduedate < ?", targetTimestamp). Select("id", "uid", "nextduedate"). Find(&res). Error; err != nil { return nil, err } return res, nil } func (r *globalLimitRepository) GetGlobalLimitAllHostId(ctx context.Context) ([]v1.GlobalLimitExpired, error) { var res []v1.GlobalLimitExpired if err := r.DB(ctx).Model(&model.GlobalLimit{}). Select("host_id", "rule_id","comment"). Find(&res).Error; err != nil { return nil, err } return res, nil }