This commit is contained in:
xds
2026-02-04 15:10:55 +03:00
parent 11c1f4f7dc
commit 35de8efc56
20 changed files with 566 additions and 135 deletions

17
main.py
View File

@@ -16,6 +16,7 @@ from starlette.middleware.cors import CORSMiddleware
# --- ИМПОРТЫ ПРОЕКТА ---
from adapters.google_adapter import GoogleAdapter
from api.service.generation_service import GenerationService
from middlewares.album import AlbumMiddleware
from middlewares.auth import AuthMiddleware
from middlewares.dao import DaoMiddleware
@@ -33,8 +34,9 @@ from routers.auth_router import router as auth_router
from routers.gen_router import router as gen_router
from routers.char_router import router as char_router
from routers.assets_router import router as assets_router # Роутер бота для ассетов
from api.endpoints.assets import router as api_assets_router # Роутер FastAPI
from api.endpoints.assets_router import router as api_assets_router # Роутер FastAPI
from api.endpoints.character_router import router as api_char_router # Роутер FastAPI
from api.endpoints.generation_router import router as api_gen_router
load_dotenv()
@@ -47,7 +49,7 @@ ADMIN_ID = int(os.getenv("ADMIN_ID", 0))
def setup_logging():
logging.basicConfig(level=logging.INFO,
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s")
@@ -61,6 +63,8 @@ mongo_client = AsyncIOMotorClient(MONGO_HOST)
users_repo = UsersRepo(mongo_client)
char_repo = CharacterRepo(mongo_client)
dao = DAO(mongo_client) # Главный DAO для бота
gemini = GoogleAdapter(api_key=GEMINI_API_KEY)
generation_service = GenerationService(dao, gemini)
# Dispatcher
dp = Dispatcher(storage=MongoStorage(mongo_client, db_name=DB_NAME))
@@ -68,7 +72,7 @@ dp = Dispatcher(storage=MongoStorage(mongo_client, db_name=DB_NAME))
# Внедрение зависимостей (глобально для бота)
dp["repo"] = users_repo
dp["admin_id"] = ADMIN_ID
dp["gemini"] = GoogleAdapter(api_key=GEMINI_API_KEY)
dp["gemini"] = gemini
# --- НАСТРОЙКА РОУТЕРОВ БОТА ---
@@ -108,7 +112,9 @@ async def lifespan(app: FastAPI):
# Инициализируем DAO для ассетов и кладем в state приложения
# Теперь в эндпоинтах можно делать request.app.state.assets_dao
app.state.dao = dao
app.state.mongo_client = mongo_client
app.state.gemini_client = gemini
print("✅ DB & DAO initialized")
@@ -152,6 +158,7 @@ app.add_middleware(
# Подключаем роутер API
app.include_router(api_assets_router)
app.include_router(api_char_router)
app.include_router(api_gen_router)
# --- ХЕНДЛЕРЫ БОТА (Main Router) ---
@@ -179,7 +186,7 @@ if __name__ == "__main__":
async def main():
# Создаем конфигурацию uvicorn вручную
# loop="asyncio" заставляет использовать стандартный цикл
config = uvicorn.Config(app, host="0.0.0.0", port=8090, loop="asyncio")
config = uvicorn.Config(app, host="0.0.0.0", port=8090, loop="asyncio", timeout_keep_alive=120)
server = uvicorn.Server(config)
# Запускаем сервер (lifespan запустится внутри)