feat: post edition save

This commit is contained in:
Florian Sylvain
2024-05-18 12:24:54 +02:00
parent 900ad3e8b8
commit 92c6d06d00
8 changed files with 115 additions and 24 deletions
+2
View File
@@ -14,6 +14,7 @@ type UseCases struct {
CreatePostUseCase *useCases.CreatePostUseCase
GetPostUseCase *useCases.GetPostUseCase
ListPostsUseCase *useCases.ListPostsUseCase
UpdatePostUseCase *useCases.UpdatePostUseCase
GetUserUseCase *useCases.GetUserUseCase
CreateUserUseCase *useCases.CreateUserUseCase
UpdateUserUseCase *useCases.UpdateUserUseCase
@@ -49,6 +50,7 @@ func InitContainer() {
CreatePostUseCase: useCases.NewCreatePostUseCase(db),
GetPostUseCase: useCases.NewGetPostUseCase(db),
ListPostsUseCase: useCases.NewListPostsUseCase(db),
UpdatePostUseCase: useCases.NewUpdatePostUseCase(db),
GetUserUseCase: useCases.NewGetUserUseCase(db),
CreateUserUseCase: useCases.NewCreateUserUseCase(db),
UpdateUserUseCase: useCases.NewUpdateUserUseCase(db),
+1
View File
@@ -123,6 +123,7 @@ func NewPageRouter() http.Handler {
r.Get("/home", GetHomePage)
r.Get("/post", GetPostsPage)
r.Get("/post/{name}/edit", GetPostEditPage)
r.Post("/post/{name}/edit", PostPostEditPage)
r.Get("/post/create", GetPostCreatePage)
r.Post("/post/create", PostPostCreatePage)
})
+53 -10
View File
@@ -4,22 +4,65 @@ import (
"github.com/go-chi/chi/v5"
"html/template"
"net/http"
"net/url"
)
type PostEditPageAlert struct {
IsError bool
Message string
}
func getPostEditPageTemplate(body string, alert PostEditPageAlert) []byte {
navbarTmpl, _ := Container.GetPageUseCase.GetPage("componentNavbar", nil)
postTmpl, _ := Container.GetPageUseCase.GetPage("postEdit", map[string]interface{}{
"Navbar": template.HTML(navbarTmpl),
"Head": headTmpl,
"Body": body,
"Alert": alert,
})
return postTmpl
}
func PostPostEditPage(w http.ResponseWriter, r *http.Request) {
postName := chi.URLParam(r, "name")
if len(postName) == 0 {
_, _ = w.Write(getPostEditPageTemplate("", PostEditPageAlert{
IsError: true,
Message: "Could not find the requested post.",
}))
return
}
_ = r.ParseForm()
postBody := r.FormValue("postBody")
parsedName, _ := url.PathUnescape(postName)
post, _ := Container.GetPostUseCase.GetPostByName(parsedName)
err := Container.UpdatePostUseCase.UpdateBody(post.ID, postBody)
if err != nil {
_, _ = w.Write(getPostEditPageTemplate(postBody, PostEditPageAlert{
IsError: true,
Message: "Could not save the post: " + err.Error(),
}))
return
}
_, _ = w.Write(getPostEditPageTemplate(postBody, PostEditPageAlert{
IsError: false,
Message: "Post successfully edited!",
}))
}
func GetPostEditPage(w http.ResponseWriter, r *http.Request) {
postName := chi.URLParam(r, "name")
if len(postName) == 0 {
w.WriteHeader(http.StatusBadRequest)
return
}
post, _ := Container.GetPostUseCase.GetPostByName(postName)
navbarTmpl, _ := Container.GetPageUseCase.GetPage("componentNavbar", nil)
postsTmpl, _ := Container.GetPageUseCase.GetPage("postEdit", map[string]interface{}{
"Navbar": template.HTML(navbarTmpl),
"Head": headTmpl,
"Body": post.Body,
})
_, _ = w.Write(postsTmpl)
parsedName, _ := url.PathUnescape(postName)
post, _ := Container.GetPostUseCase.GetPostByName(parsedName)
_, _ = w.Write(getPostEditPageTemplate(post.Body, PostEditPageAlert{
IsError: false,
Message: "",
}))
}