feat: trading terminal live rates + fix spread negativo + fix USD→BRL
- Adiciona widget de cotações ao vivo (USD/BRL e EUR/BRL) com design estilo terminal de trading (dark theme, tipografia mono, glow effects) - Proxy server-side /api/cotacao com cache 3s e token AwesomeAPI - Auto-refresh a cada 3 segundos apenas quando a página está aberta - Corrige cálculo de spread negativo: remove Math.abs() em USD→BRL e Math.max(0,...) no spread líquido - Corrige seção USD→BRL que não aparecia (filtro status !== 'finalizado') - Corrige valor_reais no fluxo USD→BRL: agora calcula valor * cotação - Adiciona classe CSS spread-negative para destacar spreads negativos - Bandeiras de fluxo (BR/US/EU) nos botões de compra e venda Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Autenticacao Unificada — login/logout com bcrypt + express-session
|
||||
* Suporta roles: 'agente' | 'admin'
|
||||
* Suporta roles: 'agente' | 'corporate' | 'admin'
|
||||
*/
|
||||
const bcrypt = require('bcrypt');
|
||||
const db = require('./db-local');
|
||||
@@ -8,7 +8,7 @@ const db = require('./db-local');
|
||||
const SALT_ROUNDS = 10;
|
||||
|
||||
/**
|
||||
* Cria um novo usuario (agente ou admin)
|
||||
* Cria um novo usuario (agente, corporate ou admin)
|
||||
*/
|
||||
async function createUser(email, senha, nome, role = 'agente', agenteId = 0) {
|
||||
const hash = await bcrypt.hash(senha, SALT_ROUNDS);
|
||||
@@ -41,7 +41,8 @@ async function authenticate(email, senha) {
|
||||
* Middleware que verifica autenticacao e roles
|
||||
* Uso: requireRole() - qualquer usuario logado
|
||||
* requireRole('admin') - apenas admins
|
||||
* requireRole('agente', 'admin') - ambos
|
||||
* requireRole('corporate', 'admin') - corporate e admins
|
||||
* requireRole('agente') - apenas agentes
|
||||
*/
|
||||
function requireRole(...roles) {
|
||||
return (req, res, next) => {
|
||||
|
||||
Reference in New Issue
Block a user