relynolli-server/storage/article.go

44 lines
1.1 KiB
Go
Raw Permalink Normal View History

2024-03-26 02:21:35 +03:00
package storage
2024-05-03 11:57:53 +03:00
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
}