Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 17 additions & 1 deletion app/usecases/item_usecase.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,28 @@

from app.repositories import item_repository
from app.schemas import item_schema
import redis
import json
from app.utils.db_utils import AlchemyEncoder

def get_items(db: Session, skip: int = 0, limit: int = 100):
return item_repository.get_items(db, skip=skip, limit=limit)

def get_item(db: Session, item_id: int):
return item_repository.get_item(db, item_id=item_id)
r = redis.Redis()
redis_val = r.hgetall(f"item:{item_id}")
print(len(redis_val))
if (redis_val is None or len(redis_val) < 1):
print('fetching data from database')
item = item_repository.get_item(db, item_id=item_id)

itemdetail = {f"data":json.dumps(item, cls=AlchemyEncoder)}
r.hmset(f"item:{item.id}", itemdetail)
return item
else:
print('fetching data from redis')
item = json.loads(r.hget(f"item:{item_id}", "data"))
return item

def create_user_item(db: Session, item: item_schema.ItemCreate, user_id: int):
return item_repository.create_user_item(db=db, item=item, user_id=user_id)
Empty file added app/utils/__init__.py
Empty file.
20 changes: 20 additions & 0 deletions app/utils/db_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import json
from sqlalchemy.ext.declarative import DeclarativeMeta

class AlchemyEncoder(json.JSONEncoder):

def default(self, obj):
if isinstance(obj.__class__, DeclarativeMeta):
# an SQLAlchemy class
fields = {}
for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
data = obj.__getattribute__(field)
try:
json.dumps(data) # this will fail on non-encodable values, like other classes
fields[field] = data
except TypeError:
fields[field] = None
# a json-encodable dict
return fields

return json.JSONEncoder.default(self, obj)
3 changes: 2 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ pymysql
pytest
pytest-cov
uvicorn
faker
faker
redis