feat: initialize backend service with Express, SQLite logging, and API utilities
Deploy Backendia / deploy (push) Successful in 5m0s
Deploy Backendia / deploy (push) Successful in 5m0s
This commit is contained in:
+88
-58
@@ -36,57 +36,61 @@ const db = new sqlite3.Database(dbPath, (err) => {
|
||||
console.error('Erreur de connexion à SQLite:', err.message);
|
||||
} else {
|
||||
console.log('Connecté à la base de données SQLite.');
|
||||
db.run(`CREATE TABLE IF NOT EXISTS user_stats (
|
||||
wallet_hash TEXT PRIMARY KEY,
|
||||
photo_count INTEGER DEFAULT 0,
|
||||
last_upload DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)`);
|
||||
db.serialize(() => {
|
||||
db.run(`CREATE TABLE IF NOT EXISTS user_stats (
|
||||
wallet_hash TEXT PRIMARY KEY,
|
||||
photo_count INTEGER DEFAULT 0,
|
||||
last_upload DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)`);
|
||||
|
||||
db.run(`CREATE TABLE IF NOT EXISTS banned_wallets (
|
||||
wallet_hash TEXT PRIMARY KEY,
|
||||
reason TEXT,
|
||||
banned_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
banned_by TEXT DEFAULT 'Admin'
|
||||
)`);
|
||||
db.run(`CREATE TABLE IF NOT EXISTS banned_wallets (
|
||||
wallet_hash TEXT PRIMARY KEY,
|
||||
reason TEXT,
|
||||
banned_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
banned_by TEXT DEFAULT 'Admin'
|
||||
)`);
|
||||
|
||||
db.run(`CREATE TABLE IF NOT EXISTS upload_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
session_id TEXT,
|
||||
wallet_hash TEXT,
|
||||
image_filename TEXT,
|
||||
json_filename TEXT,
|
||||
file_size INTEGER,
|
||||
ip_address TEXT,
|
||||
user_agent TEXT,
|
||||
device_model TEXT,
|
||||
device_os TEXT,
|
||||
target_type TEXT,
|
||||
weapon TEXT,
|
||||
distance_meters INTEGER,
|
||||
impacts_count INTEGER DEFAULT 0,
|
||||
status TEXT DEFAULT 'SUCCESS',
|
||||
target_valid INTEGER DEFAULT 1,
|
||||
target_status TEXT DEFAULT 'VALID',
|
||||
target_confidence REAL DEFAULT 1.0,
|
||||
target_rings_count INTEGER DEFAULT 0,
|
||||
target_details TEXT,
|
||||
error_message TEXT,
|
||||
raw_metadata TEXT
|
||||
)`);
|
||||
db.run(`CREATE TABLE IF NOT EXISTS upload_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
session_id TEXT,
|
||||
wallet_hash TEXT,
|
||||
image_filename TEXT,
|
||||
json_filename TEXT,
|
||||
file_size INTEGER,
|
||||
ip_address TEXT,
|
||||
user_agent TEXT,
|
||||
device_model TEXT,
|
||||
device_os TEXT,
|
||||
target_type TEXT,
|
||||
weapon TEXT,
|
||||
distance_meters INTEGER,
|
||||
impacts_count INTEGER DEFAULT 0,
|
||||
status TEXT DEFAULT 'SUCCESS',
|
||||
target_valid INTEGER DEFAULT 1,
|
||||
target_status TEXT DEFAULT 'VALID',
|
||||
target_confidence REAL DEFAULT 1.0,
|
||||
target_rings_count INTEGER DEFAULT 0,
|
||||
target_details TEXT,
|
||||
error_message TEXT,
|
||||
raw_metadata TEXT
|
||||
)`);
|
||||
|
||||
// Migration safe des colonnes OpenCV si la table existait déjà
|
||||
const migrations = [
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_valid INTEGER DEFAULT 1",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_status TEXT DEFAULT 'VALID'",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_confidence REAL DEFAULT 1.0",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_rings_count INTEGER DEFAULT 0",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_details TEXT"
|
||||
];
|
||||
migrations.forEach(sql => db.run(sql, () => {}));
|
||||
// Migration safe des colonnes OpenCV si la table existait déjà
|
||||
const migrations = [
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_valid INTEGER DEFAULT 1",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_status TEXT DEFAULT 'VALID'",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_confidence REAL DEFAULT 1.0",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_rings_count INTEGER DEFAULT 0",
|
||||
"ALTER TABLE upload_logs ADD COLUMN target_details TEXT"
|
||||
];
|
||||
migrations.forEach(sql => {
|
||||
db.run(sql, () => {});
|
||||
});
|
||||
|
||||
db.run(`CREATE INDEX IF NOT EXISTS idx_upload_logs_wallet ON upload_logs(wallet_hash)`);
|
||||
db.run(`CREATE INDEX IF NOT EXISTS idx_upload_logs_timestamp ON upload_logs(timestamp)`);
|
||||
db.run(`CREATE INDEX IF NOT EXISTS idx_upload_logs_wallet ON upload_logs(wallet_hash)`);
|
||||
db.run(`CREATE INDEX IF NOT EXISTS idx_upload_logs_timestamp ON upload_logs(timestamp)`);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -814,14 +818,40 @@ app.use((err, req, res, next) => {
|
||||
res.status(500).json({ error: err.message || 'Une erreur inattendue est survenue' });
|
||||
});
|
||||
|
||||
// Démarrer le serveur
|
||||
app.listen(PORT, () => {
|
||||
console.log(`=================================`);
|
||||
console.log(`Serveur Backend IA démarré`);
|
||||
console.log(`Port: ${PORT}`);
|
||||
console.log(`Dossiers:`);
|
||||
console.log(` - Images: ${imagesDir}`);
|
||||
console.log(` - Data : ${dataDir}`);
|
||||
console.log(` - Export: ${exportsDir}`);
|
||||
console.log(`=================================`);
|
||||
});
|
||||
// Intégration du Dashboard Next.js
|
||||
const dashboardDir = path.join(__dirname, 'dashboard');
|
||||
const dev = process.env.NODE_ENV !== 'production';
|
||||
|
||||
let nextApp;
|
||||
try {
|
||||
const next = require('next');
|
||||
nextApp = next({ dev, dir: dashboardDir });
|
||||
} catch (e) {
|
||||
console.warn("Module 'next' non disponible, mode API seule.");
|
||||
}
|
||||
|
||||
async function startServer() {
|
||||
if (nextApp) {
|
||||
try {
|
||||
await nextApp.prepare();
|
||||
const handle = nextApp.getRequestHandler();
|
||||
app.all('*', (req, res) => handle(req, res));
|
||||
console.log("Dashboard Next.js initialisé avec succès.");
|
||||
} catch (err) {
|
||||
console.error("Erreur d'initialisation du Dashboard Next.js:", err);
|
||||
}
|
||||
}
|
||||
|
||||
app.listen(PORT, () => {
|
||||
console.log(`=================================`);
|
||||
console.log(`Serveur Backend IA & Dashboard démarré`);
|
||||
console.log(`Port: ${PORT}`);
|
||||
console.log(`Dossiers:`);
|
||||
console.log(` - Images: ${imagesDir}`);
|
||||
console.log(` - Data : ${dataDir}`);
|
||||
console.log(` - Export: ${exportsDir}`);
|
||||
console.log(`=================================`);
|
||||
});
|
||||
}
|
||||
|
||||
startServer();
|
||||
|
||||
Reference in New Issue
Block a user