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 }