Backend is here. Default admin is created if needed.

This commit is contained in:
aodulov
2025-11-19 10:48:37 +02:00
parent 10819cc6f5
commit bb705c8a63
25 changed files with 3662 additions and 944 deletions

76
server/src/index.ts Normal file
View File

@@ -0,0 +1,76 @@
import express from 'express';
import cors from 'cors';
import dotenv from 'dotenv';
import authRoutes from './routes/auth';
import exerciseRoutes from './routes/exercises';
import sessionRoutes from './routes/sessions';
import planRoutes from './routes/plans';
import aiRoutes from './routes/ai';
import bcrypt from 'bcryptjs';
import { PrismaClient } from '@prisma/client';
dotenv.config();
const app = express();
// -------------------------------------------------------------------
// Ensure a default admin user exists on startup
// -------------------------------------------------------------------
async function ensureAdminUser() {
const adminEmail = process.env.ADMIN_EMAIL || 'admin@gymflow.ai';
const adminPassword = process.env.ADMIN_PASSWORD || 'admin123';
const prisma = new PrismaClient();
// Check for existing admin
const existingAdmin = await prisma.user.findFirst({
where: { role: 'ADMIN' },
});
if (existingAdmin) {
console.info(`✅ Admin user already exists (email: ${existingAdmin.email})`);
await prisma.$disconnect();
return;
}
// Create admin user
const hashed = await bcrypt.hash(adminPassword, 10);
const admin = await prisma.user.create({
data: {
email: adminEmail,
password: hashed,
role: 'ADMIN',
profile: { create: { weight: 70 } },
},
});
console.info(`🛠️ Created default admin user (email: ${admin.email})`);
await prisma.$disconnect();
}
const PORT = process.env.PORT || 3001;
app.use(cors());
app.use(express.json());
// Routes
app.use('/api/auth', authRoutes);
app.use('/api/exercises', exerciseRoutes);
app.use('/api/sessions', sessionRoutes);
app.use('/api/plans', planRoutes);
app.use('/api/ai', aiRoutes);
app.get('/', (req, res) => {
res.send('GymFlow AI API is running');
});
ensureAdminUser()
.catch((e) => {
console.error('❌ Failed to ensure admin user:', e);
process.exit(1);
})
.finally(() => {
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
});