package main import ( "context" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html/v2" "lmika.dev/lmika/hugo-crm/config" "lmika.dev/lmika/hugo-crm/handlers" "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" "lmika.dev/lmika/hugo-crm/services/jobs" "lmika.dev/lmika/hugo-crm/services/posts" "lmika.dev/lmika/hugo-crm/services/sitebuilder" "lmika.dev/lmika/hugo-crm/services/sites" "lmika.dev/lmika/hugo-crm/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()) if err != nil { log.Fatal(err) } gitProvider := git.New() themesProvider := themes.New() jobService := jobs.New() siteBuilderService := sitebuilder.New(themesProvider, gitProvider, hugoProvider) 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") 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()) siteGroup := app.Group("/sites/:siteId") siteGroup.Use(siteHandlers.WithSite()) siteGroup.Get("/posts", postHandlers.Posts()) siteGroup.Post("/posts", postHandlers.Create()) jobService.Start() defer jobService.Stop() if err := app.Listen(":3000"); err != nil { log.Println(err) } log.Println("Shutting down...") }