diff --git a/gen/sqlc/dbq/targets.sql.go b/gen/sqlc/dbq/targets.sql.go index 6470e95..d0f0a7d 100644 --- a/gen/sqlc/dbq/targets.sql.go +++ b/gen/sqlc/dbq/targets.sql.go @@ -94,3 +94,21 @@ func (q *Queries) ListTargetsOfSite(ctx context.Context, siteID int64) ([]Publis } return items, nil } + +const updatePublishTarget = `-- name: UpdatePublishTarget :exec +UPDATE publish_targets SET + url = $2, + target_ref = $3 +WHERE id = $1 +` + +type UpdatePublishTargetParams struct { + ID int64 + Url string + TargetRef string +} + +func (q *Queries) UpdatePublishTarget(ctx context.Context, arg UpdatePublishTargetParams) error { + _, err := q.db.Exec(ctx, updatePublishTarget, arg.ID, arg.Url, arg.TargetRef) + return err +} diff --git a/providers/db/targets.go b/providers/db/targets.go index 6f004cd..b2b60de 100644 --- a/providers/db/targets.go +++ b/providers/db/targets.go @@ -23,6 +23,14 @@ func (db *DB) InsertPublishTarget(ctx context.Context, target *models.PublishTar return nil } +func (db *DB) UpdatePublishTarget(ctx context.Context, target models.PublishTarget) error { + return db.q.UpdatePublishTarget(ctx, dbq.UpdatePublishTargetParams{ + ID: target.ID, + Url: target.URL, + TargetRef: target.TargetRef, + }) +} + func (db *DB) GetPublishTargets(ctx context.Context, siteID int64) ([]models.PublishTarget, error) { res, err := db.q.ListTargetsOfSite(ctx, siteID) if err != nil { diff --git a/services/sites/service.go b/services/sites/service.go index af5d853..8848b29 100644 --- a/services/sites/service.go +++ b/services/sites/service.go @@ -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 { diff --git a/sql/queries/targets.sql b/sql/queries/targets.sql index 011cc4d..99dc78f 100644 --- a/sql/queries/targets.sql +++ b/sql/queries/targets.sql @@ -12,4 +12,10 @@ INSERT INTO publish_targets ( url, target_ref ) VALUES ($1, $2, $3, $4, $5) -RETURNING id; \ No newline at end of file +RETURNING id; + +-- name: UpdatePublishTarget :exec +UPDATE publish_targets SET + url = $2, + target_ref = $3 +WHERE id = $1; \ No newline at end of file diff --git a/templates/sites/settings.html b/templates/sites/settings.html index 8b66e3a..1d8ba32 100644 --- a/templates/sites/settings.html +++ b/templates/sites/settings.html @@ -1,11 +1,11 @@

- +

- {{range .themes}} {{if eq .ID $.site.Theme}} @@ -15,6 +15,14 @@ {{end}}

+

+ + +

+

+ + +