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

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
}