Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(Dressca)Open API 仕様書の更新に追従する #1721

Conversation

KentaHizume
Copy link
Contributor

@KentaHizume KentaHizume commented Dec 18, 2024

この Pull request で実施したこと

  • Consumer、Adminについてopenapi-generatorの自動生成コードを更新し、フロントエンドへの影響箇所を修正しました。

Consumer

Admin

  • 下記の変更に伴う OpenAPI 仕様書の更新に追従しました。
    • アイテム削除処理において楽観同時実行制御を行う
      • rowVersion をクエリパラメータで引き渡すように修正しました。
      • 削除処理の実行時に、レスポンスコード 409 を示すカスタムエラー ConflictError をcatchしてハンドリングするように修正しました。
    • ユーザーのロールを複数返却する
      • 参照する型名および、セッションストレージに保持するキー名を修正しました。画面表示については特にこだわらず配列をそのまま表示する仕様としています。
    • Dtoの命名を命名規則に従って修正
      • 参照する型名を修正しました。

この Pull request では実施していないこと

なし

Issues や Discussions 、関連する Web サイトなどへのリンク

上述の通りです。

@KentaHizume KentaHizume linked an issue Dec 18, 2024 that may be closed by this pull request
2 tasks
@KentaHizume KentaHizume changed the title Develop/admin/open api定義書更新に伴うフロントエンドのコード最新化 (Admin)Open API 仕様書の更新に追従する Dec 18, 2024
@KentaHizume KentaHizume self-assigned this Dec 18, 2024
@KentaHizume KentaHizume added the target: Dressca サンプルアプリケーションDresscaに関係がある label Dec 18, 2024
@KentaHizume KentaHizume added this to the v1.0.0 milestone Dec 18, 2024
@KentaHizume KentaHizume changed the title (Admin)Open API 仕様書の更新に追従する (Dressca)Open API 仕様書の更新に追従する Dec 18, 2024
@1nu1taichi
Copy link
Contributor

@KentaHizume @tsuna-can-se
PagedListOfGetCatalogItemResponse について、こちら の会話からは<HTTPメソッド><モデル名><In/Out>にする方針とあり、GetPagedListOfCatalogItemResponse にするのが適切ではないかと思いました。

@KentaHizume
Copy link
Contributor Author

@tsuna-can-se @1nu1taichi
ご指摘の通り対応する場合、 Marisの場合は下記のようになるのですが、
Dto.CatalogItems 配下に GetCatalogItemResponseCatalogItemResponse が2つできると見通しが悪くなる懸念があります。
ただ、GetPagedList<GetCatalogItemResponse>はGetが入れ子になって気持ち悪いですかね…?

(例)
GetPagedListOfCatalogItemResponse にする場合、

  • GetPagedList にリネーム(その場合は SystemCommon から Web などに移動?)
  • Dto.CatalogItems 配下に GetCatalogItemResponse に加えて CatalogItemResponse を追加
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(PagedList<GetCatalogItemResponse>))]

@tsuna-can-se
Copy link
Contributor

@KentaHizume
Dtoのクラスはリクエスト・レスポンスに対してひとつずつ作る想定です。
そのクラスのメンバーにPagedListのオブジェクトがいたり、CatalogItemのオブジェクトがあったりするイメージです。

例えばCatalogItemControllerの処理で扱うリソースであるCatalogItemはDtoの中に置いてOKです。
GetXxxResponseやPutXxxRequestの中で、CatalogItemを共有すればよいだけです(共有できるなら)。
一番外側のDto(XxxRequest、XxxResponse)をリクエスト・レスポンスに応じてひとつずつ作ります。
中に複数のオブジェクトが含まれるのは全く問題ないです。

@KentaHizume
Copy link
Contributor Author

@tsuna-can-se
念のため確認させていただきたく、
下記のようになるイメージで合っておりますでしょうか。

  • Dto クラス
public class GetCatalogItemsResponse
{
    public required PagedList<CatalogItem> PagedListOfCatalogItem { get; set; }
}
  • Controllerのアクションメソッドへの属性指定
[ProducesResponseType(StatusCodes.Status200OK, Type = typeof(GetCatalogItemsResponse))]

@tsuna-can-se
Copy link
Contributor

@KentaHizume
あってます!
もちろん状況によってCatalogItem(Dto)を共有できないこともあると思いますが、その時はばらして作って構いません。

@KentaHizume
Copy link
Contributor Author

