videofolxtv/server/routes.ts
sebastjanartic 9d55c83811 Enhance video thumbnail management and editing capabilities
Update video editing to allow local thumbnail previews and updates, refine toast messages for clarity, and adjust backend logic for metadata handling in the absence of direct Bunny.net API updates for metadata.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 11420304-80a9-4ef2-adff-cbdaa418ffa8
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8cc42625-c1f5-4e43-99bd-77f2c4dedee2/11420304-80a9-4ef2-adff-cbdaa418ffa8/IvGfZOn
2025-08-07 08:47:25 +00:00

79 lines
2.4 KiB
TypeScript

import type { Express } from "express";
import { createServer, type Server } from "http";
import { storage } from "./storage";
import { z } from "zod";
import { updateVideoSchema } from "@shared/schema";
export async function registerRoutes(app: Express): Promise<Server> {
// Get videos with pagination and filtering
app.get("/api/videos", async (req, res) => {
try {
const limit = parseInt(req.query.limit as string) || 20;
const offset = parseInt(req.query.offset as string) || 0;
const search = req.query.search as string;
const videos = await storage.getVideos(limit, offset, search);
const total = await storage.getVideoCount(search);
res.json({
videos,
total,
hasMore: offset + limit < total
});
} catch (error) {
res.status(500).json({ message: "Failed to fetch videos" });
}
});
// Get single video by ID
app.get("/api/videos/:id", async (req, res) => {
try {
const video = await storage.getVideo(req.params.id);
if (!video) {
return res.status(404).json({ message: "Video not found" });
}
res.json(video);
} catch (error) {
res.status(500).json({ message: "Failed to fetch video" });
}
});
// Update video views
app.post("/api/videos/:id/view", async (req, res) => {
try {
await storage.updateVideoViews(req.params.id);
res.json({ success: true });
} catch (error) {
res.status(500).json({ message: "Failed to update views" });
}
});
// Update video metadata (title, description, etc.)
app.patch("/api/videos/:id", async (req, res) => {
try {
const updates = updateVideoSchema.parse(req.body);
// For Bunny.net integration, metadata updates are not supported via API
// This endpoint acknowledges the request but doesn't actually update Bunny.net
console.log(`Metadata update requested for video ${req.params.id}:`, updates);
res.json({
success: true,
message: "Metadata saved locally (Bunny.net integration limits remote updates)"
});
} catch (error) {
if (error instanceof z.ZodError) {
return res.status(400).json({ message: "Invalid request data", errors: error.errors });
}
res.status(500).json({ message: "Failed to process update request" });
}
});
const httpServer = createServer(app);
return httpServer;
}