56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
package sites
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"lmika.dev/lmika/hugo-cms/models"
|
|
"time"
|
|
)
|
|
|
|
func (s *Service) CreateSite(ctx context.Context, user models.User, name string) (models.Site, error) {
|
|
// Create a new site
|
|
newSite := models.Site{
|
|
Name: normaliseName(name),
|
|
OwnerUserID: user.ID,
|
|
Title: name,
|
|
Theme: "bear",
|
|
}
|
|
|
|
_, ok := s.themes.Lookup(newSite.Theme)
|
|
if !ok {
|
|
return models.Site{}, errors.New("theme not found")
|
|
}
|
|
|
|
if err := s.db.InsertSite(ctx, &newSite); err != nil {
|
|
return models.Site{}, err
|
|
}
|
|
|
|
// Add the default page bundle
|
|
rootBundle := models.Bundle{
|
|
SiteID: newSite.ID,
|
|
Name: models.RootBundleName,
|
|
CreatedAt: time.Now(),
|
|
}
|
|
if err := s.db.InsertBundle(ctx, &rootBundle); err != nil {
|
|
return models.Site{}, err
|
|
}
|
|
|
|
// TEMP: Add a home page
|
|
homePage := models.Page{
|
|
SiteID: newSite.ID,
|
|
BundleID: rootBundle.ID,
|
|
Name: "index",
|
|
Title: "Welcome to the home page",
|
|
Body: "This is the home page",
|
|
State: models.PostStatePublished,
|
|
PublishDate: time.Now(),
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
}
|
|
if err := s.db.InsertPage(ctx, &homePage); err != nil {
|
|
return models.Site{}, err
|
|
}
|
|
|
|
return newSite, s.jobs.Queue(ctx, s.sb.RebuildSite(newSite, newSite))
|
|
}
|