import os from pathlib import Path from fastapi import FastAPI, Request from fastapi.middleware.cors import CORSMiddleware from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles from sqlalchemy.exc import SQLAlchemyError from app.config import settings from app.routers import router from app.core import Base, engine # Создаем таблицы в базе данных Base.metadata.create_all(bind=engine) # Создаем экземпляр приложения FastAPI app = FastAPI( title="Dressed for Success API", description="API для интернет-магазина одежды", version="1.0.0" ) # Настраиваем CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], # В продакшене нужно указать конкретные домены allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Обработка ошибок SQLAlchemy @app.exception_handler(SQLAlchemyError) async def sqlalchemy_exception_handler(request: Request, exc: SQLAlchemyError): return JSONResponse( status_code=500, content={"detail": "Ошибка базы данных", "error": str(exc)}, ) # Подключаем роутеры app.include_router(router, prefix="/api") # Создаем директорию для загрузок, если она не существует uploads_dir = Path(settings.UPLOAD_DIRECTORY) uploads_dir.mkdir(parents=True, exist_ok=True) # Монтируем статические файлы app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIRECTORY), name="uploads") # Корневой маршрут @app.get("/") async def root(): return {"message": "Добро пожаловать в API интернет-магазина Dressed for Success"}