// Code generated by gowebx, DO AVOID EDIT.
package audioencodedb

import (
	"context"
	"easyvqd/internal/core/vqd"
	"git.lnton.com/lnton/pkg/orm"
	"time"
)

var _ vqd.VqdAlarmStorer = VqdAlarm{}

// VqdAlarm Related business namespaces
type VqdAlarm DB

// FindAll implements vqd.VqdAlarmStorer.
func (d VqdAlarm) FindAll(bs *[]*vqd.VqdAlarm) (int64, error) {
	db := d.db.Model(&vqd.VqdAlarm{})
	var total int64
	if err := db.Count(&total).Error; err != nil || total <= 0 {
		// 如果统计失败或者数量为0，则返回错误
		return 0, err
	}
	return total, db.Find(bs).Error
}

// Find implements vqd.VqdAlarmStorer.
func (d VqdAlarm) Find(ctx context.Context, bs *[]*vqd.VqdAlarm, page orm.Pager, opts ...orm.QueryOption) (int64, error) {
	return orm.FindWithContext(ctx, d.db, bs, page, opts...)
}

// Get implements vqd.VqdAlarmStorer.
func (d VqdAlarm) Get(ctx context.Context, model *vqd.VqdAlarm, opts ...orm.QueryOption) error {
	return orm.FirstWithContext(ctx, d.db, model, opts...)
}

// Add implements vqd.VqdAlarmStorer.
func (d VqdAlarm) Add(ctx context.Context, model *vqd.VqdAlarm) error {
	return d.db.WithContext(ctx).Create(model).Error
}

// Edit implements vqd.VqdAlarmStorer.
func (d VqdAlarm) Edit(ctx context.Context, model *vqd.VqdAlarm, changeFn func(*vqd.VqdAlarm), opts ...orm.QueryOption) error {
	return orm.UpdateWithContext(ctx, d.db, model, changeFn, opts...)
}

// Del implements vqd.VqdAlarmStorer.
func (d VqdAlarm) Del(ctx context.Context, model *vqd.VqdAlarm, opts ...orm.QueryOption) error {
	return orm.DeleteWithContext(ctx, d.db, model, opts...)
}

// DelAll implements vqd.VqdTaskTemplateStorer.
func (d VqdAlarm) DelAll(expireTime time.Time, batchSize int) (int, error) {
	result := d.db.Where(`created_at < ?`, expireTime).Limit(batchSize).Delete(&vqd.VqdAlarm{})
	if result.Error != nil {
		return 0, result.Error
	}
	return int(result.RowsAffected), nil
}

// EditStatus implements vqd.VqdAlarmStorer.
func (d VqdAlarm) EditStatus(status int, id int) error {
	if err := d.db.Model(&vqd.VqdAlarm{}).Where(`id = ?`, id).Update("task_status", status).Error; err != nil {
		return err
	}
	return nil
}

// EditStatusError implements vqd.VqdAlarmStorer.
func (d VqdAlarm) EditStatusError(id, status int, s string) error {
	if err := d.db.Model(&vqd.VqdAlarm{}).Where(`id = ?`, id).Updates(map[string]any{
		"task_status": status,
		"error_msg":   s,
	}).Error; err != nil {
		return err
	}
	return nil
}
