File size: 1,827 Bytes
c40c447
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Mapper para casos de uso de Backtesting.

Convierte entre API schemas (Pydantic) y DTOs de aplicación.
"""

from app.schemas.requests.backtest import BacktestRequest
from app.schemas.responses.backtest import BacktestResponse, BacktestMetrics
from app.application.dtos.backtest_dtos import (
    BacktestInputDTO,
    BacktestOutputDTO,
    BacktestMetricsDTO
)


class BacktestMapper:
    """
    Mapper para convertir entre API schemas y DTOs de backtest.
    """
    
    @staticmethod
    def to_input_dto(request: BacktestRequest) -> BacktestInputDTO:
        """
        Convierte API request a DTO de entrada.
        
        Args:
            request: Request de la API
        
        Returns:
            BacktestInputDTO: DTO para el caso de uso
        """
        return BacktestInputDTO(
            values=request.series.values,
            test_size=request.test_size,
            quantile_levels=request.quantile_levels,
            timestamps=request.series.timestamps,
            freq=request.freq
        )
    
    @staticmethod
    def from_output_dto(dto: BacktestOutputDTO) -> BacktestResponse:
        """
        Convierte DTO de salida a API response.
        
        Args:
            dto: DTO del caso de uso
        
        Returns:
            BacktestResponse: Response para la API
        """
        # Convertir métricas
        metrics = BacktestMetrics(
            mae=dto.metrics.mae,
            mape=dto.metrics.mape,
            rmse=dto.metrics.rmse,
            mse=dto.metrics.mse
        )
        
        return BacktestResponse(
            forecast_values=dto.forecast_values,
            actual_values=dto.actual_values,
            errors=dto.errors,
            metrics=metrics,
            timestamps=dto.timestamps,
            quantiles=dto.quantiles
        )