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

import (
	"context"
	"git.lnton.com/lnton/pkg/orm"
	"git.lnton.com/lnton/pkg/reason"
	"github.com/jinzhu/copier"
	"log/slog"
)

// VqdTimeTemplateStorer Instantiation interface
type VqdTimeTemplateStorer interface {
	Find(context.Context, *[]*VqdTimeTemplate, orm.Pager, ...orm.QueryOption) (int64, error)
	FindAll(dp *[]*VqdTimeTemplate) (int64, error)
	Get(context.Context, *VqdTimeTemplate, ...orm.QueryOption) error
	Add(context.Context, *VqdTimeTemplate) error
	Edit(context.Context, *VqdTimeTemplate, func(*VqdTimeTemplate), ...orm.QueryOption) error
	Del(context.Context, *VqdTimeTemplate, ...orm.QueryOption) error

	FirstOrCreate(b any) error
}

// FindVqdTimeTemplateAll Paginated search
func (c Core) FindVqdTimeTemplateAll() ([]*VqdTimeTemplate, int64, error) {
	items := make([]*VqdTimeTemplate, 0)
	total, err := c.store.VqdTimeTemplate().FindAll(&items)
	if err != nil {
		return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
	}
	return items, total, nil
}

// FindVqdTimeTemplate Paginated search
func (c Core) FindVqdTimeTemplate(ctx context.Context, in *FindVqdTimeTemplateInput) ([]*VqdTimeTemplate, int64, error) {
	items := make([]*VqdTimeTemplate, 0)
	if in.Name != "" {
		query := orm.NewQuery(8).Where("name like ? ", "%"+in.Name+"%")
		total, err := c.store.VqdTimeTemplate().Find(ctx, &items, in, query.Encode()...)
		if err != nil {
			return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
		}
		return items, total, nil
	} else {
		total, err := c.store.VqdTimeTemplate().Find(ctx, &items, in)
		if err != nil {
			return nil, 0, reason.ErrDB.Withf(`Find err[%s]`, err.Error())
		}
		return items, total, nil
	}
}

// GetVqdTimeTemplate Query a single object
func (c Core) GetVqdTimeTemplate(ctx context.Context, id int) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := c.store.VqdTimeTemplate().Get(ctx, &out, orm.Where("id=?", id)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}
func (c Core) GetIDVqdTimeTemplate(ctx context.Context, ID int64) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := c.store.VqdTimeTemplate().Get(ctx, &out, orm.Where("id=?", ID)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}
func (c Core) GetNameVqdTimeTemplate(ctx context.Context, name string) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := c.store.VqdTimeTemplate().Get(ctx, &out, orm.Where("name=?", name)); err != nil {
		if orm.IsErrRecordNotFound(err) {
			return nil, reason.ErrNotFound.Withf(`Get err[%s]`, err.Error())
		}
		return nil, reason.ErrDB.Withf(`Get err[%s]`, err.Error())
	}
	return &out, nil
}

// FirstOrCreateTemplate Insert into database
func (c Core) FirstOrCreateTimeTemplate(b any) error {
	return c.store.VqdTimeTemplate().FirstOrCreate(b)
}

// AddVqdTimeTemplate Insert into database
func (c Core) AddVqdTimeTemplate(ctx context.Context, in *AddVqdTimeTemplateInput) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := copier.Copy(&out, in); err != nil {
		slog.Error("Copy", "err", err)
	}
	if err := c.store.VqdTimeTemplate().Add(ctx, &out); err != nil {
		return nil, reason.ErrDB.Withf(`Add err[%s]`, err.Error())
	}
	return &out, nil
}

// EditVqdTimeTemplate Update object information
func (c Core) EditVqdTimeTemplate(ctx context.Context, in *EditVqdTimeTemplateInput, id int) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := c.store.VqdTimeTemplate().Edit(ctx, &out, func(b *VqdTimeTemplate) {
		if err := copier.Copy(b, in); err != nil {
			slog.Error("Copy", "err", err)
		}
	}, orm.Where("id=?", id)); err != nil {
		return nil, reason.ErrDB.Withf(`Edit err[%s]`, err.Error())
	}
	return &out, nil
}

// DelVqdTimeTemplate Delete object
func (c Core) DelVqdTimeTemplate(ctx context.Context, id int) (*VqdTimeTemplate, error) {
	var out VqdTimeTemplate
	if err := c.store.VqdTimeTemplate().Del(ctx, &out, orm.Where("id=?", id)); err != nil {
		return nil, reason.ErrDB.Withf(`Del err[%s]`, err.Error())
	}
	return &out, nil
}
