diff --git a/internal/web/controllers/v1/pastes.go b/internal/web/controllers/v1/pastes.go index 797b66f..8f498f0 100644 --- a/internal/web/controllers/v1/pastes.go +++ b/internal/web/controllers/v1/pastes.go @@ -2,6 +2,7 @@ package v1 import ( "encoding/json" + "github.com/Lukaesebrot/pasty/internal/pastes" "github.com/Lukaesebrot/pasty/internal/storage" "github.com/bwmarrin/snowflake" "github.com/fasthttp/router" @@ -45,3 +46,39 @@ func v1GetPaste(ctx *fasthttp.RequestCtx) { } ctx.SetBody(jsonData) } + +// v1PostPaste handles the 'POST /v1/pastes' endpoint +func v1PostPaste(ctx *fasthttp.RequestCtx) { + // Unmarshal the body + values := make(map[string]string) + err := json.Unmarshal(ctx.PostBody(), &values) + if err != nil { + ctx.SetStatusCode(fasthttp.StatusBadRequest) + ctx.SetBodyString("invalid request body") + return + } + + // Validate the content of the paste + if values["content"] == "" { + ctx.SetStatusCode(fasthttp.StatusBadRequest) + ctx.SetBodyString("missing 'content' field") + return + } + + // Create the paste object + paste, err := pastes.Create(values["content"]) + if err != nil { + ctx.SetStatusCode(fasthttp.StatusInternalServerError) + ctx.SetBodyString(err.Error()) + return + } + + // Respond with the paste + jsonData, err := json.Marshal(paste) + if err != nil { + ctx.SetStatusCode(fasthttp.StatusInternalServerError) + ctx.SetBodyString(err.Error()) + return + } + ctx.SetBody(jsonData) +}