rc-1
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package routes
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"gifuu/include"
|
||||
"gifuu/tools"
|
||||
"html"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/jackc/pgx/v5"
|
||||
)
|
||||
|
||||
var animTemplate = template.Must(template.New("").Parse(include.TEMPLATE_ANIMATION_METADATA))
|
||||
|
||||
func GET_Metadata_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 animationData struct {
|
||||
Created string
|
||||
Width int
|
||||
Height int
|
||||
Rating float64
|
||||
Sticker bool
|
||||
Title string
|
||||
Tags []string
|
||||
}
|
||||
|
||||
// Fetch Animation Metadata
|
||||
err := tools.Database.QueryRow(r.Context(),
|
||||
`SELECT
|
||||
u.encode_width,
|
||||
u.encode_height,
|
||||
u.meta_rating,
|
||||
u.flag_sticker,
|
||||
u.meta_title,
|
||||
COALESCE(array_agg(t.label ORDER BY t.usage) 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(
|
||||
&animationData.Width,
|
||||
&animationData.Height,
|
||||
&animationData.Rating,
|
||||
&animationData.Sticker,
|
||||
&animationData.Title,
|
||||
&animationData.Tags,
|
||||
)
|
||||
if err == pgx.ErrNoRows {
|
||||
tools.SendClientError(w, r, tools.ERROR_UNKNOWN_ANIMATION)
|
||||
return
|
||||
}
|
||||
if err != nil {
|
||||
tools.SendServerError(w, r, err)
|
||||
return
|
||||
}
|
||||
|
||||
// Render Webpage
|
||||
w.Header().Add("Content-Type", "text/html")
|
||||
err = animTemplate.Execute(w, map[string]any{
|
||||
"width": animationData.Width,
|
||||
"height": animationData.Height,
|
||||
"title": html.EscapeString(animationData.Title),
|
||||
"tags": html.EscapeString(strings.Join(animationData.Tags, ", ")),
|
||||
"uri_embed": fmt.Sprintf("%s/embed.html?id=%d&quality=standard", tools.TEMPLATE_BASE_WEB, paramID),
|
||||
"uri_image": fmt.Sprintf("%s/%d/standard.avif", tools.TEMPLATE_BASE_CDN, paramID),
|
||||
"uri_site": fmt.Sprintf("%s/art/%d", tools.TEMPLATE_BASE_WEB, paramID),
|
||||
})
|
||||
if err != nil {
|
||||
log.Println("Render Error:", r.URL.Path, err)
|
||||
http.Error(w, "Server Error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user