Added options for setting the site targets

This commit is contained in:
Leon Mika 2025-02-03 21:13:25 +11:00
parent a31c8e48ce
commit cb45f6aa53
5 changed files with 74 additions and 21 deletions

View file

@ -3,6 +3,7 @@ package sites
import (
"context"
"errors"
"github.com/jackc/pgx/v5"
"lmika.dev/lmika/hugo-cms/config"
"lmika.dev/lmika/hugo-cms/models"
"lmika.dev/lmika/hugo-cms/providers/db"
@ -63,43 +64,55 @@ func (s *Service) CreateSite(ctx context.Context, user models.User, name string)
return models.Site{}, err
}
// TEMP
/*
if err := s.db.InsertPublishTarget(ctx, &models.PublishTarget{
SiteID: newSite.ID,
Role: models.TargetRoleProduction,
Type: models.TargetTypeNetlify,
URL: "https://meek-meringue-060cfc.netlify.app/",
TargetRef: "e628dc6e-e6e1-45a9-847a-982adef940a8",
}); err != nil {
return models.Site{}, err
}
*/
return newSite, s.jobs.Queue(ctx, s.sb.CreateNewSite(newSite))
}
func (s *Service) SaveSettings(ctx context.Context, site models.Site, newSettings NewSettings) error {
_, ok := s.themes.Lookup(newSettings.Theme)
_, ok := s.themes.Lookup(newSettings.SiteTheme)
if !ok {
return errors.New("theme not found")
}
newSite := site
newSite.Title = newSettings.Title
newSite.Title = newSettings.SiteTitle
newSite.Name = normaliseName(newSite.Title)
newSite.Theme = newSettings.Theme
newSite.Theme = newSettings.SiteTheme
if err := s.db.UpdateSite(ctx, newSite); err != nil {
return err
}
pubTarget, err := s.db.GetPublishTargetBySiteRole(ctx, newSite.ID, models.TargetRoleProduction)
if err == nil {
pubTarget.TargetRef = newSettings.TargetRef
pubTarget.URL = newSettings.TargetURL
if err := s.db.UpdatePublishTarget(ctx, pubTarget); err != nil {
return err
}
} else if errors.Is(err, pgx.ErrNoRows) {
pubTarget = models.PublishTarget{
SiteID: newSite.ID,
Role: models.TargetRoleProduction,
Type: models.TargetTypeNetlify,
URL: newSettings.TargetURL,
TargetRef: newSettings.TargetRef,
}
if err := s.db.InsertPublishTarget(ctx, &pubTarget); err != nil {
return err
}
} else {
return err
}
return s.jobs.Queue(ctx, s.sb.RebuildSite(site, newSite))
}
type NewSettings struct {
Title string `form:"title"`
Theme string `form:"theme"`
SiteTitle string `form:"site_title"`
SiteTheme string `form:"site_theme"`
TargetURL string `form:"target_url"`
TargetRef string `form:"target_ref"`
}
func (s *Service) Rebuild(ctx context.Context, site models.Site) error {