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);
  },
};