trading-platform-data-servi.../main.py
2026-01-16 08:32:57 -06:00

91 lines
2.1 KiB
Python

"""
Data Service - Market Data Synchronization API
FastAPI service for fetching and synchronizing market data from Polygon.io
to the trading platform database.
"""
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from src.config import get_settings
from src.routers import tickers_router, sync_router
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)
settings = get_settings()
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan handler."""
logger.info("Data Service starting up...")
logger.info(f"Environment: {settings.environment}")
logger.info(f"Database: {settings.database_url.split('@')[1] if '@' in settings.database_url else 'configured'}")
yield
logger.info("Data Service shutting down...")
app = FastAPI(
title="Trading Platform - Data Service",
description="Market data synchronization service using Polygon.io API",
version="1.0.0",
lifespan=lifespan,
docs_url="/docs",
redoc_url="/redoc"
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(tickers_router)
app.include_router(sync_router)
@app.get("/")
async def root():
"""Root endpoint with service info."""
return {
"service": "data-service",
"version": "1.0.0",
"description": "Market data synchronization from Polygon.io",
"endpoints": {
"tickers": "/api/v1/tickers",
"sync": "/api/v1/sync",
"docs": "/docs"
}
}
@app.get("/health")
async def health_check():
"""Health check endpoint."""
return {
"status": "healthy",
"service": "data-service"
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"main:app",
host="0.0.0.0",
port=settings.port,
reload=settings.environment == "development"
)