From e62dfd8c402d70ca1e1d3ce9f22c7bddf0d94d51 Mon Sep 17 00:00:00 2001 From: gom-by Date: Wed, 15 Jan 2025 13:35:30 +0100 Subject: [PATCH] blog handlers mock-up --- backend/api/blog/new/route.go | 0 backend/api/blog/route.go | 0 backend/main.go | 108 +++++++++++++++++++++++++++++++++- frontend/app/layout.tsx | 14 ++--- 4 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 backend/api/blog/new/route.go create mode 100644 backend/api/blog/route.go diff --git a/backend/api/blog/new/route.go b/backend/api/blog/new/route.go new file mode 100644 index 0000000..e69de29 diff --git a/backend/api/blog/route.go b/backend/api/blog/route.go new file mode 100644 index 0000000..e69de29 diff --git a/backend/main.go b/backend/main.go index 68e6260..5c44786 100644 --- a/backend/main.go +++ b/backend/main.go @@ -5,7 +5,9 @@ import ( "log" "net/http" "os" - + "time" + "encoding/json" + "strings" "github.com/joho/godotenv" "context" @@ -18,6 +20,11 @@ func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "

Hello, World!

") } +type ErrorResponse struct { + ErrorCode string `json:"errorCode"` + Message string `json:"message"` +} + var DB *bun.DB type DSN struct { @@ -35,7 +42,9 @@ func (dsn *DSN) ToString() string { func handlerCreateUser(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { - // return an empty json + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"message": "Resource created successfully"}`)) } user := &User{ @@ -54,6 +63,100 @@ func handlerCreateUser(w http.ResponseWriter, r *http.Request) { fmt.Println("User inserted successfully") } +func handlerCreateBlog(w http.ResponseWriter, r *http.Request) { + + emptyObject := make(map[string]interface{}) + + emptyJSON, json_err := json.Marshal(emptyObject) + if json_err != nil { + fmt.Println("Couldn't create the json object") + w.Write(emptyJSON) + } + + if r.Method != http.MethodPost { + return string(emptyJSON) + } + + err := r.ParseForm() + if err != nil { + return string(emptyJSON) + } + + user := &Blog{ + BaseModel: bun.BaseModel{}, + BlogID: [16]byte{}, + Slug: "", + Content: "", + Label: "", + AuthorID: [16]byte{}, + Published: time.Time{}, + Summary: "", + Image: "", + Href: "", + Author: &User{}, + } + + _, err_db := DB.NewInsert().Model(user).Exec(context.Background()) + if err_db != nil { + log.Fatal(err) + } + + fmt.Println("User inserted successfully") + return string(emptyJSON) +} + +func handlerGetBlog(w http.ResponseWriter, r *http.Request) (string) { + log.Println("ok") + emptyObject := make(map[string]interface{}) + + emptyJSON, json_err := json.Marshal(emptyObject) + if json_err != nil { + fmt.Println("Couldn't create the json object") + return string(emptyJSON) + } + + if r.Method != http.MethodGet { + http.Error(w, "Wrong method", http.StatusMethodNotAllowed) + return string(emptyJSON) + } + + if !strings.HasPrefix(r.URL.Path, "/blog/") { + http.Redirect(w, r, "/blog", http.StatusFound) + return string(emptyJSON) + } + + blog_uuid := strings.TrimPrefix(r.URL.Path, "/blog/") + if blog_uuid == "" { + http.Error(w, "Slug is required", http.StatusBadRequest) + return string(emptyJSON) + } + + blog := &Blog{ + BaseModel: bun.BaseModel{}, + BlogID: [16]byte{}, + Slug: "", + Content: "", + Label: "", + AuthorID: [16]byte{}, + Published: time.Time{}, + Summary: "", + Image: "", + Href: "", + Author: &User{}, + } + + ctx := context.Background() + err_db := DB.NewSelect().Model(blog).Where("uuid = ", blog_uuid).Scan(ctx) + if err_db != nil { + log.Fatal(err_db) + http.Error(w, "Can't use select", http.StatusNotFound) + return string(emptyJSON) + } + + fmt.Println("Blog inserted successfully") + return string(emptyJSON) +} + func main() { err := godotenv.Load() if err != nil { @@ -81,6 +184,7 @@ func main() { http.HandleFunc("/user/new", handlerCreateUser) http.HandleFunc("/users/login", HandleLogin) + http.HandleFunc("/blog/", handlerGetBlog) fmt.Printf("Serving on port %s\n", port) err = http.ListenAndServe(fmt.Sprintf(":%s", port), nil) diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index e3bcbea..dd8f016 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -24,12 +24,12 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - fetch(url).then((res) => res.json()), - revalidateOnFocus: false, - }} - > + // fetch(url).then((res) => res.json()), + // revalidateOnFocus: false, + // }} + //> - + // ); }