Backend is here. Default admin is created if needed.
This commit is contained in:
76
server/src/index.ts
Normal file
76
server/src/index.ts
Normal 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}`);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user