feat: add core API routes for authentication, user management, and file upload handling.

This commit is contained in:
Michael committed 2026-03-02 14:16:19 +01:00
1 parent 84d2012929
commit 4e189e7797
1 file changed
+37 -1
+37 -1
View File
@@ -3,7 +3,7 @@ import { createServer, type Server } from "http";
import fs from "fs";
import os from "os";
import { storage } from "./storage";
import { db } from "./db";
import { db, pool } from "./db";
import multer from "multer";
import bcrypt from "bcrypt";
import passport from "./auth";
@@ -1032,6 +1032,42 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
});
// Route admin : correction des titres corrompus (latin1 lu comme UTF-8)
// Se déclenche aussi automatiquement au démarrage
const fixAudioTrackEncoding = async () => {
try {
const tracks = await storage.getAudioTracks();
let fixed = 0;
for (const track of tracks) {
// Détecte les séquences typiques latin1/utf8 mal interprétées (ex: é, à , è)
if (/[\xC0-\xC3][\x80-\xBF]/.test(track.title)) {
const corrected = Buffer.from(track.title, 'latin1').toString('utf8');
const correctedFileName = Buffer.from(track.fileName, 'latin1').toString('utf8');
await pool.query(
`UPDATE audio_tracks SET title = $1, file_name = $2 WHERE id = $3`,
[corrected, correctedFileName, track.id]
);
fixed++;
}
}
if (fixed > 0) console.log(`🎵 Fixed encoding for ${fixed} audio track(s).`);
} catch (e) {
console.error('Error fixing audio track encoding:', e);
}
};
// Lancer la correction au démarrage
fixAudioTrackEncoding().catch(() => { });
app.post("/api/audio-tracks/fix-encoding", requireAdmin, async (req, res) => {
try {
await fixAudioTrackEncoding();
const tracks = await storage.getAudioTracks();
res.json({ success: true, tracks });
} catch (error) {
res.status(500).json({ error: "Failed to fix encoding" });
}
});
app.get("/api/audio-tracks", requireAuth, async (req, res) => {
try {
// Both admin and regular users can list audio tracks (to pick them for reels)