CODE-350 取引管理画面

  • remind 2022-10-03 11:00- 2022-10-03-mtg

  • 検索APIで Page<T> で返す実装をする

  • 管理用検索APIの実装

    • 今後paganationされる可能性あるので (件数, 結果[]) を返す
    • IDが指定された時は一件取得に分岐する
    • それ以外はクエリ
      • DealList<Tender> を追加するか Repo.getDealAndTenders() -> Pair<Deal, List<Tender>> 生やすか
        • Tender が小さいはずだからまとめて取得しても良いか?
          • Deal に含めてしまうと List<Deal> を取得するのが重くなるのでサービスで個別に取得する

本APIと違う点

  • ページングはされず, 全ての検索結果が返ってくる
    • 今後ページングがされる想定で, 内部実装ではページングされている
  • 取引ステータスに下書きも指定できる (ex. &statuses=1,2 )

日報

お疲れ様です。鎌田です。
9月最終週と本日の作業報告を致します。

- 完了 CODE-336 詳細設計(管理画面/バックエンド/お知らせ管理画面)
- 完了 CODE-338 コーディング(管理画面/バックエンド/お知らせ管理画面)
- 完了 CODE-342 詳細設計(管理画面/バックエンド/お問い合わせ管理画面)
- 完了 CODE-343 コーディング(管理画面/バックエンド/お問い合わせ管理画面)
- 完了 CODE-349 詳細設計(管理画面/バックエンド/取引情報管理画面)
- 実施中 CODE-350 コーディング(管理画面/バックエンド/取引情報管理画面)

本日はミーティングありがとうございました。CODE-350のAPIとサービス部分の実装を行っていました。次回引き続き行います。

PR

管理用の取引検索API, 取引取得APIの実装を行いました.
詳しい仕様は『API仕様書-管理画面』を参照してください.

管理用ではない検索APIを以下「本検索API」, 管理用の検索APIを
以下「管理用検索API」と呼びます.

本検索APIと違う点

  • ページングはされず, 全ての検索結果が返ってくる
    • 内部実装ではクエリによる検索を行っていますが, 全ての検索結果を1ページとして返すような実装をしています.
  • 取引ステータスに下書きも指定できる (ex. &statuses=1,2 )

snake_caseを持ったリクエストパラメータをdata classとして受け取る方法について

GetReviewsDto.kt#GetManagementReviewsWRequestParameters 部分についての補足です.

クラスをリクエストパラメータの各パラメータにマッピングしたい時は @ModelAttribute が必要です.

@GetMapping("/hoge")
fun getHoge(
    @Validated @ModelAttribute params: ReqParams,
): Dto { ... }
data class ReqParams(val hogeId: String?)

しかし, そのままでは snake_case を含むリクエスト(ex. /hoge?hoge_id=aaa) に対して ReqParams.hogeId にはマッピングされません. snake_case が含まれている時は @ConstructorProperties をクラスのコンストラクタにつける必要があります.
しかし, Kotlin の primary constructor はクラス定義と一体化しているのでデコレータを書く場所に困りますが, "constructor" を前置しても良いらしいので以下のように書くようです.

data class ReqParams
@ConstructorProperties("hoge_id")
constructor(
  @field:Pattern(regexp = "...")
  val hogeId: String?,
)

嵌ったので念のため共有しておきます.

参考

APIの実行例

確認に使用した http ファイルを貼ります. VSCodeの拡張機能を用いると実際に実行することが出来ます.

  • management_deal.http

以上, お手好きの際にご確認お願い致します.