62 lines
1.8 KiB
Python
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)
|