Set up video streaming website with Bunny.net CDN integration
Initialize project structure with UI components, CDN video display, and configurations. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 50814a1e-92e4-4968-856f-7bc7eedf5e8f Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8cc42625-c1f5-4e43-99bd-77f2c4dedee2/50814a1e-92e4-4968-856f-7bc7eedf5e8f/uoltFyL
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import type { Express } from "express";
|
||||
import { createServer, type Server } from "http";
|
||||
import { storage } from "./storage";
|
||||
import { z } from "zod";
|
||||
|
||||
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 category = req.query.category as string;
|
||||
|
||||
const videos = await storage.getVideos(limit, offset, search, category);
|
||||
const total = await storage.getVideoCount(search, category);
|
||||
|
||||
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" });
|
||||
}
|
||||
});
|
||||
|
||||
// Get video categories
|
||||
app.get("/api/categories", async (req, res) => {
|
||||
try {
|
||||
const videos = await storage.getVideos(1000);
|
||||
const categories = Array.from(new Set(videos.map(v => v.category).filter(Boolean)));
|
||||
res.json(categories);
|
||||
} catch (error) {
|
||||
res.status(500).json({ message: "Failed to fetch categories" });
|
||||
}
|
||||
});
|
||||
|
||||
const httpServer = createServer(app);
|
||||
return httpServer;
|
||||
}
|
||||
Reference in New Issue
Block a user