Skip to content

Commit 32346cd

Browse files
author
Jakub Miazek
committed
add auth and redis endpoints
1 parent 0b2d2e7 commit 32346cd

File tree

5 files changed

+53
-12
lines changed

5 files changed

+53
-12
lines changed

app/api/health.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import logging
2+
3+
from fastapi import APIRouter, status, Request
4+
5+
router = APIRouter()
6+
7+
8+
@router.get("/redis", status_code=status.HTTP_200_OK)
9+
async def redis_check(request: Request):
10+
_redis = await request.app.state.redis
11+
_info = None
12+
try:
13+
_info = await _redis.info()
14+
except Exception as e:
15+
logging.error(f"Redis error: {e}")
16+
return _info

app/main.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,35 @@
1-
from fastapi import FastAPI
1+
from contextlib import asynccontextmanager
2+
3+
from fastapi import FastAPI, Depends
24

35
from app.api.nonsense import router as nonsense_router
46
from app.api.shakespeare import router as shakespeare_router
57
from app.api.stuff import router as stuff_router
68
from app.utils.logging import AppLogger
9+
from app.api.user import router as user_router
10+
from app.api.health import router as health_router
11+
from app.redis import get_redis
12+
from app.services.auth import AuthBearer
713

814
logger = AppLogger.__call__().get_logger()
915

10-
app = FastAPI(title="Stuff And Nonsense API", version="0.5")
16+
17+
@asynccontextmanager
18+
async def lifespan(app: FastAPI):
19+
# Load the redis connection
20+
app.state.redis = await get_redis()
21+
yield
22+
# close redis connection and release the resources
23+
app.state.redis.close()
24+
25+
26+
app = FastAPI(title="Stuff And Nonsense API", version="0.6", lifespan=lifespan)
1127

1228
app.include_router(stuff_router)
1329
app.include_router(nonsense_router)
1430
app.include_router(shakespeare_router)
31+
app.include_router(user_router)
1532

1633

17-
@app.on_event("startup")
18-
async def startup_event():
19-
logger.info("Starting up...")
20-
21-
22-
@app.on_event("shutdown")
23-
async def shutdown_event():
24-
logger.info("Shutting down...")
34+
app.include_router(health_router, prefix="/v1/public/health", tags=["Health, Public"])
35+
app.include_router(health_router, prefix="/v1/health", tags=["Health, Bearer"], dependencies=[Depends(AuthBearer())])

app/redis.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import redis.asyncio as redis
2+
3+
from app import config
4+
5+
6+
global_settings = config.get_settings()
7+
8+
9+
async def get_redis():
10+
return await redis.from_url(
11+
global_settings.redis_url.unicode_string(),
12+
encoding="utf-8",
13+
decode_responses=True,
14+
)

app/services/auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ async def create_access_token(user: User, request: Request):
3838
_payload = {
3939
"email": user.email,
4040
"expiry": time.time() + global_settings.jwt_expire,
41-
"platform": request.headers.get("User-Agent")
41+
"platform": request.headers.get("User-Agent"),
4242
}
4343
_token = jwt.encode(_payload, str(user.password), algorithm=global_settings.jwt_algorithm)
4444

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "fastapi-sqlalchemy-asyncpg"
3-
version = "0.0.5"
3+
version = "0.0.6"
44
description = ""
55
authors = ["Jakub Miazek <the@grillazz.com>"]
66
packages = []

0 commit comments

Comments
 (0)