You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package free_trial
|
|
|
|
import (
|
|
"cls/internal/domain/free_trial"
|
|
"cls/pkg/logger"
|
|
"cls/pkg/util/page"
|
|
"cls/pkg/xorm_engine"
|
|
"errors"
|
|
"time"
|
|
"xorm.io/builder"
|
|
)
|
|
|
|
// FreeTrialRepositoryORM 免费试读仓储实现
|
|
type FreeTrialRepositoryORM struct {
|
|
engine *xorm_engine.Engine
|
|
log logger.Logger
|
|
}
|
|
|
|
var _ free_trial.FreeTrialRepository = (*FreeTrialRepositoryORM)(nil)
|
|
|
|
// NewRepository 创建免费试读仓储
|
|
func NewFreeTrialRepositoryORM(engine *xorm_engine.Engine, log logger.New) free_trial.FreeTrialRepository {
|
|
return &FreeTrialRepositoryORM{
|
|
engine: engine,
|
|
log: log("cls:repository:free_trial"),
|
|
}
|
|
}
|
|
|
|
// Save 保存免费试读
|
|
func (f *FreeTrialRepositoryORM) Save(trial *free_trial.FreeTrial) error {
|
|
_, err := f.engine.Insert(trial)
|
|
if err != nil {
|
|
f.log.Error(err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
// FindByID 根据ID查找试读记录
|
|
func (f *FreeTrialRepositoryORM) FindByID(id uint64) (*free_trial.FreeTrial, error) {
|
|
trial := &free_trial.FreeTrial{}
|
|
has, err := f.engine.Where(builder.Eq{"id": id}).Get(trial)
|
|
if err != nil {
|
|
f.log.Error(err.Error())
|
|
return nil, err
|
|
}
|
|
if !has {
|
|
f.log.Errorf("未找到相关数据【%d】", id)
|
|
return nil, errors.New("记录不存在")
|
|
}
|
|
return trial, nil
|
|
}
|
|
|
|
// FindByArticleID 根据文章ID查找试读记录
|
|
func (f *FreeTrialRepositoryORM) FindByArticleID(articleID uint64) (*free_trial.FreeTrial, error) {
|
|
trial := &free_trial.FreeTrial{}
|
|
has, err := f.engine.Where(builder.Eq{"article_id": articleID}).Get(trial)
|
|
if err != nil {
|
|
f.log.Error(err.Error())
|
|
return nil, err
|
|
}
|
|
if !has {
|
|
f.log.Errorf("未找到相关数据【%d】", articleID)
|
|
return nil, errors.New("记录不存在")
|
|
}
|
|
return trial, nil
|
|
}
|
|
|
|
// FindAll 查询试读记录列表
|
|
func (f *FreeTrialRepositoryORM) FindAll(page *page.Page, conds []builder.Cond) error {
|
|
return f.engine.FindAll(page, &free_trial.FreeTrial{}, builder.And(conds...))
|
|
|
|
}
|
|
|
|
// Delete 删除试读记录
|
|
func (f *FreeTrialRepositoryORM) Delete(id uint64) error {
|
|
_, err := f.engine.Delete(&free_trial.FreeTrial{}, "id = ?", id)
|
|
if err != nil {
|
|
f.log.Error(err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (f *FreeTrialRepositoryORM) GetValidityData() ([]*free_trial.FreeTrial, error) {
|
|
data := make([]*free_trial.FreeTrial, 0)
|
|
return data, f.engine.Where(builder.Lt{"ctime": time.Now().AddDate(0, 0, -7)}).Limit(20).Find(&data)
|
|
}
|