feat: 件数のキャッシュを実装

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2023-10-05 15:05:03 +09:00
parent 0cb362a5e9
commit 4fc3ed927c
3 changed files with 14 additions and 2 deletions

View File

@ -69,6 +69,9 @@ def search_bio_data(
actions=[ actions=[
UserSession.last_access_time.set(UserSession.new_last_access_time()), UserSession.last_access_time.set(UserSession.new_last_access_time()),
UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()),
# 検索結果をキャッシュする
UserSession.bio_search_condition.set(bio_form.model_dump()),
UserSession.bio_search_count.set(bio_sales_lot_count),
] ]
) )
set_session(session) set_session(session)

View File

@ -1,7 +1,8 @@
import datetime import datetime
import uuid import uuid
from pynamodb.attributes import NumberAttribute, UnicodeAttribute from pynamodb.attributes import (JSONAttribute, NumberAttribute,
UnicodeAttribute)
from pynamodb.models import Model as DynamoDBTableModel from pynamodb.models import Model as DynamoDBTableModel
from src.system_var import environment from src.system_var import environment
@ -23,6 +24,8 @@ class UserSession(DynamoDBTableModel):
csrf_token = UnicodeAttribute() csrf_token = UnicodeAttribute()
last_access_time = NumberAttribute() last_access_time = NumberAttribute()
record_expiration_time = NumberAttribute() record_expiration_time = NumberAttribute()
bio_search_condition = JSONAttribute(null=True, default=None)
bio_search_count = NumberAttribute(null=True, default=None)
@classmethod @classmethod
def new_last_access_time(cls): def new_last_access_time(cls):

View File

@ -72,7 +72,13 @@ class BioViewService(BaseService):
return display_bio_data return display_bio_data
def count_bio_data(self, search_params: BioModel, session: UserSession) -> int: def count_bio_data(self, search_params: BioModel, session: UserSession) -> int:
# 生物由来データの件数を取得 # 検索値が前回検索時と変更がない場合、キャッシュした件数を返す
previous_search_params = session.bio_search_condition
current_search_params = search_params.model_dump()
if previous_search_params == current_search_params:
return session.bio_search_count
# 生物由来データの件数をDBから取得
bio_sales_data_count = self.bio_sales_repository.fetch_count(parameter=search_params) bio_sales_data_count = self.bio_sales_repository.fetch_count(parameter=search_params)
return bio_sales_data_count return bio_sales_data_count