diff --git a/handlers/artist/main.go b/handlers/artist/main.go index 2230173a..405b8114 100644 --- a/handlers/artist/main.go +++ b/handlers/artist/main.go @@ -17,7 +17,6 @@ import ( "github.com/blackfyre/wga/utils" "github.com/blackfyre/wga/utils/jsonld" "github.com/blackfyre/wga/utils/url" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" ) @@ -334,7 +333,7 @@ func processArtwork(c *core.RequestEvent, app *pocketbase.PocketBase) error { return c.HTML(http.StatusOK, buff.String()) } -func RenderArtworkContent(app *pocketbase.PocketBase, c echo.Context, artwork *core.Record, hxTarget string) (dto.Artwork, error) { +func RenderArtworkContent(app *pocketbase.PocketBase, c *core.RequestEvent, artwork *core.Record, hxTarget string) (dto.Artwork, error) { artistId := cmp.Or(artwork.GetStringSlice("author")[0], "") diff --git a/handlers/artists/main.go b/handlers/artists/main.go index ad3f29f3..ac758640 100644 --- a/handlers/artists/main.go +++ b/handlers/artists/main.go @@ -129,7 +129,7 @@ func processArtists(app *pocketbase.PocketBase, c *core.RequestEvent) error { if err != nil { app.Logger().Error("Failed to marshal Artist JSON-LD", "error", err.Error()) - return apis.NewBadRequestError("Invalid page", err) + return utils.BadRequestError(c) } content.Jsonld = fmt.Sprintf(``, marshalledJsonLd) diff --git a/handlers/artworks/filters.go b/handlers/artworks/filters.go index f041a9cc..0657b4d9 100644 --- a/handlers/artworks/filters.go +++ b/handlers/artworks/filters.go @@ -1,6 +1,8 @@ package artworks import ( + "cmp" + "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase/core" ) @@ -95,13 +97,16 @@ func (f *filters) BuildFilterString() string { } func buildFilters(c *core.RequestEvent) *filters { + + q := c.Request.URL.Query() + f := &filters{ - Title: c.Quer("title", ""), - SchoolString: c.QueryParamDefault("art_school", ""), - ArtFormString: c.QueryParamDefault("art_form", ""), - ArtTypeString: c.QueryParamDefault("art_type", ""), - ArtistString: c.QueryParamDefault("artist", ""), - Page: c.QueryParamDefault("page", ""), + Title: cmp.Or(q.Get("title"), ""), + SchoolString: cmp.Or(q.Get("art_school"), ""), + ArtFormString: cmp.Or(q.Get("art_form"), ""), + ArtTypeString: cmp.Or(q.Get("art_type"), ""), + ArtistString: cmp.Or(q.Get("artist"), ""), + Page: cmp.Or(q.Get("page"), ""), } return f diff --git a/handlers/artworks/main.go b/handlers/artworks/main.go index a6819afe..2809832a 100644 --- a/handlers/artworks/main.go +++ b/handlers/artworks/main.go @@ -1,6 +1,7 @@ package artworks import ( + "bytes" "context" "net/http" "strconv" @@ -8,12 +9,9 @@ import ( "github.com/blackfyre/wga/assets/templ/dto" "github.com/blackfyre/wga/assets/templ/pages" tmplUtils "github.com/blackfyre/wga/assets/templ/utils" - "github.com/blackfyre/wga/models" "github.com/blackfyre/wga/utils" "github.com/blackfyre/wga/utils/url" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" - "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" ) @@ -47,30 +45,36 @@ func searchPage(app *pocketbase.PocketBase, c *core.RequestEvent) error { ctx = tmplUtils.DecorateContext(ctx, tmplUtils.DescriptionKey, "On this page you can search for artworks by title, artist, art form, art type and art school!") ctx = tmplUtils.DecorateContext(ctx, tmplUtils.OgUrlKey, fullUrl) - c.Response().Header().Set("HX-Push-Url", fullUrl) - err := pages.ArtworkSearchPage(content).Render(ctx, c.Response().Writer) + c.Response.Header().Set("HX-Push-Url", fullUrl) + + var buff bytes.Buffer + + err := pages.ArtworkSearchPage(content).Render(ctx, &buff) if err != nil { app.Logger().Error("Error rendering artwork search page", "error", err.Error()) return utils.ServerFaultError(c) } - return nil + return c.HTML(http.StatusOK, buff.String()) } -func search(app *pocketbase.PocketBase, c echo.Context) error { +func search(app *pocketbase.PocketBase, c *core.RequestEvent) error { limit := 16 page := 1 offset := 0 - if c.QueryParam("page") != "" { + queryParams := c.Request.URL.Query() + + if queryParams.Has("page") { err := error(nil) - page, err = strconv.Atoi(c.QueryParam("page")) + page, err = strconv.Atoi(queryParams.Get("page")) if err != nil { - return apis.NewBadRequestError("Invalid page", err) + app.Logger().Error("Failed to parse page number", "error", err.Error()) + return utils.BadRequestError(c) } } @@ -81,7 +85,7 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { filterString, filterParams := filters.BuildFilter() - records, err := app.Dao().FindRecordsByFilter( + records, err := app.FindRecordsByFilter( "artworks", filterString, "+title", @@ -91,11 +95,12 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { ) if err != nil { - return apis.NewBadRequestError("Invalid page", err) + app.Logger().Error("Failed to get artwork records", "error", err.Error()) + return utils.ServerFaultError(c) } - // this could be replaced with a dedicated sql query, but this is more convinient - totalRecords, err := app.Dao().FindRecordsByFilter( + // this could be replaced with a dedicated SQL query, but this is more convinient + totalRecords, err := app.FindRecordsByFilter( "artworks", filterString, "", @@ -105,7 +110,8 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { ) if err != nil { - return apis.NewBadRequestError("Invalid page", err) + app.Logger().Error("Failed to count artwork records", "error", err.Error()) + return utils.ServerFaultError(c) } recordsCount := len(totalRecords) @@ -139,7 +145,7 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { continue } - artist, err := models.GetArtistById(app.Dao(), artistIds[0]) + artist, err := app.FindRecordById("artists", artistIds[0]) if err != nil { // waiting for the promised logging system by @pocketbase @@ -148,25 +154,25 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { content.Results.Artworks = append(content.Results.Artworks, dto.Image{ Url: url.GenerateFullArtworkUrl(url.ArtworkUrlDTO{ - ArtistName: artist.Name, - ArtistId: artist.Id, + ArtistName: artist.GetString("name"), + ArtistId: artist.GetString("id"), ArtworkTitle: v.GetString("title"), - ArtworkId: v.GetId(), + ArtworkId: v.GetString("id"), }), Image: url.GenerateFileUrl("artworks", v.GetString("id"), v.GetString("image"), ""), Thumb: url.GenerateThumbUrl("artworks", v.GetString("id"), v.GetString("image"), "320x240", ""), Comment: v.GetString("comment"), Title: v.GetString("title"), Technique: v.GetString("technique"), - Id: v.GetId(), + Id: v.GetString("id"), Artist: dto.Artist{ - Id: artist.Id, - Name: artist.Name, + Id: artist.GetString("id"), + Name: artist.GetString("name"), Url: url.GenerateArtistUrl(url.ArtistUrlDTO{ ArtistId: artist.Id, - ArtistName: artist.Name, + ArtistName: artist.GetString("name"), }), - Profession: artist.Profession, + Profession: artist.GetString("profession"), }, }) } @@ -182,25 +188,28 @@ func search(app *pocketbase.PocketBase, c echo.Context) error { ctx = tmplUtils.DecorateContext(ctx, tmplUtils.DescriptionKey, "On this page you can search for artworks by title, artist, art form, art type and art school!") ctx = tmplUtils.DecorateContext(ctx, tmplUtils.OgUrlKey, pHtmxUrl) - c.Response().Header().Set("HX-Push-Url", pHtmxUrl) - err = pages.ArtworkSearchPage(content).Render(ctx, c.Response().Writer) + c.Response.Header().Set("HX-Push-Url", pHtmxUrl) + + var buff bytes.Buffer + + err = pages.ArtworkSearchPage(content).Render(ctx, &buff) if err != nil { app.Logger().Error("Error rendering artwork search page", "error", err.Error()) return utils.ServerFaultError(c) } - return nil + return c.HTML(http.StatusOK, buff.String()) } // RegisterArtworksHandlers registers search handlers to the given PocketBase app. func RegisterArtworksHandlers(app *pocketbase.PocketBase) { app.OnServe().BindFunc(func(e *core.ServeEvent) error { - e.Router.GET("/artworks", func(*core.RequestEvent) error { + e.Router.GET("/artworks", func(c *core.RequestEvent) error { return searchPage(app, c) }) - e.Router.GET("/artworks/results", func(*core.RequestEvent) error { + e.Router.GET("/artworks/results", func(c *core.RequestEvent) error { return search(app, c) }) return nil diff --git a/handlers/dual/main.go b/handlers/dual/main.go index e98c108d..73a2dc28 100644 --- a/handlers/dual/main.go +++ b/handlers/dual/main.go @@ -14,7 +14,6 @@ import ( "github.com/blackfyre/wga/handlers/artworks" "github.com/blackfyre/wga/utils" "github.com/blackfyre/wga/utils/url" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" ) @@ -42,7 +41,7 @@ type renderPaneDto struct { // It renders the dual page using the contentDto and writes the response to the context's writer. // If there is an error during the rendering process, it logs the error and returns a server fault error. // Finally, it returns nil if the rendering process is successful. -func renderDualModePage(app *pocketbase.PocketBase, c echo.Context) error { +func renderDualModePage(app *pocketbase.PocketBase, c *core.RequestEvent) error { ctx := tmplUtils.DecorateContext(context.Background(), tmplUtils.TitleKey, "Dual View") ctx = tmplUtils.DecorateContext(ctx, tmplUtils.DescriptionKey, "On this page you can search for artworks by title, artist, art form, art type and art school!") // ctx = tmplUtils.DecorateContext(ctx, tmplUtils.OgUrlKey, pHtmxUrl) @@ -79,15 +78,18 @@ func renderDualModePage(app *pocketbase.PocketBase, c echo.Context) error { relPath.Query().Add("left_render_to", rightPane.Side) relPath.Query().Add("right_render_to", leftPane.Side) - c.Response().Header().Set("HX-Push-Url", relPath.String()) - err = pages.DualPage(contentDto).Render(ctx, c.Response().Writer) + c.Response.Header().Set("HX-Push-Url", relPath.String()) + + var buff bytes.Buffer + + err = pages.DualPage(contentDto).Render(ctx, &buff) if err != nil { app.Logger().Error("Error rendering artwork search page", "error", err.Error()) return utils.ServerFaultError(c) } - return nil + return c.HTML(200, buff.String()) } // formatArtistNameList formats the artist name list. @@ -117,10 +119,12 @@ func reverseSide(side string) string { return "" } -func renderPane(side string, app *pocketbase.PocketBase, c echo.Context) (renderPaneDto, error) { +func renderPane(side string, app *pocketbase.PocketBase, c *core.RequestEvent) (renderPaneDto, error) { + + rawQParams := c.Request.URL.Query() - queryParam := cmp.Or(c.QueryParam(side), "default") - renderTo := cmp.Or(c.QueryParam(side+"_render_to"), reverseSide(side)) + queryParam := cmp.Or(rawQParams.Get(side), "default") + renderTo := cmp.Or(rawQParams.Get(side+"_render_to"), reverseSide(side)) pane := renderPaneDto{ Side: side, @@ -195,8 +199,8 @@ func renderPane(side string, app *pocketbase.PocketBase, c echo.Context) (render return pane, nil } -func renderArtistPane(app *pocketbase.PocketBase, c echo.Context, artistId string, renderTo string, buf *bytes.Buffer) (dto.Artist, error) { - artistModel, err := app.Dao().FindRecordById("artists", artistId) +func renderArtistPane(app *pocketbase.PocketBase, c *core.RequestEvent, artistId string, renderTo string, buf *bytes.Buffer) (dto.Artist, error) { + artistModel, err := app.FindRecordById("artists", artistId) if err != nil { app.Logger().Error("Error finding artist", "error", err.Error()) @@ -220,8 +224,8 @@ func renderArtistPane(app *pocketbase.PocketBase, c echo.Context, artistId strin return artistDto, nil } -func renderArtworkPane(app *pocketbase.PocketBase, c echo.Context, artworkId string, renderTo string, buf *bytes.Buffer) (dto.Artwork, error) { - artworkModel, err := app.Dao().FindRecordById("artworks", artworkId) +func renderArtworkPane(app *pocketbase.PocketBase, c *core.RequestEvent, artworkId string, renderTo string, buf *bytes.Buffer) (dto.Artwork, error) { + artworkModel, err := app.FindRecordById("artworks", artworkId) if err != nil { app.Logger().Error("Error finding artwork", "error", err.Error()) @@ -246,8 +250,8 @@ func renderArtworkPane(app *pocketbase.PocketBase, c echo.Context, artworkId str } func RegisterHandlers(app *pocketbase.PocketBase) { - app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("/dual-mode", func(c echo.Context) error { + app.OnServe().BindFunc(func(e *core.ServeEvent) error { + e.Router.GET("/dual-mode", func(c *core.RequestEvent) error { return renderDualModePage(app, c) }) return nil diff --git a/handlers/feedback/main.go b/handlers/feedback/main.go index 4bf0c5c3..ebe9dfed 100644 --- a/handlers/feedback/main.go +++ b/handlers/feedback/main.go @@ -1,17 +1,16 @@ package feedback import ( + "bytes" "context" "errors" + "net/http" "github.com/blackfyre/wga/assets/templ/components" "github.com/blackfyre/wga/errs" "github.com/blackfyre/wga/utils" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" - "github.com/pocketbase/pocketbase/forms" - "github.com/pocketbase/pocketbase/models" ) type feedbackForm struct { @@ -44,15 +43,18 @@ func validateFeedbackForm(form feedbackForm) error { // It renders the feedback form using the components.FeedbackForm() function. // If there is an error during rendering, it logs the error and returns a server fault error. // Otherwise, it returns nil. -func presentFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { - err := components.FeedbackForm().Render(context.Background(), c.Response().Writer) +func presentFeedbackForm(c *core.RequestEvent, app *pocketbase.PocketBase) error { + + var buff bytes.Buffer + + err := components.FeedbackForm().Render(context.Background(), &buff) if err != nil { app.Logger().Error("Failed to render the feedback form", "error", err.Error()) return utils.ServerFaultError(c) } - return err + return c.HTML(http.StatusOK, buff.String()) } // processFeedbackForm processes the feedback form submitted by the user. @@ -63,12 +65,12 @@ func presentFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { // If there is an error while saving the feedback, the feedback form is rendered again and a server fault error is returned. // If the feedback is successfully saved, a success toast message is sent to the user. // The function returns nil if there are no errors. -func processFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { +func processFeedbackForm(c *core.RequestEvent, app *pocketbase.PocketBase) error { postData := feedbackForm{ - ReferTo: c.Request().Header.Get("Referer"), + ReferTo: c.Request.Header.Get("Referer"), } - if err := c.Bind(&postData); err != nil { + if err := c.BindBody(&postData); err != nil { app.Logger().Error("Failed to parse form data", "error", err.Error()) utils.SendToastMessage("Failed to parse form", "error", true, c, "") return utils.ServerFaultError(c) @@ -89,7 +91,9 @@ func processFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { app.Logger().Error("Failed to store the feedback", "error", err.Error()) - err := components.FeedbackForm().Render(context.Background(), c.Response().Writer) + var buff bytes.Buffer + + err := components.FeedbackForm().Render(context.Background(), &buff) if err != nil { app.Logger().Error("Failed to render the feedback form after form submission error", "error", err.Error()) @@ -98,7 +102,7 @@ func processFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { utils.SendToastMessage("Failed to store the feedback", "error", false, c, "") - return utils.ServerFaultError(c) + return c.HTML(http.StatusOK, buff.String()) } utils.SendToastMessage("Thank you! Your feedback is valuable to us!", "success", true, c, "") @@ -110,7 +114,7 @@ func processFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { // It takes the PocketBase app instance, the echo.Context c, and the postData feedbackForm as parameters. // It returns an error if there is any issue with saving the feedback. // -// The function first attempts to find the "feedbacks" collection in the database using the app.Dao().FindCollectionByNameOrId method. +// The function first attempts to find the "feedbacks" collection in the database using the app.FindCollectionByNameOrId method. // If the collection is not found, it logs an error and sends a toast message to the user indicating the issue. // It then returns a server fault error using the utils.ServerFaultError function. // @@ -122,30 +126,28 @@ func processFeedbackForm(c echo.Context, app *pocketbase.PocketBase) error { // If there is an error during the data loading process, it logs an error and returns the error. // // Finally, it submits the form using the form.Submit method and returns the result. -func saveFeedback(app *pocketbase.PocketBase, c echo.Context, postData feedbackForm) error { - collection, err := app.Dao().FindCollectionByNameOrId("feedbacks") +func saveFeedback(app *pocketbase.PocketBase, c *core.RequestEvent, postData feedbackForm) error { + collection, err := app.FindCollectionByNameOrId("feedbacks") if err != nil { app.Logger().Error("Database table not found", "error", err.Error()) utils.SendToastMessage("Database table not found", "error", true, c, "") return utils.ServerFaultError(c) } - record := models.NewRecord(collection) + r := core.NewRecord(collection) - form := forms.NewRecordUpsert(app, record) + r.Set("email", postData.Email) + r.Set("name", postData.Name) + r.Set("message", postData.Message) + r.Set("refer_to", postData.ReferTo) - err = form.LoadData(map[string]any{ - "email": postData.Email, - "name": postData.Name, - "message": postData.Message, - "refer_to": postData.ReferTo, - }) + err = app.Save(r) if err != nil { app.Logger().Error("Failed to process the feedback", "error", err.Error()) return err } - return form.Submit() + return nil } // RegisterHandlers registers the feedback handlers to the provided PocketBase application. @@ -154,14 +156,14 @@ func saveFeedback(app *pocketbase.PocketBase, c echo.Context, postData feedbackF // The handlers also utilize the IsHtmxRequestMiddleware from the utils package. // This function should be called before serving the application. func RegisterHandlers(app *pocketbase.PocketBase) { - app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("/feedback", func(c echo.Context) error { + app.OnServe().BindFunc(func(e *core.ServeEvent) error { + e.Router.GET("/feedback", func(c *core.RequestEvent) error { return presentFeedbackForm(c, app) - }, utils.IsHtmxRequestMiddleware) + }).BindFunc(utils.IsHtmxRequestMiddleware) - e.Router.POST("/feedback", func(c echo.Context) error { + e.Router.POST("/feedback", func(c *core.RequestEvent) error { return processFeedbackForm(c, app) - }, utils.IsHtmxRequestMiddleware) + }).BindFunc(utils.IsHtmxRequestMiddleware) return nil }) diff --git a/handlers/guestbook.go b/handlers/guestbook.go index 6c34680b..88d18cf7 100644 --- a/handlers/guestbook.go +++ b/handlers/guestbook.go @@ -4,7 +4,6 @@ import ( "github.com/blackfyre/wga/handlers/guestbook" "github.com/blackfyre/wga/utils" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" ) @@ -17,15 +16,15 @@ func registerGuestbookHandlers(app *pocketbase.PocketBase) { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("/guestbook", func(c echo.Context) error { + e.Router.GET("/guestbook", func(c *core.RequestEvent) error { return guestbook.EntriesHandler(app, c) }) - e.Router.GET("/guestbook/add", func(c echo.Context) error { + e.Router.GET("/guestbook/add", func(c *core.RequestEvent) error { return guestbook.StoreEntryViewHandler(app, c) }, utils.IsHtmxRequestMiddleware) - e.Router.POST("/guestbook/add", func(c echo.Context) error { + e.Router.POST("/guestbook/add", func(c *core.RequestEvent) error { return guestbook.StoreEntryHandler(app, c) }, utils.IsHtmxRequestMiddleware) diff --git a/handlers/guestbook/main.go b/handlers/guestbook/main.go index 1d4f74c7..53626ad5 100644 --- a/handlers/guestbook/main.go +++ b/handlers/guestbook/main.go @@ -36,7 +36,7 @@ func yearOptions() []string { return years } -func EntriesHandler(app *pocketbase.PocketBase, c echo.Context) error { +func EntriesHandler(app *pocketbase.PocketBase, c *core.RequestEvent) error { fullUrl := c.Scheme() + "://" + c.Request().Host + c.Request().URL.String() year := c.QueryParamDefault("year", fmt.Sprintf("%d", time.Now().Year())) @@ -68,7 +68,7 @@ func EntriesHandler(app *pocketbase.PocketBase, c echo.Context) error { return nil } -func StoreEntryViewHandler(app *pocketbase.PocketBase, c echo.Context) error { +func StoreEntryViewHandler(app *pocketbase.PocketBase, c *core.RequestEvent) error { err := pages.GuestbookEntryForm().Render(context.Background(), c.Response().Writer) @@ -79,7 +79,7 @@ func StoreEntryViewHandler(app *pocketbase.PocketBase, c echo.Context) error { return nil } -func StoreEntryHandler(app *pocketbase.PocketBase, c echo.Context) error { +func StoreEntryHandler(app *pocketbase.PocketBase, c *core.RequestEvent) error { data := apis.RequestInfo(c).Data @@ -117,7 +117,7 @@ func StoreEntryHandler(app *pocketbase.PocketBase, c echo.Context) error { form.LoadData(map[string]any{ "email": postData.Email, - "name": postData.Name, + "name": postData.GetString("name") "message": postData.Message, "location": postData.Location, }) diff --git a/handlers/home.go b/handlers/home.go index d4e41fb5..f5b05aaf 100644 --- a/handlers/home.go +++ b/handlers/home.go @@ -7,7 +7,6 @@ import ( "github.com/blackfyre/wga/assets/templ/pages" tmplUtils "github.com/blackfyre/wga/assets/templ/utils" "github.com/blackfyre/wga/utils" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/core" ) @@ -119,7 +118,7 @@ func registerHome(app *pocketbase.PocketBase) { // this is safe to be used by multiple goroutines // (it acts as store for the parsed templates) - e.Router.GET("/", func(c echo.Context) error { + e.Router.GET("/", func(c *core.RequestEvent) error { welcomeText, err := getWelcomeContent(app) diff --git a/handlers/inspire/main.go b/handlers/inspire/main.go index 470a2b29..7fc47c43 100644 --- a/handlers/inspire/main.go +++ b/handlers/inspire/main.go @@ -15,7 +15,7 @@ import ( tmplUtils "github.com/blackfyre/wga/assets/templ/utils" ) -func inspirationHandler(app *pocketbase.PocketBase, c echo.Context) error { +func inspirationHandler(app *pocketbase.PocketBase, c *core.RequestEvent) error { items, err := models.GetRandomArtworks(app.Dao(), 20) @@ -28,19 +28,19 @@ func inspirationHandler(app *pocketbase.PocketBase, c echo.Context) error { for _, item := range items { - artworkId := item.GetId() + artworkId := item.GetString("id") artist, err := models.GetArtistById(app.Dao(), item.Author) if err != nil { - app.Logger().Error("Error getting artist for artwork %s: %v", item.GetId(), err) + app.Logger().Error("Error getting artist for artwork %s: %v", item.GetString("id"), err) return utils.ServerFaultError(c) } content = append(content, dto.Image{ Url: url.GenerateFullArtworkUrl(url.ArtworkUrlDTO{ ArtistId: artist.Id, - ArtistName: artist.Name, + ArtistName: artist.GetString("name") ArtworkTitle: item.Author, ArtworkId: item.Id, }), @@ -52,10 +52,10 @@ func inspirationHandler(app *pocketbase.PocketBase, c echo.Context) error { Id: artworkId, Artist: dto.Artist{ Id: artist.Id, - Name: artist.Name, + Name: artist.GetString("name") Url: url.GenerateArtistUrl(url.ArtistUrlDTO{ ArtistId: artist.Id, - ArtistName: artist.Name, + ArtistName: artist.GetString("name") }), Profession: artist.Profession, }, @@ -76,7 +76,7 @@ func inspirationHandler(app *pocketbase.PocketBase, c echo.Context) error { func RegisterHandlers(app *pocketbase.PocketBase) { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("/inspire", func(c echo.Context) error { + e.Router.GET("/inspire", func(c *core.RequestEvent) error { return inspirationHandler(app, c) }) return nil diff --git a/handlers/musics.go b/handlers/musics.go index 92e695a4..4b155616 100644 --- a/handlers/musics.go +++ b/handlers/musics.go @@ -12,7 +12,6 @@ import ( shape "github.com/blackfyre/wga/models" "github.com/blackfyre/wga/utils" "github.com/google/uuid" - "github.com/labstack/echo/v5" "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" @@ -65,7 +64,7 @@ type Grouped_music_list struct { func registerMusicHandlers(app *pocketbase.PocketBase) { app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - e.Router.GET("musics", func(c echo.Context) error { + e.Router.GET("musics", func(c *core.RequestEvent) error { html, err := "", error(nil) isHtmx := utils.IsHtmxRequest(c) cacheKey := "musics" @@ -120,7 +119,7 @@ func registerMusicHandlers(app *pocketbase.PocketBase) { return c.HTML(http.StatusOK, html) }) - e.Router.GET("musics/:name", func(c echo.Context) error { + e.Router.GET("musics/:name", func(c *core.RequestEvent) error { isHtmx := utils.IsHtmxRequest(c) slug := c.PathParam("name") cacheKey := "music:" + slug @@ -207,7 +206,7 @@ func GetParsedMusics() []Composer_seed { composers = append(composers, Composer_seed{ ID: id, - Name: composer.Name, + Name: composer.GetString("name") Date: composer.Date, Language: composer.Language, Century: century.Century, diff --git a/handlers/postcards/save.go b/handlers/postcards/save.go index e25cc7f3..c0d91314 100644 --- a/handlers/postcards/save.go +++ b/handlers/postcards/save.go @@ -12,7 +12,7 @@ import ( "github.com/pocketbase/pocketbase/models" ) -func savePostcard(app *pocketbase.PocketBase, c echo.Context, p *bluemonday.Policy) error { +func savePostcard(app *pocketbase.PocketBase, c *core.RequestEvent, p *bluemonday.Policy) error { postData := struct { SenderName string `json:"sender_name" form:"sender_name" query:"sender_name" validate:"required"` SenderEmail string `json:"sender_email" form:"sender_email" query:"sender_email" validate:"required,email"` diff --git a/handlers/utils.go b/handlers/utils.go index e9ed8b5a..33d9ac29 100644 --- a/handlers/utils.go +++ b/handlers/utils.go @@ -3,7 +3,6 @@ package handlers import ( "fmt" - "github.com/labstack/echo/v5" "github.com/pocketbase/pocketbase/core" ) @@ -21,7 +20,7 @@ func generateArtistSlug(artist *core.Record) string { return artist.GetString("slug") + "-" + artist.GetString("id") } -func generateCurrentPageUrl(c echo.Context) string { +func generateCurrentPageUrl(c *core.RequestEvent) string { if c == nil || c.Request() == nil { return "" } diff --git a/utils/htmx.go b/utils/htmx.go index e74f6fe8..2427d681 100644 --- a/utils/htmx.go +++ b/utils/htmx.go @@ -4,20 +4,20 @@ import ( "encoding/json" "log" - "github.com/labstack/echo/v5" + "github.com/pocketbase/pocketbase/core" ) -func SetHxTrigger(c echo.Context, data map[string]any) { +func SetHxTrigger(c *core.RequestEvent, data map[string]any) { hd, err := json.Marshal(data) if err != nil { log.Fatalln(err) } - c.Response().Header().Set("HX-Trigger", string(hd)) + c.Response.Header().Set("HX-Trigger", string(hd)) } -func SendToastMessage(message string, t string, closeDialog bool, c echo.Context, trigger string) { +func SendToastMessage(message string, t string, closeDialog bool, c *core.RequestEvent, trigger string) { payload := struct { Message string `json:"message"` Type string `json:"type"` @@ -38,3 +38,11 @@ func SendToastMessage(message string, t string, closeDialog bool, c echo.Context SetHxTrigger(c, m) } + +func IsHtmxRequestMiddleware(e *core.RequestEvent) error { + if e.Request.Header.Get("HX-Request") != "true" { + return ServerFaultError(e) + } + + return e.Next() +}