feat: セッションの書き換えと、JSONResponseにしたことによる微妙な挙動の違いを埋めた
This commit is contained in:
parent
ad557d499e
commit
6d2ca2167b
@ -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
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user