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 }