package storage import ( "context" "relynolli-server/internal" "relynolli-server/models/news" ) type StorageArticle interface { GetArticles(ctx context.Context, limit, offset int64) (int, *[]news.DBArticle, error) RetrieveArticle(ctx context.Context, code string) (*news.DBArticle, error) } func NewStorageArticle() StorageArticle { if instance == nil { instance = &storage{ db: internal.InitDatabase().GetInstance(), rdb: internal.InitRedis(), } } return instance } func (s *storage) GetArticles(ctx context.Context, limit, offset int64) (int, *[]news.DBArticle, error) { model := new([]news.DBArticle) stmt := s.db.NewSelect().Model(model).Where("is_active = 1").OrderExpr("sort ASC, date DESC").Limit(int(limit)).Offset(int(offset)) count, err := stmt.ScanAndCount(ctx) if err != nil { return 0, nil, err } return count, model, nil } func (s *storage) RetrieveArticle(ctx context.Context, code string) (*news.DBArticle, error) { model := new(news.DBArticle) stmt := s.db.NewSelect().Model(model).Where("code = ?", code).Where("is_active = 1") err := stmt.Scan(ctx) if err != nil { return nil, err } return model, nil }