33# ------------------------------------------------------------------------------
44
55from typing import List
6- from fastapi import APIRouter , Body , Depends , HTTPException , status , Path
6+ from fastapi import APIRouter , Body , Depends , HTTPException , status , Path , Response
77from sqlalchemy .ext .asyncio import AsyncSession
8- from fastapi_cache import FastAPICache
9- from fastapi_cache .decorator import cache
8+ from aiocache import SimpleMemoryCache
109
1110from data .player_database import generate_async_session
1211from models .player_model import PlayerModel
1312from services import player_service
1413
1514api_router = APIRouter ()
15+ simple_memory_cache = SimpleMemoryCache ()
1616
17- CACHING_TIME_IN_SECONDS = 600
17+ CACHE_KEY = "players"
18+ CACHE_TTL = 600 # 10 minutes
1819
1920# POST -------------------------------------------------------------------------
2021
@@ -43,7 +44,7 @@ async def post_async(
4344 if player :
4445 raise HTTPException (status_code = status .HTTP_409_CONFLICT )
4546 await player_service .create_async (async_session , player_model )
46- await FastAPICache .clear ()
47+ await simple_memory_cache .clear (CACHE_KEY )
4748
4849# GET --------------------------------------------------------------------------
4950
@@ -55,8 +56,8 @@ async def post_async(
5556 summary = "Retrieves a collection of Players" ,
5657 tags = ["Players" ]
5758)
58- @cache (expire = CACHING_TIME_IN_SECONDS )
5959async def get_all_async (
60+ response : Response ,
6061 async_session : AsyncSession = Depends (generate_async_session )
6162):
6263 """
@@ -68,7 +69,12 @@ async def get_all_async(
6869 Returns:
6970 List[PlayerModel]: A list of Pydantic models representing all players.
7071 """
71- players = await player_service .retrieve_all_async (async_session )
72+ players = await simple_memory_cache .get (CACHE_KEY )
73+ response .headers ["X-Cache" ] = "HIT"
74+ if not players :
75+ players = await player_service .retrieve_all_async (async_session )
76+ await simple_memory_cache .set (CACHE_KEY , players , ttl = CACHE_TTL )
77+ response .headers ["X-Cache" ] = "MISS"
7278 return players
7379
7480
@@ -79,7 +85,6 @@ async def get_all_async(
7985 summary = "Retrieves a Player by its Id" ,
8086 tags = ["Players" ]
8187)
82- @cache (expire = CACHING_TIME_IN_SECONDS )
8388async def get_by_id_async (
8489 player_id : int = Path (..., title = "The ID of the Player" ),
8590 async_session : AsyncSession = Depends (generate_async_session )
@@ -110,7 +115,6 @@ async def get_by_id_async(
110115 summary = "Retrieves a Player by its Squad Number" ,
111116 tags = ["Players" ]
112117)
113- @cache (expire = CACHING_TIME_IN_SECONDS )
114118async def get_by_squad_number_async (
115119 squad_number : int = Path (..., title = "The Squad Number of the Player" ),
116120 async_session : AsyncSession = Depends (generate_async_session )
@@ -162,7 +166,7 @@ async def put_async(
162166 if not player :
163167 raise HTTPException (status_code = status .HTTP_404_NOT_FOUND )
164168 await player_service .update_async (async_session , player_model )
165- await FastAPICache .clear ()
169+ await simple_memory_cache .clear (CACHE_KEY )
166170
167171# DELETE -----------------------------------------------------------------------
168172
@@ -191,4 +195,4 @@ async def delete_async(
191195 if not player :
192196 raise HTTPException (status_code = status .HTTP_404_NOT_FOUND )
193197 await player_service .delete_async (async_session , player_id )
194- await FastAPICache .clear ()
198+ await simple_memory_cache .clear (CACHE_KEY )
0 commit comments