Files
project-gifuu/backend/routes/GET_Art_ID.go
T

62 lines
1.3 KiB
Go
Raw Normal View History

2026-05-23 17:17:56 -07:00
package routes
import (
"gifuu/tools"
"net/http"
"github.com/jackc/pgx/v5"
)
func GET_Art_ID(w http.ResponseWriter, r *http.Request) {
paramID := tools.ParseSnowflake(r.PathValue("id"))
if paramID == 0 {
tools.SendClientError(w, r, tools.ERROR_BODY_INVALID_FIELD)
return
}
var Results []byte
err := tools.Database.QueryRow(r.Context(),
`SELECT jsonb_build_object(
'id', u.id::text,
'created', u.created::timestamptz,
'sticker', u.flag_sticker,
'audio', u.flag_audio,
'framerate', u.encode_fps,
'width', u.encode_width,
'height', u.encode_height,
'rating', u.meta_rating,
'title', u.meta_title,
'tags', COALESCE(
jsonb_agg(
CASE WHEN t.id IS NOT NULL THEN
jsonb_build_object(
'id', t.id::text,
'label', t.label,
'usage', t.usage
)
END
) FILTER (WHERE t.id IS NOT NULL),
'[]'
)
)
FROM gifuu.upload u
LEFT JOIN gifuu.upload_tag ut ON ut.gif_id = u.id
LEFT JOIN gifuu.tag t ON t.id = ut.tag_id
WHERE u.id = $1
GROUP BY u.id`,
paramID,
).Scan(&Results)
if err == pgx.ErrNoRows {
tools.SendClientError(w, r, tools.ERROR_UNKNOWN_ANIMATION)
return
}
if err != nil {
tools.SendServerError(w, r, err)
return
}
tools.SendJSON(w, r, http.StatusOK, Results)
}