94 lines
2.5 KiB
Python
94 lines
2.5 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.staticfiles import StaticFiles
|
|
from fastapi.responses import FileResponse
|
|
from contextlib import asynccontextmanager
|
|
import uvicorn
|
|
import logging
|
|
import os
|
|
from app.routes import routes
|
|
from app.db.database import init_db, SessionLocal
|
|
from app.services.service_manager import ServiceManager
|
|
import logging
|
|
|
|
# Configure logging
|
|
log_file = "app.log"
|
|
if os.path.exists(log_file):
|
|
os.remove(log_file) # Remove existing log file to start fresh
|
|
|
|
# Create a formatter
|
|
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
|
|
|
|
# Create handlers
|
|
console_handler = logging.StreamHandler()
|
|
console_handler.setFormatter(formatter)
|
|
|
|
file_handler = logging.FileHandler(log_file, mode='w', encoding='utf-8')
|
|
file_handler.setFormatter(formatter)
|
|
|
|
# Configure root logger
|
|
root_logger = logging.getLogger()
|
|
root_logger.setLevel(logging.INFO)
|
|
root_logger.addHandler(console_handler)
|
|
root_logger.addHandler(file_handler)
|
|
|
|
# Get logger for this module
|
|
logger = logging.getLogger(__name__)
|
|
logger.info("Application starting up...")
|
|
|
|
# Initialize service manager
|
|
service_manager = ServiceManager()
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# Startup
|
|
init_db()
|
|
logger.info("Database initialized successfully")
|
|
|
|
# Initialize all services
|
|
await service_manager.initialize_services()
|
|
|
|
# Start the scheduler
|
|
scheduler = service_manager.get_service('scheduler')
|
|
await scheduler.start_scheduled_tasks()
|
|
logger.info("Scheduler started successfully")
|
|
|
|
yield
|
|
|
|
# Shutdown
|
|
await service_manager.cleanup_services()
|
|
logger.info("All services cleaned up successfully")
|
|
|
|
app = FastAPI(
|
|
title="CCR Cards Management API",
|
|
description="API for managing CCR Cards Inventory, Orders, and more.",
|
|
version="0.1.0",
|
|
lifespan=lifespan
|
|
)
|
|
|
|
# Mount static files directory
|
|
app.mount("/static", StaticFiles(directory="app/static"), name="static")
|
|
|
|
# Serve index.html at root
|
|
@app.get("/")
|
|
async def read_root():
|
|
return FileResponse('app/static/index.html')
|
|
|
|
# Serve app.js
|
|
@app.get("/app.js")
|
|
async def read_app_js():
|
|
return FileResponse('app/static/app.js')
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(routes.router)
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
|