diff --git a/ecs/jskult-webapp/src/controller/bio.py b/ecs/jskult-webapp/src/controller/bio.py index 7d4d8274..fc601bc1 100644 --- a/ecs/jskult-webapp/src/controller/bio.py +++ b/ecs/jskult-webapp/src/controller/bio.py @@ -1,17 +1,22 @@ +import datetime from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi.encoders import jsonable_encoder +from fastapi.responses import JSONResponse from starlette import status from src.depends.services import get_service from src.logging.get_logger import get_logger +from src.model.db.bio_sales_lot import BioSalesLotDBModel from src.model.internal.session import UserSession from src.model.request.bio import BioModel from src.model.view.bio_view_model import BioViewModel from src.router.session_router import AuthenticatedRoute from src.services.batch_status_service import BatchStatusService from src.services.bio_view_service import BioViewService -from src.system_var import constants +from src.services.session_service import set_session +from src.system_var import constants, environment from src.templates import templates router = APIRouter() @@ -97,4 +102,41 @@ def search_bio_ajax( bio_sales_lot_data = bio_service.search_bio_data(bio_form) bio_sales_lot_count = bio_service.count_bio_data(bio_form, session) - return {'data': bio_sales_lot_data, 'count': bio_sales_lot_count} + # セッション書き換え + session.update( + actions=[ + UserSession.last_access_time.set(UserSession.new_last_access_time()), + UserSession.record_expiration_time.set(UserSession.new_record_expiration_time()), + ] + ) + set_session(session) + + def custom_encode(obj): + encoded_obj = obj.model_dump() + for key, value in encoded_obj.items(): + if type(value) == datetime.datetime: + encoded_obj[key] = value.strftime("%Y-%m-%d %H:%M:%S") if obj is not None else '' + if type(value) == datetime.date: + encoded_obj[key] = value.strftime("%Y-%m-%d") if obj is not None else '' + print(key, value) + return encoded_obj + + data = jsonable_encoder( + bio_sales_lot_data, + custom_encoder={ + BioSalesLotDBModel: custom_encode + } + ) + # クッキーも書き換え + json_response = JSONResponse(content={ + 'data': data, + 'count': bio_sales_lot_count + }) + json_response.set_cookie( + key='session', + value=session.session_key, + max_age=environment.SESSION_EXPIRE_MINUTE * 60, # cookieの有効期限は秒数指定なので、60秒をかける + secure=True, + httponly=True + ) + return json_response diff --git a/ecs/jskult-webapp/src/model/view/bio_disp_model.py b/ecs/jskult-webapp/src/model/view/bio_disp_model.py index f0b6107e..aafa7864 100644 --- a/ecs/jskult-webapp/src/model/view/bio_disp_model.py +++ b/ecs/jskult-webapp/src/model/view/bio_disp_model.py @@ -3,6 +3,6 @@ from src.util.sanitize import sanitize @sanitize -class BisDisplayModel(BioSalesLotDBModel): +class BioDisplayModel(BioSalesLotDBModel): def __init__(self, param: BioSalesLotDBModel) -> None: super().__init__(**param.model_dump()) diff --git a/ecs/jskult-webapp/src/model/view/bio_view_model.py b/ecs/jskult-webapp/src/model/view/bio_view_model.py index 11d18663..4f257508 100644 --- a/ecs/jskult-webapp/src/model/view/bio_view_model.py +++ b/ecs/jskult-webapp/src/model/view/bio_view_model.py @@ -8,7 +8,7 @@ from pydantic import BaseModel from src.model.db.pharmacy_product_master import PharmacyProductMasterModel from src.model.db.wholesaler_master import WholesalerMasterModel from src.model.request.bio import BioModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.view.bio_disp_model import BioDisplayModel from src.system_var import environment @@ -17,7 +17,7 @@ class BioViewModel(BaseModel): user_id: str whs_models: list[WholesalerMasterModel] phm_models: list[PharmacyProductMasterModel] - bio_data: Optional[list[BisDisplayModel]] = None + bio_data: Optional[list[BioDisplayModel]] = None form_data: BioModel = None excel_max_lines: int = str(environment.BIO_EXCEL_RESULT_MAX_COUNT) diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 2436e994..9e3eba80 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -11,7 +11,7 @@ from src.aws.s3 import S3Client from src.logging.get_logger import get_logger from src.model.internal.session import UserSession from src.model.request.bio import BioModel -from src.model.view.bio_disp_model import BisDisplayModel +from src.model.view.bio_disp_model import BioDisplayModel from src.model.view.bio_view_model import BioViewModel from src.repositories.base_repository import BaseRepository from src.repositories.bio_sales_lot_repository import BioSalesLotRepository @@ -65,13 +65,13 @@ class BioViewService(BaseService): def search_bio_data(self, search_params: BioModel): # 生物由来データを検索 - bio_sales_view_data = self.bio_sales_repository.fetch_many(parameter=search_params) + bio_sales_lot_data = self.bio_sales_repository.fetch_many(parameter=search_params) # 画面表示用に加工 - display_bio_data: list[BisDisplayModel] = [BisDisplayModel(data) for data in bio_sales_view_data] + display_bio_data: list[BioDisplayModel] = [BioDisplayModel(data) for data in bio_sales_lot_data] return display_bio_data - def count_bio_data(self, search_params: BioModel, session: UserSession): + def count_bio_data(self, search_params: BioModel, session: UserSession) -> int: # 生物由来データの件数を取得 bio_sales_data_count = self.bio_sales_repository.fetch_count(parameter=search_params) return bio_sales_data_count