File size: 1,322 Bytes
26cbf65 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /**
* Controladores del modulo de posiciones (simulador virtual).
*
* Responsabilidades:
* - open(req, res) → abre una posicion virtual en un mercado.
* - list(req, res) → lista las posiciones del usuario autenticado.
* - close(req, res) → cierra una posicion y calcula P&L final.
*
* Endpoints (bajo /api/v1/positions, protegidos por requireAuth):
* POST / → abrir posicion.
* GET / → listar posiciones (opcional ?status=open|closed).
* DELETE /:id → cerrar posicion.
*/
import { ok, created, noContent } from '../utils/apiResponse.js';
import { positionsService } from './positions.service.js';
export const positionsController = {
async open(req, res) {
const position = await positionsService.open(req.user.id, req.body);
created(res, position);
},
async list(req, res) {
const positions = await positionsService.list(req.user.id, req.query.status);
ok(res, positions);
},
async close(req, res) {
const position = await positionsService.close(req.params.id, req.user.id);
ok(res, position);
},
async suggest(req, res) {
const bankroll = req.query.bankroll ? parseFloat(req.query.bankroll) : 1000;
const suggestion = await positionsService.suggest(req.params.marketId, bankroll);
ok(res, suggestion);
},
};
|