Files
classquiz-ai/classquiz/routers/stats.py
T
2022-07-02 17:20:55 +02:00

62 lines
1.8 KiB
Python

# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
from fastapi import APIRouter
from classquiz.config import redis
from pydantic import BaseModel
from classquiz.db.models import Quiz, User
router = APIRouter()
@router.get("/quizzes")
async def get_quiz_count() -> int:
redis_res = await redis.get("global_quiz_count")
if redis_res is None:
quiz_res = await Quiz.objects.count()
await redis.set("global_quiz_count", quiz_res, ex=3600)
return quiz_res
else:
return int(redis_res)
@router.get("/users")
async def get_user_count() -> int:
redis_res = await redis.get("global_user_count")
if redis_res is None:
quiz_res = await User.objects.filter(verified=True).count()
await redis.set("global_user_count", quiz_res, ex=3600)
return quiz_res
else:
return int(redis_res)
class CombinedOutput(BaseModel):
quiz_count: int
user_count: int
@router.get("/combined")
async def get_combined_count() -> CombinedOutput:
user_count = None
quiz_count = None
redis_res = await redis.get("global_user_count")
if redis_res is None:
quiz_res = await User.objects.filter(verified=True).count()
await redis.set("global_user_count", quiz_res, ex=3600)
user_count = quiz_res
else:
user_count = int(redis_res)
redis_res = await redis.get("global_quiz_count")
if redis_res is None:
quiz_res = await Quiz.objects.count()
await redis.set("global_quiz_count", quiz_res, ex=3600)
quiz_count = quiz_res
else:
quiz_count = int(redis_res)
return CombinedOutput(quiz_count=quiz_count, user_count=user_count)