- ✅ API completa em /api com TypeScript - ✅ Google Calendar integration (pessoal + profissional) - ✅ Queries diretas à BD: tasks, leads, projectos, billing, pipeline - ✅ Endpoints: /api/dashboard, /api/monitor, /api/health - ✅ Vite proxy configurado (/api → localhost:3001) - ✅ App.tsx usa /api/dashboard (não mais dados mock) - ✅ Migração completa do PHP (index.php + monitor.php) - ✅ CHANGELOG.md criado para tracking - ✅ Scripts npm: dev (paralelo), dev:api, dev:ui, start Dependencies: - express, cors, mysql2, googleapis - concurrently, tsx (dev) Breaking: PHP backend será descontinuado See: CHANGELOG.md, api/README.md Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
/**
|
|
* Express API Server
|
|
* @author Descomplicar® | @link descomplicar.pt | @copyright 2026
|
|
*/
|
|
import express from 'express'
|
|
import cors from 'cors'
|
|
import dashboardRouter from './routes/dashboard.js'
|
|
import monitorRouter from './routes/monitor.js'
|
|
|
|
const app = express()
|
|
const PORT = process.env.API_PORT || 3001
|
|
|
|
// Middleware
|
|
app.use(cors({
|
|
origin: process.env.FRONTEND_URL || 'http://localhost:5173',
|
|
credentials: true
|
|
}))
|
|
app.use(express.json())
|
|
|
|
// Health check
|
|
app.get('/api/health', (req, res) => {
|
|
res.json({ status: 'ok', timestamp: new Date().toISOString() })
|
|
})
|
|
|
|
// Routes
|
|
app.use('/api/dashboard', dashboardRouter)
|
|
app.use('/api/monitor', monitorRouter)
|
|
|
|
// Error handling
|
|
app.use((err: any, req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
console.error('Server error:', err)
|
|
res.status(500).json({ error: 'Internal server error' })
|
|
})
|
|
|
|
// Start server
|
|
app.listen(PORT, () => {
|
|
console.log(`🚀 API Server running on http://localhost:${PORT}`)
|
|
console.log(`📊 Dashboard: http://localhost:${PORT}/api/dashboard`)
|
|
console.log(`🔍 Monitor: http://localhost:${PORT}/api/monitor`)
|
|
})
|