feat: methods to get image

This commit is contained in:
2025-02-24 20:02:58 +00:00
parent f49589907a
commit 64f6bde6a9
2 changed files with 43 additions and 10 deletions

View File

@ -1,11 +1,13 @@
package main package main
import ( import (
"encoding/json"
"fmt" "fmt"
"io" "io"
"log" "log"
"net/http" "net/http"
"os" "os"
"path/filepath"
"screenmark/screenmark/models" "screenmark/screenmark/models"
"time" "time"
@ -72,6 +74,26 @@ func main() {
w.Header().Add("Access-Control-Allow-Headers", "*") 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) { mux.HandleFunc("POST /image/{name}", func(w http.ResponseWriter, r *http.Request) {
imageName := r.PathValue("name") imageName := r.PathValue("name")
@ -95,13 +117,26 @@ func main() {
return return
} }
err = models.SaveImage(userId, imageName, image) userImage, err := models.SaveImage(userId, imageName, image)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
w.WriteHeader(http.StatusBadRequest) w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "Could not save image to DB") fmt.Fprintf(w, "Could not save image to DB")
return 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.") log.Println("Listening and serving on port 3040.")

View File

@ -3,8 +3,6 @@ package models
import ( import (
"errors" "errors"
"fmt" "fmt"
"log"
"screenmark/screenmark/.gen/haystack/haystack/model" "screenmark/screenmark/.gen/haystack/haystack/model"
. "screenmark/screenmark/.gen/haystack/haystack/table" . "screenmark/screenmark/.gen/haystack/haystack/table"
@ -13,18 +11,18 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
) )
func SaveImage(userId string, imageName string, imageData []byte) error { func SaveImage(userId string, imageName string, imageData []byte) (model.UserImages, error) {
stmt := UserImages.INSERT(UserImages.UserID, UserImages.ImageName, UserImages.Image).VALUES(userId, imageName, imageData) stmt := UserImages.INSERT(UserImages.UserID, UserImages.ImageName, UserImages.Image).VALUES(userId, imageName, imageData).RETURNING(UserImages.ID, UserImages.UserID, UserImages.ImageName)
_, err := stmt.Exec(db)
return err userImage := model.UserImages{}
err := stmt.Query(db, &userImage)
return userImage, err
} }
func GetImage(imageId string) (model.UserImages, error) { func GetImage(imageId string) (model.UserImages, error) {
id := uuid.MustParse(imageId) id := uuid.MustParse(imageId)
stmt := UserImages.SELECT(UserImages.ImageName, UserImages.Image).WHERE(UserImages.ID.EQ(UUID(id))) stmt := UserImages.SELECT(UserImages.AllColumns).WHERE(UserImages.ID.EQ(UUID(id)))
log.Println(stmt.DebugSql())
images := []model.UserImages{} images := []model.UserImages{}
err := stmt.Query(db, &images) err := stmt.Query(db, &images)