From 64f6bde6a9094f45d9b1814ca9c236a8d3716360 Mon Sep 17 00:00:00 2001 From: John Costa Date: Mon, 24 Feb 2025 20:02:58 +0000 Subject: [PATCH] feat: methods to get image --- backend/main.go | 37 ++++++++++++++++++++++++++++++++++++- backend/models/image.go | 16 +++++++--------- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/backend/main.go b/backend/main.go index 51bb0f2..ef5f2e9 100644 --- a/backend/main.go +++ b/backend/main.go @@ -1,11 +1,13 @@ package main import ( + "encoding/json" "fmt" "io" "log" "net/http" "os" + "path/filepath" "screenmark/screenmark/models" "time" @@ -72,6 +74,26 @@ func main() { w.Header().Add("Access-Control-Allow-Headers", "*") }) + mux.HandleFunc("GET /image/{id}", func(w http.ResponseWriter, r *http.Request) { + imageId := r.PathValue("id") + + // TODO: really need authorization here! + image, err := models.GetImage(imageId) + if err != nil { + log.Println(err) + w.WriteHeader(http.StatusNotFound) + fmt.Fprintf(w, "Could not get image") + return + } + + // TODO: this could be part of the db table + extension := filepath.Ext(image.ImageName) + extension = extension[1:] + + w.Header().Add("Content-Type", "image/"+extension) + w.Write(image.Image) + }) + mux.HandleFunc("POST /image/{name}", func(w http.ResponseWriter, r *http.Request) { imageName := r.PathValue("name") @@ -95,13 +117,26 @@ func main() { return } - err = models.SaveImage(userId, imageName, image) + userImage, err := models.SaveImage(userId, imageName, image) if err != nil { log.Println(err) w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Could not save image to DB") return } + + jsonUserImage, err := json.Marshal(userImage) + if err != nil { + log.Println(err) + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "Could not create JSON response for this image") + return + } + + fmt.Fprint(w, string(jsonUserImage)) + w.Header().Add("Content-Type", "application/json") + + w.WriteHeader(http.StatusCreated) }) log.Println("Listening and serving on port 3040.") diff --git a/backend/models/image.go b/backend/models/image.go index 891ec67..148d2dc 100644 --- a/backend/models/image.go +++ b/backend/models/image.go @@ -3,8 +3,6 @@ package models import ( "errors" "fmt" - "log" - "screenmark/screenmark/.gen/haystack/haystack/model" . "screenmark/screenmark/.gen/haystack/haystack/table" @@ -13,18 +11,18 @@ import ( "github.com/google/uuid" ) -func SaveImage(userId string, imageName string, imageData []byte) error { - stmt := UserImages.INSERT(UserImages.UserID, UserImages.ImageName, UserImages.Image).VALUES(userId, imageName, imageData) - _, err := stmt.Exec(db) +func SaveImage(userId string, imageName string, imageData []byte) (model.UserImages, error) { + stmt := UserImages.INSERT(UserImages.UserID, UserImages.ImageName, UserImages.Image).VALUES(userId, imageName, imageData).RETURNING(UserImages.ID, UserImages.UserID, UserImages.ImageName) - return err + userImage := model.UserImages{} + err := stmt.Query(db, &userImage) + + return userImage, err } func GetImage(imageId string) (model.UserImages, error) { id := uuid.MustParse(imageId) - stmt := UserImages.SELECT(UserImages.ImageName, UserImages.Image).WHERE(UserImages.ID.EQ(UUID(id))) - - log.Println(stmt.DebugSql()) + stmt := UserImages.SELECT(UserImages.AllColumns).WHERE(UserImages.ID.EQ(UUID(id))) images := []model.UserImages{} err := stmt.Query(db, &images)