viabiliza/app.js
gabriel.pereira b3bca576da REFACTOR: Remoção de serviços obsoletos e implementação da nova funcionalidade de viabilidade pela API de contratação
- Removidos os arquivos não utilizados: fetchService, geocodeService, normalizeService e retryService.

- Adicionado o viabilidadeController para gerenciar consultas de viabilidade e upload de arquivos CSV.

- Criadas as viabilidadeRoutes para tratar as rotas da API relacionadas à viabilidade.

- Implementado o csvService para processamento de arquivos CSV e integração com as consultas de viabilidade.

- Criado o jobStore.service para gerenciamento do estado dos jobs durante o processamento do CSV.

- Desenvolvido o viabilidadeService para integração com a API de viabilidade.
2025-12-30 09:16:07 -03:00

60 lines
1.8 KiB
JavaScript

const express = require('express');
const path = require('path');
const session = require('express-session');
require('dotenv').config();
const viabilidadeRoutes = require('./routes/viabilidadeRoutes');
const app = express();
// Basic middleware
app.use(express.json({ limit: '5mb' }));
app.use(express.urlencoded({ extended: true }));
// Session (in-memory, fine for dev/tests)
app.use(session({
secret: process.env.SESSION_SECRET || 'dev-secret',
resave: false,
saveUninitialized: false,
cookie: { secure: false } // secure should be true behind HTTPS in prod
}));
// Dev bypass for Microsoft auth / session (only when explicitly enabled)
if (process.env.NODE_ENV === 'development' && process.env.DEV_SKIP_AUTH === 'true') {
app.use((req, res, next) => {
if (!req.session) return next();
// mark a simple user in session so handlers that expect auth work in dev
req.session.user = req.session.user || { id: 'dev', name: 'developer' };
next();
});
}
// Serve static assets (UI)
app.use(express.static(path.join(__dirname, 'public')));
// Mount API routes
app.use('/', viabilidadeRoutes);
// Health endpoint
app.get('/health', (req, res) => res.json({ ok: true }));
// 404
app.use((req, res) => res.status(404).json({ error: 'Not found' }));
// Error handler
app.use((err, req, res, next) => {
console.error(err && (err.stack || err.message) || err);
res.status(500).json({ error: 'Internal server error' });
});
if (require.main === module) {
const port = parseInt(process.env.PORT, 10) || 3000;
app.listen(port, () => {
console.log(`Server listening on port ${port} (env=${process.env.NODE_ENV || 'production'})`);
if (process.env.NODE_ENV === 'development' && process.env.DEV_SKIP_AUTH === 'true') {
console.log('[START-NOAUTH] DEV_SKIP_AUTH=true — authentication is bypassed');
}
});
}
module.exports = app;