-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathapi.py
More file actions
58 lines (49 loc) · 1.89 KB
/
api.py
File metadata and controls
58 lines (49 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from fastapi import FastAPI, Depends
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from src.database.mongodb import MongoDB
from src.database.queues import RabbitMQ
from src.database.redis import Redis
from src.api.routers import transactions, root
from src.api.schema import schema
from strawberry.fastapi import GraphQLRouter
from fastapi.staticfiles import StaticFiles
@asynccontextmanager
async def lifespan(app: FastAPI):
# Инициализация подключений к БД и очередям
app.state.db = MongoDB()
app.state.rabbit = RabbitMQ()
app.state.redis = Redis()
await app.state.rabbit.connect()
await app.state.db.connect()
await app.state.redis.connect()
yield
# Закрытие подключений
# TODO понять уже как закрыть монго!
await app.state.db.close()
await app.state.rabbit.close()
await app.state.redis.close()
app = FastAPI(lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Dependency для MongoDB
async def get_mongodb(app: FastAPI = Depends(lambda: app)):
return app.state.db
# Dependency для Redis
async def get_redis(app: FastAPI = Depends(lambda: app)):
return app.state.redis
# Настройка Strawberry GraphQL
async def get_context(mongodb: MongoDB = Depends(get_mongodb), redis: Redis = Depends(get_redis)):
return {"db": mongodb, "redis": redis}
graphql_router = GraphQLRouter(schema, context_getter=get_context)
# Монтируем статическую директорию
app.mount("/static", StaticFiles(directory="static"), name="static")
# Подключение роутеров
app.include_router(root.router)
app.include_router(transactions.router)
app.include_router(graphql_router, prefix="/graphql")