44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
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
|
|
}
|