Files

59 lines
1.7 KiB
Python

import asyncio
from contextlib import asynccontextmanager
from pathlib import Path
from fastapi import FastAPI
from src.cache.redis_client import redis_client
from src.database.users.crud import Seed
from src.logging.http_logger import LoggingMiddleware, ProcessingTimeMiddleware
from src.logging.logger import LogWriter
from src.messaging.rabbitmq_client import rabbitmq_client
from src.messaging.topology_setup import apply_topology
from src.models.rabbitmq_models.email import email_topology
from src.web.protected_routes.auth_routes import router as protected_router
from src.web.protected_routes.protected_user_action_routes import (
router as protected_user_action_routes,
)
writer=LogWriter()
@asynccontextmanager
async def lifespan(app: FastAPI):
create_dirs()
channel = await rabbitmq_client.get_channel()
await apply_topology(channel, email_topology)
await create_first_user()
writer_task=asyncio.create_task(writer.log_writer())
yield
writer_task.cancel()
await redis_client.close()
await rabbitmq_client.close()
app=FastAPI(root_path="/", lifespan=lifespan)
app.add_middleware(LoggingMiddleware)
app.add_middleware(ProcessingTimeMiddleware)
app.include_router(router=protected_router)
app.include_router(router=protected_user_action_routes)
@app.get("")
async def root()->dict:
return {"root":"hello, this is root"}
def create_dirs()->None:
dirs_to_create=("./DB",
"./uploads/upload",
"./uploads/upload_bad",
"./uploads/upload_finished",
"./logs")
for x in dirs_to_create:
Path(x).mkdir(parents=True, exist_ok=True)
async def create_first_user()->None:
seed=Seed()
await seed.seed()