From 0698633156b5e55c0c0d5befe5d743ef5d363175 Mon Sep 17 00:00:00 2001 From: rnakagawa16 <144891521+rnakagawa16@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:56:44 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=AD=E3=82=B0=E5=87=BA=E5=8A=9B=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=AB=E9=96=A2=E3=81=99=E3=82=8B=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=A8=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0=20(#1697)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * メッセージプロパティを各サブプロジェクトで管理するよう変更する * 使用していないimportの削除 * メッセージコードをフロントエンドに合わせて頭文字を小文字にする * フロントエンド側のメッセージ管理機能実装 * バックエンド側のエラーメッセージ出力を実装 * フロントエンド側のメッセージ管理機能の実装 * 起動方法の修正 * テスト時の警告解除 * type-checkの警告対応 * typecheckの警告回避と日英対応のメッセージ作成 * エラーハンドリング機能の修正 * if文の修正 * ドキュメントの追加 * ドキュメントの追加 * エラーメッセージに関する記載の修正 * 入力値検証のドキュメント修正 * ブラウザーの言語設定の取得方法修正 * ドキュメント指摘事項の修正 * クリップボード機能の修正 * textlintエラーへの対応 * 入力値検証に関するドキュメントの修正 * ドキュメント指摘事項の修正 * ドキュメントのimport文の削除 * 起動方法の修正 * ドキュメントのアプリ起動方法を記載 * 冗長な文章を修正 * ハイライトを修正 * 指摘事項と軽微なドキュメントの修正 * 変数名の修正 * log4jの設定をエントリーポイントプロジェクトに移動 * log4j.xmlに関するドキュメントを追記する * ログドキュメントの修正 * batchアプリケーションの設定 * メッセージ管理の部分を削除 * ロギングライブラリの除外設定に関するドキュメントを修正 * 除外設定のドキュメントにおけるライブラリの記載を修正 * gradle の最終作成結果にlog4j用のライブラリを追加する。 * バージョン定義一元化のドキュメントにlog4j 2のライブラリの記載を追加 * ルートプロジェクトの除外設定を削除 * auth-backendのlog4j 2の設定をエントリーポイントとなるサブプロジェクトに移動 --- .github/CONTRIBUTING.md | 2 +- .textlintrc | 2 +- cspell.json | 3 + .../error-message-delivery-dark.drawio | 229 ++++++++++++++++++ .../error-message-delivery-light.drawio | 229 ++++++++++++++++++ .../frontend-application/index.md | 4 + .../global-function/exception-handling.md | 60 +++++ .../message-management-policy.md | 135 ++++++++++- .../logging-policy.md | 29 +++ .../message-management-policy.md | 72 +++++- .../application-core-project-settings.md | 26 ++ .../batch-project-settings.md | 29 +++ .../infrastructure-project-settings.md | 26 ++ .../project-version-control.md | 18 +- .../system-common-project-settings.md | 26 ++ .../web-project-settings.md | 76 ++++++ .../guidebooks/how-to-develop/vue-js/index.md | 1 + .../how-to-develop/vue-js/input-validation.md | 58 +++-- .../vue-js/message-management.md | 167 +++++++++++++ .../vue-js/optional-packages.md | 4 + .../error-message-delivery-dark.png | Bin 0 -> 240913 bytes .../error-message-delivery-light.png | Bin 0 -> 239984 bytes documents/contents/index.md | 10 +- documents/mkdocs.yml | 1 + .../auth-backend/system-common/build.gradle | 1 - .../auth-backend/web/build.gradle | 1 + .../src/main/resources/log4j2.xml | 0 .../dressca-backend/.vscode/launch.json | 2 +- .../application-core/build.gradle | 1 - .../AssetApplicationService.java | 6 +- .../CatalogApplicationService.java | 15 +- .../OrderApplicationService.java | 6 +- .../ShoppingApplicationService.java | 17 +- .../assets/AssetNotFoundException.java | 4 +- .../baskets/BasketNotFoundException.java | 4 +- .../CatalogItemInBasketNotFoundException.java | 4 +- .../catalog/CatalogNotFoundException.java | 6 +- .../constant/ExceptionIdConstant.java | 25 ++ .../constant/MessageIdConstant.java | 37 +++ .../order/EmptyBasketOnCheckoutException.java | 4 +- .../order/OrderNotFoundException.java | 4 +- .../resources/application-common.properties | 4 +- .../applicationcore/messages.properties | 18 ++ .../AssetApplicationServiceTest.java | 2 + .../CatalogApplicationServiceTest.java | 2 + .../OrderApplicationServiceTest.java | 2 + .../ShoppingApplicationServiceTest.java | 2 + .../dressca-backend/batch/build.gradle | 1 + .../src/main/resources/log4j2.xml | 0 samples/web-csr/dressca-backend/build.gradle | 5 - .../config/checkstyle/suppressions.xml | 2 + .../infrastructure/build.gradle | 7 + .../system-common/build.gradle | 1 - .../constant/CommonExceptionIdConstant.java | 13 + .../constant/ExceptionIdConstant.java | 29 --- .../constant/MessageIdConstant.java | 59 ----- .../exception/response/ErrorResponse.java | 60 ----- .../resources/application-common.properties | 2 +- .../src/main/resources/messages.properties | 24 -- .../systemcommon/messages.properties | 2 + .../web-csr/dressca-backend/web/build.gradle | 11 +- .../web/constant/ProblemDetailsConstant.java | 7 +- .../web/controller/AssetsController.java | 19 +- .../web/controller/BasketItemController.java | 55 ++++- .../web/controller/OrderController.java | 25 +- .../ExceptionHandlerControllerAdvice.java | 49 ++-- ...LocalExceptionHandlerControllerAdvice.java | 92 ------- .../advice/ProblemDetailsCreation.java | 60 +++++ .../dressca/web/log/ErrorMessageBuilder.java | 18 +- .../resources/application-common.properties | 4 + .../src/main/resources/application.properties | 2 +- .../web/src/main/resources/log4j2.xml | 24 ++ .../ExceptionHandlerControllerAdviceTest.java | 44 ++-- ...lExceptionHandlerControllerAdviceTest.java | 44 ++-- .../dressca-frontend/consumer/package.json | 1 + .../dressca-frontend/consumer/src/App.vue | 2 +- .../consumer/src/api-client/index.ts | 8 +- .../src/components/basket/BasketItem.vue | 3 +- .../components/common/NotificationToast.vue | 58 ++++- .../consumer/src/config/yup.config.ts | 20 +- .../src/locales/en/messageList_en.json | 25 ++ .../src/locales/en/validationTextList_en.json | 4 + .../consumer/src/locales/i18n.ts | 25 ++ .../src/locales/ja/messageList_ja.json | 25 ++ .../src/locales/ja/validationTextList_ja.json | 4 + .../dressca-frontend/consumer/src/main.ts | 4 +- .../notification/notificationService.ts | 11 +- .../error-handler/custom-error-handler.ts | 99 ++++++-- .../src/shared/error-handler/custom-error.ts | 18 +- .../error-handler/error-message-format.ts | 8 + .../src/stores/notification/notification.ts | 21 +- .../src/validation/validation-items.ts | 9 +- .../src/views/authentication/LoginView.vue | 8 +- .../consumer/src/views/basket/BasketView.vue | 101 ++++++-- .../src/views/catalog/CatalogView.vue | 62 ++++- .../consumer/src/views/error/ErrorView.vue | 8 +- .../src/views/ordering/CheckoutView.vue | 40 ++- .../consumer/src/views/ordering/DoneView.vue | 38 ++- .../dressca-frontend/package-lock.json | 67 ++++- 99 files changed, 2156 insertions(+), 546 deletions(-) create mode 100644 documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-dark.drawio create mode 100644 documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-light.drawio create mode 100644 documents/contents/guidebooks/how-to-develop/vue-js/message-management.md create mode 100644 documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-dark.png create mode 100644 documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-light.png rename samples/azure-ad-b2c-sample/auth-backend/{system-common => web}/src/main/resources/log4j2.xml (100%) create mode 100644 samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/ExceptionIdConstant.java create mode 100644 samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/MessageIdConstant.java create mode 100644 samples/web-csr/dressca-backend/application-core/src/main/resources/applicationcore/messages.properties rename samples/web-csr/dressca-backend/{system-common => batch}/src/main/resources/log4j2.xml (100%) create mode 100644 samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/CommonExceptionIdConstant.java delete mode 100644 samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/ExceptionIdConstant.java delete mode 100644 samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/MessageIdConstant.java delete mode 100644 samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/exception/response/ErrorResponse.java delete mode 100644 samples/web-csr/dressca-backend/system-common/src/main/resources/messages.properties create mode 100644 samples/web-csr/dressca-backend/system-common/src/main/resources/systemcommon/messages.properties delete mode 100644 samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdvice.java create mode 100644 samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ProblemDetailsCreation.java create mode 100644 samples/web-csr/dressca-backend/web/src/main/resources/log4j2.xml create mode 100644 samples/web-csr/dressca-frontend/consumer/src/locales/en/messageList_en.json create mode 100644 samples/web-csr/dressca-frontend/consumer/src/locales/en/validationTextList_en.json create mode 100644 samples/web-csr/dressca-frontend/consumer/src/locales/i18n.ts create mode 100644 samples/web-csr/dressca-frontend/consumer/src/locales/ja/messageList_ja.json create mode 100644 samples/web-csr/dressca-frontend/consumer/src/locales/ja/validationTextList_ja.json create mode 100644 samples/web-csr/dressca-frontend/consumer/src/shared/error-handler/error-message-format.ts diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d952519f4..dc646a0f2 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -24,7 +24,7 @@ Issue や Discussions に対して追加の説明や質問がある場合は、 これらでは解決できない場合、 Discussions の [Q&A](https://github.com/AlesInfiny/maia/discussions/categories/05-q-a) より質問をお寄せください。 質問を投稿する場合、直面していることについてできる限り多くの情報を提供してください。 -可能な限りスピーディーに対応いたします。 +可能な限り迅速に対応いたします。 ただし、質問に対する回答が常に得られることを期待しないでください。 ## 本プロジェクトに対するコントリビュート diff --git a/.textlintrc b/.textlintrc index 070fe80de..fa98dd79b 100644 --- a/.textlintrc +++ b/.textlintrc @@ -358,6 +358,7 @@ "状態", "ジョッキー", "ジレンマ", + "迅速", "スキャナー", "スキーマ", "スクエア", @@ -377,7 +378,6 @@ "ストーブ", "ストーリー", "スパイウェア", - "スピーディー", "スピード", "スペイン", "スポーツ", diff --git a/cspell.json b/cspell.json index 03fa44d09..234003a71 100644 --- a/cspell.json +++ b/cspell.json @@ -30,6 +30,8 @@ "words": [ "Adoptium", "AlesInfiny", + "Appender", + "Appenders", "BIPROGY", "Checkstyle", "Corretto", @@ -44,6 +46,7 @@ "JaCoCo", "JDBC", "linenums", + "Logback", "markdownlint", "mkdocs", "Mockito", diff --git a/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-dark.drawio b/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-dark.drawio new file mode 100644 index 000000000..6a1e29c50 --- /dev/null +++ b/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-dark.drawio @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-light.drawio b/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-light.drawio new file mode 100644 index 000000000..3a77c9e75 --- /dev/null +++ b/documents/_materials/images/app-architecture/client-side-rendering/error-message-delivery-light.drawio @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documents/contents/app-architecture/client-side-rendering/frontend-application/index.md b/documents/contents/app-architecture/client-side-rendering/frontend-application/index.md index caa59229f..fb7e1b3e9 100644 --- a/documents/contents/app-architecture/client-side-rendering/frontend-application/index.md +++ b/documents/contents/app-architecture/client-side-rendering/frontend-application/index.md @@ -155,13 +155,17 @@ Vue.js プロジェクトのフォルダー構成は、ブランクプロジェ ├─ cypress/ ------------------ cypress による E2E テストに関するファイルを格納します。 ├─ public/ ------------------- メディアファイルや favicon など静的な資産を格納します。 ├─ src/ +│ ├─ api-client/ ------------ API クライアントの設定ファイルを格納します。 │ ├─ assets/ ---------------- コードや動的ファイルが必要とするCSSや画像などのアセットを格納します。 │ ├─ components/ ------------ 単体で自己完結している再利用性の高い vue コンポーネントなどを格納します。 │ ├─ config/ ---------------- 設定ファイルを格納します。 │ ├─ generated/ ------------- 自動生成されたファイルを格納します。 +│ ├─ locales/ --------------- メッセージ管理に関するファイルを格納します。 │ ├─ router/ ---------------- ルーティング定義を格納します。 │ ├─ services/ -------------- サービスに関するファイルを格納します。 +│ ├─ shared/ ---------------- アプリケーション全体で再利用する共通機能のファイルを格納します。 │ ├─ stores/ ---------------- store に関するファイルを格納します。 +│ ├─ validation/ ------------ 一元化するバリデーション定義ファイルを格納します。 │ ├─ views/ ----------------- ルーティングで指定される vue ファイルを格納します。またページ固有の挙動などもここに含めます。 │ ├─ App.vue │ └─ main.ts diff --git a/documents/contents/app-architecture/client-side-rendering/global-function/exception-handling.md b/documents/contents/app-architecture/client-side-rendering/global-function/exception-handling.md index 14ada9c8b..7099e8f4b 100644 --- a/documents/contents/app-architecture/client-side-rendering/global-function/exception-handling.md +++ b/documents/contents/app-architecture/client-side-rendering/global-function/exception-handling.md @@ -3,6 +3,8 @@ title: CSR 編 description: クライアントサイドレンダリングを行う Web アプリケーションの アーキテクチャについて解説します。 --- + + # 例外処理方針 {#top} バックエンドアプリケーションで発生するシステム例外や業務例外は、例外フィルターによって捕捉します。 @@ -103,3 +105,61 @@ HTTP 通信で発生する例外について、レスポンスやステータス C->>B: エラー通知 deactivate C ``` + +### API 通信のエラーレスポンス {#error-response} + +API 通信で発生した例外において、バックエンドから返却されるエラーレスポンスには、 [ProblemDetails :material-open-in-new:](https://www.rfc-editor.org/rfc/rfc9457.html){ target=_blank } に基づくレスポンスボディーを含みます。 + +ProblemDetails は、 HTTP API のエラーレスポンスを標準化するための構造体であり、以下のプロパティで定義されています。 + +| 項目 | プロパティ名 | 推奨レベル | 内容 | +| ---------------------------- | ------------ | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 簡易メッセージ | title | 必須 | 人間が読める形式で提供されます。 | +| 詳細メッセージ | detail | 本番環境は非推奨 | スタックトレースなどを含めます。開発環境では生産性向上を目的に含めることを推奨しますが、本番環境では使用しません。開発環境と本番環境で構成を変更することが難しい場合には detail を使用しないよう統一することも検討してください。 | +| ステータスコード | status | 任意 | HTTP エラーのステータスコードです。 | +| 詳細 URL | type | 推奨 | エラーを説明する詳細 Web ドキュメントがある場合、ユーザーが参照する URL を追加します。 | +| 問題が発生したリソースの URI | instance | 任意 | 問題の発生場所を示す URI です。リクエスト先と異なるリソースが問題の発生したリソースである場合、実装の詳細やデータなどの内部情報が漏洩する可能性があるため、追加には注意が必要です。 | +| 任意のパラメータ | | 任意 | 拡張メンバーです。必要に応じて ProblemDetails のプロパティを拡張する場合に利用します。 | + +AlesInfiny Maia OSS Edition では、上記のプロパティに加えて拡張メンバーとして以下を定義しています。 + +- exceptionId + + 例外 ID 。メッセージファイルからエラーメッセージを取得するためのメッセージコードとして利用します。 + +- exceptionValues + + 例外値。例外 ID から取得したエラーメッセージ内のパラメーターに代入する値として利用します。 + +クライアントサイドでポップアップやトースト通知などを用いてエラー通知を実装する場合には、 ProblemDetails の各プロパティの内容を表示します。 + +#### エラーレスポンスの例 {#example-of-error-response} + +説明したエラーレスポンスの例を以下に示します。 + +```json title="開発環境の場合のエラーレスポンス" +HTTP/1.1 400 Bad Request +Content-Type: application/json; charset=utf-8 + +{ + "type": "https://hoge.com/error/catalogItemIdDoesNotExistInBasket", + "title": "業務エラーが発生しました。", + "status": 400, + "detail": "dressca.applicationcore.baskets.CatalogItemInBasketNotFoundException: 業務エラーが発生しました。 ###以下スタックトレースは省略###", + "exceptionId": "catalogItemIdDoesNotExistInBasket", + "exceptionValues": ["1 ###買い物かごID###", "10 ###商品ID###"] +} +``` + +```json title="本番環境の場合のエラーレスポンス" +HTTP/1.1 400 Bad Request +Content-Type: application/json; charset=utf-8 + +{ + "type": "https://hoge.com/error/catalogItemIdDoesNotExistInBasket", + "title": "業務エラーが発生しました。", + "status": 400, + "exceptionId": "catalogItemIdDoesNotExistInBasket", + "exceptionValues": ["1 ###買い物かごID###", "10 ###商品ID###"] +} +``` diff --git a/documents/contents/app-architecture/client-side-rendering/global-function/message-management-policy.md b/documents/contents/app-architecture/client-side-rendering/global-function/message-management-policy.md index 4ee181928..89675769a 100644 --- a/documents/contents/app-architecture/client-side-rendering/global-function/message-management-policy.md +++ b/documents/contents/app-architecture/client-side-rendering/global-function/message-management-policy.md @@ -9,5 +9,136 @@ Java アプリケーションのメッセージ管理方針については、以 - [Java アプリケーションの処理方式 - メッセージ管理方針](../../../app-architecture/overview/java-application-processing-system/message-management-policy.md#message-management-policy) -フロントエンドアプリケーションでは、特別なメッセージ管理しません。 -画面内に出力するメッセージやラベルは、各画面やソースコード内に個別に実装したものを使用します。 +フロントエンドアプリケーションにおけるメッセージとは、画面や帳票等に表示する固定文言、またはユーザーの画面操作の結果に応じて表示する動的文言を指します。 + +## メッセージパターン {#message-pattern} + +フロントエンドアプリケーションにおけるメッセージパターンとメッセージの表示内容を以下に示します。 + +| パターン | 表示内容 | 表示例 | +| -------------------- | -------------------- | ------------------------------------------------------------ | +| 処理メッセージ | 処理の確認 | 注文内容を確認して「注文を確定する」ボタンを押してください。 | +| | 正常終了 | 注文が完了しました。 | +| | 業務エラー | カートに追加できませんでした。 | +| | | 商品の削除に失敗しました。 | +| | システムエラー | サーバーエラーが発生しました。 | +| | | ネットワークエラーが発生しました。 | +| 入力値検証メッセージ | 単項目チェックエラー | 値を入力してください | +| | 相関チェックエラー | パスワードと確認用パスワードが一致しません | +| ラベル | 画面のタイトル | Dressca | +| | 画面の項目名 | 合計 / 送料 | +| | UI ラベル | 注文を確定する | + +## メッセージの管理単位 {#management-unit} + +各メッセージの用途を明確にするため、前述したメッセージパターンごとにメッセージを管理します。 +AlesInfiny Maia OSS Edition における、メッセージパターンごとのメッセージ管理方針は以下の通りです。 + +- 処理メッセージ + + 処理メッセージ管理用のファイルを定義して一括で管理します。 + + 処理メッセージは変更や追加の要求が多く、一か所で管理することによりメンテナンスが容易になります。 + +- 入力値検証メッセージ + + 入力値検証メッセージ管理用のファイルを定義して一括で管理します。 + + 入力値検証メッセージは複数の場所で使用する可能性が高く、ファイルに定義しておくことで再利用が簡単になります。 + これにより、コードの重複を避けることにつながります。 + +- ラベル + + 画面内に出力するラベルは各画面やソースコード内に個別に実装したものを使用します。 + + ラベルに対してもアプリケーション全体で用語を統一する場合や後述する多言語を実施する場合には、ファイルによるメッセージの一元管理が必要です。 + しかし、用語の統一は初期の実装やメッセージ管理ファイルの維持にかかるコストが高いです。 + また、ラベルへの多言語対応は言語設定によって画面のレイアウトが崩れてしまう恐れがあります。 + そのため、ラベルに対してファイルによるメッセージ管理を導入することは、慎重な検討が必要です。 + +## メッセージのファイル管理 {#message-file-management} + +フロントエンドアプリケーションでは、処理メッセージや入力値検証メッセージは JSON ファイルを利用して管理します。 +JSON ファイルでは、以下のようにメッセージ文字列を識別するメッセージコードとメッセージ文字列本体を key-value で管理します。 + +``` json title="メッセージの JSON ファイルの定義例" +{ + "errorOccurred": "エラーが発生しました。", + ... +} +``` + +### メッセージコードの定義 {#message-codes-definition} + +前述した JSON ファイルのように、メッセージコードはそのメッセージの内容を簡潔に表す文字列とします。 +このようにすることで、以下のような利点があります。 + +- 可読性の向上 + + 数字のメッセージコードよりも、意味を持つメッセージコードを定義することで直感的で理解しやすい利点があります。 + 開発者がメッセージコードを見たときに、すぐにそのメッセージの内容や目的を把握できます。 + +- エラー追跡の効率化 + + ログやデバッグ時に、意味を持つコードは問題を迅速に特定することに役立ちます。 + +- ドキュメント化の簡便さ + + メッセージコードがそのメッセージ内容を簡潔に表していれば、メッセージコードの意味を説明するための追加のドキュメントが不要になることがあります。 + +### エラーメッセージコードの統一 {#unification-of-message-codes} + +エラー発生時のメッセージ整形の流れを以下に示します。 + +![エラーメッセージ整形の流れ](../../../images/app-architecture/client-side-rendering/error-message-delivery-light.png#only-light){ loading=lazy } +![エラーメッセージ整形の流れ](../../../images/app-architecture/client-side-rendering/error-message-delivery-dark.png#only-dark){ loading=lazy } + +この画像の通り、エラー発生時はバックエンドアプリケーションのエラーログの出力とフロントエンドアプリケーションへのエラーの画面出力が順次実施されます。 + +そのため、同一の業務エラーやシステムエラーのメッセージコードは、バックエンド側とフロントエンド側で統一します。 +これにより、以下のような利点があります。 + +- 一貫性の確保 + + 統一されたメッセージコードを使用することで、エラーの識別が容易になり、システム全体の一貫性が保たれます。 + +- デバッグの効率化 + + 開発者がエラーを特定しやすくなり、問題解決のスピードが向上します。 + バックエンドとフロントエンドで同じコードを使用することで、エラーの原因を迅速に特定できます。 + +OpenAPI 仕様書などの各 JSON ファイルと命名規則を統一するため、メッセージコードをキャメルケースとします。 +それに伴い、フロントエンド側に合わせてバックエンドのプロパティファイルのメッセージコードもキャメルケースで記載します。 +バックエンドのプロパティファイルの設定例は、[こちら](../global-function/message-management-policy.md#message-codes-definition) を確認してください。 + +### エラーメッセージ内のパラメータ {#parameter-of-error-messages} + +以下のように、エラーメッセージの中にはパラメータを含むものがあります。 + +```json title="パラメータを含むエラーメッセージの例" +{ + "assetNotFound": "アセットコード: [0] のアセットが見つかりませんでした。", +} +``` + +パラメータに代入するべき値は、エラーレスポンスに含まれる ProblemDetails の拡張メンバーである `exceptionValues` から取得します。 +ProblemDetails については、[こちら](./exception-handling.md#error-response) を確認してください。 + +### 多言語対応 {#localization} + +メッセージを多言語対応する場合には、それぞれの言語の JSON ファイルを作成し、各言語のメッセージをフォルダーで分割して管理します。 +以下に示すように、フォルダー名は [ISO-639 言語コード :material-open-in-new:](https://www.iso.org/iso-639-language-code){ target=_blank } に基づき、その言語を表す言語コードとします。 + +また、各ファイルの末尾には言語コードを付与します。 + +```terminal linenums="0" +locales/ ------------------------------------- メッセージ管理を行うコードが配置されるフォルダー + ├ en/ ---------------------------------------- 英語メッセージの管理を行うフォルダー + │ ├ messageList_en.json ---------------------- 処理の成功や失敗などの結果メッセージを格納する JSON ファイル(英語) + │ └ validationTextList_en.json --------------- 入力値検証用のメッセージを格納する JSON ファイル(英語) + └ ja/ ---------------------------------------- 日本語メッセージの管理を行うフォルダー + ├ messageList_ja.json ---------------------- 処理の成功や失敗などの結果メッセージを格納する JSON ファイル(日本語) + └ validationTextList_ja.json --------------- 入力値検証用のメッセージを格納する JSON ファイル(日本語) +``` + +メッセージ管理方針に従った機能の実装方法などの詳細については、[こちら](../../../guidebooks/how-to-develop/vue-js/message-management.md) を確認してください。 diff --git a/documents/contents/app-architecture/overview/java-application-processing-system/logging-policy.md b/documents/contents/app-architecture/overview/java-application-processing-system/logging-policy.md index 9bc0cad1b..8bc940ba6 100644 --- a/documents/contents/app-architecture/overview/java-application-processing-system/logging-policy.md +++ b/documents/contents/app-architecture/overview/java-application-processing-system/logging-policy.md @@ -93,3 +93,32 @@ AlesInfiny Maia で定義するログの種類は以下の通りです。 AlesInfiny Maia では、 Java アプリケーションのロギングライブラリとして [Apache Log4j 2 :material-open-in-new:](https://logging.apache.org/log4j/2.x/){ target=_blank } を使用します。 またロギングファサードとして [SLF4J :material-open-in-new:](https://www.slf4j.org/){ target=_blank } を使用します。 + +### ログの設定ファイル {#logging-configuration-files} + +log4j 2 では、設定ファイルを使用しログの動作を制御します。 + +ログの設定ファイルは、以下の形式をサポートしています。 +なお、 AlesInfiny Maia では、ログの設定ファイルに XML 形式を採用しています。 + +- XML +- JSON +- YAML +- Properties + +また、 AlesInfiny Maia はマルチプロジェクト構成を採用しています。 +エントリーポイントとなるサブプロジェクトが複数ある場合、それぞれでログ形式を定めることが考えられます。 + +そのため、以下のようにログの設定ファイルをエントリーポイントとなる各プロジェクトに配置します。 + +```terminal linenums="0" +root/ ------------------------------------------ root フォルダー + ├ webapp1/ ---------------------------------- 管理アプリのエントリーポイントとなるサブプロジェクト + │ └ src/main/resource/ ------------------------ 設定ファイルを一元管理するフォルダー + │ └ log4j2.xml ------------------------------ ログの設定ファイル + └ webapp2/ ------------------------------- コンシューマーアプリのエントリーポイントとなるサブプロジェクト 2 + └ src/main/resource/ ------------------------ 設定ファイルを一元管理するフォルダー + └ log4j2.xml ------------------------------ ログの設定ファイル +``` + +log4j2.xml の具体的な設定については、[こちら](../../../guidebooks/how-to-develop/java/sub-project-settings/web-project-settings.md#logging-configuration) を確認してください。 diff --git a/documents/contents/app-architecture/overview/java-application-processing-system/message-management-policy.md b/documents/contents/app-architecture/overview/java-application-processing-system/message-management-policy.md index 0571dba32..fab227489 100644 --- a/documents/contents/app-architecture/overview/java-application-processing-system/message-management-policy.md +++ b/documents/contents/app-architecture/overview/java-application-processing-system/message-management-policy.md @@ -3,6 +3,74 @@ title: Java アプリケーションの 処理方式 description: アプリケーションの形態によらず、 Java アプリケーションで 考慮すべき関心事について、実装方針を説明します。 --- -## メッセージ管理方針 {#message-management-policy} + -メッセージ文字列は、表記の統一を図る目的にプロパティファイルで管理します。 +# メッセージ管理方針 {#message-management-policy} + +フロントエンドアプリケーションのメッセージ管理方針については、以下を参照してください。 + +- [フロントエンドアプリケーションの処理方式 - メッセージ管理方針](../../client-side-rendering/global-function/message-management-policy.md) + +メッセージ文字列は、表記の統一を図ることを目的にプロパティファイルで管理します。 + +## プロパティファイルの管理 {#property-file-management} + +プロパティファイルでは、以下のようにメッセージ文字列を識別するメッセージコードとメッセージ文字列本体をペアで管理します。 + +```properties title="message.properties の例" +errorOccurred=エラーが発生しました。 +... +``` + +## エラーメッセージコードの統一 {#unification-of-message-codes} + +同一の業務エラーやシステムエラーのメッセージコードは、バックエンド側とフロントエンド側で統一します。 + +詳細については、[こちら](../../client-side-rendering/global-function/message-management-policy.md#unification-of-message-codes) を確認してください。 + +## メッセージの管理単位 {#management-unit} + +以下のように、ビジネスロジックで発生する業務メッセージと共通処理として発生する共通メッセージを分割して各サブプロジェクトで管理します。 + +```terminal linenums="0" +root/ ------------------------------------------ root フォルダー + ├ application-core/src/main/resource + │ └ applicationcore --------------------------- 業務メッセージのプロパティファイルを一括管理するフォルダー + │ └ message.properties --------------------- 業務メッセージのプロパティファイル + └ system-common/src/main/resource + └ systemcommon ------------------------------ 共通メッセージのプロパティファイルを一括管理するフォルダー + └ message.properties --------------------- 共通メッセージのプロパティファイル +``` + +業務メッセージと共通メッセージとして格納するメッセージの例は以下の通りです。 + +- 業務メッセージの例 + + - 各業務例外発生時にログ出力するためのエラーメッセージ + - 業務完了時に正常終了した旨をログに出力するためのメッセージ + +- 共通メッセージの例 + + - システム例外発生時にログ出力するためのエラーメッセージ + - 業務例外やシステム例外の既定メッセージ + +## 多言語対応 {#localization} + +メッセージを多言語対応する場合には、それぞれの言語のプロパティファイルを作成し、各言語のメッセージをファイルで分割して管理します。 +以下に示すように、各ファイル名は [ISO-639 言語コード :material-open-in-new:](https://www.iso.org/iso-639-language-code){ target=_blank } に基づき、その言語を表す言語コードを末尾に付与します。 + +```terminal linenums="0" +root/ ------------------------------------------ root フォルダー + ├ application-core/src/main/resource + │ └ applicationcore --------------------------- 業務メッセージのプロパティファイルを一括管理するフォルダー + │ ├ message_en.properties ------------------ 業務メッセージのプロパティファイル(英語) + │ └ message_ja.properties ------------------ 業務メッセージのプロパティファイル(日本語) + └ system-common/src/main/resource + └ systemcommon ------------------------------ 共通メッセージのプロパティファイルを一括管理するフォルダー + ├ message_en.properties ------------------ 共通メッセージのプロパティファイル(英語) + └ message_ja.properties ------------------ 共通メッセージのプロパティファイル(日本語) +``` + +アプリケーション起動時に使用するメッセージファイルを切り替えることで、開発者に応じた言語を設定します。 + +メッセージ管理方針に従った機能の実装方法などの詳細については、[こちら](../../../guidebooks/how-to-develop/java/common-project-settings.md) を確認してください。 diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/application-core-project-settings.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/application-core-project-settings.md index f84cdefbf..59af86e69 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/application-core-project-settings.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/application-core-project-settings.md @@ -22,6 +22,25 @@ dependencies { } ``` +## ロギングライブラリの除外設定 {#logging-library-exclusion-settings} + + + +依存関係に記載している `org.springframework.boot:spring-boot-starter` ライブラリは、デフォルトで Logback 用のライブラリである `org.springframework.boot:spring-boot-starter-logging` が推移的依存で追加されます。 + + + +AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j 2 を使用します。 +そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。 + +``` groovy title="spring-boot-starter-logging の除外設定" +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} +``` + ## プロジェクトのビルド方法の設定 {#config-build} application-core プロジェクトは単体で動作せず、他プロジェクトからライブラリとして呼び出します。 @@ -74,6 +93,13 @@ application-core プロジェクトの `src` 以下にある、 `ApplicationCore // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + + tasks.named('test') { useJUnitPlatform() } diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/batch-project-settings.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/batch-project-settings.md index 20423973d..f10b8ab7f 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/batch-project-settings.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/batch-project-settings.md @@ -16,6 +16,8 @@ batch プロジェクトで利用を推奨するライブラリは以下の通 - `spring-boot-starter-batch`: Spring Batch アプリケーションを構築するための依存関係を提供するスターター +- `spring-boot-starter-log4j2`: Spring Boot アプリケーションで log4j 2 を使用するためのスターター + - `spring-batch-test`: Spring Batch アプリケーションのテストのライブラリ - `spring-boot-starter-test`:Spring Boot アプリケーションをテストするためのスターター @@ -23,6 +25,7 @@ batch プロジェクトで利用を推奨するライブラリは以下の通 ```groovy title="batch/build.gradle" dependencies { implementation 'org.springframework.boot:spring-boot-starter-batch' + implementation 'org.springframework.boot:spring-boot-starter-log4j2' testImplementation 'org.springframework.batch:spring-batch-test:x.x.x' testImplementation 'org.springframework.boot:spring-boot-starter-test' } @@ -101,6 +104,25 @@ batch プロジェクトの `src/main/resource` 以下に `application.propertie そのため、バッチアプリケーションの起動時に [メタデータテーブルを作成するスキーマ :material-open-in-new:](https://spring.pleiades.io/spring-batch/reference/schema-appendix.html){ target=_blank } を実行するよう指定する必要があります。 バッチ処理のジョブ管理をクラウドサービスや特定のジョブ管理ツールに任せる場合など、Spring Batch で生成されるメタデータテーブルを利用したくない際の対処法は [こちら](../../../../app-architecture/batch-application/batch-application-consideration/without-using-meta-data-table.md) をご覧ください。 +## ロギングライブラリの除外設定 {#logging-library-exclusion-settings} + + + +依存関係に記載している `org.springframework.boot:spring-boot-starter-batch` ライブラリは、デフォルトで Logback 用のライブラリである `org.springframework.boot:spring-boot-starter-logging` が推移的依存で追加されます。 + + + +AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j 2 を使用します。 +そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。 + +``` groovy title="spring-boot-starter-logging の除外設定" +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} +``` + ## バッチアプリケーションとして動作させる設定 {#config-batch-application} batch プロジェクトをウェブアプリケーションではなく、バッチアプリケーションとして動作させるためクラスファイルを書き換えます。 @@ -161,6 +183,7 @@ class BatchApplicationTests { dependencies { implementation 'org.springframework.boot:spring-boot-starter-batch' + implementation 'org.springframework.boot:spring-boot-starter-log4j2' testImplementation 'org.springframework.batch:spring-batch-test:x.x.x' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation project(':application-core') @@ -169,6 +192,12 @@ class BatchApplicationTests { // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + tasks.named('test') { useJUnitPlatform() } diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/infrastructure-project-settings.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/infrastructure-project-settings.md index 5016a7348..3fa387f8c 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/infrastructure-project-settings.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/infrastructure-project-settings.md @@ -43,6 +43,25 @@ dependencies { } ``` +## ロギングライブラリの除外設定 {#logging-library-exclusion-settings-infra} + + + +依存関係に記載している `org.mybatis.spring.boot:mybatis-spring-boot-starter` ライブラリは、デフォルトで Logback 用のライブラリである `org.springframework.boot:spring-boot-starter-logging` が推移的依存で追加されます。 + + + +AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j 2 を使用します。 +そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。 + +``` groovy title="spring-boot-starter-logging の除外設定" +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} +``` + ## プロジェクトのビルド方法の設定 {#config-build} infrastructure プロジェクトは単体で動作せず、他プロジェクトからライブラリとして呼び出します。 @@ -98,6 +117,13 @@ infrastructure プロジェクトの `src` 以下にある、 `InfrastructureApp // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + + bootJar { enabled = false } diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/project-version-control.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/project-version-control.md index 971d5763e..8e0ec1614 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/project-version-control.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/project-version-control.md @@ -112,7 +112,7 @@ buildscript { Groovy では文字列は一重引用符で囲み、変数を含む文字列は二重引用符で囲んで表現します。 変数を含む文字列を一重引用符で囲むとエラーが出るため、注意して使い分けてください。 -```groovy title="web/build.gradle" hl_lines="3 4 5 9 10 11 12 13" +```groovy title="web/build.gradle" hl_lines="3 4 5 9 10 11 12 13 14" plugins { id 'java' id 'org.springframework.boot' version "${springBootVersion}" @@ -123,8 +123,9 @@ plugins { dependencies { implementation supportDependencies.spring_boot_starter_web implementation supportDependencies.h2database - implementation supportDependencies.springdoc_openapi_starter_webmvc_ui - implementation supportDependencies.spring_boot_starter_actuator + implementation supportDependencies.springdoc_openapi_starter_webmvc_ui + implementation supportDependencies.spring_boot_starter_actuator + implementation supportDependencies.spring_boot_starter_log4j2 testImplementation supportDependencies.spring_boot_starter_test implementation project(':application-core') implementation project(':infrastructure') @@ -158,8 +159,9 @@ dependencies { dependencies { implementation supportDependencies.spring_boot_starter_web implementation supportDependencies.h2database - implementation supportDependencies.springdoc_openapi_starter_webmvc_ui - implementation supportDependencies.spring_boot_starter_actuator + implementation supportDependencies.springdoc_openapi_starter_webmvc_ui + implementation supportDependencies.spring_boot_starter_actuator + implementation supportDependencies.spring_boot_starter_log4j2 testImplementation supportDependencies.spring_boot_starter_test implementation project(':application-core') implementation project(':infrastructure') @@ -167,6 +169,12 @@ dependencies { // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + // OpenAPI 仕様書出力の作業ディレクトリを指定する。 afterEvaluate { tasks.named("forkedSpringBootRun") { diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/system-common-project-settings.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/system-common-project-settings.md index 1def70570..cf544cbdd 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/system-common-project-settings.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/system-common-project-settings.md @@ -10,6 +10,25 @@ system-common プロジェクトの依存ライブラリについては、特に また、 system-common プロジェクトは他のプロジェクトを参照する想定はないので、他のプロジェクトを依存関係に含める必要はありません。 +## ロギングライブラリの除外設定 {#logging-library-exclusion-settings} + + + +依存関係に記載している `org.springframework.boot:spring-boot-starter` ライブラリは、デフォルトで Logback 用のライブラリである `org.springframework.boot:spring-boot-starter-logging` が推移的依存で追加されます。 + + + +AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j 2 を使用します。 +そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。 + +``` groovy title="spring-boot-starter-logging の除外設定" +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} +``` + ## プロジェクトのビルド方法の設定 {#config-build} system-common プロジェクトは単体で動作せず、他プロジェクトからライブラリとして呼び出します。 @@ -61,6 +80,13 @@ system-common プロジェクトの `src` 以下にある、 `SystemCommonApplic // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + + bootJar { enabled = false } diff --git a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/web-project-settings.md b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/web-project-settings.md index ddcb44597..c942f1ae7 100644 --- a/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/web-project-settings.md +++ b/documents/contents/guidebooks/how-to-develop/java/sub-project-settings/web-project-settings.md @@ -20,6 +20,8 @@ web プロジェクトで利用を推奨するライブラリは以下の通り - `spring-boot-starter-actuator`: ヘルスチェックを含めたアプリケーション監視・管理機能を構築するためのスターター +- `spring-boot-starter-log4j2`: Spring Boot アプリケーションで log4j 2 を使用するためのスターター + - `spring-boot-starter-test`:Spring Boot アプリケーションをテストするためのスターター 上記のライブラリを依存ライブラリとして、 以下のように `build.gradle` の `dependencies` ブロックに追加します。 @@ -30,6 +32,7 @@ dependencies { implementation 'com.h2database:h2:x.x.x' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:x.x.x' implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-log4j2' testImplementation 'org.springframework.boot:spring-boot-starter-test' } ``` @@ -101,6 +104,71 @@ web プロジェクトの `src/main/resource` 以下に `application.properties` spring.sql.init.mode=never ``` +## ロギングライブラリの除外設定 {#logging-library-exclusion-settings} + + + +依存関係に記載している `org.springframework.boot:spring-boot-starter` ライブラリは、デフォルトで Logback 用のライブラリである `org.springframework.boot:spring-boot-starter-logging` が推移的依存で追加されます。 + + + +AlesInfiny Maia OSS Edition では、ロギングライブラリとして log4j 2 を使用します。 +そのため、以下のようにデフォルトのロギングライブラリを依存関係から除外する設定を記述します。 + +``` groovy title="spring-boot-starter-logging の除外設定" +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} +``` + +## ログの設定 {#logging-configuration} + +`src/main/resource` に `log4j2.xml` ファイルを配置しログの設定を記述します。 +以下は、ログの設定例です。 + +```xml title="log4j2.xml" + + + + + + + + + + + + + + + + + + + + + + + + +``` + +log4j2.xml のタグの構成要素は以下の通りです。 + +- Appenders + + ログの出力先を指定します。 + ログイベントをどのリソース(コンソール、ファイル、データベースなど)に送信するかを決定します。 + +- Loggers + + ログのエントリーポイントを指定します。 + この設定では、どのレベルのメッセージをログに記録するかや、 Appenders のどの要素にメッセージを送信するかなどを指定します。 + +その他の詳細な設定については、[公式ページ :material-open-in-new:](https://logging.apache.org/log4j/2.x/manual/configuration.html){ target=_blank } を確認してください。 + ## OpenAPI 仕様書の出力設定 {#open-api-specification-output-configuration} OpenAPI 仕様書のファイルがビルド時に出力されるようプロジェクトファイルを設定します。 @@ -170,6 +238,7 @@ build.dependsOn("generateOpenApiDocs") implementation 'com.h2database:h2:x.x.x' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:x.x.x' implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.springframework.boot:spring-boot-starter-log4j2' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation project(':application-core') implementation project(':infrastructure') @@ -177,6 +246,13 @@ build.dependsOn("generateOpenApiDocs") // その他、プロジェクトに必要な依存ライブラリは任意で追加してください。 } + configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } + } + + // OpenAPI 仕様書出力の作業ディレクトリを指定する。 afterEvaluate { tasks.named("forkedSpringBootRun") { diff --git a/documents/contents/guidebooks/how-to-develop/vue-js/index.md b/documents/contents/guidebooks/how-to-develop/vue-js/index.md index 60d5ab26a..180c3b11c 100644 --- a/documents/contents/guidebooks/how-to-develop/vue-js/index.md +++ b/documents/contents/guidebooks/how-to-develop/vue-js/index.md @@ -16,6 +16,7 @@ Vue.js を用いてフロントエンドアプリケーションを開発する 1. [開発に使用するパッケージ](optional-packages.md) 1. [CSS の設定と CSS フレームワークの適用](css.md) 1. [静的コード分析とフォーマット](static-verification-and-format.md) +1. [メッセージ管理機能の設定](message-management.md) 1. [入力値検証](input-validation.md) 1. [OpenAPI 仕様書からのクライアントコード生成](create-api-client-code.md) 1. [エラーハンドラーの設定](error-handler-settings.md) diff --git a/documents/contents/guidebooks/how-to-develop/vue-js/input-validation.md b/documents/contents/guidebooks/how-to-develop/vue-js/input-validation.md index 72aba8824..31528b1a4 100644 --- a/documents/contents/guidebooks/how-to-develop/vue-js/input-validation.md +++ b/documents/contents/guidebooks/how-to-develop/vue-js/input-validation.md @@ -6,36 +6,66 @@ description: Vue.js を用いた クライアントサイドアプリケーシ # 入力値検証 {#top} フロントエンドのアーキテクチャに基づき、入力値検証には VeeValidate と yup を使用します。 +また、入力値検証失敗時のメッセージを管理するために、 Vue I18n を使用します。 +メッセージ管理機能の実装方法の詳細に関しては、[こちら](./message-management.md) を確認してください。 ## 必要なパッケージのインストール {#install-packages} -ターミナルを開き、以下のコマンドを実行します。 +ターミナルを開き、対象プロジェクトのワークスペースフォルダーで以下のコマンドを実行します。 ```terminal -npm install vee-validate yup +npm install vee-validate yup vue-i18n +``` + +## メッセージの定義 {#definition-messages} + +入力値検証失敗時のメッセージを定義するため、`./src/locales` フォルダーに JSON ファイルを作成し、以下のように記述します。 +メッセージを多言語対応する場合には、それぞれの言語の JSON ファイルを作成し、各言語のメッセージをフォルダーで分割して管理します。 + +```json title="validationTextList_jp.json" +{ + "email": "メールアドレスの形式で入力してください", + "required": "値を入力してください" +} ``` ## 入力値検証時の設定 {#settings-validation} -yup のデフォルトのメッセージは英語であるため、日本語のメッセージを設定します。[アーキテクチャ定義](../../../app-architecture/client-side-rendering/frontend-application/index.md#project-structure) では設定ファイルは `./src/config` フォルダーに集約されるため、ファイル `./src/config/yup.config.ts` を作成し、以下のように記述します。 +各言語設定に基づいた、入力値検証メッセージを読み込みます。 +[アーキテクチャ定義](../../../app-architecture/client-side-rendering/frontend-application/index.md#project-structure) では設定ファイルは `./src/config` フォルダーに集約されるため、ファイル `./src/config/yup.config.ts` を作成し、以下のように記述します。 ```typescript title="yup.config.ts" +import { i18n } from '@/locales/i18n'; import { setLocale } from 'yup'; -setLocale({ - mixed: { - required: '値を入力してください', - }, - string: { - email: 'メールアドレスの形式で入力してください', - }, -}); +export function configureYup(): void { + const { t } = i18n.global; + setLocale({ + mixed: { + required: t('required'), + }, + string: { + email: t('email'), + }, + }); +} ``` -作成したファイルを読み込むため、 main.ts に import を記述します。 +作成したファイルを読み込むため、 入力値を検証する Vue ファイルのスクリプト構文に以下を記述します。 + +```vue title="example.vue" + ``` ## 入力値検証の実行 {#input-validation} diff --git a/documents/contents/guidebooks/how-to-develop/vue-js/message-management.md b/documents/contents/guidebooks/how-to-develop/vue-js/message-management.md new file mode 100644 index 000000000..c2937e597 --- /dev/null +++ b/documents/contents/guidebooks/how-to-develop/vue-js/message-management.md @@ -0,0 +1,167 @@ +--- +title: Vue.js 開発手順 +description: Vue.js を用いた クライアントサイドアプリケーションの 開発手順を説明します。 +--- + +# メッセージ管理機能の設定 {#top} + +フロントエンドのメッセージ管理方針に関するアーキテクチャについては、[こちら](../../../app-architecture/client-side-rendering/global-function/message-management-policy.md) をご確認ください。 +本アーキテクチャに基づき、メッセージ管理機能のライブラリは [Vue I18n :material-open-in-new:](https://kazupon.github.io/vue-i18n/){ target=\_blank } を使用します。 + +## 必要なパッケージのインストール {#install-packages} + +ターミナルを開き、対象プロジェクトのワークスペースフォルダーで以下のコマンドを実行します。 + +```terminal +npm install vue-i18n +``` + +## 設定方法 {#settings} + +本設定で利用するフォルダーの構成は以下の通りです。 + +```terminal linenums="0" + + └ src/ ------------------------------------------- アプリケーションのソースコードが配置されるフォルダー + ├ locales/ ------------------------------------- メッセージ管理を行うコードが配置されるフォルダー + │ ├ en/ ---------------------------------------- 英語メッセージの管理を行うフォルダー + │ │ ├ messageList_en.json ---------------------- 処理の成功や失敗などの結果メッセージを格納する JSON ファイル(英語) + │ │ └ validationTextList_en.json --------------- 入力値検証用のメッセージを格納する JSON ファイル(英語) + │ ├ ja/ ---------------------------------------- 日本語メッセージの管理を行うフォルダー + │ │ ├ messageList_ja.json ---------------------- 処理の成功や失敗などの結果メッセージを格納する JSON ファイル(日本語) + │ │ └ validationTextList_ja.json --------------- 入力値検証用のメッセージを格納する JSON ファイル(日本語) + │ └ i18n.ts ------------------------------------ メッセージ管理の設定に関するコード + └ main.ts -------------------------------------- 各ライブラリ等を読み込むためのコード +``` + +### メッセージファイルの作成 {#creating-message-files} + +メッセージに関するファイルは `./src/locales` フォルダーに集約します。 +以下のように、メッセージ本体を格納する JSON ファイルを作成します。 + +```json title="messageList_jp.json の例" +{ + "errorOccurred": "エラーが発生しました。", + "businessError": "業務エラーが発生しました。", + "loginRequiredError": "ログインしてください。", + ... +} +``` + +前述のフォルダー構成の通り、メッセージ管理方針に従って JSON ファイルは以下の 2 つに分割します。 + +- messageList.json + + 処理の成功や失敗を示す処理メッセージを格納します。 + +- validationTextList.json + + 入力値検証用のメッセージを格納します。 + 詳細は [こちら](./input-validation.md#definition-messages) を確認してください。 + +JSON ファイルでメッセージを管理する際は、メッセージコードとメッセージ本体を key-value で管理します。 + +### メッセージファイルの読込 {#reading-message-files} + +メッセージ本体を格納する JSON ファイルを読み込むために、以下のように `i18n.ts` を実装します。 + +```ts title="i18n.ts" +import { createI18n } from "vue-i18n"; +import messageListEN from '@/locales/en/messageList_en.json'; +import messageListJA from '@/locales/ja/messageList_ja.json'; +import validationTextListJA from '@/locales/ja/validationTextList_ja.json'; +import validationTextListEN from '@/locales/en/validationTextList_en.json'; + +const langPackage = { + ja: { + ...messageListJA, + ...validationTextListJA, + }, + en: { + ...messageListEN, + ...validationTextListEN, + }, +}; + +const i18n = createI18n({ + legacy: false, + locale: window.navigator.language, + fallbackLocale: "en", + messages: langPackage, +}); + +export { i18n }; +``` + +メッセージ管理機能を導入するための `createI18n` の引数の役割は以下の通りです。 + +- legacy + + + + createI18n のインスタンスとして、 [Legacy API :material-open-in-new:](https://vue-i18n.intlify.dev/api/legacy.html){ target=\_blank } と [Composition API :material-open-in-new:](https://vue-i18n.intlify.dev/api/composition.html){ target=\_blank } のどちらを利用するか選択します。 + 本実装では、 Composition API を利用するため、 legacy を false に設定します。 + + +- locale + + 使用する言語を指定します。 + 本実装では、`window.navigator.language` でブラウザーの言語設定を取得します。 + +- fallbackLocale + + locale に設定した言語がサポートされていない場合に、フォールバックする locale を指定します。 + +- messages + + locale の言語設定に基づき、利用するメッセージを指定します。 + +`i18n.ts` の設定をアプリケーションに反映させるため、 `main.ts` に以下のように実装します。 + +```ts title="main.ts" hl_lines="6 14" +import { createApp } from "vue"; +import { createPinia } from "pinia"; +import { authenticationGuard } from "@/shared/authentication/authentication-guard"; +import App from "./App.vue"; +import { router } from "./router"; +import { i18n } from "./locales/i18n"; + +import "@/assets/base.css"; + +const app = createApp(App); + +app.use(createPinia()); +app.use(router); +app.use(i18n); + +authenticationGuard(router); + +app.mount("#app"); +``` + +### メッセージの取得 {#getting-messages} + +読み込んだメッセージを取得するためには、 `i18n.ts` を各ファイルでインポートして利用します。 +実装例は以下の通りです。 + +```ts title="メッセージ利用例" + + +// テンプレート構文上で利用する場合 + +``` + +メッセージ関数 `t()` を利用してメッセージを取得します。 +メッセージ関数 `t()` の引数には、 JSON ファイルのメッセージコードを指定してメッセージ本体を呼び出します。 diff --git a/documents/contents/guidebooks/how-to-develop/vue-js/optional-packages.md b/documents/contents/guidebooks/how-to-develop/vue-js/optional-packages.md index d02dc79c1..82e8ee85c 100644 --- a/documents/contents/guidebooks/how-to-develop/vue-js/optional-packages.md +++ b/documents/contents/guidebooks/how-to-develop/vue-js/optional-packages.md @@ -94,3 +94,7 @@ description: Vue.js を用いた クライアントサイドアプリケーシ - [yup :material-open-in-new:](https://github.com/jquense/yup){ target=_blank } JavaScript でフォームのバリデーションルールを宣言的に記述できるライブラリ([インストール方法](input-validation.md#install-packages)) + +- [Vue I18n :material-open-in-new:](https://vue-i18n.intlify.dev/){ target=_blank } + + Vue.js アプリケーションでメッセージを外部ファイルで一元管理したり、多言語対応するためのライブラリ([インストール方法](input-validation.md#install-packages)) diff --git a/documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-dark.png b/documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..111f7b4a579d5f17d6889bef2118cf0461d909b8 GIT binary patch literal 240913 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�_P`|gccZ2ku&dMX`CM9pmB7CXVQIBF8` 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 z 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
  • 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 literal 0 HcmV?d00001 diff --git a/documents/contents/index.md b/documents/contents/index.md index 4e7e3facd..088fd06ee 100644 --- a/documents/contents/index.md +++ b/documents/contents/index.md @@ -96,15 +96,13 @@ VS Code のターミナルで、「dressca\\dressca-frontend\\consumer」に移 1. VS Code で「dressca\\dressca-backend」フォルダーを開き、必要な拡張機能をインストールします。 「拡張機能」メニューから 「拡張機能のフィルター」>「推奨」>「ワークスペース推奨事項」にある拡張機能を全てインストールします。 -1. VS Code のターミナルで、カレントフォルダーを「dressca\\dressca-backend」にして以下のコマンドを実行してビルドします。 +1. VS Code のアクティビティーバーにある「 Gradle 」をクリックし、サイドバーの「 GRADLE PROJECTS 」タブから以下のタスクを実行します。 - ```winbatch title="バックエンドアプリケーションのビルド" - ./gradlew build - ``` + dressca-backend > Tasks > build > build -1. VS Code のアクティビティーバーにある「Gradle」をクリックし、サイドバーの「GRADLE PROJECTS」タブから以下のタスクを実行します。 +1. 前手順と同様に、サイドバーの「 GRADLE PROJECTS 」タブから以下のタスクを実行します。 - web > Tasks > application > bootRun + dressca-backend > Tasks > application > bootRunDev 1. 以下のアドレスで、サンプルアプリケーションの API にアクセスできます。 diff --git a/documents/mkdocs.yml b/documents/mkdocs.yml index a050fbde4..af0430db4 100644 --- a/documents/mkdocs.yml +++ b/documents/mkdocs.yml @@ -100,6 +100,7 @@ nav: - 開発に使用するパッケージ: guidebooks/how-to-develop/vue-js/optional-packages.md - CSS の設定と CSS フレームワークの適用: guidebooks/how-to-develop/vue-js/css.md - 静的コード分析とフォーマット: guidebooks/how-to-develop/vue-js/static-verification-and-format.md + - メッセージ管理機能の設定: guidebooks/how-to-develop/vue-js/message-management.md - 入力値検証: guidebooks/how-to-develop/vue-js/input-validation.md - Open API 仕様書からのクライアントコード生成: guidebooks/how-to-develop/vue-js/create-api-client-code.md - エラーハンドラーの設定: guidebooks/how-to-develop/vue-js/error-handler-settings.md diff --git a/samples/azure-ad-b2c-sample/auth-backend/system-common/build.gradle b/samples/azure-ad-b2c-sample/auth-backend/system-common/build.gradle index 4c470c72e..197b5f5df 100644 --- a/samples/azure-ad-b2c-sample/auth-backend/system-common/build.gradle +++ b/samples/azure-ad-b2c-sample/auth-backend/system-common/build.gradle @@ -19,7 +19,6 @@ repositories { dependencies { implementation supportDependencies.spring_boot_starter - implementation supportDependencies.spring_boot_starter_log4j2 testImplementation supportDependencies.spring_boot_starter_test } diff --git a/samples/azure-ad-b2c-sample/auth-backend/web/build.gradle b/samples/azure-ad-b2c-sample/auth-backend/web/build.gradle index 168bd43e3..42e9580f9 100644 --- a/samples/azure-ad-b2c-sample/auth-backend/web/build.gradle +++ b/samples/azure-ad-b2c-sample/auth-backend/web/build.gradle @@ -23,6 +23,7 @@ dependencies { implementation supportDependencies.springdoc_openapi_starter_webmvc_ui implementation supportDependencies.spring_cloud_azure_starter implementation supportDependencies.spring_cloud_azure_starter_ad_b2c + implementation supportDependencies.spring_boot_starter_log4j2 implementation project(':system-common') diff --git a/samples/azure-ad-b2c-sample/auth-backend/system-common/src/main/resources/log4j2.xml b/samples/azure-ad-b2c-sample/auth-backend/web/src/main/resources/log4j2.xml similarity index 100% rename from samples/azure-ad-b2c-sample/auth-backend/system-common/src/main/resources/log4j2.xml rename to samples/azure-ad-b2c-sample/auth-backend/web/src/main/resources/log4j2.xml diff --git a/samples/web-csr/dressca-backend/.vscode/launch.json b/samples/web-csr/dressca-backend/.vscode/launch.json index 1f81dd98a..b005e1e69 100644 --- a/samples/web-csr/dressca-backend/.vscode/launch.json +++ b/samples/web-csr/dressca-backend/.vscode/launch.json @@ -8,7 +8,7 @@ "console": "internalConsole", "mainClass": "com.dressca.web.WebApplication", "projectName": "web", - "args": "", + "args": "--spring.profiles.active=local", "envFile": "${workspaceFolder}/.env" }, { diff --git a/samples/web-csr/dressca-backend/application-core/build.gradle b/samples/web-csr/dressca-backend/application-core/build.gradle index a3e936786..9a8bd7b77 100644 --- a/samples/web-csr/dressca-backend/application-core/build.gradle +++ b/samples/web-csr/dressca-backend/application-core/build.gradle @@ -20,7 +20,6 @@ repositories { dependencies { implementation supportDependencies.spring_boot_starter implementation supportDependencies.mybatis_spring_boot_starter - implementation supportDependencies.spring_boot_starter_validation implementation supportDependencies.commons_lang3 implementation project(':system-common') diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/AssetApplicationService.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/AssetApplicationService.java index f910ad4a8..63497bcbe 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/AssetApplicationService.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/AssetApplicationService.java @@ -13,7 +13,7 @@ import com.dressca.applicationcore.assets.AssetRepository; import com.dressca.applicationcore.assets.AssetResourceInfo; import com.dressca.applicationcore.assets.AssetStore; -import com.dressca.systemcommon.constant.MessageIdConstant; +import com.dressca.applicationcore.constant.MessageIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import lombok.AllArgsConstructor; @@ -44,7 +44,9 @@ public class AssetApplicationService { public AssetResourceInfo getAssetResourceInfo(String assetCode) throws AssetNotFoundException { apLog - .debug(messages.getMessage(MessageIdConstant.D_ASSET0001_LOG, new Object[] { assetCode }, Locale.getDefault())); + .debug(messages.getMessage(MessageIdConstant.D_ASSET_GET_ASSET, + new Object[] { assetCode }, + Locale.getDefault())); Asset asset = this.repository.findByAssetCode(assetCode) .orElseThrow(() -> new AssetNotFoundException(assetCode)); diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/CatalogApplicationService.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/CatalogApplicationService.java index f0cd22be4..97ac71827 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/CatalogApplicationService.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/CatalogApplicationService.java @@ -14,7 +14,7 @@ import com.dressca.applicationcore.catalog.CatalogCategoryRepository; import com.dressca.applicationcore.catalog.CatalogItem; import com.dressca.applicationcore.catalog.CatalogRepository; -import com.dressca.systemcommon.constant.MessageIdConstant; +import com.dressca.applicationcore.constant.MessageIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import lombok.AllArgsConstructor; @@ -46,7 +46,7 @@ public class CatalogApplicationService { */ public List getCatalogItems(long brandId, long categoryId, int page, int pageSize) { - apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG0001_LOG, + apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG_GET_CATALOG_ITEMS, new Object[] { brandId, categoryId, page, pageSize }, Locale.getDefault())); return this.catalogRepository.findByBrandIdAndCategoryId(brandId, categoryId, page, pageSize); @@ -61,7 +61,8 @@ public List getCatalogItems(long brandId, long categoryId, int page */ public int countCatalogItems(long brandId, long categoryId) { - apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG0002_LOG, new Object[] { brandId, categoryId }, + apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG_COUNT_CATALOG_ITEMS, + new Object[] { brandId, categoryId }, Locale.getDefault())); return this.catalogRepository.countByBrandIdAndCategoryId(brandId, categoryId); @@ -74,7 +75,9 @@ public int countCatalogItems(long brandId, long categoryId) { */ public List getBrands() { - apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG0003_LOG, new Object[] {}, Locale.getDefault())); + apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG_GET_BRANDS, + new Object[] {}, + Locale.getDefault())); return this.brandRepository.getAll(); } @@ -86,7 +89,9 @@ public List getBrands() { */ public List getCategories() { - apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG0004_LOG, new Object[] {}, Locale.getDefault())); + apLog.debug(messages.getMessage(MessageIdConstant.D_CATALOG_GET_CATEGORIES, + new Object[] {}, + Locale.getDefault())); return this.catalogCategoryRepository.getAll(); } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/OrderApplicationService.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/OrderApplicationService.java index cd089801c..7036439d0 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/OrderApplicationService.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/OrderApplicationService.java @@ -1,9 +1,9 @@ package com.dressca.applicationcore.applicationservice; +import com.dressca.applicationcore.constant.MessageIdConstant; import com.dressca.applicationcore.order.Order; import com.dressca.applicationcore.order.OrderNotFoundException; import com.dressca.applicationcore.order.OrderRepository; -import com.dressca.systemcommon.constant.MessageIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import lombok.AllArgsConstructor; import java.util.Locale; @@ -40,7 +40,9 @@ public class OrderApplicationService { public Order getOrder(long orderId, String buyerId) throws OrderNotFoundException { apLog.debug( - messages.getMessage(MessageIdConstant.D_ORDER0001_LOG, new Object[] { orderId, buyerId }, Locale.getDefault())); + messages.getMessage(MessageIdConstant.D_ORDER_GET_ORDER, + new Object[] { orderId, buyerId }, + Locale.getDefault())); Order order = this.orderRepository.findById(orderId) .orElseThrow(() -> new OrderNotFoundException(null, orderId, buyerId)); diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationService.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationService.java index 09241d2d1..466289e4c 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationService.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationService.java @@ -19,6 +19,7 @@ import com.dressca.applicationcore.catalog.CatalogItem; import com.dressca.applicationcore.catalog.CatalogNotFoundException; import com.dressca.applicationcore.catalog.CatalogRepository; +import com.dressca.applicationcore.constant.MessageIdConstant; import com.dressca.applicationcore.order.CatalogItemOrdered; import com.dressca.applicationcore.order.EmptyBasketOnCheckoutException; import com.dressca.applicationcore.order.Order; @@ -26,8 +27,7 @@ import com.dressca.applicationcore.order.OrderItemAsset; import com.dressca.applicationcore.order.OrderRepository; import com.dressca.applicationcore.order.ShipTo; -import com.dressca.systemcommon.constant.ExceptionIdConstant; -import com.dressca.systemcommon.constant.MessageIdConstant; +import com.dressca.systemcommon.constant.CommonExceptionIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import com.dressca.systemcommon.exception.SystemException; import lombok.AllArgsConstructor; @@ -61,7 +61,7 @@ public class ShoppingApplicationService { public void addItemToBasket(String buyerId, long catalogItemId, int quantity) throws CatalogNotFoundException { - apLog.debug(messages.getMessage(MessageIdConstant.D_BASKET0001_LOG, + apLog.debug(messages.getMessage(MessageIdConstant.D_SHOPPING_ADD_ITEM_TO_BASKET, new Object[] { buyerId, catalogItemId, quantity }, Locale.getDefault())); Basket basket = getOrCreateBasketForUser(buyerId); @@ -87,7 +87,8 @@ public void addItemToBasket(String buyerId, long catalogItemId, int quantity) public void setQuantities(String buyerId, Map quantities) throws CatalogNotFoundException, CatalogItemInBasketNotFoundException { - apLog.debug(messages.getMessage(MessageIdConstant.D_BASKET0002_LOG, new Object[] { buyerId, quantities }, + apLog.debug(messages.getMessage(MessageIdConstant.D_SHOPPING_SET_BASKET_ITEMS_QUANTITIES, + new Object[] { buyerId, quantities }, Locale.getDefault())); Basket basket = getOrCreateBasketForUser(buyerId); @@ -123,7 +124,8 @@ public void setQuantities(String buyerId, Map quantities) */ public BasketDetail getBasketDetail(String buyerId) { - apLog.debug(messages.getMessage(MessageIdConstant.D_BASKET0003_LOG, new Object[] { buyerId }, Locale.getDefault())); + apLog.debug(messages.getMessage(MessageIdConstant.D_SHOPPING_GET_BASKET_ITEMS, + new Object[] { buyerId }, Locale.getDefault())); Basket basket = getOrCreateBasketForUser(buyerId); List catalogItemIds = basket.getItems().stream() @@ -144,7 +146,8 @@ public BasketDetail getBasketDetail(String buyerId) { public Order checkout(String buyerId, ShipTo shipToAddress) throws EmptyBasketOnCheckoutException { - apLog.debug(messages.getMessage(MessageIdConstant.D_BASKET0004_LOG, new Object[] { buyerId, shipToAddress }, + apLog.debug(messages.getMessage(MessageIdConstant.D_SHOPPING_CHECKOUT, + new Object[] { buyerId, shipToAddress }, Locale.getDefault())); Basket basket = getOrCreateBasketForUser(buyerId); @@ -186,7 +189,7 @@ private Basket createBasket(String buyerId) { private OrderItem mapToOrderItem(BasketItem basketItem, List catalogItems) { CatalogItem catalogItem = catalogItems.stream() .filter(c -> c.getId() == basketItem.getCatalogItemId()).findFirst() - .orElseThrow(() -> new SystemException(null, ExceptionIdConstant.E_SHARE0000, null, null)); + .orElseThrow(() -> new SystemException(null, CommonExceptionIdConstant.E_BUSINESS, null, null)); CatalogItemOrdered itemOrdered = new CatalogItemOrdered(catalogItem.getId(), catalogItem.getName(), catalogItem.getProductCode()); OrderItem orderItem = new OrderItem(itemOrdered, basketItem.getUnitPrice(), basketItem.getQuantity()); diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/assets/AssetNotFoundException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/assets/AssetNotFoundException.java index 58916709a..a406f8fb3 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/assets/AssetNotFoundException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/assets/AssetNotFoundException.java @@ -1,6 +1,6 @@ package com.dressca.applicationcore.assets; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -14,7 +14,7 @@ public class AssetNotFoundException extends LogicException { * @param assetCode 見つからなかった買い物かご Id */ public AssetNotFoundException(String assetCode) { - super(null, ExceptionIdConstant.E_ASSET0001, new String[] { assetCode }, + super(null, ExceptionIdConstant.E_ASSET_NOT_FOUND, new String[] { assetCode }, new String[] { assetCode }); } } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/BasketNotFoundException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/BasketNotFoundException.java index 5412e079a..6444c967d 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/BasketNotFoundException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/BasketNotFoundException.java @@ -1,6 +1,6 @@ package com.dressca.applicationcore.baskets; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -8,7 +8,7 @@ */ public class BasketNotFoundException extends LogicException { public BasketNotFoundException(long basketId) { - super(null, ExceptionIdConstant.E_BASKET0001, new String[] { String.valueOf(basketId) }, + super(null, ExceptionIdConstant.E_BASKET_IS_NULL_ON_CHECKOUT, new String[] { String.valueOf(basketId) }, new String[] { String.valueOf(basketId) }); } } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/CatalogItemInBasketNotFoundException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/CatalogItemInBasketNotFoundException.java index 7cd970d0a..798c299b6 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/CatalogItemInBasketNotFoundException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/baskets/CatalogItemInBasketNotFoundException.java @@ -2,7 +2,7 @@ import java.util.List; import java.util.StringJoiner; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -17,7 +17,7 @@ public class CatalogItemInBasketNotFoundException extends LogicException { * @param basketId 買い物かごID */ public CatalogItemInBasketNotFoundException(List catalogIds, long basketId) { - super(null, ExceptionIdConstant.E_BASKET0002, + super(null, ExceptionIdConstant.E_CATALOG_ITEM_ID_DOES_EXIST_IN_BASKET, new String[] { String.valueOf(basketId), convertCatalogIds(catalogIds) }, new String[] { String.valueOf(basketId), convertCatalogIds(catalogIds) }); } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/catalog/CatalogNotFoundException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/catalog/CatalogNotFoundException.java index 9dc370518..cd9679724 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/catalog/CatalogNotFoundException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/catalog/CatalogNotFoundException.java @@ -1,6 +1,6 @@ package com.dressca.applicationcore.catalog; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -8,11 +8,11 @@ */ public class CatalogNotFoundException extends LogicException { public CatalogNotFoundException(long catalogId) { - super(null, ExceptionIdConstant.E_CATALOG0001, new String[] { String.valueOf(catalogId) }, + super(null, ExceptionIdConstant.E_CATALOG_ID_NOT_FOUND, new String[] { String.valueOf(catalogId) }, new String[] { String.valueOf(catalogId) }); } public CatalogNotFoundException() { - super(null, ExceptionIdConstant.E_CATALOG0001, null, null); + super(null, ExceptionIdConstant.E_CATALOG_ID_NOT_FOUND, null, null); } } \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/ExceptionIdConstant.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/ExceptionIdConstant.java new file mode 100644 index 000000000..05beb283a --- /dev/null +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/ExceptionIdConstant.java @@ -0,0 +1,25 @@ +package com.dressca.applicationcore.constant; + +/** + * 業務例外ID用定数クラス。 + */ +public class ExceptionIdConstant { + + /** 存在しないアセットコード: {0} のアセットが要求されました。 */ + public static final String E_ASSET_NOT_FOUND = "assetNotFound"; + + /** 存在しない買い物かごID: {0} の買い物かごが要求されました。 */ + public static final String E_BASKET_IS_NULL_ON_CHECKOUT = "basketIsNullOnCheckout"; + + /** 買い物かごID: {0} に商品ID: {1} の商品が見つかりませんでした。 */ + public static final String E_CATALOG_ITEM_ID_DOES_EXIST_IN_BASKET = "catalogItemIdDoesNotExistInBasket"; + + /** 注文のチェックアウト時に買い物かごが空でした。 */ + public static final String E_BASKET_IS_EMPTY_ON_CHECKOUT = "basketIsEmptyOnCheckout"; + + /** 存在しない注文情報(注文ID: {0}, 購入者ID: {1})が要求されました。 */ + public static final String E_ORDER_NOT_FOUND = "orderNotFound"; + + /** 商品ID: {0} の商品が見つかりませんでした。 */ + public static final String E_CATALOG_ID_NOT_FOUND = "catalogIdNotFound"; +} diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/MessageIdConstant.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/MessageIdConstant.java new file mode 100644 index 000000000..d3b20bd39 --- /dev/null +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/constant/MessageIdConstant.java @@ -0,0 +1,37 @@ +package com.dressca.applicationcore.constant; + +/** + * 業務メッセージID用定数クラス。 + */ +public class MessageIdConstant { + + /** アセット情報{0}を取得します。 */ + public static final String D_ASSET_GET_ASSET = "assetApplicationServiceGetAsset"; + + /** 買い物かごに商品(顧客ID: {0}, カタログ商品ID: {1}, 数量: {2})を追加します。 */ + public static final String D_SHOPPING_ADD_ITEM_TO_BASKET = "shoppingApplicationServiceAddItemToBasket"; + + /** 買い物かごの商品の数量(顧客ID: {0}, 数量: {1})を設定します。 */ + public static final String D_SHOPPING_SET_BASKET_ITEMS_QUANTITIES = "shoppingApplicationServiceSetBasketItemsQuantities"; + + /** 顧客(顧客ID: {0})の買い物かごと情報とその商品一覧を取得します。 */ + public static final String D_SHOPPING_GET_BASKET_ITEMS = "shoppingApplicationServiceGetBasketItems"; + + /** 注文(顧客ID: {0}, お届け先: {1})を確定します。 */ + public static final String D_SHOPPING_CHECKOUT = "shoppingApplicationServiceCheckout"; + + /** 指定した注文ID: {0}, 購入者ID: {1} の注文情報を取得します。 */ + public static final String D_ORDER_GET_ORDER = "orderApplicationServiceGetOrder"; + + /** 条件(ブランドID: {0}, カテゴリID: {1}, ページ: {2}, ページサイズ: {3})に一致するカタログ情報を取得します。 */ + public static final String D_CATALOG_GET_CATALOG_ITEMS = "catalogApplicationServiceGetCatalogItems"; + + /** 条件(ブランドID: {0}, カテゴリID: {1})に一致するカテゴリの件数を取得します。 */ + public static final String D_CATALOG_COUNT_CATALOG_ITEMS = "catalogApplicationServiceCountCatalogItems"; + + /** フィルタリング用のカタログブランドリストを取得します。 */ + public static final String D_CATALOG_GET_BRANDS = "catalogApplicationServiceGetBrands"; + + /** フィルタリング用のカタログカテゴリリストを取得します。 */ + public static final String D_CATALOG_GET_CATEGORIES = "catalogApplicationServiceGetCategories"; +} diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/EmptyBasketOnCheckoutException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/EmptyBasketOnCheckoutException.java index 8e52c079c..c11c5d8e3 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/EmptyBasketOnCheckoutException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/EmptyBasketOnCheckoutException.java @@ -1,6 +1,6 @@ package com.dressca.applicationcore.order; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -9,7 +9,7 @@ public class EmptyBasketOnCheckoutException extends LogicException { public EmptyBasketOnCheckoutException(Throwable cause) { - super(cause, ExceptionIdConstant.E_ORDER0001, null, null); + super(cause, ExceptionIdConstant.E_BASKET_IS_EMPTY_ON_CHECKOUT, null, null); } } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/OrderNotFoundException.java b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/OrderNotFoundException.java index db1183b7c..54305b5c8 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/OrderNotFoundException.java +++ b/samples/web-csr/dressca-backend/application-core/src/main/java/com/dressca/applicationcore/order/OrderNotFoundException.java @@ -1,6 +1,6 @@ package com.dressca.applicationcore.order; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.applicationcore.constant.ExceptionIdConstant; import com.dressca.systemcommon.exception.LogicException; /** @@ -17,7 +17,7 @@ public class OrderNotFoundException extends LogicException { * @param buyerId 見つからなかった購入者 Id. */ public OrderNotFoundException(Throwable cause, long orderId, String buyerId) { - super(cause, ExceptionIdConstant.E_ORDER0002, new String[] { String.valueOf(orderId), buyerId }, + super(cause, ExceptionIdConstant.E_ORDER_NOT_FOUND, new String[] { String.valueOf(orderId), buyerId }, new String[] { String.valueOf(orderId), buyerId }); } diff --git a/samples/web-csr/dressca-backend/application-core/src/main/resources/application-common.properties b/samples/web-csr/dressca-backend/application-core/src/main/resources/application-common.properties index 8b1378917..bdb28b33e 100644 --- a/samples/web-csr/dressca-backend/application-core/src/main/resources/application-common.properties +++ b/samples/web-csr/dressca-backend/application-core/src/main/resources/application-common.properties @@ -1 +1,3 @@ - +# messages.properties +spring.messages.basename=applicationcore.messages +spring.messages.encoding=UTF-8 \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/application-core/src/main/resources/applicationcore/messages.properties b/samples/web-csr/dressca-backend/application-core/src/main/resources/applicationcore/messages.properties new file mode 100644 index 000000000..ca05edab3 --- /dev/null +++ b/samples/web-csr/dressca-backend/application-core/src/main/resources/applicationcore/messages.properties @@ -0,0 +1,18 @@ +# エラーメッセージ +assetNotFound=存在しないアセットコード: {0} のアセットが要求されました。 +basketIsNullOnCheckout=存在しない買い物かごID: {0} の買い物かごが要求されました。 +catalogItemIdDoesNotExistInBasket=買い物かごID: {0} に商品ID: {1} の商品が見つかりませんでした。 +basketIsEmptyOnCheckout=注文のチェックアウト時に買い物かごが空でした。 +orderNotFound=存在しない注文情報(注文ID: {0}, 購入者ID: {1})が要求されました。 +catalogIdNotFound=商品ID: {0} の商品が見つかりませんでした。 +# 通知用メッセージ +assetApplicationServiceGetAsset=アセット情報{0}を取得します。 +shoppingApplicationServiceAddItemToBasket=買い物かごに商品(顧客ID: {0}, カタログ商品ID: {1}, 数量: {2})を追加します。 +shoppingApplicationServiceSetBasketItemsQuantities=買い物かごの商品の数量(顧客ID: {0}, 数量: {1})を設定します。 +shoppingApplicationServiceGetBasketItems=顧客(顧客ID: {0})の買い物かごと情報とその商品一覧を取得します。 +shoppingApplicationServiceCheckout=注文(顧客ID: {0}, お届け先: {1})を確定します。 +orderApplicationServiceGetOrder=指定した注文ID: {0}, 購入者ID: {1} の注文情報を取得します。 +catalogApplicationServiceGetCatalogItems=条件(ブランドID: {0}, カテゴリID: {1}, ページ: {2}, ページサイズ: {3})に一致するカタログ情報を取得します。 +catalogApplicationServiceCountCatalogItems=条件(ブランドID: {0}, カテゴリID: {1})に一致するカテゴリの件数を取得します。 +catalogApplicationServiceGetBrands=フィルタリング用のカタログブランドリストを取得します。 +catalogApplicationServiceGetCategories=フィルタリング用のカタログカテゴリリストを取得します。 \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/AssetApplicationServiceTest.java b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/AssetApplicationServiceTest.java index 7b263b017..b3c79c770 100644 --- a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/AssetApplicationServiceTest.java +++ b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/AssetApplicationServiceTest.java @@ -18,6 +18,7 @@ import org.springframework.context.MessageSource; import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import com.dressca.applicationcore.assets.Asset; import com.dressca.applicationcore.assets.AssetNotFoundException; @@ -29,6 +30,7 @@ * {@link AssetApplicationService}の動作をテストするクラスです。 */ @ExtendWith(SpringExtension.class) +@TestPropertySource(properties = "spring.messages.basename=applicationcore.messages") @ImportAutoConfiguration(MessageSourceAutoConfiguration.class) public class AssetApplicationServiceTest { diff --git a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/CatalogApplicationServiceTest.java b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/CatalogApplicationServiceTest.java index 7ffe8db4b..048901f4b 100644 --- a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/CatalogApplicationServiceTest.java +++ b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/CatalogApplicationServiceTest.java @@ -17,6 +17,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration; import org.springframework.context.MessageSource; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import com.dressca.applicationcore.catalog.CatalogBrand; import com.dressca.applicationcore.catalog.CatalogBrandRepository; @@ -29,6 +30,7 @@ * {@link CatalogApplicationService}の動作をテストするクラスです。 */ @ExtendWith(SpringExtension.class) +@TestPropertySource(properties = "spring.messages.basename=applicationcore.messages") @ImportAutoConfiguration(MessageSourceAutoConfiguration.class) public class CatalogApplicationServiceTest { @Mock diff --git a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/OrderApplicationServiceTest.java b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/OrderApplicationServiceTest.java index 78ca9cd9c..f6b506d1e 100644 --- a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/OrderApplicationServiceTest.java +++ b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/OrderApplicationServiceTest.java @@ -24,12 +24,14 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration; import org.springframework.context.MessageSource; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; /** * {@link OrderApplicationService}の動作をテストするクラスです。 */ @ExtendWith(SpringExtension.class) +@TestPropertySource(properties = "spring.messages.basename=applicationcore.messages") @ImportAutoConfiguration(MessageSourceAutoConfiguration.class) public class OrderApplicationServiceTest { @Mock diff --git a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationServiceTest.java b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationServiceTest.java index e3e98c1e3..2033abd6b 100644 --- a/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationServiceTest.java +++ b/samples/web-csr/dressca-backend/application-core/src/test/java/com/dressca/applicationcore/applicationservice/ShoppingApplicationServiceTest.java @@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration; import org.springframework.context.MessageSource; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import com.dressca.applicationcore.baskets.Basket; import com.dressca.applicationcore.baskets.BasketNotFoundException; @@ -48,6 +49,7 @@ * {@link ShoppingApplicationService}の動作をテストするクラスです。 */ @ExtendWith(SpringExtension.class) +@TestPropertySource(properties = "spring.messages.basename=applicationcore.messages") @ImportAutoConfiguration(MessageSourceAutoConfiguration.class) public class ShoppingApplicationServiceTest { @Mock diff --git a/samples/web-csr/dressca-backend/batch/build.gradle b/samples/web-csr/dressca-backend/batch/build.gradle index 8d4b8a2f6..08182fb82 100644 --- a/samples/web-csr/dressca-backend/batch/build.gradle +++ b/samples/web-csr/dressca-backend/batch/build.gradle @@ -21,6 +21,7 @@ dependencies { implementation supportDependencies.spring_boot_starter_batch implementation supportDependencies.mybatis_spring_boot_starter implementation supportDependencies.commons_lang3 + implementation supportDependencies.spring_boot_starter_log4j2 implementation project(':application-core') implementation project(':infrastructure') diff --git a/samples/web-csr/dressca-backend/system-common/src/main/resources/log4j2.xml b/samples/web-csr/dressca-backend/batch/src/main/resources/log4j2.xml similarity index 100% rename from samples/web-csr/dressca-backend/system-common/src/main/resources/log4j2.xml rename to samples/web-csr/dressca-backend/batch/src/main/resources/log4j2.xml diff --git a/samples/web-csr/dressca-backend/build.gradle b/samples/web-csr/dressca-backend/build.gradle index 8219c64b5..740529d59 100644 --- a/samples/web-csr/dressca-backend/build.gradle +++ b/samples/web-csr/dressca-backend/build.gradle @@ -6,11 +6,6 @@ */ buildscript { apply from: 'dependencies.gradle' - configurations { - all { - exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' - } - } } plugins { diff --git a/samples/web-csr/dressca-backend/config/checkstyle/suppressions.xml b/samples/web-csr/dressca-backend/config/checkstyle/suppressions.xml index a1a5f6efd..b072ddb60 100644 --- a/samples/web-csr/dressca-backend/config/checkstyle/suppressions.xml +++ b/samples/web-csr/dressca-backend/config/checkstyle/suppressions.xml @@ -9,4 +9,6 @@ + + \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/infrastructure/build.gradle b/samples/web-csr/dressca-backend/infrastructure/build.gradle index e82f74e29..cab6fee6e 100644 --- a/samples/web-csr/dressca-backend/infrastructure/build.gradle +++ b/samples/web-csr/dressca-backend/infrastructure/build.gradle @@ -34,6 +34,13 @@ dependencies { testImplementation supportDependencies.mybatis_spring_boot_starter_test } +configurations { + all { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' + } +} + + tasks.named('test') { useJUnitPlatform() } diff --git a/samples/web-csr/dressca-backend/system-common/build.gradle b/samples/web-csr/dressca-backend/system-common/build.gradle index add2aa8c4..9c5663c3e 100644 --- a/samples/web-csr/dressca-backend/system-common/build.gradle +++ b/samples/web-csr/dressca-backend/system-common/build.gradle @@ -19,7 +19,6 @@ repositories { dependencies { implementation supportDependencies.spring_boot_starter - implementation supportDependencies.spring_boot_starter_log4j2 implementation supportDependencies.commons_lang3 testImplementation supportDependencies.spring_boot_starter_test } diff --git a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/CommonExceptionIdConstant.java b/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/CommonExceptionIdConstant.java new file mode 100644 index 000000000..634970cd6 --- /dev/null +++ b/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/CommonExceptionIdConstant.java @@ -0,0 +1,13 @@ +package com.dressca.systemcommon.constant; + +/** + * 例外ID用定数クラス。 + */ +public class CommonExceptionIdConstant { + /** 想定外のシステムエラー。 */ + public static final String E_SYSTEM = "systemError"; + + /** 想定外の業務エラー。 */ + public static final String E_BUSINESS = "businessError"; + +} diff --git a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/ExceptionIdConstant.java b/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/ExceptionIdConstant.java deleted file mode 100644 index fe69d707d..000000000 --- a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/ExceptionIdConstant.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.dressca.systemcommon.constant; - -/** - * 例外ID用定数クラス。 - */ -public class ExceptionIdConstant { - /** 想定外のエラー。 */ - public static final String E_SHARE0000 = "E_SHARE0000"; - - // 業務例外用 - /** アセットが見つからなかった際の例外。 */ - public static final String E_ASSET0001 = "E_ASSET0001"; - - /** 買い物かごが見つからなかった際の例外。 */ - public static final String E_BASKET0001 = "E_BASKET0001"; - - /** 買い物かご内に想定した注文情報が存在しなかった際の例外。 */ - public static final String E_BASKET0002 = "E_BASKET0002"; - - /** 注文のチェックアウト処理開始時に買い物かごが空だった際の例外。 */ - public static final String E_ORDER0001 = "E_ORDER0001"; - - /** 注文情報が存在しなかった際の例外。 */ - public static final String E_ORDER0002 = "E_ORDER0002"; - - /** カタログ情報が存在しなかった際の例外。 */ - public static final String E_CATALOG0001 = "E_CATALOG0002"; - -} diff --git a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/MessageIdConstant.java b/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/MessageIdConstant.java deleted file mode 100644 index 4d57df26f..000000000 --- a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/constant/MessageIdConstant.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.dressca.systemcommon.constant; - -/** - * メッセージID用定数クラス。 - */ -public class MessageIdConstant { - - // システムエラーメッセージ用 - /** 想定外のエラーが発生しました。 */ - public static final String E_SHARE0000_FRONT = "F_SHARE0000.front"; - public static final String E_SHARE0000_LOG = "F_SHARE0000.log"; - - // 業務エラーメッセージ用 - /** アセットコード: {0} のアセットが見つかりませんでした。 */ - public static final String E_ASSET0001_FRONT = "E_ASSET0001.front"; - public static final String E_ASSET0001_LOG = "E_ASSET0001.log"; - - /** 買い物かごID: {0} の買い物かごが見つかりませんでした。 */ - public static final String E_BASKET0001_FRONT = "E_BASKET0001.front"; - public static final String E_BASKET0001_LOG = "E_BASKET0001.log"; - - /** 注文のチェックアウト時に買い物かごが空でした。 */ - public static final String E_ORDER0001_FRONT = "E_ORDER0001.front"; - public static final String E_ORDER0001_LOG = "E_ORDER0001.log"; - - /** 注文ID: {0}, 購入者ID: {1} に該当する注文情報が見つかりませんでした。 */ - public static final String E_ORDER0002_FRONT = "E_ORDER0002.front"; - public static final String E_ORDER0002_LOG = "E_ORDER0002.log"; - - /** アセット情報{0}を取得します。 */ - public static final String D_ASSET0001_LOG = "D_ASSET0001.log"; - - /** 買い物かごに商品(顧客ID: {0}, カタログ商品ID: {1}, 数量: {2})を追加します。 */ - public static final String D_BASKET0001_LOG = "D_BASKET0001.log"; - - /** 買い物かごの商品の数量(顧客ID: {0}, 数量: {1})を設定します。 */ - public static final String D_BASKET0002_LOG = "D_BASKET0002.log"; - - /** 顧客(顧客ID: {0})の買い物かごと情報とその商品一覧を取得します。 */ - public static final String D_BASKET0003_LOG = "D_BASKET0003.log"; - - /** 注文(顧客ID: {0}, お届け先: {1})を確定します。 */ - public static final String D_BASKET0004_LOG = "D_BASKET0004.log"; - - /** 指定した注文ID: {0}, 購入者ID: {1} の注文情報を取得します。 */ - public static final String D_ORDER0001_LOG = "D_ORDER0001.log"; - - /** 条件(ブランドID: {0}, カテゴリID: {1}, ページ: {2}, ページサイズ: {3})に一致するカタログ情報を取得します。 */ - public static final String D_CATALOG0001_LOG = "D_CATALOG0001.log"; - - /** 条件(ブランドID: {0}, カテゴリID: {1})に一致するカテゴリの件数を取得します。 */ - public static final String D_CATALOG0002_LOG = "D_CATALOG0002.log"; - - /** フィルタリング用のカタログブランドリストを取得します。 */ - public static final String D_CATALOG0003_LOG = "D_CATALOG0003.log"; - - /** フィルタリング用のカタログカテゴリリストを取得します。 */ - public static final String D_CATALOG0004_LOG = "D_CATALOG0004.log"; -} diff --git a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/exception/response/ErrorResponse.java b/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/exception/response/ErrorResponse.java deleted file mode 100644 index de99dcb16..000000000 --- a/samples/web-csr/dressca-backend/system-common/src/main/java/com/dressca/systemcommon/exception/response/ErrorResponse.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.dressca.systemcommon.exception.response; - -import java.util.Locale; -import com.dressca.systemcommon.exception.LogicException; -import com.dressca.systemcommon.exception.SystemException; -import com.dressca.systemcommon.util.ApplicationContextWrapper; -import org.springframework.context.MessageSource; -import lombok.Getter; -import lombok.Setter; - -/** - * エラーレスポンス。 フロントへのレスポンスボディにJSONでマッピングされるエラー情報のクラス - */ -@Getter -@Setter -public class ErrorResponse { - /** - * エラーコード。 - */ - private String type; - - /** エラーコードに対応するコメント。 */ - private String title; - - /** エラーメッセージ。 */ - private String detail; - - /** 項目チェックエラー用。 */ - // private Map> invalidParams; - - /** リクエストURI。 */ - private String instance; - - /** メッセージソース。 */ - private static MessageSource messageSource = (MessageSource) ApplicationContextWrapper.getBean(MessageSource.class); - - private static final String EXCEPTION_MESSAGE_SUFFIX_FRONT = "front"; - private static final String PROPERTY_DELIMITER = "."; - - /** システム例外用コンストラクタ。 */ - public ErrorResponse(SystemException e, String uri) { - this.type = e.getExceptionId(); - this.title = e.getExceptionId(); - this.detail = getFrontErrorMessage(e.getExceptionId(), e.getFrontMessageValue()); - this.instance = uri; - } - - /** 業務例外用コンストラクタ。 */ - public ErrorResponse(LogicException e, String uri) { - this.type = e.getExceptionId(); - this.title = e.getExceptionId(); - this.detail = getFrontErrorMessage(e.getExceptionId(), e.getFrontMessageValue()); - this.instance = uri; - } - - private String getFrontErrorMessage(String exceptionId, String[] frontMessageValue) { - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_FRONT); - return messageSource.getMessage(code, frontMessageValue, Locale.getDefault()); - } -} diff --git a/samples/web-csr/dressca-backend/system-common/src/main/resources/application-common.properties b/samples/web-csr/dressca-backend/system-common/src/main/resources/application-common.properties index 9e0815194..8382ded52 100644 --- a/samples/web-csr/dressca-backend/system-common/src/main/resources/application-common.properties +++ b/samples/web-csr/dressca-backend/system-common/src/main/resources/application-common.properties @@ -1,2 +1,2 @@ -spring.messages.basename=messages +spring.messages.basename=systemcommon.messages spring.messages.encoding=UTF-8 diff --git a/samples/web-csr/dressca-backend/system-common/src/main/resources/messages.properties b/samples/web-csr/dressca-backend/system-common/src/main/resources/messages.properties deleted file mode 100644 index 453a11f01..000000000 --- a/samples/web-csr/dressca-backend/system-common/src/main/resources/messages.properties +++ /dev/null @@ -1,24 +0,0 @@ -E_SHARE0000.front=想定外のエラーが発生しました -E_SHARE0000.log=想定外のエラーが発生しました -E_ASSET0001.front=アセットコード: {0} のアセットが見つかりませんでした。 -E_ASSET0001.log=存在しないアセットコード: {0} のアセットが要求されました。 -E_BASKET0001.front=買い物かごID: {0} の買い物かごが見つかりませんでした。 -E_BASKET0001.log=存在しない買い物かごID: {0} の買い物かごが要求されました。 -E_BASKET0002.front=買い物かごID: {0} に商品ID: {1} の商品が見つかりませんでした。 -E_BASKET0002.log=買い物かごID: {0} に商品ID: {1} の商品が見つかりませんでした。 -E_ORDER0001.front=注文のチェックアウト時に買い物かごが空でした。 -E_ORDER0001.log=注文のチェックアウト時に買い物かごが空でした。 -E_ORDER0002.front=注文ID: {0}, 購入者ID: {1} に該当する注文情報が見つかりませんでした。 -E_ORDER0002.log=存在しない注文情報(注文ID: {0}, 購入者ID: {1})が要求されました。 -E_CATALOG0001.front=商品ID: {0} の商品が見つかりませんでした。 -E_CATALOG0001.log=商品ID: {0} の商品が見つかりませんでした。 -D_ASSET0001.log=アセット情報{0}を取得します。 -D_BASKET0001.log=買い物かごに商品(顧客ID: {0}, カタログ商品ID: {1}, 数量: {2})を追加します。 -D_BASKET0002.log=買い物かごの商品の数量(顧客ID: {0}, 数量: {1})を設定します。 -D_BASKET0003.log=顧客(顧客ID: {0})の買い物かごと情報とその商品一覧を取得します。 -D_BASKET0004.log=注文(顧客ID: {0}, お届け先: {1})を確定します。 -D_ORDER0001.log=指定した注文ID: {0}, 購入者ID: {1} の注文情報を取得します。 -D_CATALOG0001.log=条件(ブランドID: {0}, カテゴリID: {1}, ページ: {2}, ページサイズ: {3})に一致するカタログ情報を取得します。 -D_CATALOG0002.log=条件(ブランドID: {0}, カテゴリID: {1})に一致するカテゴリの件数を取得します。 -D_CATALOG0003.log=フィルタリング用のカタログブランドリストを取得します。 -D_CATALOG0004.log=フィルタリング用のカタログカテゴリリストを取得します。 \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/system-common/src/main/resources/systemcommon/messages.properties b/samples/web-csr/dressca-backend/system-common/src/main/resources/systemcommon/messages.properties new file mode 100644 index 000000000..c9fc1c4bb --- /dev/null +++ b/samples/web-csr/dressca-backend/system-common/src/main/resources/systemcommon/messages.properties @@ -0,0 +1,2 @@ +systemError=想定外のシステムエラーが発生しました +businessError=想定外の業務エラーが発生しました \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/web/build.gradle b/samples/web-csr/dressca-backend/web/build.gradle index b3720d4ac..8963f8cae 100644 --- a/samples/web-csr/dressca-backend/web/build.gradle +++ b/samples/web-csr/dressca-backend/web/build.gradle @@ -25,13 +25,13 @@ dependencies { implementation supportDependencies.springdoc_openapi_starter_webmvc_ui implementation supportDependencies.commons_lang3 implementation supportDependencies.spring_boot_security_starter - + implementation supportDependencies.spring_boot_starter_log4j2 + implementation project(':application-core') implementation project(':infrastructure') implementation project(':system-common') testImplementation supportDependencies.spring_boot_starter_test - testImplementation supportDependencies.spring_boot_starter_log4j2 testImplementation supportDependencies.spring_security_test compileOnly supportDependencies.servlet_api @@ -55,5 +55,12 @@ openApi { tasks.named('test') { useJUnitPlatform() } +tasks.register('bootRunDev', org.springframework.boot.gradle.tasks.run.BootRun){ + group = 'application' + description = 'Runs this project as a Spring Boot Application using local profile.' + args = ["--spring.profiles.active=local"] + main = 'com.dressca.web.WebApplication' + classpath = sourceSets.main.runtimeClasspath +} build.dependsOn("generateOpenApiDocs") \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/constant/ProblemDetailsConstant.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/constant/ProblemDetailsConstant.java index e30d889d1..1f6b53aa7 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/constant/ProblemDetailsConstant.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/constant/ProblemDetailsConstant.java @@ -11,6 +11,9 @@ public class ProblemDetailsConstant { /** システムエラーのタイトル。 */ public static final String SYSTEM_ERROR_TITLE = "システムエラー"; - /** errorキー。 */ - public static final String ERROR_KEY = "error"; + /** Exception ID。 */ + public static final String EXCEPTION_ID = "exceptionId"; + + /** Exception ID に紐づくメッセージ。 */ + public static final String EXCEPTION_VALUES = "exceptionValues"; } diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/AssetsController.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/AssetsController.java index 6dd177d26..5e4abae70 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/AssetsController.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/AssetsController.java @@ -7,12 +7,16 @@ import com.dressca.applicationcore.assets.AssetTypes; import com.dressca.systemcommon.constant.SystemPropertyConstants; import com.dressca.systemcommon.exception.LogicException; +import com.dressca.web.controller.advice.ProblemDetailsCreation; +import com.dressca.web.log.ErrorMessageBuilder; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ProblemDetail; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -39,6 +43,9 @@ public class AssetsController { @Autowired private AssetApplicationService service; + @Autowired + private ProblemDetailsCreation problemDetailsCreation; + private static final Logger apLog = LoggerFactory.getLogger(SystemPropertyConstants.APPLICATION_LOG_LOGGER); /** @@ -52,7 +59,7 @@ public class AssetsController { @ApiResponse(responseCode = "200", description = "成功.", content = @Content(mediaType = "image/*", schema = @Schema(implementation = Resource.class))), @ApiResponse(responseCode = "404", description = "アセットコードに対応するアセットがない.", content = @Content) }) @GetMapping("{assetCode}") - public ResponseEntity get( + public ResponseEntity get( @Parameter(required = true, description = "アセットコード") @PathVariable("assetCode") String assetCode) throws LogicException { try { @@ -63,7 +70,15 @@ public ResponseEntity get( } catch (AssetNotFoundException e) { apLog.info(e.getMessage()); apLog.debug(ExceptionUtils.getStackTrace(e)); - return ResponseEntity.notFound().build(); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, e.getExceptionId(), + e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, + e.getExceptionId(), + HttpStatus.NOT_FOUND); + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } } diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/BasketItemController.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/BasketItemController.java index 2c1dc33fc..d62380f7a 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/BasketItemController.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/BasketItemController.java @@ -7,11 +7,13 @@ import com.dressca.applicationcore.baskets.CatalogItemInBasketNotFoundException; import com.dressca.applicationcore.catalog.CatalogItem; import com.dressca.applicationcore.catalog.CatalogNotFoundException; +import com.dressca.web.controller.advice.ProblemDetailsCreation; import com.dressca.web.controller.dto.baskets.BasketItemResponse; import com.dressca.web.controller.dto.baskets.BasketResponse; import com.dressca.web.controller.dto.baskets.PostBasketItemsRequest; import com.dressca.web.controller.dto.baskets.PutBasketItemsRequest; import com.dressca.web.controller.dto.catalog.CatalogItemSummaryResponse; +import com.dressca.web.log.ErrorMessageBuilder; import com.dressca.web.mapper.BasketMapper; import com.dressca.web.mapper.CatalogItemSummaryMapper; import io.swagger.v3.oas.annotations.Operation; @@ -27,6 +29,9 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.AllArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ProblemDetail; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -49,6 +54,9 @@ public class BasketItemController { @Autowired private ShoppingApplicationService shoppingApplicationService; + @Autowired + private ProblemDetailsCreation problemDetailsCreation; + /** * 買い物かごアイテムの一覧を取得します。 * @@ -102,8 +110,27 @@ public ResponseEntity putBasketItems(@RequestBody List try { shoppingApplicationService.setQuantities(buyerId, quantities); - } catch (CatalogNotFoundException | CatalogItemInBasketNotFoundException e) { - return ResponseEntity.badRequest().build(); + } catch (CatalogNotFoundException e) { + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), + e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, + e.getExceptionId(), + HttpStatus.BAD_REQUEST); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); + } catch (CatalogItemInBasketNotFoundException e) { + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, + e.getExceptionId(), + HttpStatus.BAD_REQUEST); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } return ResponseEntity.noContent().build(); } @@ -142,7 +169,13 @@ public ResponseEntity postBasketItem(@RequestBody PostBasketItemsRequest post postBasketItem.getCatalogItemId(), postBasketItem.getAddedQuantity()); } catch (CatalogNotFoundException e) { - return ResponseEntity.badRequest().build(); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, e.getExceptionId(), HttpStatus.BAD_REQUEST); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } return ResponseEntity.created(URI.create("/basket-items")).build(); } @@ -174,9 +207,21 @@ public ResponseEntity deleteBasketItem(@PathVariable("catalogItemId") long ca try { this.shoppingApplicationService.setQuantities(buyerId, Map.of(catalogItemId, 0)); } catch (CatalogNotFoundException e) { - return ResponseEntity.badRequest().build(); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, e.getExceptionId(), HttpStatus.BAD_REQUEST); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } catch (CatalogItemInBasketNotFoundException e) { - return ResponseEntity.notFound().build(); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, e.getExceptionId(), HttpStatus.NOT_FOUND); + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } return ResponseEntity.noContent().build(); } diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/OrderController.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/OrderController.java index 9822ba95d..987e91c08 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/OrderController.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/OrderController.java @@ -7,11 +7,13 @@ import com.dressca.applicationcore.order.Order; import com.dressca.applicationcore.order.OrderNotFoundException; import com.dressca.applicationcore.order.ShipTo; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.systemcommon.constant.CommonExceptionIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import com.dressca.systemcommon.exception.SystemException; +import com.dressca.web.controller.advice.ProblemDetailsCreation; import com.dressca.web.controller.dto.order.OrderResponse; import com.dressca.web.controller.dto.order.PostOrderRequest; +import com.dressca.web.log.ErrorMessageBuilder; import com.dressca.web.mapper.OrderMapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -27,6 +29,9 @@ import org.slf4j.LoggerFactory; import org.apache.commons.lang3.exception.ExceptionUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ProblemDetail; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -49,6 +54,9 @@ public class OrderController { @Autowired private ShoppingApplicationService shoppingApplicationService; + @Autowired + private ProblemDetailsCreation problemDetailsCreation; + private static final Logger apLog = LoggerFactory.getLogger(SystemPropertyConstants.APPLICATION_LOG_LOGGER); /** @@ -62,7 +70,7 @@ public class OrderController { @ApiResponse(responseCode = "200", description = "成功.", content = @Content(mediaType = "application/json", schema = @Schema(implementation = OrderResponse.class))), @ApiResponse(responseCode = "404", description = "注文IDが存在しない.", content = @Content) }) @GetMapping("{orderId}") - public ResponseEntity getById(@PathVariable("orderId") long orderId, + public ResponseEntity getById(@PathVariable("orderId") long orderId, HttpServletRequest req) { String buyerId = req.getAttribute("buyerId").toString(); @@ -73,7 +81,16 @@ public ResponseEntity getById(@PathVariable("orderId") long order } catch (OrderNotFoundException e) { apLog.info(e.getMessage()); apLog.debug(ExceptionUtils.getStackTrace(e)); - return ResponseEntity.notFound().build(); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, + e.getExceptionId(), + e.getLogMessageValue(), e.getFrontMessageValue()); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail( + errorBuilder, + e.getExceptionId(), + HttpStatus.NOT_FOUND); + return ResponseEntity.status(HttpStatus.NOT_FOUND) + .contentType(MediaType.APPLICATION_JSON) + .body(problemDetail); } } @@ -99,7 +116,7 @@ public ResponseEntity postOrder(@RequestBody @Valid PostOrderRequest postOrde order = shoppingApplicationService.checkout(buyerId, shipToAddress); } catch (EmptyBasketOnCheckoutException e) { // ここでは発生しえないので、システムエラーとする - throw new SystemException(e, ExceptionIdConstant.E_SHARE0000, null, null); + throw new SystemException(e, CommonExceptionIdConstant.E_SYSTEM, null, null); } String requestUri = req.getRequestURL().toString(); diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdvice.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdvice.java index 27b12130e..932bbe879 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdvice.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdvice.java @@ -1,15 +1,15 @@ package com.dressca.web.controller.advice; import jakarta.servlet.http.HttpServletRequest; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.systemcommon.constant.CommonExceptionIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; import com.dressca.systemcommon.exception.LogicException; import com.dressca.systemcommon.exception.SystemException; import com.dressca.web.constant.ProblemDetailsConstant; import com.dressca.web.log.ErrorMessageBuilder; -import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ProblemDetail; @@ -17,19 +17,20 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import org.springframework.context.annotation.Profile; /** - * サーバーエラーのハンドリングを行うクラスです(本番環境用)。 + * サーバーエラーのハンドリングを行うクラスです。 */ -@ControllerAdvice -@Profile("production | test") +@ControllerAdvice(basePackages = "com.dressca") public class ExceptionHandlerControllerAdvice extends ResponseEntityExceptionHandler { private static final Logger apLog = LoggerFactory.getLogger(SystemPropertyConstants.APPLICATION_LOG_LOGGER); + @Autowired + private ProblemDetailsCreation problemDetailsCreation; + /** - * その他の業務エラーをステータースコード500で返却する(本番環境、テスト環境用)。 + * その他の業務エラーをステータースコード500で返却する。 * * @param e 業務例外 * @param req リクエスト @@ -37,35 +38,37 @@ public class ExceptionHandlerControllerAdvice extends ResponseEntityExceptionHan */ @ExceptionHandler(LogicException.class) public ResponseEntity handleLogicException(LogicException e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, e.getExceptionId(), e.getLogMessageValue(), - e.getFrontMessageValue()); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, CommonExceptionIdConstant.E_BUSINESS, null, null); apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.LOGIC_ERROR_TITLE); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail(errorBuilder, + ProblemDetailsConstant.LOGIC_ERROR_TITLE, + HttpStatus.INTERNAL_SERVER_ERROR); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .contentType(MediaType.APPLICATION_JSON) .body(problemDetail); } /** - * その他のシステムエラーをステータースコード500で返却する(本番環境、テスト環境用)。 + * その他のシステムエラーをステータースコード500で返却する。 * * @param e その他の例外 * @param req リクエスト * @return ステータースコード500のレスポンス */ @ExceptionHandler(SystemException.class) - public ResponseEntity handleException(SystemException e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, e.getExceptionId(), e.getLogMessageValue(), - e.getFrontMessageValue()); + public ResponseEntity handleSystemException(SystemException e, HttpServletRequest req) { + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, CommonExceptionIdConstant.E_SYSTEM, null, null); apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.SYSTEM_ERROR_TITLE); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail(errorBuilder, + ProblemDetailsConstant.SYSTEM_ERROR_TITLE, + HttpStatus.INTERNAL_SERVER_ERROR); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .contentType(MediaType.APPLICATION_JSON) .body(problemDetail); } /** - * 上記のいずれにも当てはまらない例外をステータースコード500で返却する(本番環境、テスト環境用)。 + * 上記のいずれにも当てはまらない例外をステータースコード500で返却する。 * * @param e その他の例外 * @param req リクエスト @@ -73,19 +76,13 @@ public ResponseEntity handleException(SystemException e, HttpServ */ @ExceptionHandler(Exception.class) public ResponseEntity handleException(Exception e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, ExceptionIdConstant.E_SHARE0000, null, null); + ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, CommonExceptionIdConstant.E_SYSTEM, null, null); apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.SYSTEM_ERROR_TITLE); + ProblemDetail problemDetail = problemDetailsCreation.createProblemDetail(errorBuilder, + ProblemDetailsConstant.SYSTEM_ERROR_TITLE, + HttpStatus.INTERNAL_SERVER_ERROR); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .contentType(MediaType.APPLICATION_JSON) .body(problemDetail); } - - private ProblemDetail createProblemDetail(ErrorMessageBuilder errorBuilder, String title) { - Map errorProperty = Map.of(errorBuilder.getExceptionId(), errorBuilder.createFrontErrorMessage()); - ProblemDetail problemDetail = ProblemDetail.forStatus(HttpStatus.INTERNAL_SERVER_ERROR); - problemDetail.setTitle(title); - problemDetail.setProperty(ProblemDetailsConstant.ERROR_KEY, errorProperty); - return problemDetail; - } } diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdvice.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdvice.java deleted file mode 100644 index 4b65b4431..000000000 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdvice.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.dressca.web.controller.advice; - -import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.annotation.Profile; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ProblemDetail; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; -import com.dressca.systemcommon.constant.ExceptionIdConstant; -import com.dressca.systemcommon.constant.SystemPropertyConstants; -import com.dressca.systemcommon.exception.LogicException; -import com.dressca.systemcommon.exception.SystemException; -import com.dressca.web.constant.ProblemDetailsConstant; -import com.dressca.web.log.ErrorMessageBuilder; -import jakarta.servlet.http.HttpServletRequest; - -/** - * サーバーエラーのハンドリングを行うクラスです(開発環境用)。 - */ -@ControllerAdvice -@Profile("local") -public class LocalExceptionHandlerControllerAdvice extends ResponseEntityExceptionHandler { - - private static final Logger apLog = LoggerFactory.getLogger(SystemPropertyConstants.APPLICATION_LOG_LOGGER); - - /** - * その他の業務エラーをステータースコード500で返却する(開発環境用)。 - * - * @param e 業務例外 - * @param req リクエスト - * @return ステータースコード500のレスポンス - */ - @ExceptionHandler(LogicException.class) - public ResponseEntity localHandleLogicException(LogicException e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, e.getExceptionId(), e.getLogMessageValue(), - e.getFrontMessageValue()); - apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.LOGIC_ERROR_TITLE); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .contentType(MediaType.APPLICATION_JSON) - .body(problemDetail); - } - - /** - * その他のシステムエラーをステータースコード500で返却する(開発環境用)。 - * - * @param e その他の例外 - * @param req リクエスト - * @return ステータースコード500のレスポンス - */ - @ExceptionHandler(SystemException.class) - public ResponseEntity localHandleException(SystemException e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, e.getExceptionId(), e.getLogMessageValue(), - e.getFrontMessageValue()); - apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.SYSTEM_ERROR_TITLE); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .contentType(MediaType.APPLICATION_JSON) - .body(problemDetail); - } - - /** - * 上記のいずれにも当てはまらない例外をステータースコード500で返却する(開発環境用)。 - * - * @param e その他の例外 - * @param req リクエスト - * @return ステータースコード500のレスポンス - */ - @ExceptionHandler(Exception.class) - public ResponseEntity localHandleException(Exception e, HttpServletRequest req) { - ErrorMessageBuilder errorBuilder = new ErrorMessageBuilder(e, ExceptionIdConstant.E_SHARE0000, null, null); - apLog.error(errorBuilder.createLogMessageStackTrace()); - ProblemDetail problemDetail = createProblemDetail(errorBuilder, ProblemDetailsConstant.SYSTEM_ERROR_TITLE); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .contentType(MediaType.APPLICATION_JSON) - .body(problemDetail); - } - - private ProblemDetail createProblemDetail(ErrorMessageBuilder errorBuilder, String title) { - Map errorProperty = Map.of(errorBuilder.getExceptionId(), errorBuilder.createFrontErrorMessage()); - ProblemDetail problemDetail = ProblemDetail.forStatusAndDetail(HttpStatus.INTERNAL_SERVER_ERROR, - errorBuilder.createLogMessageStackTrace()); - problemDetail.setTitle(title); - problemDetail.setProperty(ProblemDetailsConstant.ERROR_KEY, errorProperty); - return problemDetail; - } -} diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ProblemDetailsCreation.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ProblemDetailsCreation.java new file mode 100644 index 000000000..98c5a3f4d --- /dev/null +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/controller/advice/ProblemDetailsCreation.java @@ -0,0 +1,60 @@ +package com.dressca.web.controller.advice; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Objects; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; +import org.springframework.http.ProblemDetail; +import org.springframework.stereotype.Component; +import com.dressca.web.constant.ProblemDetailsConstant; +import com.dressca.web.log.ErrorMessageBuilder; + +/** + * エラーレスポンスに含める ProblemDetails を作成するクラスです。 + */ +@Component +public class ProblemDetailsCreation { + + @Autowired + private Environment env; + + /** + * その他のシステムエラーをステータースコード500で返却する。 + * + * @param errorBuilder 例外ビルダー + * @param title タイトル + * @param status ステータスコード + * @return エラーレスポンスに格納する ProblemDetails + */ + public ProblemDetail createProblemDetail(ErrorMessageBuilder errorBuilder, String title, HttpStatus status) { + + ProblemDetail problemDetail = ProblemDetail.forStatus(status); + + problemDetail.setTitle(title); + + String[] activeProfiles = env.getActiveProfiles(); + if (activeProfiles.length == 0) { + activeProfiles = env.getDefaultProfiles(); + } + + // local 環境においては detail を含める + if (Arrays.stream(activeProfiles).filter(profile -> Objects.equals(profile, "local")) + .findFirst().isPresent()) { + problemDetail.setDetail(errorBuilder.createLogMessageStackTrace()); + } + + Map errorProperty = new LinkedHashMap() { + { + put(ProblemDetailsConstant.EXCEPTION_ID, errorBuilder.getExceptionId()); + put(ProblemDetailsConstant.EXCEPTION_VALUES, errorBuilder.getFrontMessageValue()); + } + }; + + problemDetail.setProperties(errorProperty); + + return problemDetail; + } +} diff --git a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/log/ErrorMessageBuilder.java b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/log/ErrorMessageBuilder.java index 2b4cd563b..03d8849f0 100644 --- a/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/log/ErrorMessageBuilder.java +++ b/samples/web-csr/dressca-backend/web/src/main/java/com/dressca/web/log/ErrorMessageBuilder.java @@ -10,15 +10,12 @@ import lombok.Getter; /** - * ログやレスポンスでエラーメッセージを作成するためのクラスです。 + * ログでエラーメッセージを作成するためのクラスです。 */ @Getter @AllArgsConstructor public class ErrorMessageBuilder { - private static final String EXCEPTION_MESSAGE_SUFFIX_LOG = "log"; - private static final String EXCEPTION_MESSAGE_SUFFIX_FRONT = "front"; - private static final String PROPERTY_DELIMITER = "."; private static final MessageSource messageSource = (MessageSource) ApplicationContextWrapper .getBean(MessageSource.class); @@ -34,22 +31,11 @@ public class ErrorMessageBuilder { */ public String createLogMessageStackTrace() { StringBuilder builder = new StringBuilder(); - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_LOG); - String exceptionMessage = messageSource.getMessage(code, logMessageValue, Locale.getDefault()); + String exceptionMessage = messageSource.getMessage(exceptionId, logMessageValue, Locale.getDefault()); builder.append(exceptionId).append(" ").append(exceptionMessage).append(SystemPropertyConstants.LINE_SEPARATOR); StringWriter writer = new StringWriter(); ex.printStackTrace(new PrintWriter(writer)); builder.append(writer.getBuffer().toString()); return builder.toString(); } - - /** - * ProblemDetailsのerror情報に格納するメッセージを作成します。 - * - * @return エラーメッセージ - */ - public String createFrontErrorMessage() { - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_FRONT); - return messageSource.getMessage(code, frontMessageValue, Locale.getDefault()); - } } diff --git a/samples/web-csr/dressca-backend/web/src/main/resources/application-common.properties b/samples/web-csr/dressca-backend/web/src/main/resources/application-common.properties index bab1946c6..4b7014a41 100644 --- a/samples/web-csr/dressca-backend/web/src/main/resources/application-common.properties +++ b/samples/web-csr/dressca-backend/web/src/main/resources/application-common.properties @@ -3,6 +3,10 @@ springdoc.api-docs.path=/api-docs springdoc.swagger-ui.path=/swagger-ui.html springdoc.show-actuator=true +# messages.properties +spring.messages.basename=applicationcore.messages,systemcommon.messages +spring.messages.encoding=UTF-8 + # spring boot actuatorの設定(ステータスの変更,表示情報) # ヘルスチェックAPIのURLを/apiから始まるように変更する management.endpoints.web.base-path=/api diff --git a/samples/web-csr/dressca-backend/web/src/main/resources/application.properties b/samples/web-csr/dressca-backend/web/src/main/resources/application.properties index 41fa11b1e..7c8672e4a 100644 --- a/samples/web-csr/dressca-backend/web/src/main/resources/application.properties +++ b/samples/web-csr/dressca-backend/web/src/main/resources/application.properties @@ -3,7 +3,7 @@ spring.profiles.group.local=common,dev spring.profiles.group.production=common,prd spring.profiles.group.test=common,ut # 環境情報未指定の場合に使用するプロファイル(環境情報を指定する場合、起動コマンドに「-Dspring.profiles.active=<プロファイル名>'」を追加する) -spring.profiles.default=local +spring.profiles.default=production # Open API 仕様書を自動生成する際keyをアルファベット順でソートする springdoc.writer-with-order-by-keys=true \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/web/src/main/resources/log4j2.xml b/samples/web-csr/dressca-backend/web/src/main/resources/log4j2.xml new file mode 100644 index 000000000..3de3d7921 --- /dev/null +++ b/samples/web-csr/dressca-backend/web/src/main/resources/log4j2.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdviceTest.java b/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdviceTest.java index 4105385ca..3cb67f3e0 100644 --- a/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdviceTest.java +++ b/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/ExceptionHandlerControllerAdviceTest.java @@ -9,8 +9,9 @@ import static org.mockito.Mockito.times; import com.dressca.web.controller.AssetsController; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.systemcommon.constant.CommonExceptionIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; +import com.dressca.systemcommon.exception.LogicException; import com.dressca.systemcommon.exception.SystemException; import com.dressca.systemcommon.util.ApplicationContextWrapper; import com.dressca.applicationcore.assets.AssetNotFoundException; @@ -49,9 +50,6 @@ @ActiveProfiles("production") public class ExceptionHandlerControllerAdviceTest { - private static final String EXCEPTION_MESSAGE_SUFFIX_LOG = "log"; - private static final String EXCEPTION_MESSAGE_SUFFIX_FRONT = "front"; - private static final String PROPERTY_DELIMITER = "."; private static final String MOCK_APPENDER_NAME = "MockAppender"; @Autowired @@ -103,18 +101,19 @@ void testException_01() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_ASSET0001; - String[] frontMessageValue = { assetCode }; - String[] logMessageValue = { assetCode }; + String exceptionId = CommonExceptionIdConstant.E_BUSINESS; + String[] frontMessageValue = null; + String[] logMessageValue = null; // モックの戻り値設定 Mockito.when(assetsController.get(anyString())) - .thenThrow(new AssetNotFoundException(assetCode)); + .thenThrow(new LogicException(new AssetNotFoundException(assetCode), exceptionId, + frontMessageValue, logMessageValue)); // APIの呼び出しとエラー時のレスポンスであることの確認 this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.LOGIC_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").doesNotExist()); // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); @@ -129,19 +128,20 @@ void testException_02() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_SHARE0000; + String exceptionId = CommonExceptionIdConstant.E_SYSTEM; String[] frontMessageValue = null; String[] logMessageValue = null; // モックの戻り値設定 Mockito.when(assetsController.get(anyString())) - .thenThrow(new SystemException(new AssetNotFoundException(assetCode), exceptionId, frontMessageValue, + .thenThrow(new SystemException(new AssetNotFoundException(assetCode), + exceptionId, frontMessageValue, logMessageValue)); // APIの呼び出しとエラー時のレスポンスであることの確認 this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.SYSTEM_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").doesNotExist()); // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); @@ -156,7 +156,7 @@ void testException_03() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_SHARE0000; + String exceptionId = CommonExceptionIdConstant.E_SYSTEM; String[] frontMessageValue = null; String[] logMessageValue = null; // モックの戻り値設定 @@ -166,8 +166,8 @@ void testException_03() throws Exception { this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.SYSTEM_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").doesNotExist()); // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); @@ -179,15 +179,7 @@ void testException_03() throws Exception { // エラー時のアプリケーションログ出力メッセージの先頭行を返す(2行目以降はエラーのスタックトレースのため可変) private String createLogMessage(String exceptionId, String[] logMessageValue) { MessageSource messageSource = (MessageSource) ApplicationContextWrapper.getBean(MessageSource.class); - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_LOG); - String exceptionMessage = messageSource.getMessage(code, logMessageValue, Locale.getDefault()); + String exceptionMessage = messageSource.getMessage(exceptionId, logMessageValue, Locale.getDefault()); return exceptionId + " " + exceptionMessage + SystemPropertyConstants.LINE_SEPARATOR; } - - // エラー時のフロントに出力するメッセージを返す - private String createFrontErrorMessage(String exceptionId, String[] frontMessageValue) { - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_FRONT); - MessageSource messageSource = (MessageSource) ApplicationContextWrapper.getBean(MessageSource.class); - return messageSource.getMessage(code, frontMessageValue, Locale.getDefault()); - } } diff --git a/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdviceTest.java b/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdviceTest.java index 2a181d39d..feab9e3fb 100644 --- a/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdviceTest.java +++ b/samples/web-csr/dressca-backend/web/src/test/java/com/dressca/web/controller/advice/LocalExceptionHandlerControllerAdviceTest.java @@ -9,8 +9,9 @@ import static org.mockito.Mockito.times; import com.dressca.web.controller.AssetsController; -import com.dressca.systemcommon.constant.ExceptionIdConstant; +import com.dressca.systemcommon.constant.CommonExceptionIdConstant; import com.dressca.systemcommon.constant.SystemPropertyConstants; +import com.dressca.systemcommon.exception.LogicException; import com.dressca.systemcommon.exception.SystemException; import com.dressca.systemcommon.util.ApplicationContextWrapper; import com.dressca.applicationcore.assets.AssetNotFoundException; @@ -49,9 +50,6 @@ @ActiveProfiles("local") public class LocalExceptionHandlerControllerAdviceTest { - private static final String EXCEPTION_MESSAGE_SUFFIX_LOG = "log"; - private static final String EXCEPTION_MESSAGE_SUFFIX_FRONT = "front"; - private static final String PROPERTY_DELIMITER = "."; private static final String MOCK_APPENDER_NAME = "MockAppender"; @Autowired @@ -103,19 +101,21 @@ void testException_01() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_ASSET0001; - String[] frontMessageValue = { assetCode }; - String[] logMessageValue = { assetCode }; + String exceptionId = CommonExceptionIdConstant.E_BUSINESS; + String[] frontMessageValue = null; + String[] logMessageValue = null; // モックの戻り値設定 Mockito.when(assetsController.get(anyString())) - .thenThrow(new AssetNotFoundException(assetCode)); + .thenThrow(new LogicException(new AssetNotFoundException(assetCode), exceptionId, + frontMessageValue, logMessageValue)); // APIの呼び出しとエラー時のレスポンスであることの確認 this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.LOGIC_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").exists()); + // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); assertThat(logCaptor.getValue().getLevel()).isEqualTo(Level.ERROR); assertThat(logCaptor.getValue().getMessage().getFormattedMessage()) @@ -128,19 +128,19 @@ void testException_02() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_SHARE0000; + String exceptionId = CommonExceptionIdConstant.E_SYSTEM; String[] frontMessageValue = null; String[] logMessageValue = null; // モックの戻り値設定 Mockito.when(assetsController.get(anyString())) - .thenThrow(new SystemException(new AssetNotFoundException(assetCode), exceptionId, frontMessageValue, + .thenThrow(new SystemException(null, exceptionId, frontMessageValue, logMessageValue)); // APIの呼び出しとエラー時のレスポンスであることの確認 this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.SYSTEM_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").exists()); // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); @@ -155,7 +155,7 @@ void testException_03() throws Exception { // テスト用の入力データ String assetCode = "b52dc7f712d94ca5812dd995bf926c04"; // 期待値の設定 - String exceptionId = ExceptionIdConstant.E_SHARE0000; + String exceptionId = CommonExceptionIdConstant.E_SYSTEM; String[] frontMessageValue = null; String[] logMessageValue = null; // モックの戻り値設定 @@ -165,8 +165,8 @@ void testException_03() throws Exception { this.mockMvc.perform(get("/api/assets/" + assetCode)) .andExpect(status().isInternalServerError()) .andExpect(content().json("{\"title\":\"" + ProblemDetailsConstant.SYSTEM_ERROR_TITLE + "\"}")) - .andExpect(jsonPath("$.error." + exceptionId) - .value(createFrontErrorMessage(exceptionId, frontMessageValue))) + .andExpect(jsonPath("$.exceptionId").value(exceptionId)) + .andExpect(jsonPath("$.exceptionValues").value(frontMessageValue)) .andExpect(jsonPath("$.detail").exists()); // アプリケーションログのメッセージの確認 Mockito.verify(mockAppender, times(1)).append(logCaptor.capture()); @@ -178,15 +178,7 @@ void testException_03() throws Exception { // エラー時のアプリケーションログ出力メッセージの先頭行を返す(2行目以降はエラーのスタックトレースのため可変) private String createLogMessage(String exceptionId, String[] logMessageValue) { MessageSource messageSource = (MessageSource) ApplicationContextWrapper.getBean(MessageSource.class); - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_LOG); - String exceptionMessage = messageSource.getMessage(code, logMessageValue, Locale.getDefault()); + String exceptionMessage = messageSource.getMessage(exceptionId, logMessageValue, Locale.getDefault()); return exceptionId + " " + exceptionMessage + SystemPropertyConstants.LINE_SEPARATOR; } - - // エラー時のフロントに出力するメッセージを返す - private String createFrontErrorMessage(String exceptionId, String[] frontMessageValue) { - String code = String.join(PROPERTY_DELIMITER, exceptionId, EXCEPTION_MESSAGE_SUFFIX_FRONT); - MessageSource messageSource = (MessageSource) ApplicationContextWrapper.getBean(MessageSource.class); - return messageSource.getMessage(code, frontMessageValue, Locale.getDefault()); - } } diff --git a/samples/web-csr/dressca-frontend/consumer/package.json b/samples/web-csr/dressca-frontend/consumer/package.json index f3922bf61..08158ddd1 100644 --- a/samples/web-csr/dressca-frontend/consumer/package.json +++ b/samples/web-csr/dressca-frontend/consumer/package.json @@ -26,6 +26,7 @@ "pinia": "^2.2.5", "vee-validate": "^4.14.4", "vue": "^3.5.12", + "vue-i18n": "^10.0.4", "vue-router": "^4.4.5", "yup": "^1.4.0" }, diff --git a/samples/web-csr/dressca-frontend/consumer/src/App.vue b/samples/web-csr/dressca-frontend/consumer/src/App.vue index bdb7cfa24..c98915cab 100644 --- a/samples/web-csr/dressca-frontend/consumer/src/App.vue +++ b/samples/web-csr/dressca-frontend/consumer/src/App.vue @@ -21,7 +21,7 @@ const isAuthenticated = () => { >
    - Dressca + Dressca
    diff --git a/samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts b/samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts index 1a180ddac..d588a7a87 100644 --- a/samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts +++ b/samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts @@ -26,15 +26,13 @@ axiosInstance.interceptors.response.use( (error) => { if (axios.isAxiosError(error)) { if (!error.response) { - return Promise.reject(new NetworkError('Network Error', error)); + return Promise.reject(new NetworkError(error.message, error)); } if (error.response.status === 500) { - return Promise.reject(new ServerError('Server Error', error)); + return Promise.reject(new ServerError(error.message, error)); } if (error.response.status === 401) { - return Promise.reject( - new UnauthorizedError('Unauthorized Error', error), - ); + return Promise.reject(new UnauthorizedError(error.message, error)); } return Promise.reject(new HttpError(error.message, error)); diff --git a/samples/web-csr/dressca-frontend/consumer/src/components/basket/BasketItem.vue b/samples/web-csr/dressca-frontend/consumer/src/components/basket/BasketItem.vue index b5304b702..61af33c1f 100644 --- a/samples/web-csr/dressca-frontend/consumer/src/components/basket/BasketItem.vue +++ b/samples/web-csr/dressca-frontend/consumer/src/components/basket/BasketItem.vue @@ -93,7 +93,8 @@ const remove = () => {
    - 小計: {{ toCurrencyJPY(item.subTotal) }} + 小計: + {{ toCurrencyJPY(item.subTotal) }}
    diff --git a/samples/web-csr/dressca-frontend/consumer/src/components/common/NotificationToast.vue b/samples/web-csr/dressca-frontend/consumer/src/components/common/NotificationToast.vue index 0e54845fa..7d2d07e70 100644 --- a/samples/web-csr/dressca-frontend/consumer/src/components/common/NotificationToast.vue +++ b/samples/web-csr/dressca-frontend/consumer/src/components/common/NotificationToast.vue @@ -1,8 +1,11 @@ + diff --git a/samples/web-csr/dressca-frontend/consumer/src/views/ordering/CheckoutView.vue b/samples/web-csr/dressca-frontend/consumer/src/views/ordering/CheckoutView.vue index 48575743a..7bf658ca3 100644 --- a/samples/web-csr/dressca-frontend/consumer/src/views/ordering/CheckoutView.vue +++ b/samples/web-csr/dressca-frontend/consumer/src/views/ordering/CheckoutView.vue @@ -5,12 +5,14 @@ import { useUserStore } from '@/stores/user/user'; import { postOrder } from '@/services/ordering/ordering-service'; import { fetchBasket } from '@/services/basket/basket-service'; import { showToast } from '@/services/notification/notificationService'; - import { useRouter } from 'vue-router'; import { currencyHelper } from '@/shared/helpers/currencyHelper'; import { assetHelper } from '@/shared/helpers/assetHelper'; import { storeToRefs } from 'pinia'; import { useCustomErrorHandler } from '@/shared/error-handler/use-custom-error-handler'; +import { i18n } from '@/locales/i18n'; +import { errorMessageFormat } from '@/shared/error-handler/error-message-format'; +import { HttpError } from '@/shared/error-handler/custom-error'; const userStore = useUserStore(); const basketStore = useBasketStore(); @@ -21,6 +23,7 @@ const router = useRouter(); const customErrorHandler = useCustomErrorHandler(); const { toCurrencyJPY } = currencyHelper(); const { getFirstAssetUrl } = assetHelper(); +const { t } = i18n.global; const checkout = async () => { try { @@ -33,13 +36,32 @@ const checkout = async () => { ); router.push({ name: 'ordering/done', params: { orderId } }); } catch (error) { - customErrorHandler.handle(error, () => { - showToast('注文に失敗しました。'); - router.push({ name: 'error' }); - }); + customErrorHandler.handle( + error, + () => { + router.push({ name: 'error' }); + }, + (httpError: HttpError) => { + if (!httpError.response) { + showToast(t('failedToOrderItems')); + } else { + const message = errorMessageFormat( + httpError.response.exceptionId, + httpError.response.exceptionValues, + ); + showToast( + message, + httpError.response.exceptionId, + httpError.response.title, + httpError.response.detail, + httpError.response.status, + 100000, + ); + } + }, + ); } }; - onMounted(async () => { await fetchBasket(); if (getBasket.value.basketItems?.length === 0) { @@ -51,7 +73,7 @@ onMounted(async () => {
  • fGHIhyH` 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 Zx%@)pU2c)R2Fu`|q269%o~~`^e*s*_kf;Cv literal 0 HcmV?d00001 diff --git a/documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-light.png b/documents/contents/images/app-architecture/client-side-rendering/error-message-delivery-light.png new file mode 100644 index 0000000000000000000000000000000000000000..bf882d98cc3e963a8e64d4dfa622db6da400608e GIT binary patch literal 239984 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�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%0DYu0gTlX<_5} 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