package main import ( "html" "html/template" "log" "strings" "github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3/middleware/static" fiber_html "github.com/gofiber/template/html/v3" "github.com/yuin/goldmark" "github.com/yuin/goldmark/extension" "lmika.dev/lmika/weiro/handlers" "lmika.dev/lmika/weiro/handlers/middleware" "lmika.dev/lmika/weiro/providers/db" "lmika.dev/lmika/weiro/services/posts" "lmika.dev/lmika/weiro/services/publisher" _ "modernc.org/sqlite" ) func main() { dbp, err := db.New("build/weiro.db") if err != nil { log.Fatal(err) } defer dbp.Close() publisherSvc := publisher.New(dbp) postService := posts.New(dbp, publisherSvc) //user, err := dbp.SelectUserByUsername(context.Background(), "testuser") //if err != nil { // user = models.User{ // Username: "testuser", // PasswordHashed: []byte("changeme"), // } // if err := dbp.SaveUser(context.Background(), &user); err != nil { // log.Fatal(err) // } //} fiberTemplate := fiber_html.New("./views", ".html") fiberTemplate.Funcmap["sub"] = func(x, y int) int { return x - y } fiberTemplate.Funcmap["markdown"] = func() func(s string) template.HTML { mdParser := goldmark.New( goldmark.WithExtensions(extension.GFM), ) return func(s string) template.HTML { var sb strings.Builder if err := mdParser.Convert([]byte(s), &sb); err != nil { return template.HTML("Markdown error: " + html.EscapeString(err.Error())) } return template.HTML(sb.String()) } }() app := fiber.New(fiber.Config{ Views: fiberTemplate, ViewsLayout: "layouts/main", PassLocalsToViews: true, }) siteGroup := app.Group("/sites/:siteID", middleware.AuthUser(), middleware.RequiresSite(dbp)) ph := handlers.PostsHandler{PostService: postService} siteGroup.Get("/posts", ph.Index) siteGroup.Get("/posts/new", ph.New) siteGroup.Get("/posts/:postID", ph.Edit) siteGroup.Post("/posts", ph.Update) siteGroup.Patch("/posts/:postID", ph.Patch) siteGroup.Delete("/posts/:postID", ph.Delete) app.Get("/", func(c fiber.Ctx) error { return c.Redirect().To("/sites/1/posts") }) app.Get("/static/*", static.New("./static")) // TEMP // /* dbp.SaveUser(context.Background(), &models.User{Username: "testuser"}) ctx := models.WithUser(context.Background(), models.User{ID: 1}) site, err := importer.New(dbp).Import(ctx, "_test-site") if err != nil { log.Fatal(err) } target := models.SitePublishTarget{ SiteID: site.ID, BaseURL: "https://jolly-boba-9e2486.netlify.app", TargetType: "netlify", TargetRef: "55c878a7-189e-42cf-aa02-5c60908143f3", TargetKey: os.Getenv("NETLIFY_AUTH_TOKEN"), } if err := dbp.SavePublishTarget(ctx, &target); err != nil { log.Fatal(err) } */ //if err := publisherSvc.Publish(ctx, site.ID); err != nil { // log.Fatal(err) //} log.Fatal(app.Listen(":3000")) }