hugo-cms/services/posts/services.go

82 lines
1.6 KiB
Go
Raw Normal View History

2025-01-27 03:23:54 +00:00
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) GetPost(ctx context.Context, id int) (models.Post, error) {
post, err := s.db.GetPost(ctx, int64(id))
if err != nil {
return models.Post{}, err
}
return post, nil
}
func (s *Service) Create(ctx context.Context, site models.Site, req NewPost) (models.Post, error) {
2025-01-27 03:23:54 +00:00
post := models.Post{
SiteID: site.ID,
Title: req.Title,
Body: req.Body,
State: models.PostStatePublished,
PostDate: time.Now(),
2025-01-27 03:23:54 +00:00
}
if err := s.Save(ctx, site, &post); err != nil {
2025-01-27 03:23:54 +00:00
return models.Post{}, err
}
return post, nil
}
func (s *Service) Save(ctx context.Context, site models.Site, post *models.Post) error {
post.SiteID = site.ID
if post.ID == 0 {
post.CreatedAt = time.Now()
post.UpdatedAt = time.Now()
if err := s.db.InsertPost(ctx, post); err != nil {
return err
}
} else {
post.UpdatedAt = time.Now()
if err := s.db.UpdatePost(ctx, post); err != nil {
return err
}
}
return s.jobs.Queue(ctx, s.sb.WritePost(site, *post))
}
type NewPost struct {
Title string
Body string
2025-01-27 03:23:54 +00:00
}