relynolli-server/storage/news.go

46 lines
1.1 KiB
Go
Raw Normal View History

2024-03-26 02:21:35 +03:00
package storage
import (
"context"
"relynolli-server/internal"
"relynolli-server/models/news"
)
type StorageNews interface {
GetNews (ctx context.Context, limit, offset int64) (int, *[]news.DBNews, error)
RetrieveNews(ctx context.Context, code string) (*news.DBNews, error)
}
func NewStorageNews() StorageNews {
if instance == nil {
instance = &storage{
db: internal.InitDatabase().GetInstance(),
rdb: internal.InitRedis(),
}
}
return instance
}
func (s *storage) GetNews (ctx context.Context, limit, offset int64) (int, *[]news.DBNews, error) {
model := new([]news.DBNews)
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) RetrieveNews(ctx context.Context, code string) (*news.DBNews, error) {
model := new(news.DBNews)
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
}