48 lines
988 B
Go
48 lines
988 B
Go
|
package posts
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"lmika.dev/lmika/hugo-crm/models"
|
||
|
"lmika.dev/lmika/hugo-crm/providers/db"
|
||
|
"lmika.dev/lmika/hugo-crm/services/jobs"
|
||
|
"lmika.dev/lmika/hugo-crm/services/sitebuilder"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type Service struct {
|
||
|
db *db.DB
|
||
|
sb *sitebuilder.Service
|
||
|
jobs *jobs.Service
|
||
|
}
|
||
|
|
||
|
func New(
|
||
|
db *db.DB,
|
||
|
sb *sitebuilder.Service,
|
||
|
jobs *jobs.Service,
|
||
|
) *Service {
|
||
|
return &Service{
|
||
|
db: db,
|
||
|
sb: sb,
|
||
|
jobs: jobs,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Service) ListPostOfSite(ctx context.Context, site models.Site) ([]models.Post, error) {
|
||
|
return s.db.ListPostsOfSite(ctx, site.ID)
|
||
|
}
|
||
|
|
||
|
func (s *Service) Create(ctx context.Context, site models.Site, body string) (models.Post, error) {
|
||
|
post := models.Post{
|
||
|
SiteID: site.ID,
|
||
|
Body: body,
|
||
|
State: models.PostStatePublished,
|
||
|
PostDate: time.Now(),
|
||
|
CreatedAt: time.Now(),
|
||
|
}
|
||
|
if err := s.db.InsertPost(ctx, &post); err != nil {
|
||
|
return models.Post{}, err
|
||
|
}
|
||
|
|
||
|
return post, s.jobs.Queue(ctx, s.sb.WritePost(site, post))
|
||
|
}
|