From dbe7b3e007f4f89ff962e2e9871029cdd61fab0a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Thu, 29 Jun 2023 15:34:33 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=9E=E3=82=B9=E3=82=BF=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=86=E3=83=A1=E3=83=8B=E3=83=A5=E3=83=BC=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/controller/master_mainte.py | 60 +++++++++++++++++++ ecs/jskult-webapp/src/main.py | 4 +- .../view/master_mainte_menu_view_model.py | 5 ++ .../src/services/batch_status_service.py | 16 ++++- ecs/jskult-webapp/src/system_var/constants.py | 4 ++ .../src/templates/masterMainteMenu.html | 25 ++++++++ ecs/jskult-webapp/src/templates/menu.html | 2 +- 7 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 ecs/jskult-webapp/src/controller/master_mainte.py create mode 100644 ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py create mode 100644 ecs/jskult-webapp/src/templates/masterMainteMenu.html diff --git a/ecs/jskult-webapp/src/controller/master_mainte.py b/ecs/jskult-webapp/src/controller/master_mainte.py new file mode 100644 index 00000000..ad5eb3e1 --- /dev/null +++ b/ecs/jskult-webapp/src/controller/master_mainte.py @@ -0,0 +1,60 @@ +from fastapi import APIRouter, Depends, HTTPException, Request +from fastapi.responses import HTMLResponse +from starlette import status + +from src.depends.services import get_service +from src.model.internal.session import UserSession +from src.model.view.master_mainte_menu_view_model import \ + MasterMainteMenuViewModel +from src.router.session_router import AuthenticatedRoute +from src.services.batch_status_service import BatchStatusService +from src.services.session_service import set_session +from src.system_var import constants +from src.templates import templates + +router = APIRouter() +router.route_class = AuthenticatedRoute + +######################### +# Views # +######################### + + +@router.get('/masterMainteMenu', response_class=HTMLResponse) +def menu_view( + request: Request, + batch_status_service: BatchStatusService = Depends(get_service(BatchStatusService)) +): + session: UserSession = request.session + + # マスタメンテメニューへのアクセス権がない場合、ログアウトさせる + if session.master_mainte_flg != '1': + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN) + + # バッチ処理中の場合、ログアウトさせる + if batch_status_service.is_batch_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, + detail=constants.LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE) + # dump処理中の場合、ログアウトさせる + if batch_status_service.is_dump_processing(): + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=constants.LOGOUT_REASON_BACKUP_PROCESSING) + + # 画面表示用のモデル + menu = MasterMainteMenuViewModel() + # セッション書き換え + 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) + templates_response = templates.TemplateResponse( + 'masterMainteMenu.html', + { + 'request': request, + 'menu': menu + }, + headers={'session_key': session.session_key} + ) + return templates_response diff --git a/ecs/jskult-webapp/src/main.py b/ecs/jskult-webapp/src/main.py index 2aca351c..8717c7cb 100644 --- a/ecs/jskult-webapp/src/main.py +++ b/ecs/jskult-webapp/src/main.py @@ -6,7 +6,7 @@ from starlette import status import src.static as static from src.controller import (bio, bio_download, healthcheck, login, logout, - menu, root, ultmarc) + master_mainte, menu, root, ultmarc) from src.controller.sample_send_file import router as sample_router from src.core import tasks from src.error.exception_handler import http_exception_handler @@ -31,6 +31,8 @@ app.include_router(ultmarc.router, prefix='/ultmarc') # 生物由来のダウンロード用APIルーター。 # クライアントから非同期呼出しされるため、共通ルーターとは異なる扱いとする。 app.include_router(bio_download.router, prefix='/bio') +# マスタメンテ +app.include_router(master_mainte.router, prefix='/masterMainte') # ヘルスチェック用のルーター app.include_router(healthcheck.router, prefix='/healthcheck') diff --git a/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py new file mode 100644 index 00000000..c8ff644a --- /dev/null +++ b/ecs/jskult-webapp/src/model/view/master_mainte_menu_view_model.py @@ -0,0 +1,5 @@ +from pydantic import BaseModel + + +class MasterMainteMenuViewModel(BaseModel): + subtitle: str = 'MeDaCA 機能メニュー' diff --git a/ecs/jskult-webapp/src/services/batch_status_service.py b/ecs/jskult-webapp/src/services/batch_status_service.py index c9f6c6a7..ffb57af0 100644 --- a/ecs/jskult-webapp/src/services/batch_status_service.py +++ b/ecs/jskult-webapp/src/services/batch_status_service.py @@ -4,6 +4,7 @@ from src.model.db.hdke_tbl import HdkeTblModel from src.repositories.base_repository import BaseRepository from src.repositories.hdke_tbl_repository import HdkeTblRepository from src.services.base_service import BaseService +from src.system_var import constants class BatchStatusService(BaseService): @@ -25,17 +26,30 @@ class BatchStatusService(BaseService): @property def hdke_table_record(self) -> HdkeTblModel: + """日付テーブルを取得する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() # 日付テーブルのレコードは必ず1件 return self.__hdke_table_record[0] def is_batch_processing(self): + """バッチ処理中かどうかを判定する""" + # 日付マスタのレコードがあることを確認 self.__assert_record_exists() - return self.hdke_table_record.bch_actf == '1' # TODO: 定数化する + return self.hdke_table_record.bch_actf == constants.BATCH_STATUS_PROCESSING + + def is_dump_processing(self): + """dump処理処理中かどうかを判定する""" + + # 日付マスタのレコードがあることを確認 + self.__assert_record_exists() + return self.hdke_table_record.dump_sts_kbn != constants.DUMP_STATUS_UNPROCESSED def __assert_record_exists(self): + """日付テーブルが有ることを保証する""" + # 日付マスタのレコードがない場合は例外とする if len(self.__hdke_table_record) == 0: raise DBException('日付テーブルのレコードが存在しません') diff --git a/ecs/jskult-webapp/src/system_var/constants.py b/ecs/jskult-webapp/src/system_var/constants.py index b7ffa0e2..604acfe5 100644 --- a/ecs/jskult-webapp/src/system_var/constants.py +++ b/ecs/jskult-webapp/src/system_var/constants.py @@ -1,6 +1,8 @@ import os.path as path +# 日付テーブル.バッチ処理ステータス:未処理 BATCH_STATUS_PROCESSING = '1' +# 日付テーブル.dump取得状態区分:未処理 DUMP_STATUS_UNPROCESSED = '0' BIO_TEMPORARY_FILE_DIR_PATH = path.join(path.curdir, 'src', 'data') @@ -115,6 +117,7 @@ LOGOUT_REASON_DO_LOGOUT = 'do_logout' LOGOUT_REASON_LOGIN_ERROR = 'login_error' LOGOUT_REASON_BATCH_PROCESSING = 'batch_processing' LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE = 'batch_processing_ult' +LOGOUT_REASON_BACKUP_PROCESSING = 'dump_processing' LOGOUT_REASON_NOT_LOGIN = 'not_login' LOGOUT_REASON_SESSION_EXPIRED = 'session_expired' LOGOUT_REASON_DB_ERROR = 'db_error' @@ -125,6 +128,7 @@ LOGOUT_REASON_MESSAGE_MAP = { LOGOUT_REASON_LOGIN_ERROR: '存在しないユーザー、
またはパスワードが違います。', LOGOUT_REASON_BATCH_PROCESSING: '日次バッチ処理中なので、
生物由来データ参照は使用出来ません。', LOGOUT_REASON_BATCH_PROCESSING_FOR_MAINTE: '日次バッチ処理中のため、
マスタ-メンテは使用出来ません。', + LOGOUT_REASON_BACKUP_PROCESSING: 'バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテは使用できません', LOGOUT_REASON_NOT_LOGIN: 'Loginしてからページにアクセスしてください。', LOGOUT_REASON_SESSION_EXPIRED: 'セッションが切れています。
再度Loginしてください。', LOGOUT_REASON_DB_ERROR: 'DB接続に失敗しました。
再度Loginするか、
管理者にお問い合わせください。', diff --git a/ecs/jskult-webapp/src/templates/masterMainteMenu.html b/ecs/jskult-webapp/src/templates/masterMainteMenu.html new file mode 100644 index 00000000..147ab2da --- /dev/null +++ b/ecs/jskult-webapp/src/templates/masterMainteMenu.html @@ -0,0 +1,25 @@ + + + + {% with subtitle = menu.subtitle %} + {% include '_header.html' %} + {% endwith %} + + +
+

MeDaCA
マスタメンテメニュー

+

+ + 施設担当者データCSVアップロード

+ + + 施設担当者データCSVダウンロード

+ + + テーブル上書きコピー

+ + +

メニューへ +
+ + diff --git a/ecs/jskult-webapp/src/templates/menu.html b/ecs/jskult-webapp/src/templates/menu.html index bbfca152..59eb8a74 100644 --- a/ecs/jskult-webapp/src/templates/menu.html +++ b/ecs/jskult-webapp/src/templates/menu.html @@ -29,7 +29,7 @@ {% elif menu.is_backup_processing() %}
バックアップ取得を開始しました。
日次バッチ更新が終了するまでマスターメンテメニューは利用できません
{% else %} - マスターメンテメニュー

+ マスターメンテメニュー

{% endif %} {% endif %}

Logout