Add FastAPI backend for energy trading system

Implements FastAPI backend with ML model support for energy trading,
including price prediction models and RL-based battery trading policy.
Features dashboard, trading, backtest, and settings API routes with
WebSocket support for real-time updates.
This commit is contained in:
2026-02-12 00:59:26 +07:00
parent a22a13f6f4
commit fe76bc7629
72 changed files with 2931 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
from app.utils.logger import get_logger
logger = get_logger(__name__)
__all__ = ["logger"]

View File

@@ -0,0 +1,36 @@
from datetime import datetime, timedelta
from typing import Optional
import pytz
def utcnow() -> datetime:
"""Get current UTC datetime."""
return datetime.now(pytz.UTC)
def parse_date(date_str: str) -> datetime:
"""Parse date string to datetime."""
formats = ["%Y-%m-%d", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M:%S"]
for fmt in formats:
try:
return datetime.strptime(date_str, fmt)
except ValueError:
continue
raise ValueError(f"Unable to parse date: {date_str}")
def format_timestamp(dt: datetime, format_str: str = "%Y-%m-%dT%H:%M:%S") -> str:
"""Format datetime to string."""
return dt.strftime(format_str)
def calculate_time_delta(start: datetime, end: datetime) -> timedelta:
"""Calculate time delta between two datetimes."""
return end - start
def safe_divide(a: float, b: float, default: float = 0.0) -> float:
"""Safely divide two numbers with default fallback."""
if b == 0:
return default
return a / b

View File

@@ -0,0 +1,36 @@
import os
from loguru import logger
import sys
def get_logger(name: str):
"""Get a configured logger instance."""
return logger.bind(name=name)
def setup_logger():
"""Setup loguru logger configuration."""
logger.remove()
log_format = (
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | "
"<level>{message}</level>"
)
logger.add(
sys.stdout,
format=log_format,
level=os.getenv("LOG_LEVEL", "INFO"),
colorize=True,
)
logger.add(
"logs/app.log",
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} | {message}",
level="DEBUG",
rotation="10 MB",
retention="7 days",
compression="zip",
)