Files
status/repository/service.go

64 lines
1.3 KiB
Go

package repository
//go:generate mockgen -source=$GOFILE -destination=mocks/$GOFILE
import (
"context"
"time"
"git.ostiwe.com/ostiwe-com/status/model"
"git.ostiwe.com/ostiwe-com/status/modules/db"
"gorm.io/gorm"
)
type Service interface {
All(ctx context.Context, limit, offset int, publicOnly bool) ([]model.Service, error)
Find(ctx context.Context, serviceID int) (*model.Service, error)
}
type service struct {
repository
}
func NewServiceRepository() Service {
return &service{
repository{db: db.Global},
}
}
func (s *service) All(ctx context.Context, limit, offset int, publicOnly bool) ([]model.Service, error) {
items := make([]model.Service, 0)
query := s.db.
WithContext(ctx).
Preload("Statuses", func(db *gorm.DB) *gorm.DB {
return db.
Where("created_at > ?", time.Now().Truncate(24*time.Hour)).
Order("created_at desc")
})
if publicOnly {
query = query.Where("public = ?", true)
}
query = query.
Limit(limit).
Offset(offset).
Find(&items)
return items, query.
Error
}
func (s *service) Find(ctx context.Context, serviceID int) (*model.Service, error) {
item := &model.Service{}
return item, s.db.
WithContext(ctx).
Preload("Statuses", func(db *gorm.DB) *gorm.DB {
return db.Order("created_at desc")
}).
First(&item, "id", serviceID).
Error
}