""" 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" )