@tsuna-can-se
ありがとうございます、
ただいま修正した場合どのようになるかを確認しております。
こちらに際して1点伺いたく、
命名をCatalogItemにしたところ、両方を参照する可能性のある箇所ではApplicationCoreのものかDtoのものかを区別するために下記のように若干冗長な形の実装になってしまうのですが、別の命名にしたほうがよさそうでしょうか。
(案)

  • CatalogItemApiModel
  • CatalogItemModel
  • CatalogItemDto
public class CatalogItemMapper : IObjectMapper<ApplicationCore.Catalog.CatalogItem, GetCatalogItemResponse>

@KentaHizume
Copy link
Contributor Author

@tsuna-can-se
修正版のレスポンスを確認したところ、現在より1階層深い形になってしまうのですが、
こちらは違和感ありませんでしょうか。

image

他の単純に1個取得する場合に、
下記のようなパターンで1層深くなってしまうものと、
そうならないものとが混在する可能性があることが問題ないか気になっております。

public class GetCatalogItemResponse
{
    public required CatalogItem CatalogItem { get; set; };
}

@tsuna-can-se
Copy link
Contributor

tsuna-can-se commented Dec 20, 2024

@KentaHizume
はい、共通化を求めるならその形になります。
ただ、今回その形をどこまで追い求めるかは別問題だと思います。

やるとしたらXxxxApiModelでいいんじゃないですかね?
以下のように書いてありますし。
image

https://maris.alesinfiny.org/app-architecture/client-side-rendering/csr-architecture-overview/#application-architecture

@KentaHizume
Copy link
Contributor Author

@tsuna-can-se
ご確認ありがとうございます。
Dto配下のドメインモデルの詰め替えに用いるクラス名については、
ドメインモデル名にApiModelを付加した命名にいたします。

@1nu1taichi
申し訳ありませんが、v1.0 のリリースまでにご指摘への対応が難しい状況で、
サンプルアプリの動作には関係しない箇所のため、v1.1 以降で対応いたします。

下記の通り issueを作成しております。

@1nu1taichi
Copy link
Contributor

@KentaHizume
ありがとうございます。ではこちらのPRは現時点で問題なしということでマージします。

