109 lines
2.8 KiB
Go
109 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/filesystem"
|
|
"github.com/gofiber/template/html/v2"
|
|
"github.com/yuin/goldmark"
|
|
"html/template"
|
|
"lmika.dev/lmika/hugo-cms/assets"
|
|
"lmika.dev/lmika/hugo-cms/config"
|
|
"lmika.dev/lmika/hugo-cms/handlers"
|
|
"lmika.dev/lmika/hugo-cms/providers/db"
|
|
"lmika.dev/lmika/hugo-cms/providers/git"
|
|
"lmika.dev/lmika/hugo-cms/providers/hugo"
|
|
"lmika.dev/lmika/hugo-cms/providers/netlify"
|
|
"lmika.dev/lmika/hugo-cms/providers/themes"
|
|
"lmika.dev/lmika/hugo-cms/services/jobs"
|
|
"lmika.dev/lmika/hugo-cms/services/posts"
|
|
"lmika.dev/lmika/hugo-cms/services/sitebuilder"
|
|
"lmika.dev/lmika/hugo-cms/services/sites"
|
|
"lmika.dev/lmika/hugo-cms/templates"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
func main() {
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
dbp, err := db.New(cfg.DatabaseURL)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer dbp.Close()
|
|
|
|
hugoProvider, err := hugo.New(cfg.StagingDir(), cfg.ScratchDir())
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
gitProvider := git.New()
|
|
themesProvider := themes.New()
|
|
netlifyProvider := netlify.New(cfg.NetlifyAuthToken)
|
|
|
|
jobService := jobs.New()
|
|
siteBuilderService := sitebuilder.New(dbp, themesProvider, gitProvider, hugoProvider, netlifyProvider)
|
|
|
|
siteService := sites.NewService(cfg, dbp, themesProvider, siteBuilderService, jobService)
|
|
postService := posts.New(dbp, siteBuilderService, jobService)
|
|
|
|
siteHandlers := handlers.Site{Site: siteService}
|
|
postHandlers := handlers.Post{Post: postService}
|
|
|
|
log.Println("Connected to database")
|
|
if err := dbp.Migrate(context.Background()); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Println("Database migrated")
|
|
|
|
tmplEngine := html.NewFileSystem(http.FS(templates.FS), ".html")
|
|
tmplEngine.Funcmap["markdown"] = func(s string) (template.HTML, error) {
|
|
var buf bytes.Buffer
|
|
if err := goldmark.Convert([]byte(s), &buf); err != nil {
|
|
return "", err
|
|
}
|
|
return template.HTML(buf.String()), nil
|
|
}
|
|
|
|
app := fiber.New(fiber.Config{
|
|
Views: tmplEngine,
|
|
})
|
|
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
return c.Render("index", fiber.Map{}, "layouts/main")
|
|
})
|
|
|
|
app.Post("/sites", siteHandlers.Create())
|
|
app.Get("/sites/:siteId", siteHandlers.Show())
|
|
|
|
app.Route("/sites/:siteId", func(r fiber.Router) {
|
|
r.Use(siteHandlers.WithSite())
|
|
r.Post("/rebuild", siteHandlers.Rebuild())
|
|
|
|
r.Get("/posts", postHandlers.Posts())
|
|
r.Get("/posts/:postId", postHandlers.Edit())
|
|
r.Get("/posts/new", postHandlers.New())
|
|
r.Post("/posts", postHandlers.Create())
|
|
r.Post("/posts/:postId", postHandlers.Update())
|
|
})
|
|
|
|
app.Use("/assets", filesystem.New(filesystem.Config{
|
|
Root: http.FS(assets.FS),
|
|
}))
|
|
app.Static("/assets", "./assets")
|
|
|
|
jobService.Start()
|
|
defer jobService.Stop()
|
|
|
|
if err := app.Listen(":3000"); err != nil {
|
|
log.Println(err)
|
|
}
|
|
|
|
log.Println("Shutting down...")
|
|
}
|