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.
80 lines
2.7 KiB
Go
80 lines
2.7 KiB
Go
package purchase
|
|
|
|
import (
|
|
"cls/internal/domain/purchase"
|
|
"cls/pkg/logger"
|
|
"cls/pkg/xorm_engine"
|
|
"time"
|
|
"xorm.io/builder"
|
|
)
|
|
|
|
type PurchaseRepositoryORM struct {
|
|
engine *xorm_engine.Engine
|
|
log logger.New
|
|
}
|
|
|
|
var _ purchase.Repository = (*PurchaseRepositoryORM)(nil)
|
|
|
|
func NewPurchaseRepositoryORM(db *xorm_engine.Engine, logger logger.New) purchase.Repository {
|
|
return &PurchaseRepositoryORM{
|
|
engine: db,
|
|
log: logger,
|
|
}
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) Save(purchase *purchase.Purchase) error {
|
|
if purchase.Id == 0 {
|
|
_, err := r.engine.Insert(purchase)
|
|
return err
|
|
}
|
|
_, err := r.engine.ID(purchase.Id).Update(purchase)
|
|
return err
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindArticlesByUserId(userId uint64) ([]*purchase.Purchase, error) {
|
|
purchases := make([]*purchase.Purchase, 0)
|
|
err := r.engine.Where(builder.Eq{"user_id": userId}.And(builder.Eq{"content_type": purchase.ContentTypeArticle})).Find(&purchases)
|
|
return purchases, err
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindColumnsByUserId(userId uint64) ([]*purchase.Purchase, error) {
|
|
purchases := make([]*purchase.Purchase, 0)
|
|
err := r.engine.Where(builder.Eq{"user_id": userId}.
|
|
And(builder.Eq{"content_type": purchase.ContentTypeColumn})).
|
|
And(builder.Gte{"expired_at": time.Now()}).Find(&purchases)
|
|
return purchases, err
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindArticleById(uid uint64, ids ...uint64) ([]*purchase.Purchase, error) {
|
|
purchases := make([]*purchase.Purchase, 0)
|
|
err := r.engine.Where(builder.Eq{"user_id": uid}.And(builder.In("content_id", ids)).And(builder.Eq{"content_type": purchase.ContentTypeArticle})).Find(&purchases)
|
|
return purchases, err
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindColumnById(uid uint64, ids ...uint64) ([]*purchase.Purchase, error) {
|
|
purchases := make([]*purchase.Purchase, 0)
|
|
err := r.engine.Where(builder.Eq{"user_id": uid}.And(builder.In("content_id", ids)).
|
|
And(builder.Eq{"content_type": purchase.ContentTypeColumn})).
|
|
And(builder.Gte{"expired_at": time.Now()}).Find(&purchases)
|
|
return purchases, err
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindColumnWithId(uid uint64, contentId uint64) (*purchase.Purchase, error) {
|
|
data := &purchase.Purchase{}
|
|
_, err := r.engine.Where("user_id = ? AND content_id = ? AND content_type = ?", uid, contentId, purchase.ContentTypeColumn).
|
|
And(builder.Gte{"expired_at": time.Now()}).Get(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|
|
|
|
func (r *PurchaseRepositoryORM) FindArticleWithId(uid uint64, contentId uint64) (*purchase.Purchase, error) {
|
|
data := &purchase.Purchase{}
|
|
_, err := r.engine.Where("user_id = ? AND content_id = ? AND content_type = ?", uid, contentId, purchase.ContentTypeArticle).Get(data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return data, nil
|
|
}
|