morffix/server/ffmpeg_command.go

79 lines
2.1 KiB
Go

package server
import (
"bytes"
"fmt"
"log/slog"
"net/http"
"git.lastassault.de/speatzle/morffix/constants"
"github.com/jackc/pgx/v5"
)
type FfmpegCommandsData struct {
FfmpegCommands []FfmpegCommand
}
type FfmpegCommand struct {
ID int `db:"id"`
Name string `db:"name"`
Data string `db:"data"`
}
func handleFfmpegCommands(w http.ResponseWriter, r *http.Request) {
data := FfmpegCommandsData{}
if r.Method == "POST" {
err := createFfmpegCommand(r)
if err != nil {
slog.ErrorContext(r.Context(), "Create FfmpegCommand", "err", err)
http.Error(w, "Error Create FfmpegCommand: "+err.Error(), http.StatusInternalServerError)
return
}
}
rows, err := db.Query(r.Context(), "SELECT id, name, data FROM ffmpeg_commands")
if err != nil {
slog.ErrorContext(r.Context(), "Query ffmpegCommands", "err", err)
http.Error(w, "Error Query ffmpegCommands: "+err.Error(), http.StatusInternalServerError)
return
}
ffmpegCommands, err := pgx.CollectRows[FfmpegCommand](rows, pgx.RowToStructByName[FfmpegCommand])
if err != nil {
slog.ErrorContext(r.Context(), "Collect Rows", "err", err)
http.Error(w, "Error Query ffmpegCommands: "+err.Error(), http.StatusInternalServerError)
return
}
data.FfmpegCommands = ffmpegCommands
buf := bytes.Buffer{}
err = templates.ExecuteTemplate(&buf, constants.FFMPEG_COMMANDS_TEMPLATE_NAME, data)
if err != nil {
slog.ErrorContext(r.Context(), "Executing ffmpegCommands Template", "err", err)
http.Error(w, "Error Executing Template: "+err.Error(), http.StatusInternalServerError)
return
}
_, err = w.Write(buf.Bytes())
if err != nil {
slog.ErrorContext(r.Context(), "Writing http Response", "err", err)
}
}
func createFfmpegCommand(r *http.Request) error {
err := r.ParseForm()
if err != nil {
return fmt.Errorf("Parseing Form: %w", err)
}
name := r.FormValue("name")
data := r.FormValue("data")
slog.Info("Got FfmpegCommand Create", "name", name, "data", data)
_, err = db.Exec(r.Context(), "INSERT INTO ffmpeg_commands (name, data) VALUES ($1,$2)", name, data)
if err != nil {
return fmt.Errorf("Inserting FfmpegCommand: %w", err)
}
return nil
}