weiro/main.go

110 lines
2.8 KiB
Go
Raw Normal View History

2026-02-18 11:07:18 +00:00
package main
import (
"html"
"html/template"
2026-02-18 11:07:18 +00:00
"log"
"strings"
2026-02-18 11:07:18 +00:00
"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"
2026-02-19 11:29:44 +00:00
"lmika.dev/lmika/weiro/providers/db"
"lmika.dev/lmika/weiro/services/posts"
2026-02-19 11:29:44 +00:00
"lmika.dev/lmika/weiro/services/publisher"
_ "modernc.org/sqlite"
2026-02-18 11:07:18 +00:00
)
func main() {
2026-02-19 11:29:44 +00:00
dbp, err := db.New("build/weiro.db")
2026-02-18 11:07:18 +00:00
if err != nil {
log.Fatal(err)
}
2026-02-19 11:29:44 +00:00
defer dbp.Close()
2026-02-18 11:07:18 +00:00
2026-02-19 11:29:44 +00:00
publisherSvc := publisher.New(dbp)
postService := posts.New(dbp, publisherSvc)
2026-02-19 11:29:44 +00:00
//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)
// }
//}
2026-02-18 11:07:18 +00:00
fiberTemplate := fiber_html.New("./views", ".html")
2026-02-23 10:18:34 +00:00
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,
})
2026-02-19 11:29:44 +00:00
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)
2026-02-23 10:18:34 +00:00
siteGroup.Get("/posts/:postID", ph.Edit)
siteGroup.Post("/posts", ph.Update)
2026-02-23 10:18:34 +00:00
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)
//}
2026-02-18 11:07:18 +00:00
log.Fatal(app.Listen(":3000"))
2026-02-18 11:07:18 +00:00
}