Added Fiber and layouts

This commit is contained in:
Leon Mika 2025-01-27 10:19:31 +11:00
parent f8e7ea482b
commit 63b19a249a
17 changed files with 331 additions and 37 deletions

38
services/jobs/services.go Normal file
View file

@ -0,0 +1,38 @@
package jobs
import (
"context"
"lmika.dev/lmika/hugo-crm/models"
"log"
)
type Service struct {
queue chan models.Job
}
func New() *Service {
return &Service{
queue: make(chan models.Job, 50),
}
}
func (j *Service) Start() {
go func() {
for j := range j.queue {
if err := j.Do(context.Background()); err != nil {
log.Printf("job failed %v", err)
}
}
}()
}
func (j *Service) Stop() {
q := j.queue
j.queue = nil
close(q)
}
func (j *Service) Queue(ctx context.Context, job models.Job) error {
j.queue <- job
return nil
}

View file

@ -0,0 +1,57 @@
package sitebuilder
import (
"context"
"errors"
"lmika.dev/lmika/hugo-crm/models"
"lmika.dev/lmika/hugo-crm/providers/git"
"lmika.dev/lmika/hugo-crm/providers/hugo"
"lmika.dev/lmika/hugo-crm/providers/themes"
"log"
)
type Service struct {
themes *themes.Provider
git *git.Provider
hugo *hugo.Provider
}
func New(
themes *themes.Provider,
git *git.Provider,
hugo *hugo.Provider,
) *Service {
return &Service{
themes: themes,
git: git,
hugo: hugo,
}
}
func (s *Service) CreateNewSite(site models.Site) models.Job {
return models.Job{
Do: func(ctx context.Context) error {
themeMeta, ok := s.themes.Lookup(site.Theme)
if !ok {
return errors.New("theme not found")
}
// Build the site
log.Printf(" .. build")
if err := s.hugo.NewSite(ctx, site); err != nil {
return err
}
// Setup the theme
log.Printf(" .. theme")
if err := s.git.Clone(ctx, themeMeta.URL, s.hugo.SiteStagingDir(site, hugo.ThemeSiteDir)); err != nil {
return err
}
if err := s.hugo.ReconfigureSite(ctx, site); err != nil {
return err
}
return nil
},
}
}

View file

@ -6,10 +6,9 @@ import (
"lmika.dev/lmika/hugo-crm/config"
"lmika.dev/lmika/hugo-crm/models"
"lmika.dev/lmika/hugo-crm/providers/db"
"lmika.dev/lmika/hugo-crm/providers/git"
"lmika.dev/lmika/hugo-crm/providers/hugo"
"lmika.dev/lmika/hugo-crm/providers/themes"
"log"
"lmika.dev/lmika/hugo-crm/services/jobs"
"lmika.dev/lmika/hugo-crm/services/sitebuilder"
"strings"
"unicode"
)
@ -18,25 +17,30 @@ type Service struct {
cfg config.Config
db *db.DB
themes *themes.Provider
git *git.Provider
hugo *hugo.Provider
sb *sitebuilder.Service
jobs *jobs.Service
}
func NewService(
cfg config.Config,
db *db.DB,
themes *themes.Provider,
git *git.Provider,
hugo *hugo.Provider,
sb *sitebuilder.Service,
jobs *jobs.Service,
) *Service {
return &Service{
cfg: cfg,
db: db,
git: git,
hugo: hugo,
cfg: cfg,
db: db,
themes: themes,
sb: sb,
jobs: jobs,
}
}
func (s *Service) GetSite(ctx context.Context, id int) (models.Site, error) {
return s.db.GetSite(ctx, int64(id))
}
func (s *Service) CreateSite(ctx context.Context, name string) (models.Site, error) {
newSite := models.Site{
Name: normaliseName(name),
@ -44,7 +48,7 @@ func (s *Service) CreateSite(ctx context.Context, name string) (models.Site, err
Theme: "bear",
}
themeMeta, ok := s.themes.Lookup(newSite.Theme)
_, ok := s.themes.Lookup(newSite.Theme)
if !ok {
return models.Site{}, errors.New("theme not found")
}
@ -53,23 +57,7 @@ func (s *Service) CreateSite(ctx context.Context, name string) (models.Site, err
return models.Site{}, err
}
// Build the site
log.Printf(" .. build")
if err := s.hugo.NewSite(ctx, newSite); err != nil {
return models.Site{}, err
}
// Setup the theme
log.Printf(" .. theme")
if err := s.git.Clone(ctx, themeMeta.URL, s.hugo.SiteStagingDir(newSite, hugo.ThemeSiteDir)); err != nil {
return models.Site{}, err
}
if err := s.hugo.ReconfigureSite(ctx, newSite); err != nil {
return models.Site{}, err
}
return newSite, nil
return newSite, s.jobs.Queue(ctx, s.sb.CreateNewSite(newSite))
}
func normaliseName(name string) string {