@1nu1taichi 1nu1taichi merged commit 06347c8 into develop/admin/dressca-admin-main Dec 20, 2024
@1nu1taichi 1nu1taichi deleted the develop/admin/OpenAPI定義書更新に伴うフロントエンドのコード最新化 branch December 20, 2024 09:42
tsuna-can-se pushed a commit that referenced this pull request Jan 7, 2025
* Dressca管理アプリ(バックエンド)の作成 (#1580)

* web-csrのbackendにweb-adminプロジェクトとweb-consumerプロジェクトを追加

* web-adminとweb-consumerの共有部分をwebに移動

* web-adminから不要なファイルを削除

* webにcontrolleradviceのテストメソッドを追加

* カタログアイテムのCRUD処理を行うリポジトリインターフェースと実装クラスの追記

* MyBatisを用いたCRUD処理を自動生成されたコードに変更

* ロガーや認証認可を除いたCRUD処理の実装

* APIの定義に合わせてCRUD処理と関連する箇所を修正

* 認証・認可関連のクラスを実装

* 認可をPreAuthorizeアノテーションで管理するように変更

* 開発環境でのみダミーユーザが注入されるように変更

* ユーザのセッション情報を管理するクラスを追加

* ログ出力の中身の詰め込みとそれに伴う例外クラスの追加

* 楽観同時実行制御用のrow_versionカラムをcatalog_itemsに追加し、myBatis generatorで生成したクラスを追加

* 認証認可に関するアノテーションの位置と種類を変更

* 楽観同時実行制御の実装

* コメントアウトやファイルの場所の変更

* 楽観ロックエラーの実装とコントローラのAPI定義の修正

* CatalogManagementApplicationServiceの単体テストの追加

* controllerAdviceのフォルダ構成の変更

* webをadminとconsumerに分割した際に生じた差分(主にCORS構成)を修正

* 権限エラーと楽観ロックエラーのメッセージをプロパティファイルに定義

* 例外ハンドリングにアノテーションによる認証エラーと認可エラーを追加

* ログレベルを適切なものに変更

* 更新用のコマンドオブジェクトを削除

* フォーマットのルールを他メソッドに合うよう修正

* api定義の切り分け

* CRUD処理をドメインサービスに集約

* 更新処理をMyBatis Generatorで生成されたプログラムを用いたものに変更

* h2データベースの起動設定の変更

* launch.jsonにadminとconsumerを追記

* h2サーバーの設定を行うコンポーネントのDIをnull許容に変更する

* 単体で使用しないためlaunch.jsonからwebを削除

* 単体テストのメソッド名の命名を統一

* プログラムの過不足の適用、ドメインサービスの更新処理のメソッド名を変更

* ユーザのセッション情報の実装クラスのメソッドを適切なものに修正

* DummyUserInjectionFilterのJavaDocコメントを追記

* 楽観同時実行制御のバージョンカラムの型をDBではTIMESTAMP型、JavaではLocalDateTimeに変更

* MyBatis Generatorで生成したプログラムを楽観同時実行制御対応させるためのタスクを追加

* 自動生成したマッパーを楽観ロック対応させるタスクにおいて列やディレクトリの柔軟性を向上

* h2サーバー起動用のクラスをインフラから削除し、adminとconsumerに新規追加

* CatalogManagementApplicationServiceとCatalogApplicationServiceに統合

* myBatisGeneratorConfigの誤字を訂正

* 楽観ロックエラーと権限エラーを共通エラーハンドラでキャッチするように変更

* H2ServerConfigをH2ServerLauncherに変更

* CatalogApplicationServiceのgetCatalogItemsメソッドの処理をprivateの共通処理からadminとconsumerで直接記述するように変更

* カタログアイテムの取得処理に認可チェックを追加

* コントローラの認可チェックを全てのアクションメソッドに付与するよう変更し、併せてAPI定義も修正

* APIのdescriptionの更新に伴うAPI仕様書の更新

* PagedListOfCatalogItemResponseのフィールドに総ページ数、前ページの有無、後ページの有無を追加 (#1610)

* カタログアイテムのdtoの引数を修正

* アプリケーションサービスの更新メソッドの引数を修正

* カタログアイテムのgetのdtoのフィールドに行バージョンを追加

* API仕様の軽微な修正

* javadocの誤記を修正

* PagedListOfCatalogItemResponseのフィールドをMarisに合わせて修正

* カタログアイテムの削除処理と更新処理のアクションメソッドの引数を修正

* PagedListOfCatalogItemResponseのtotalPagesの計算を商と余りを用いて行うよう変更

* 管理アプリ(バックエンド)を策定したAPI仕様に沿って修正 (#1594)

* カタログアイテムのdtoの引数を修正

* アプリケーションサービスの更新メソッドの引数を修正

* カタログアイテムのgetのdtoのフィールドに行バージョンを追加

* API仕様の軽微な修正

* javadocの誤記を修正

* 楽観ロック対応のタスクの不要な記述を削除

* ユーザロールを複数返すように変更

* DTOクラス群の命名を変更

* カタログアイテムを削除に楽観同時実行制御を実装

* 不足しているAPIレスポンスを追加

* ユーザーロールを定数で管理

* PagedListOfCatalogItemResponseの変更分をマージ

* adminのAPI仕様書を更新

* adminのPagedListOfCatalogItemResponseをPagedListOfGetCatalogItemResponseに変更

* adminとconsumerのdependabot version updateの設定を追加

* 指摘事項への対応

* Dresscaに管理アプリ(フロントエンド)を追加する (#1582)

* フロントエンドアプリケーションのソース一式をmainにマージ

* adminワークスペースを追加

* admin用のnpmスクリプトをルートプロジェクトに追加
prodビルド用のコマンドがワークスペースになかったため、追加

* admin用のCIワークフローを追加

* #1236 を反映

* openapi-generatorの自動生成コードを最新化

* [email protected]にアップデート

* カタログアイテムのdtoの引数を修正

* アプリケーションサービスの更新メソッドの引数を修正

* カタログアイテムのgetのdtoのフィールドに行バージョンを追加

* API仕様の軽微な修正

* javadocの誤記を修正

* Revert "[email protected]にアップデート"

This reverts commit 389549b.

* Revert "openapi-generatorの自動生成コードを最新化"

This reverts commit e001e14.

* OpenAPI仕様書のパスを正しいものに修正

* クライアントコードを再生成

* PagedListOfCatalogItemResponseのフィールドをMarisに合わせて修正

* mockの不完全な実装部分を削除

* devモードのエンドポイントのURLを修正

* vitestのmswの設定についてデバッグに使用していたものを削除

* カタログアイテムの参照、追加、更新、削除について自動テストを実装

* adminのコードを新しい仕様書に合わせて自動生成

* コードにコメントを追加。

* 不足しているコメントを追加。

* コメントを改善

* Adminについてopenapi-generatorのバージョンアップを確認する

* リダイレクト漏れを修正
わかりにくい箇所を修正

* [email protected]にアップデート

* Promise.thenで非同期処理を待っていた箇所を、awaitで待つように修正

* 不適当なメソッド命名を修正

* カテゴリとブランドの取得をサービスクラスに委譲するリファクタを実施

---------

Co-authored-by: yoshidakenji <[email protected]>

* アプリケーションサービス内の存在チェックをドメインサービスに移動する (#1720)

* カタログアイテムのdtoの引数を修正

* アプリケーションサービスの更新メソッドの引数を修正

* カタログアイテムのgetのdtoのフィールドに行バージョンを追加

* API仕様の軽微な修正

* javadocの誤記を修正

* 楽観ロック対応のタスクの不要な記述を削除

* ユーザロールを複数返すように変更

* DTOクラス群の命名を変更

* カタログアイテムを削除に楽観同時実行制御を実装

* 不足しているAPIレスポンスを追加

* ユーザーロールを定数で管理

* PagedListOfCatalogItemResponseの変更分をマージ

* adminのAPI仕様書を更新

* adminのPagedListOfCatalogItemResponseをPagedListOfGetCatalogItemResponseに変更

* adminとconsumerのdependabot version updateの設定を追加

* アプリケーションサービスの存在チェックをドメインサービスに移動

* ドメインサービスのUTの追加

* カタログアイテムの追加処理にブランドとカテゴリの存在チェックを追加

* アプリケーションサービスのUTでアクション内でリテラルを使用しないように変更

* (Dressca)Open API 仕様書の更新に追従する (#1721)

* OpenAPI 仕様書の相対パスを修正

* Consumer の API クライアントを再生成

* consumerのmockをmaia-maris間で共通化

* Admin の API クライアントを再生成

* Adminのフロントエンドのコードを最新と同期

* dependabot.ymlの不要なバージョン更新検索を削除

* 登録用のカタログアイテムを作成するメソッドを追加

* WebApplicationTestのcontextLoadsクラスにDisplayNameを追記

* DisplayNameのimport文を追記

* web-adminとweb-consumerの不要なテストクラスを削除

* モックのHTTPステータスコードについてaxiosから提供されるEnumを使用するように修正

* フロントエンドの自動テストスイートを改善して[email protected]にアップデート
(AlesInfiny/maris#2169 を反映)

* APIクライアントのステータスコードをEnumに修正

* 自動生成された不要なREADMEファイルを削除

* CatalogApplicationServiceのカタログアイテムの一覧取得メソッドの命名をbyからforに変更

* 例外のmessageの抜けを修正

* samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts の競合を解決

* package-lock.jsonの競合を解決

* Revert "package-lock.jsonの競合を解決"

This reverts commit 51a4946.

* Revert "samples/web-csr/dressca-frontend/consumer/src/api-client/index.ts の競合を解決"

This reverts commit bfaf778.

* マージしたい対象をマージ元のブランチからcheckout

* 競合を解決

* 競合を解決

* Revert "競合を解決"

This reverts commit 393ffb1.

* Revert "競合を解決"

This reverts commit 6366b27.

* Revert "マージしたい対象をマージ元のブランチからcheckout"

This reverts commit 501fb96.

* Adminでは使っていないため、すべてのカテゴリ・ブランドを表すレコードを追加する処理を削除。
フォームレベルバリデーションのスキーマ定義について、カタログアイテムのnameとdescriptionをそれぞれitemNameとitemDescriptionにリネーム。

* コメントの誤りを修正

* メッセージ管理方針の変更をadminに取り込み

* API クライアントの設定ファイルの競合箇所を main から checkout して再修正

* 一度 main のpackage-lock.json をcheckoutして戻します。

* admin 分のパッケージをpackage-lock.jsonに記録します

* ログメッセージの誤記を修正

* Javaファイルの不要な空行を削除

* AssetsControllerの不要な空行を削除

* ログ出力のフォーマットが崩れている部分の修正

* 管理アプリにconsumerの変更を反映

* 管理アプリのフロントエンドのCIについて明示的に権限を付与するように修正

---------

Co-authored-by: kenjiyoshid-a <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
target: Dressca サンプルアプリケーションDresscaに関係がある
Projects
None yet
3 participants