From de766833e05aa2bbd9c2f0b6d466e22a0bbaa3c0 Mon Sep 17 00:00:00 2001 From: ma91n Date: Fri, 9 Feb 2024 14:52:41 +0900 Subject: [PATCH 01/27] Markdown 1st commit --- documents/forMarkdown/README.md | 57 +++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 documents/forMarkdown/README.md diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md new file mode 100644 index 00000000..df1f5349 --- /dev/null +++ b/documents/forMarkdown/README.md @@ -0,0 +1,57 @@ +--- +sidebarDepth: 4 +author: フューチャー株式会社 +home: true +heroText: Markdown設計ドキュメント規約 +tagline: Future Enterprise Markdown Design Document Standards +pageClass: lang-home +footer: ©2015 - 2024 Future Enterprise Coding Standards - Future Corporation +--- + +Markdownベースの設計ドキュメントの規約です。 + +システム開発にて利用する設計ドキュメントをMarkdownベースにすることで、コーディングと同じ慣れたツールを用いて、Gitによるバージョン管理、レビュープロセス、CI/CDなどに自動化(静的解析、自動生成)を行いやすくし、ドキュメントを陳腐化させず、俊敏な設計開発を目指します。 + +Markdownに閉じた話では無いが、どういった内容を設計書に記載すべきかは悩むポイントは多いです。 + +本規約では、アプリケーションの種別ごとに記載すべき内容と、それをどのようなMarkdownの構造で記載するかを規約化し、各チームで悩む余地を減らし、注力すべきことに集中できる環境を提供することを目的とします。 + + +## 前提 + +TODO チーム規模、アプリケーション/ライブラリなど対象、Gitで管理など、 + + +## フロントエンド + +### 画面遷移 +TODO + +### 画面xxx + +TODO + +## バックエンド + +### Web API設計書 + +TODO + +### バッチ設計書 + +TODO + +### システムI/F定義書 + +TODO + +# Resources + +次のリンクから単一ファイルで作成されたコーディング規約を取得できます。 +(これらのファイルは[Pandoc]を利用して作成しています。) + +- [Markdown](https://github.com/future-architect/coding-standards/blob/master/documents/forMarkdown/xxx.md) +- [HTML](https://github.com/future-architect/coding-standards/blob/gh-pages/resources/xxx.html) +- [Word](https://github.com/future-architect/coding-standards/raw/gh-pages/resources/xxx.docx) + +[pandoc]: https://pandoc.org/ From 8e62e44f564ad23774f438782d3723b76f576bf7 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Sat, 10 Feb 2024 10:00:23 +0900 Subject: [PATCH 02/27] =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E6=A7=8B=E9=80=A0=E3=82=92=E8=BF=BD=E5=8A=A0=20(#88)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documents/forMarkdown/README.md | 65 ++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md index df1f5349..fa9018d6 100644 --- a/documents/forMarkdown/README.md +++ b/documents/forMarkdown/README.md @@ -8,19 +8,64 @@ pageClass: lang-home footer: ©2015 - 2024 Future Enterprise Coding Standards - Future Corporation --- -Markdownベースの設計ドキュメントの規約です。 +Markdownベースの設計ドキュメントの規約をまとめる。 -システム開発にて利用する設計ドキュメントをMarkdownベースにすることで、コーディングと同じ慣れたツールを用いて、Gitによるバージョン管理、レビュープロセス、CI/CDなどに自動化(静的解析、自動生成)を行いやすくし、ドキュメントを陳腐化させず、俊敏な設計開発を目指します。 +システム開発にて利用する設計ドキュメントをMarkdownベースにすることで、コーディングと同じ慣れたツールを用いて、Gitによるバージョン管理、レビュープロセス、CI/CDなどに自動化(静的解析、自動生成)を行いやすくし、ドキュメントを陳腐化させず、俊敏な設計開発を目指す。 -Markdownに閉じた話では無いが、どういった内容を設計書に記載すべきかは悩むポイントは多いです。 - -本規約では、アプリケーションの種別ごとに記載すべき内容と、それをどのようなMarkdownの構造で記載するかを規約化し、各チームで悩む余地を減らし、注力すべきことに集中できる環境を提供することを目的とします。 +Markdownに限った話では無いが、どういった内容を設計書に記載すべきかは悩むポイントは多い。 +本規約では、アプリケーションの種別ごとに記載すべき内容と、それをどのようなMarkdownの構造で記載するかを規約化し、各チームで悩む余地を減らし、注力すべきことに集中できる環境を提供することを目的とする。 ## 前提 -TODO チーム規模、アプリケーション/ライブラリなど対象、Gitで管理など、 +本規約は以下の前提で作成されている + +- チーム/プロジェクトが3~30名程度規模程度 +- Git(GitHub, GitLab)で管理され、コードと設計書が同一リポジトリで管理される +- システム開発で必要なアプリケーション開発 + +## フォルダ階層 + +リポジトリ直下に `docs` フォルダを作成し、その配下に設計ドキュメントとなるMarkdownファイルを配備する。 + + +次はバックエンド、フロントエンド、インフラのコードをモノリポで管理している例である。 + +```sh +. +├── backend # バックエンド系のコード +├── docs +├── frontend # フロントエンド系のコード +├── infrastructure # インフラ系のコード +``` + +`docs` 配下は以下のルールにしたがった構造を取る。 +- `01_`、`02_` といったプレフィックスを持つ +- 番号には体系をもたせず、必要になったタイミングでインクリメントさせる +- オンボーディングコストを抑えるため、なるべく先頭に新規参画者が欲する情報を配備する + +構成例を次にあげる。 + + + +```sh +docs +├── 01_キャッチアップ # ドメイン知識など抑えておくべき前提知識 +├── 02_環境構築 # +├── 03_開発規約 # GitFlowなど、リリース方式、CI/CD周り +├── 04_ユーザーストーリー # +├── 05_画面レイアウト # Figmaのパスなど +├── 06_画面遷移図 # +├── 07_画面アクション +├── 08_API設計書 # OpenAPIのパス+各BL設計 +├── 09_データモデル # ERD, テーブル定義 +├── 10_IF設計書 # I/F定義+受信/送信BL設計 +├── 11_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 +├── 12_インフラ設計 # 監視、キャパシティサイジング、コスト +├── ... +└── README.md +``` ## フロントエンド @@ -33,6 +78,14 @@ TODO ## バックエンド +### テーブル定義書 + +A5ER + +### Web API定義書 + +OpenAPI.yamlで記載する + ### Web API設計書 TODO From 6a96c3ebb9300556926c14fef7d1ff5e635fabe6 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 16 Feb 2024 16:24:02 +0900 Subject: [PATCH 03/27] =?UTF-8?q?I/F=E5=AE=9A=E7=BE=A9=20(#89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...IF\345\256\232\347\276\251\346\233\270.md" | 109 ++++++++++++++++++ documents/forMarkdown/README.md | 21 +++- 2 files changed, 125 insertions(+), 5 deletions(-) create mode 100644 "documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" diff --git "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" new file mode 100644 index 00000000..5cd7e9a5 --- /dev/null +++ "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" @@ -0,0 +1,109 @@ +# IF01_設備有効開始受信 + +設備有効開始の取り込みを行う。 + +## 対向システム + +| 連携元 | 連携先 | +| ---------- | ------ | +| A システム | Future | + +## 環境情報 + +Input: + +| Item | Value | +| ---------------- | ----------------------------------------------------------------------------------------- | +| 連携 S3 バケット | `${env}-example-import` | +| プレフィックス | `fix_report/year=${yyyy}/month=${MM}/day=${dd}/${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| 保持期限 | 3 年 | + +Output: + +| Item | Value | +| -------- | -------------- | +| 出力先 | xxx 受信ワーク | +| 保持期限 | 1 年 | +| 冪等 | あり | + +## 連携元定義 + +| Category | Item | Value | Memo | +| -------- | ----------------------------------- | --------- | -------------------- | +| Protocol | 連携方式(ファイル/API/ストリーム) | ファイル | | +| | 連携タイミング(随時/定時) | 定時 | | +| | 頻度 | 1 回/日 | | +| | 起動時間 | **16:00** | | +| | 門限 | **16:00** | | +| | 未着チェック(なし/WARN/ERROR) | WARN | | +| | 全件/差分 | 差分 | | +| | 0 件時連携 | あり | | +| Format | ファイル種別 | **CSV** | | +| | レイアウト | RFC 8259 | | +| | 文字コード | UTF-8 | | +| | 改行コード | LF | | +| | 圧縮 | - | | +| | 暗号化 | - | | +| | ヘッダ行 | あり | | +| | 項目順 | 固定 | 項目順は入れ替え不可 | + +### 項目定義 + +| Item Logical | Item Physical | Type | Length | Precision | Enum | Format | Example | Memo | +| ------------ | -------------- | ------ | ------ | --------- | ---- | ---------- | ---------- | ---- | +| 会社コード | company_cd | string | 5 | - | - | - | 00001 | | +| 設備コード | device_cd | string | 8 | - | - | - | 00000052 | | +| 有効開始日 | activation_date | string | 10 | - | - | YYYY-MM-DD | 2022-10-16 | [^1] | + +[^1]: 現在日以降である必要があるが、受信ではテスト観点で過去日も許容する + +#### サンプル + +```csv +company_cd,device_cd,activation_date +12121,00000052,2022-03-01 +12121,00000053,2022-03-30 +``` + +## 受信処理概要 + +- ファイル定義に則ったバリデーションを実施 +- 次の項目変換定義に従い加工し、出力先テーブルに Merge する +- 受信完了後、 Completed: YYYY-MM-DDTHH:MI:SS.SSS のタグを追加する + +## 処理シーケンス + +```plantuml +@startuml +!theme toy + +participant システム +participant S3 +database DB + +システム -> DB: 処理日付取得\n[日付管理] + +システム -> S3: 対象ファイルの存在チェック + +alt ファイルが存在しなかった場合 + システム -> システム: 処理終了して、次の処理を待機 +end + +システム -> DB: シーケンスの取得\n[シーケンスオブジェクト] + +システム -> DB: 1.実行開始レコード追加\n[IF受信管理] + +システム -> S3: 対象ファイルを取得 + +システム -> DB: 対象マスタのTruncate + +システム -> DB: ファイル連携処理 + +システム -> システム: 連携件数確認 + +システム -> S3: 処理済対象ファイルを格納 + +システム -> DB: 2.実行終了状態の更新\n[IF受信管理] +@enduml +``` diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md index fa9018d6..6069072c 100644 --- a/documents/forMarkdown/README.md +++ b/documents/forMarkdown/README.md @@ -67,6 +67,10 @@ docs └── README.md ``` +## システム構成図 + +TODO 論理, 物理, etc. + ## フロントエンド ### 画面遷移 @@ -82,21 +86,28 @@ TODO A5ER -### Web API定義書 +### 区分値 -OpenAPI.yamlで記載する +TODO ### Web API設計書 -TODO +API定義書はOpenAPI.yamlで記載する + +TODO 各エンドポイント毎のプログラム設計 + ### バッチ設計書 TODO -### システムI/F定義書 +### I/F定義書 -TODO +I/F定義書は、システム間の連携について定義と、その受信/配信処理の設計書です。 + +システムI/Fは連携先の対向システムが存在するため、認識齟齬が無いように、どのようなプロトコル・項目であるかを定義する必要があります。 + +* [レイアウト](IF定義書.md) # Resources From a45f884c2fe39159c1af5a06f11d108dc1a2a0c7 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 22 Feb 2024 14:55:18 +0900 Subject: [PATCH 04/27] =?UTF-8?q?=E3=83=97=E3=83=AD=E3=82=B0=E3=83=A9?= =?UTF-8?q?=E3=83=A0=E8=A9=B3=E7=B4=B0=E8=A8=AD=E8=A8=88=20(#93)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...IF\345\256\232\347\276\251\346\233\270.md" | 218 +++++++++--------- documents/forMarkdown/README.md | 11 +- ...40\350\250\255\350\250\210\346\233\270.md" | 55 +++++ 3 files changed, 169 insertions(+), 115 deletions(-) create mode 100644 "documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" diff --git "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" index 5cd7e9a5..34c4b99a 100644 --- "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" +++ "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" @@ -1,109 +1,109 @@ -# IF01_設備有効開始受信 - -設備有効開始の取り込みを行う。 - -## 対向システム - -| 連携元 | 連携先 | -| ---------- | ------ | -| A システム | Future | - -## 環境情報 - -Input: - -| Item | Value | -| ---------------- | ----------------------------------------------------------------------------------------- | -| 連携 S3 バケット | `${env}-example-import` | -| プレフィックス | `fix_report/year=${yyyy}/month=${MM}/day=${dd}/${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | -| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | -| 保持期限 | 3 年 | - -Output: - -| Item | Value | -| -------- | -------------- | -| 出力先 | xxx 受信ワーク | -| 保持期限 | 1 年 | -| 冪等 | あり | - -## 連携元定義 - -| Category | Item | Value | Memo | -| -------- | ----------------------------------- | --------- | -------------------- | -| Protocol | 連携方式(ファイル/API/ストリーム) | ファイル | | -| | 連携タイミング(随時/定時) | 定時 | | -| | 頻度 | 1 回/日 | | -| | 起動時間 | **16:00** | | -| | 門限 | **16:00** | | -| | 未着チェック(なし/WARN/ERROR) | WARN | | -| | 全件/差分 | 差分 | | -| | 0 件時連携 | あり | | -| Format | ファイル種別 | **CSV** | | -| | レイアウト | RFC 8259 | | -| | 文字コード | UTF-8 | | -| | 改行コード | LF | | -| | 圧縮 | - | | -| | 暗号化 | - | | -| | ヘッダ行 | あり | | -| | 項目順 | 固定 | 項目順は入れ替え不可 | - -### 項目定義 - -| Item Logical | Item Physical | Type | Length | Precision | Enum | Format | Example | Memo | -| ------------ | -------------- | ------ | ------ | --------- | ---- | ---------- | ---------- | ---- | -| 会社コード | company_cd | string | 5 | - | - | - | 00001 | | -| 設備コード | device_cd | string | 8 | - | - | - | 00000052 | | -| 有効開始日 | activation_date | string | 10 | - | - | YYYY-MM-DD | 2022-10-16 | [^1] | - -[^1]: 現在日以降である必要があるが、受信ではテスト観点で過去日も許容する - -#### サンプル - -```csv -company_cd,device_cd,activation_date -12121,00000052,2022-03-01 -12121,00000053,2022-03-30 -``` - -## 受信処理概要 - -- ファイル定義に則ったバリデーションを実施 -- 次の項目変換定義に従い加工し、出力先テーブルに Merge する -- 受信完了後、 Completed: YYYY-MM-DDTHH:MI:SS.SSS のタグを追加する - -## 処理シーケンス - -```plantuml -@startuml -!theme toy - -participant システム -participant S3 -database DB - -システム -> DB: 処理日付取得\n[日付管理] - -システム -> S3: 対象ファイルの存在チェック - -alt ファイルが存在しなかった場合 - システム -> システム: 処理終了して、次の処理を待機 -end - -システム -> DB: シーケンスの取得\n[シーケンスオブジェクト] - -システム -> DB: 1.実行開始レコード追加\n[IF受信管理] - -システム -> S3: 対象ファイルを取得 - -システム -> DB: 対象マスタのTruncate - -システム -> DB: ファイル連携処理 - -システム -> システム: 連携件数確認 - -システム -> S3: 処理済対象ファイルを格納 - -システム -> DB: 2.実行終了状態の更新\n[IF受信管理] -@enduml -``` +# IF01 設備有効開始受信 + +設備有効開始の取り込みを行う。 + +## 対向システム + +| 連携元 | 連携先 | +| ---------- | ------ | +| A システム | Future | + +## 環境情報 + +Input: + +| Item | Value | +| ---------------- | ----------------------------------------------------------------------------------------- | +| 連携 S3 バケット | `${env}-example-import` | +| プレフィックス | `fix_report/year=${yyyy}/month=${MM}/day=${dd}/${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| 保持期限 | 3 年 | + +Output: + +| Item | Value | +| -------- | -------------- | +| 出力先 | xxx 受信ワーク | +| 保持期限 | 1 年 | +| 冪等 | あり | + +## 連携元定義 + +| Category | Item | Value | Memo | +| -------- | ----------------------------------- | --------- | -------------------- | +| Protocol | 連携方式(ファイル/API/ストリーム) | ファイル | | +| | 連携タイミング(随時/定時) | 定時 | | +| | 頻度 | 1 回/日 | | +| | 起動時間 | **16:00** | | +| | 門限 | **16:00** | | +| | 未着チェック(なし/WARN/ERROR) | WARN | | +| | 全件/差分 | 差分 | | +| | 0 件時連携 | あり | | +| Format | ファイル種別 | **CSV** | | +| | レイアウト | RFC 8259 | | +| | 文字コード | UTF-8 | | +| | 改行コード | LF | | +| | 圧縮 | - | | +| | 暗号化 | - | | +| | ヘッダ行 | あり | | +| | 項目順 | 固定 | 項目順は入れ替え不可 | + +### 項目定義 + +| Item Logical | Item Physical | Type | Length | Precision | Enum | Format | Example | Memo | +| ------------ | -------------- | ------ | ------ | --------- | ---- | ---------- | ---------- | ---- | +| 会社コード | company_cd | string | 5 | - | - | - | 00001 | | +| 設備コード | device_cd | string | 8 | - | - | - | 00000052 | | +| 有効開始日 | activation_date | string | 10 | - | - | YYYY-MM-DD | 2022-10-16 | [^1] | + +[^1]: 現在日以降である必要があるが、受信ではテスト観点で過去日も許容する + +#### サンプル + +```csv +company_cd,device_cd,activation_date +12121,00000052,2022-03-01 +12121,00000053,2022-03-30 +``` + +## 受信処理概要 + +- ファイル定義に則ったバリデーションを実施 +- 次の項目変換定義に従い加工し、出力先テーブルに Merge する +- 受信完了後、 Completed: YYYY-MM-DDTHH:MI:SS.SSS のタグを追加する + +## 処理シーケンス + +```plantuml +@startuml +!theme toy + +participant システム +participant S3 +database DB + +システム -> DB: 処理日付取得\n[日付管理] + +システム -> S3: 対象ファイルの存在チェック + +alt ファイルが存在しなかった場合 + システム -> システム: 処理終了して、次の処理を待機 +end + +システム -> DB: シーケンスの取得\n[シーケンスオブジェクト] + +システム -> DB: 1.実行開始レコード追加\n[IF受信管理] + +システム -> S3: 対象ファイルを取得 + +システム -> DB: 対象マスタのTruncate + +システム -> DB: ファイル連携処理 + +システム -> システム: 連携件数確認 + +システム -> S3: 処理済対象ファイルを格納 + +システム -> DB: 2.実行終了状態の更新\n[IF受信管理] +@enduml +``` diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md index 6069072c..3b7b2f1c 100644 --- a/documents/forMarkdown/README.md +++ b/documents/forMarkdown/README.md @@ -52,9 +52,9 @@ Markdownに限った話では無いが、どういった内容を設計書に記 ```sh docs ├── 01_キャッチアップ # ドメイン知識など抑えておくべき前提知識 -├── 02_環境構築 # +├── 02_環境構築 # ├── 03_開発規約 # GitFlowなど、リリース方式、CI/CD周り -├── 04_ユーザーストーリー # +├── 04_ユーザーストーリー # ├── 05_画面レイアウト # Figmaのパスなど ├── 06_画面遷移図 # ├── 07_画面アクション @@ -63,7 +63,7 @@ docs ├── 10_IF設計書 # I/F定義+受信/送信BL設計 ├── 11_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 ├── 12_インフラ設計 # 監視、キャパシティサイジング、コスト -├── ... +├── ... └── README.md ``` @@ -88,7 +88,7 @@ A5ER ### 区分値 -TODO +TODO JSON/YAML で管理推奨など ### Web API設計書 @@ -96,8 +96,7 @@ API定義書はOpenAPI.yamlで記載する TODO 各エンドポイント毎のプログラム設計 - -### バッチ設計書 +### プログラム設計書 TODO diff --git "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" new file mode 100644 index 00000000..3b6bf24f --- /dev/null +++ "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" @@ -0,0 +1,55 @@ +# BAT01 xxx計算 + +## 処理概要 + +- xxx +- xxx + +## シーケンス図 + +```plantuml +@startuml +!theme toy + +participant システム +database DB + +note over システム: 各種インプット取得 + +システム -> DB: xxx\n[yyyyワーク]\n[zzzラン] + +@enduml +``` + +## DB項目 + +### 取得 + +- xxx受信ワーク.会社コード +- xxx受信ワーク.担当者コード +- xxx受信ワーク.エリアコード + +### 登録 + +警告リストワークに以下のカラムでレコードを登録する + +- xxxワーク.会社コード +- xxxワーク.処理日付 +- xxxワーク.yyy区分 + +### 更新 + +xxx予測ワークの以下の項目を更新する + +- xxx予測ワーク.優先度 +- xxx予測ワーク.処理予定日 + +## 補足事項 + +### 1.xxx抽出 + +xxx + +### 2.優先度計算 + +xxx From 2faf980583ac651da6add9be54e15c442c3ffbc5 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 22 Feb 2024 15:16:22 +0900 Subject: [PATCH 05/27] =?UTF-8?q?Update=20=E3=83=97=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=83=A9=E3=83=A0=E8=A8=AD=E8=A8=88=E6=9B=B8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" index 3b6bf24f..07193254 100644 --- "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" @@ -2,7 +2,7 @@ ## 処理概要 -- xxx +- xxx(なぜこれが必要なのか) - xxx ## シーケンス図 From 4f1b900c2ff572084baf6944c6e22f5e259021d9 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 22 Feb 2024 15:22:03 +0900 Subject: [PATCH 06/27] =?UTF-8?q?Update=20=E3=83=97=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=83=A9=E3=83=A0=E8=A8=AD=E8=A8=88=E6=9B=B8.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...3\251\343\203\240\350\250\255\350\250\210\346\233\270.md" | 5 +++++ 1 file changed, 5 insertions(+) diff --git "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" index 07193254..1f2e2af0 100644 --- "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" @@ -29,6 +29,11 @@ note over システム: 各種インプット取得 - xxx受信ワーク.担当者コード - xxx受信ワーク.エリアコード +抽出条件: + +- xxx +- xxx + ### 登録 警告リストワークに以下のカラムでレコードを登録する From 520628a5293540d9de94bb42c5822a87d9d2ad58 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 22 Feb 2024 17:26:36 +0900 Subject: [PATCH 07/27] prettier format (#94) --- .vscode/settings.json | 2 +- ...IF\345\256\232\347\276\251\346\233\270.md" | 55 +- documents/forMarkdown/README.md | 35 +- ...40\350\250\255\350\250\210\346\233\270.md" | 26 +- .../OpenAPI_Specification_2.0.md | 11 +- .../OpenAPI_Specification_3.0.3.md | 1223 ++++++++--------- .../forOpenAPISpecification/file_standards.md | 6 +- .../forOpenAPISpecification/prerequisite.md | 8 +- .../reference/DB_OpenAPI_Mapping_Example.md | 32 +- 9 files changed, 708 insertions(+), 690 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index d530464c..9ea846ee 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,6 @@ "eslint.validate": ["javascript", "javascriptreact", "vue"], "eslint.workingDirectories": ["./", "./.vuepress"], "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" } } diff --git "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" index 34c4b99a..3025e3b4 100644 --- "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" +++ "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" @@ -12,20 +12,12 @@ Input: -| Item | Value | -| ---------------- | ----------------------------------------------------------------------------------------- | -| 連携 S3 バケット | `${env}-example-import` | -| プレフィックス | `fix_report/year=${yyyy}/month=${MM}/day=${dd}/${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | -| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | -| 保持期限 | 3 年 | - -Output: - -| Item | Value | -| -------- | -------------- | -| 出力先 | xxx 受信ワーク | -| 保持期限 | 1 年 | -| 冪等 | あり | +| Item | Value | +| ---------------- | ------------------------------------------------ | +| 連携 S3 バケット | `${env}-example-import` | +| プレフィックス | `activate/year=${yyyy}/month=${MM}/day=${dd}/` | +| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| 保持期限 | 3 年 | ## 連携元定義 @@ -47,14 +39,15 @@ Output: | | 暗号化 | - | | | | ヘッダ行 | あり | | | | 項目順 | 固定 | 項目順は入れ替え不可 | +| | 機密情報 | - | | ### 項目定義 -| Item Logical | Item Physical | Type | Length | Precision | Enum | Format | Example | Memo | -| ------------ | -------------- | ------ | ------ | --------- | ---- | ---------- | ---------- | ---- | -| 会社コード | company_cd | string | 5 | - | - | - | 00001 | | -| 設備コード | device_cd | string | 8 | - | - | - | 00000052 | | -| 有効開始日 | activation_date | string | 10 | - | - | YYYY-MM-DD | 2022-10-16 | [^1] | +| Name | Physical Name | Type | Length | Precision | Enum | Format | Sensitive | Example | Memo | +| ---------- | --------------- | ------ | ------ | --------- | ---- | ---------- | --------- | ---------- | ---- | +| 会社コード | company_cd | string | 5 | - | - | - | - | 00001 | | +| 設備コード | device_cd | string | 8 | - | - | - | - | 00000052 | | +| 有効開始日 | activation_date | string | 10 | - | - | YYYY-MM-DD | - | 2022-10-16 | [^1] | [^1]: 現在日以降である必要があるが、受信ではテスト観点で過去日も許容する @@ -66,7 +59,7 @@ company_cd,device_cd,activation_date 12121,00000053,2022-03-30 ``` -## 受信処理概要 +## 処理概要 - ファイル定義に則ったバリデーションを実施 - 次の項目変換定義に従い加工し、出力先テーブルに Merge する @@ -107,3 +100,25 @@ end システム -> DB: 2.実行終了状態の更新\n[IF受信管理] @enduml ``` + +## DB 項目 + +### 参照 + +なし + +### 登録 + +リストワークに以下のカラムでレコードを登録する + +- xxx ワーク.会社コード +- xxx ワーク.処理日付 +- xxx ワーク.yyy 区分 + +### 更新 + +なし + +## ビジネスロック + +特記事項なし diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md index 3b7b2f1c..76629d92 100644 --- a/documents/forMarkdown/README.md +++ b/documents/forMarkdown/README.md @@ -8,25 +8,26 @@ pageClass: lang-home footer: ©2015 - 2024 Future Enterprise Coding Standards - Future Corporation --- -Markdownベースの設計ドキュメントの規約をまとめる。 +Markdown ベースの設計ドキュメントの規約をまとめる。 -システム開発にて利用する設計ドキュメントをMarkdownベースにすることで、コーディングと同じ慣れたツールを用いて、Gitによるバージョン管理、レビュープロセス、CI/CDなどに自動化(静的解析、自動生成)を行いやすくし、ドキュメントを陳腐化させず、俊敏な設計開発を目指す。 +システム開発にて利用する設計ドキュメントを Markdown ベースにすることで、コーディングと同じ慣れたツールを用いて、Git によるバージョン管理、レビュープロセス、CI/CD などに自動化(静的解析、自動生成)を行いやすくし、ドキュメントを陳腐化させず、俊敏な設計開発を目指す。 -Markdownに限った話では無いが、どういった内容を設計書に記載すべきかは悩むポイントは多い。 +Markdown に限った話では無いが、どういった内容を設計書に記載すべきかは悩むポイントは多い。 -本規約では、アプリケーションの種別ごとに記載すべき内容と、それをどのようなMarkdownの構造で記載するかを規約化し、各チームで悩む余地を減らし、注力すべきことに集中できる環境を提供することを目的とする。 +本規約では、アプリケーションの種別ごとに記載すべき内容と、それをどのような Markdown の構造で記載するかを規約化し、各チームで悩む余地を減らし、注力すべきことに集中できる環境を提供することを目的とする。 ## 前提 本規約は以下の前提で作成されている -- チーム/プロジェクトが3~30名程度規模程度 +- チーム/プロジェクトが 3 ~ 30 名程度規模程度 - Git(GitHub, GitLab)で管理され、コードと設計書が同一リポジトリで管理される - システム開発で必要なアプリケーション開発 ## フォルダ階層 -リポジトリ直下に `docs` フォルダを作成し、その配下に設計ドキュメントとなるMarkdownファイルを配備する。 +リポジトリ直下に `docs` フォルダを作成し、その配下に設計ドキュメントとなる Markdown ファイルを配備する。 + 次はバックエンド、フロントエンド、インフラのコードをモノリポで管理している例である。 @@ -74,9 +75,10 @@ TODO 論理, 物理, etc. ## フロントエンド ### 画面遷移 + TODO -### 画面xxx +### 画面 xxx TODO @@ -86,13 +88,20 @@ TODO A5ER +以下の情報の管理 + +- 保持期限 +- 個人情報有無 + +パーティションなどはa5erで管理想定 + ### 区分値 TODO JSON/YAML で管理推奨など -### Web API設計書 +### Web API 設計書 -API定義書はOpenAPI.yamlで記載する +API 定義書は OpenAPI.yaml で記載する TODO 各エンドポイント毎のプログラム設計 @@ -100,13 +109,13 @@ TODO 各エンドポイント毎のプログラム設計 TODO -### I/F定義書 +### I/F 定義書 -I/F定義書は、システム間の連携について定義と、その受信/配信処理の設計書です。 +I/F 定義書は、システム間の連携について定義と、その受信/配信処理の設計書です。 -システムI/Fは連携先の対向システムが存在するため、認識齟齬が無いように、どのようなプロトコル・項目であるかを定義する必要があります。 +システム I/F は連携先の対向システムが存在するため、認識齟齬が無いように、どのようなプロトコル・項目であるかを定義する必要があります。 -* [レイアウト](IF定義書.md) +- [レイアウト](IF定義書.md) # Resources diff --git "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" index 1f2e2af0..e1addb52 100644 --- "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" @@ -1,11 +1,11 @@ -# BAT01 xxx計算 +# BAT01 xxx 計算 ## 処理概要 - xxx(なぜこれが必要なのか) - xxx -## シーケンス図 +## 処理シーケンス ```plantuml @startuml @@ -21,13 +21,13 @@ note over システム: 各種インプット取得 @enduml ``` -## DB項目 +## DB 項目 ### 取得 -- xxx受信ワーク.会社コード -- xxx受信ワーク.担当者コード -- xxx受信ワーク.エリアコード +- xxx 受信ワーク.会社コード +- xxx 受信ワーク.担当者コード +- xxx 受信ワーク.エリアコード 抽出条件: @@ -38,20 +38,20 @@ note over システム: 各種インプット取得 警告リストワークに以下のカラムでレコードを登録する -- xxxワーク.会社コード -- xxxワーク.処理日付 -- xxxワーク.yyy区分 +- xxx ワーク.会社コード +- xxx ワーク.処理日付 +- xxx ワーク.yyy 区分 ### 更新 -xxx予測ワークの以下の項目を更新する +xxx 予測ワークの以下の項目を更新する -- xxx予測ワーク.優先度 -- xxx予測ワーク.処理予定日 +- xxx 予測ワーク.優先度 +- xxx 予測ワーク.処理予定日 ## 補足事項 -### 1.xxx抽出 +### 1.xxx 抽出 xxx diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_2.0.md b/documents/forOpenAPISpecification/OpenAPI_Specification_2.0.md index 6e0a8571..942708c6 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_2.0.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_2.0.md @@ -17,9 +17,9 @@ meta: [OpenAPI Specification 2.0(Swagger, OAS2)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md)定義についてのコーディング規約をまとめます。より新しいバージョンとして OAS 3.0.3 規約(作成中)がありますので、ご注意ください。 -本規約の[前提条件](prerequisite.md)に従い作成されています。ToC向けのLSUDs(Large Set of Unknown Developers)なWeb APIにはマッチしない可能性があります。 +本規約の[前提条件](prerequisite.md)に従い作成されています。ToC 向けの LSUDs(Large Set of Unknown Developers)な Web API にはマッチしない可能性があります。 -Web API自体の設計については範囲外としますが、[API 設計標準](API_Design.md)に利用するステータスコードなどは記載しています。 +Web API 自体の設計については範囲外としますが、[API 設計標準](API_Design.md)に利用するステータスコードなどは記載しています。 ## ファイルフォーマット @@ -701,7 +701,6 @@ description: 検索結果の項目数上限(1~100が指定可能) 【注意】API 公開後に、default 値を変更してはならない(API の互換性が崩れるため)。もし変更する場合は、API のバージョンを上げること。 - ### 型・フォーマット 型(`type`)は `string(文字列)`, `number(数値)`, `integer(整数値)`, `boolean(真偽値)` `array(配列)`, `file(ファイル)` のうちどれか指定する. @@ -852,12 +851,12 @@ CORS(Cross-Origin Resource Sharing)のために、options メソッドの追 ## OpenTelemetry Traceparent HTTP Header -OpenOpenTelemetryで用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーはOpenAPIで **原則不要** とする。 +OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーは OpenAPI で **原則不要** とする。 理由は以下である。 -- OpenTelemetryが定めるヘッダー類は、API横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため -- 記載することにより、OpenOpenTelemetryに対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため +- OpenTelemetry が定めるヘッダー類は、API 横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため +- 記載することにより、OpenOpenTelemetry に対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため ## API のバージョン管理 diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md index 1448664b..2da9abe9 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md @@ -16,10 +16,10 @@ meta: # はじめに 本ドキュメントは [OpenAPI Specification 3.0.3](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md)に則った API ドキュメントを記述する際のコーディング規約をまとめている。 -旧バージョンである[OpenAPI Specification 2.0 の規約](OpenAPI_Specification_2.0.md)も存在するため、v2を使用している場合はそちらを参照されたい。 +旧バージョンである[OpenAPI Specification 2.0 の規約](OpenAPI_Specification_2.0.md)も存在するため、v2 を使用している場合はそちらを参照されたい。 -本規約は[前提条件](prerequisite.md)に基づいて作成されており、ToC向けの LSUDs(Large Set of Unknown Developers)向けの Web API には適合しない場合もあるのでご留意いただきたい。 -Web APIの設計自体はこの規約の範囲外であるが、[API 設計標準](API_Design.md) にステータスコード等の標準を記載しているため、必要に応じて参考にされたい。 +本規約は[前提条件](prerequisite.md)に基づいて作成されており、ToC 向けの LSUDs(Large Set of Unknown Developers)向けの Web API には適合しない場合もあるのでご留意いただきたい。 +Web API の設計自体はこの規約の範囲外であるが、[API 設計標準](API_Design.md) にステータスコード等の標準を記載しているため、必要に応じて参考にされたい。 ## ファイルフォーマット @@ -81,7 +81,7 @@ openapi: 3.0 WebAPI の総称を記載する。 -- システム名やサービス名 + API のような命名を推奨する。 +- システム名やサービス名 + API のような命名を推奨する。 良い例: @@ -99,10 +99,10 @@ Web API が提供する機能の概要・想定する利用者やユースケー この API 仕様のドキュメントのバージョンを記載する。アプリケーションのバージョン(git tag やリリースで管理するようなバージョン)とは別である。 - `major.minor` 形式を推奨する。 -`0.1 `固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとにマイナーバージョンをインクリメントしていく。 + `0.1 `固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとにマイナーバージョンをインクリメントしていく。 良い例: - + ```yaml info: version: 1.0 @@ -119,10 +119,10 @@ Web API が提供する機能の概要・想定する利用者やユースケー ## servers -Web API を提供するサーバの情報を記載する。 +Web API を提供するサーバの情報を記載する。 - `url`, `description` を必須項目とする。 -- ステージ(local, develop, staging など)が複数ある場合は各ステージ分の情報を記載する。 +- ステージ(local, develop, staging など)が複数ある場合は各ステージ分の情報を記載する。 - SSKDs 向けの Web API 開発においては本番環境の URL を不用意に公開したくないケースが多く、記載は避けるべきである。 良い例: @@ -149,19 +149,17 @@ servers: API の利用可能なエンドポイントと操作方法を記載する。 -- API ごとに機能IDを定義している場合、`paths` 配下の各パスは機能 ID の昇順に定義する。 +- API ごとに機能 ID を定義している場合、`paths` 配下の各パスは機能 ID の昇順に定義する。 - URL パスが複数の単語からなる場合、ケバブケースで表現する。 -- HTTP メソッドは `GET`, `POST`, `PUT`, `PATCH`, `DELETE` の順に定義する。 +- HTTP メソッドは `GET`, `POST`, `PUT`, `PATCH`, `DELETE` の順に定義する。 良い例: ```yaml paths: /products: - get: - ... - post: - ... + get: ... + post: ... ``` 悪い例: @@ -169,13 +167,11 @@ API の利用可能なエンドポイントと操作方法を記載する。 ```yaml paths: /products: - post: - ... - get: - ... + post: ... + get: ... ``` -- HTTPメソッドの配下に定義されるオペレーションオブジェクトは、下記の項目を必須項目とする。 +- HTTP メソッドの配下に定義されるオペレーションオブジェクトは、下記の項目を必須項目とする。 | フィールド名 | 必須 | 記載内容 | | ------------ | :--: | ---------------------------------------- | @@ -186,8 +182,7 @@ API の利用可能なエンドポイントと操作方法を記載する。 | parameters | | API のリクエストパラメータ | | requestBody | | API のリクエストボディ | | response | ○ | API のレスポンス | - | security | | API のセキュリティ機構 | - + | security | | API のセキュリティ機構 | ### paths > tags @@ -221,7 +216,7 @@ API の論理的なグループを指定する。 tags: [] ``` -- 1 API につき 1つのタグを指定すること。 +- 1 API につき 1 つのタグを指定すること。 良い例: @@ -251,8 +246,8 @@ API の論理的なグループを指定する。 API を識別するための一意な文字列を記載する。 -- HTTP メソッドとURLパスをアッパーキャメルケースで表現する。 - ただしOpenAPI ドキュメントのエディタとして広く使用されるStoplightが提供する[Linter](https://docs.stoplight.io/docs/spectral/674b27b261c3c-overview)の定義としてケバブケースが標準になっているため、Stoplightを使用する場合はケバブケースで表現しても良い。 +- HTTP メソッドと URL パスをアッパーキャメルケースで表現する。 + ただし OpenAPI ドキュメントのエディタとして広く使用される Stoplight が提供する[Linter](https://docs.stoplight.io/docs/spectral/674b27b261c3c-overview)の定義としてケバブケースが標準になっているため、Stoplight を使用する場合はケバブケースで表現しても良い。 良い例: @@ -290,12 +285,12 @@ API の操作概要を記載する。 paths: /users/me: get: - summary: API-001 ユーザアカウント取得 + summary: API-001 ユーザアカウント取得 ``` ### paths > description -APIの振る舞いの詳細や注意点を記載する。 +API の振る舞いの詳細や注意点を記載する。 別途参照させるべき設計書があるのであれば、設計書へのリンクを記載しても良い。 ### paths > parameters @@ -313,8 +308,8 @@ API のリクエストボディを記載する。 - リクエストボディを記載する。 標準仕様の [describing-request-body](https://swagger.io/docs/specification/describing-request-body/) の章にも記載がある通り、リクエストボディは `POST`、`PUT`、`PATCH` で使用され、`GET`、`DELETE`、`HEAD` には使用できない。 -- requestBodyの定義は、`components/requestBodies` で宣言し、`$refs` で参照する。 -- requestBodyの命名は、`Req` というプレフィクスと、`Body` というサフィックスで終える必要がある。 +- requestBody の定義は、`components/requestBodies` で宣言し、`$refs` で参照する。 +- requestBody の命名は、`Req` というプレフィクスと、`Body` というサフィックスで終える必要がある。 ```yaml paths: @@ -330,11 +325,11 @@ paths: API のレスポンスを記載する。 -- OpenAPI ドキュメントからソースコードを自動生成する際に生成されるのクラスや構造体の命名をコントロールしたい場合などにおいては、スキーマ定義は `components` オブジェクトとして任意の名称で定義し `$ref` で参照する。 +- OpenAPI ドキュメントからソースコードを自動生成する際に生成されるのクラスや構造体の命名をコントロールしたい場合などにおいては、スキーマ定義は `components` オブジェクトとして任意の名称で定義し `$ref` で参照する。 - スキーマ定義の名称は、全体で統一された命名ルールを定めること。(例. `operation_id` をアッパーキャメルケースへ変換の上、プレフィックスに `Res` を付与) - `schema` オブジェクトの `type` は `object` を指定する。 - 異常系(`4xx`, `5xx`)の HTTP ステータスコードに対応するレスポンス定義は設計者が個別に定義するのではなく、事前に共通的なレスポンスオブジェクトを定義し `$ref` で参照することが望ましい。 - ​ + ​ ```yaml paths: @@ -374,10 +369,10 @@ components: ### paths > security -APIの認証方式を記載する。 +API の認証方式を記載する。 -- 通常はルートレベルの `security` でAPI共通的な認証方式を設定し、個々のAPIで個別に設定は行わない。 -- ヘルスチェックのような認証を通す必要がないAPIのみ、上書きで定義する。 +- 通常はルートレベルの `security` で API 共通的な認証方式を設定し、個々の API で個別に設定は行わない。 +- ヘルスチェックのような認証を通す必要がない API のみ、上書きで定義する。 良い例; @@ -405,26 +400,26 @@ components: callbacks: ... ``` - ### schemas -- API定義共通で利用するスキーマを定義する。 -- schemasに定義する項目はリソースやエラー等のドメインオブジェクトのみとし、リクエストパラメータやレスポンスパラメータは`parameter`や`requestBodies`、`responses`に記載する。 +- API 定義共通で利用するスキーマを定義する。 +- schemas に定義する項目はリソースやエラー等のドメインオブジェクトのみとし、リクエストパラメータやレスポンスパラメータは`parameter`や`requestBodies`、`responses`に記載する。 + - `paths.requestBodies`から直接参照されるリクエストパラメータオブジェクトは`requestBodies`に定義する。 - - `paths`から直接参照されるレスポンスパラメータは`responses`に定義する。また400や500などのエラーレスポンスも`responses`に定義する。 - - HTTPヘッダやCookie、もしくは検索上限やページングのようなHTTPレイヤのパラメータに相当するものは`parameter`に定義する。 + - `paths`から直接参照されるレスポンスパラメータは`responses`に定義する。また 400 や 500 などのエラーレスポンスも`responses`に定義する。 + - HTTP ヘッダや Cookie、もしくは検索上限やページングのような HTTP レイヤのパラメータに相当するものは`parameter`に定義する。 - レスポンスヘッダーは`headers`にて定義する。 - - 上記いずれにも該当しないuserやidなどのリソース、エラーを示すオブジェクトは`schemas`に定義する。 - - 各APIのリクエストレスポンスオブジェクトは可能な限り、`parameter`,`requestBodies`,`responses`に定義する方針とし、API固有のオブジェクト(所謂`ReqXXX`、`ResXXX`等)は`schemas`には定義しない。 - - ただし、オブジェクトがネストしてしまう場合はAPI固有のオブジェクトであっても`schemas`に定義する。 - ※定義するオブジェクトの`properties`配下に更に`type: object`が定義されしまう(ネストしてしまう)と生成ツールによってはうまく型が生成されないため。 + - 上記いずれにも該当しない user や id などのリソース、エラーを示すオブジェクトは`schemas`に定義する。 + - 各 API のリクエストレスポンスオブジェクトは可能な限り、`parameter`,`requestBodies`,`responses`に定義する方針とし、API 固有のオブジェクト(所謂`ReqXXX`、`ResXXX`等)は`schemas`には定義しない。 + - ただし、オブジェクトがネストしてしまう場合は API 固有のオブジェクトであっても`schemas`に定義する。 + ※定義するオブジェクトの`properties`配下に更に`type: object`が定義されしまう(ネストしてしまう)と生成ツールによってはうまく型が生成されないため。 - 規約 - リソース名はアッパーキャメルケースで定義する。 - リソース名は単数形で定義する。 - `type` に複数の型定義の指定不可。 - - `type: null`は原則として利用せず、undefinedを利用する。 - [差分更新APIの場合](#差分更新-API-の場合)にあるとおり、空更新を行う場合は空文字を利用する。 + - `type: null`は原則として利用せず、undefined を利用する。 + [差分更新 API の場合](#差分更新-API-の場合)にあるとおり、空更新を行う場合は空文字を利用する。 - `allOf`、`anyOf`、`oneOf` を利用したスキーマ定義は許容しない。 ```yaml @@ -495,7 +490,7 @@ components: - `requestBody` 直下の `required` は必須で `true` を指定する - OpenAPI ドキュメントからソースコードを自動生成する際に生成されるのクラスや構造体の命名をコントロールしたい場合などにおいては、スキーマ定義は `component` オブジェクトとして任意の名称で定義し `$ref` で参照する。 -スキーマ定義の名称は、全体で統一された命名ルールを定めること。(例. `operation_id` をアッパーキャメルケースへ変換の上、プレフィックスに `Req` を付与) + スキーマ定義の名称は、全体で統一された命名ルールを定めること。(例. `operation_id` をアッパーキャメルケースへ変換の上、プレフィックスに `Req` を付与) - `schema` オブジェクトの `type` は `object` を指定する。 ```yaml @@ -503,21 +498,21 @@ components: schemas: Product: type: object - properties: - ... + properties: ... requestBodies: ReqPostProductsBody: required: true content: application/json: schema: - $ref: '#/components/schemas/Product' + $ref: "#/components/schemas/Product" ``` #### responses(components) -レスポンスの先頭には複数のエンドポイントで横断的に用いるモデルを定義する。例えば、ステータスコード400~500系のエラーモデルがある。 +レスポンスの先頭には複数のエンドポイントで横断的に用いるモデルを定義する。例えば、ステータスコード 400~500 系のエラーモデルがある。 ​ + ```yaml components: schemas: @@ -540,8 +535,9 @@ components: "$ref": "#/components/schemas/ProblemDetailError" ... ``` + ​ -正常系のレスポンスの例としてはファイルアップロード・ダウンロードなどが該当する。個別のアプリケーション要件でブレが少ないと複数のエンドポイントで用いられる場合に定義する。オブジェクトのスキーマは、schemasに切り出して定義し、コード生成ツールのために型情報を付与させる。 +正常系のレスポンスの例としてはファイルアップロード・ダウンロードなどが該当する。個別のアプリケーション要件でブレが少ないと複数のエンドポイントで用いられる場合に定義する。オブジェクトのスキーマは、schemas に切り出して定義し、コード生成ツールのために型情報を付与させる。 ```yaml components: @@ -577,7 +573,7 @@ components: format: binary ``` -それらの後に、paths登場順にエンドポイント固有のレスポンスを定義する。レスポンスオブジェクトのスキーマは、schemasに切り出して定義する。 +それらの後に、paths 登場順にエンドポイント固有のレスポンスを定義する。レスポンスオブジェクトのスキーマは、schemas に切り出して定義する。 ```yaml components: @@ -611,20 +607,19 @@ API 共通で利用するパラメータ(パスパラメータ、クエリパ ##### パスパラメータ - API 全体で利用されるパスパラメータが必要なケースが想定されないため、原則定義しない。 -特定リソースの操作(例えば更新と削除)を行う際のリソースIDはパスパラメータとして再利用できるが、コンフリクトを避けるため原則共通化は行わない。 + 特定リソースの操作(例えば更新と削除)を行う際のリソース ID はパスパラメータとして再利用できるが、コンフリクトを避けるため原則共通化は行わない。 ##### クエリパラメータ -- API 全体で利用可能な共通のクエリパラメータを定義する (例: 検索数のlimit, offset) +- API 全体で利用可能な共通のクエリパラメータを定義する (例: 検索数の limit, offset) - 命名は クエリパラメータ名に `Query` というプレフィクスを付与する形式を推奨する。 - ```yaml paths: get: /products: parameters: - - $ref: '#/components/parameters/QueryLimit' + - $ref: "#/components/parameters/QueryLimit" parameters: QueryLimit: @@ -646,8 +641,8 @@ paths: post: /products: parameters: - - $ref: '#/components/parameters/HeaderContentType' -... + - $ref: "#/components/parameters/HeaderContentType" +--- components: parameters: HeaderContentType: @@ -660,7 +655,7 @@ components: ##### Cookie パラメータ -- API 全体で利用可能な共通のCookieパラメータを定義する。(例: CSRF用のトークン) +- API 全体で利用可能な共通の Cookie パラメータを定義する。(例: CSRF 用のトークン) - 命名は Cookie パラメータ名に `Cookie` というプレフィクスを付与する形式を推奨する。 - Cookie 認証を定義する場合は、`APIKey` を利用すること。 @@ -669,8 +664,8 @@ paths: get: /products: parameters: - - $ref: '#/components/parameters/CookieCSRFToken' -... + - $ref: "#/components/parameters/CookieCSRFToken" +--- components: parameters: CookieCSRFToken: @@ -693,12 +688,11 @@ paths: get: /products: responses: - '200': + "200": headers: ContentType: - $ref: '#/components/headers/ContentType' -... - + $ref: "#/components/headers/ContentType" +--- components: headers: ContentType: @@ -709,50 +703,50 @@ components: ### securitySchemes -標準で用いるAPI認証の定義を行う。 +標準で用いる API 認証の定義を行う。 ```yaml # Bearer トークによる認証 securitySchemes: - BearerAuth: - type: http - scheme: bearer - bearerFormat: JWT - description: 'Bearer トークン認証' + BearerAuth: + type: http + scheme: bearer + bearerFormat: JWT + description: "Bearer トークン認証" ``` ### links -[links](https://swagger.io/docs/specification/links/) は OpenAPI 3.0 の新機能の1つで、あるAPIレスポンスの値を用いて、別のAPIを呼び出す方法を明示できるセクションである。 +[links](https://swagger.io/docs/specification/links/) は OpenAPI 3.0 の新機能の 1 つで、ある API レスポンスの値を用いて、別の API を呼び出す方法を明示できるセクションである。 -興味深い機能であり、APIのセマンティクスを伝えるのに有用であるが、本規約では記載しないことを推奨とする。 +興味深い機能であり、API のセマンティクスを伝えるのに有用であるが、本規約では記載しないことを推奨とする。 理由は下記の通りである。 -- 業務システムでは、業務フローを抑えておけば、API操作フローの理解はそこまで難しくないことが多い - - 逆に、API同士の関係だけを示すだけでは業務モデリング図とのダブルメンテナンスになったり、中途半端になりうる -- [OAS 3.0 Support Backlog](https://github.com/swagger-api/swagger-ui/issues/3641) にあるように、2023/12/15時点ではSwagger-UIが対応していない - - linksを書いたと言って、APIドキュメントに影響しない +- 業務システムでは、業務フローを抑えておけば、API 操作フローの理解はそこまで難しくないことが多い + - 逆に、API 同士の関係だけを示すだけでは業務モデリング図とのダブルメンテナンスになったり、中途半端になりうる +- [OAS 3.0 Support Backlog](https://github.com/swagger-api/swagger-ui/issues/3641) にあるように、2023/12/15 時点では Swagger-UI が対応していない + - links を書いたと言って、API ドキュメントに影響しない ### callbacks -[callbacks](https://swagger.io/docs/specification/callbacks/) は OpenAPI 3.0 の新機能の1つで、APIサーバ側が指定されたコールバックURLを呼び出すという仕組みである。 +[callbacks](https://swagger.io/docs/specification/callbacks/) は OpenAPI 3.0 の新機能の 1 つで、API サーバ側が指定されたコールバック URL を呼び出すという仕組みである。 -仕様書には、ECショップで購入のたびにマネージャーに通知を送るといった、何かしらの処理をトリガーにコールバックURLを呼び出す例が示されている。 +仕様書には、EC ショップで購入のたびにマネージャーに通知を送るといった、何かしらの処理をトリガーにコールバック URL を呼び出す例が示されている。 利便性は高い仕様だが、本規約では記載しないことを推奨とする。 理由は下記の通りである。 -- コールバックURL呼び出しの、エラーハンドリングが難しい +- コールバック URL 呼び出しの、エラーハンドリングが難しい - 業務システムでは欠損が許されない、または将来的に許されなくなる可能性があり、その場合にこの機能に頼ると想定以上の追加作業が発生する コールバックのような仕組みを実現するには、別途キューイングのメッセージサービスの利用などを検討する。 ## security -全APIに共通で適用されるセキュリティ設定を定義する。 -業務システムの Web API において 認証が全く存在しないケースは考えにくいため、本規約ではルートレベルで認証を設定し、個々のAPIへの適応漏れをなくす。 +全 API に共通で適用されるセキュリティ設定を定義する。 +業務システムの Web API において 認証が全く存在しないケースは考えにくいため、本規約ではルートレベルで認証を設定し、個々の API への適応漏れをなくす。 良い例: @@ -766,9 +760,9 @@ security: API を論理的にグループ化するためのタグを定義する。ドキュメントやツールにとって重要であるため、 **必須** で指定する。 - `name`, `description` を必須項目とする。 -- **単数形** で、小文字かつ半角スペース区切りで記載する。 - 半角スペース区切りで記載する理由は HTML ドキュメントで参照する場合の可読性を上げるためである。 -- コード生成で利用される(Go においてはパッケージ、 TypeScriptにおいてはクラスに相当する)ため、シンプルな命名にする。 +- **単数形** で、小文字かつ半角スペース区切りで記載する。 + 半角スペース区切りで記載する理由は  HTML ドキュメントで参照する場合の可読性を上げるためである。 +- コード生成で利用される(Go においてはパッケージ、 TypeScript においてはクラスに相当する)ため、シンプルな命名にする。 良い例: @@ -792,9 +786,8 @@ tags: ## externalDocs -参照情報としてのURLの記載が可能。 -ただし、`description` にて参考情報となるURLを記載する方が、複数リンクを指定可能であるなど自由度が高く使いやすい。そのため `externalDocs` は利用せず `description` の利用を推奨する。 - +参照情報としての URL の記載が可能。 +ただし、`description` にて参考情報となる URL を記載する方が、複数リンクを指定可能であるなど自由度が高く使いやすい。そのため `externalDocs` は利用せず `description` の利用を推奨する。 良い例: @@ -889,12 +882,12 @@ CORS(Cross-Origin Resource Sharing)のために、options メソッドの追 ## OpenTelemetry Traceparent HTTP Header -OpenOpenTelemetryで用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーはOpenAPIで **原則不要** とする。 +OpenOpenTelemetry で用いるられる[traceparent](https://www.w3.org/TR/trace-context/) のリクエストヘッダーは OpenAPI で **原則不要** とする。 理由は以下である。 -- OpenTelemetryが定めるヘッダー類は、API横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため -- 記載することにより、OpenOpenTelemetryに対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため +- OpenTelemetry が定めるヘッダー類は、API 横断的に設定されるべきものであり、ミドルウェアやフレームワーク側などでの一律の制御を推奨するため +- 記載することにより、OpenOpenTelemetry に対応していることを明記し開発者に周知できるメリットより、各アプリ開発者が生成されたコードで悩んだり、誤解されることを回避したいため ## バリデーションについて @@ -923,7 +916,6 @@ description: 検索結果の項目数上限(1~100が指定可能) 【注意】API 公開後に、default 値を変更してはならない(API の互換性が崩れるため)。もし変更する場合は、API のバージョンを上げること。 - ### 型・フォーマット 型(`type`)は `string(文字列)`, `number(数値)`, `integer(整数値)`, `boolean(真偽値)` `array(配列)` のうちどれか指定する. @@ -946,11 +938,11 @@ description: 検索結果の項目数上限(1~100が指定可能) - `password`: Swagger UI で入力が隠される - その他、 `email`, `uuid` など Open API 仕様に存在しない任意のフォーマットを独自のドキュメント生成などのために記載しても良い -OpenAPI 3.0では 2.0 に存在した `file` type は存在しない。もし同等の指定をしたい場合は、以下の様に指定する。 +OpenAPI 3.0 では 2.0 に存在した `file` type は存在しない。もし同等の指定をしたい場合は、以下の様に指定する。 ```yaml type: string -format: binary # binary file contents +format: binary # binary file contents ``` ### 桁 @@ -988,18 +980,18 @@ description: | 9: 適用不能 ``` -OpenAPI 3.0 では区分値の再利用ができるため、横断的に用いる区分値はcomponents側で定義する。 +OpenAPI 3.0 では区分値の再利用ができるため、横断的に用いる区分値は components 側で定義する。 ```yaml paths: /products: get: parameters: - - in: query - name: gender - required: true - schema: - $ref: '#/components/schemas/Gender' + - in: query + name: gender + required: true + schema: + $ref: "#/components/schemas/Gender" components: schemas: Gender: @@ -1150,143 +1142,144 @@ remind_time: // Deserialize decoder.Decode(&v) fmt.Printf("After decoded: %#v\n", v) - ``` - - シリアライズ後のjsonを見ると、値がセットされない場合には、項目にゼロ値(ポインタ型は`nil`, string型は空文字、int型は`0`)が入っている。 - - 項目がゼロ値の場合に`omitempty` が付与されていると、 項目ごと除外されている(`undefined` となっている)。 - - ```json - { - "not_nullable_string_1": "value", - "not_nullable_string_2": "", - "nullable_string_1": null, - "nullable_string_3": null, - "not_nullable_int_1": 1, - "not_nullable_int_2": 0, - "nullable_int_1": null, - "nullable_int_3": null - } - ``` +```` - - デシリアライズ後の構造体を見ると、json の項目が`undefined`であっても `null` であっても、`nil` として保持されている。 +- シリアライズ後のjsonを見ると、値がセットされない場合には、項目にゼロ値(ポインタ型は`nil`, string型は空文字、int型は`0`)が入っている。 +- 項目がゼロ値の場合に`omitempty` が付与されていると、 項目ごと除外されている(`undefined` となっている)。 - ```go - After decoded: - Data{ - NotNullableString1:"value", - NotNullableString2:"", - NullableString1:(*string)(nil), - NullableString2:(*string)(nil), - NullableString3:(*string)(nil), - NullableString4:(*string)(nil), - NotNullableInt1:1, - NotNullableInt2:0, - NullableInt1:(*int64)(nil), - NullableInt2:(*int64)(nil), - NullableInt3:(*int64)(nil), - NullableInt4:(*int64)(nil) - } - ``` +```json + { + "not_nullable_string_1": "value", + "not_nullable_string_2": "", + "nullable_string_1": null, + "nullable_string_3": null, + "not_nullable_int_1": 1, + "not_nullable_int_2": 0, + "nullable_int_1": null, + "nullable_int_3": null + } +```` + +- デシリアライズ後の構造体を見ると、json の項目が`undefined`であっても `null` であっても、`nil` として保持されている。 + +```go + After decoded: + Data{ + NotNullableString1:"value", + NotNullableString2:"", + NullableString1:(*string)(nil), + NullableString2:(*string)(nil), + NullableString3:(*string)(nil), + NullableString4:(*string)(nil), + NotNullableInt1:1, + NotNullableInt2:0, + NullableInt1:(*int64)(nil), + NullableInt2:(*int64)(nil), + NullableInt3:(*int64)(nil), + NullableInt4:(*int64)(nil) + } +```
Java - - Java の場合、`int` や `double` などのプリミティブ型は `null` になれないため、`nullable` にするためには、それぞれのラッパークラスである参照型(`Integer`, `Double` など)を使用する必要がある。 - - json にシリアライズ後に`null` の項目を保持するか否かは、例えば、[Jackson ライブラリ](https://github.com/FasterXML)を用いて以下のように区別される。 - - ```java - public class Data { - public Data(){}; - public Data(String str1, String str2, int notNullableInt){ - this.nullableString1 = str1; - this.nullableString2 = str2; - this.notNullableInt = notNullableInt; - }; - @JsonInclude(JsonInclude.Include.ALWAYS) - private String nullableString1; - - @JsonInclude(JsonInclude.Include.NON_NULL) - private String nullableString2; - - private int notNullableInt; - - // Setters - public void setNullableString1(String nullableString1) { - this.nullableString1 = nullableString1; - } - public void setNullableString2(String nullableString2) { - this.nullableString2 = nullableString2; - } - public void setNotNullableInt(int notNullableInt) { - this.notNullableInt = notNullableInt; - } - // Getters - public String getNullableString1() { - return nullableString1; - } - public String getNullableString2() { - return nullableString2; - } - public int getNotNullableInt() { - return notNullableInt; - } - } - ``` +- Java の場合、`int` や `double` などのプリミティブ型は `null` になれないため、`nullable` にするためには、それぞれのラッパークラスである参照型(`Integer`, `Double` など)を使用する必要がある。 +- json にシリアライズ後に`null` の項目を保持するか否かは、例えば、[Jackson ライブラリ](https://github.com/FasterXML)を用いて以下のように区別される。 + +```java + public class Data { + public Data(){}; + public Data(String str1, String str2, int notNullableInt){ + this.nullableString1 = str1; + this.nullableString2 = str2; + this.notNullableInt = notNullableInt; + }; + @JsonInclude(JsonInclude.Include.ALWAYS) + private String nullableString1; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String nullableString2; + + private int notNullableInt; + + // Setters + public void setNullableString1(String nullableString1) { + this.nullableString1 = nullableString1; + } + public void setNullableString2(String nullableString2) { + this.nullableString2 = nullableString2; + } + public void setNotNullableInt(int notNullableInt) { + this.notNullableInt = notNullableInt; + } + // Getters + public String getNullableString1() { + return nullableString1; + } + public String getNullableString2() { + return nullableString2; + } + public int getNotNullableInt() { + return notNullableInt; + } + } +``` - ```java - // Set nothing to the fields. - Data dataWithNothing = new Data(); - // Set intial values to the fields. - Data dataWithInitialValues = new Data(null,null,0); - // Set values to the fields. - Data dataWithValues = new Data("","",1); - - List dataList = Arrays.asList(dataWithNothing, dataWithInitialValues, dataWithValues); - ObjectMapper mapper = new ObjectMapper(); - for(Data d : dataList){ - // Serialize - String json = mapper.writeValueAsString(d); - System.out.println(json); - - // Deserialize - Data deserialized = mapper.readValue(json, Data.class); - System.out.println(ToStringBuilder.reflectionToString(deserialized, ToStringStyle.SHORT_PREFIX_STYLE)); - } - ``` +```java + // Set nothing to the fields. + Data dataWithNothing = new Data(); + // Set intial values to the fields. + Data dataWithInitialValues = new Data(null,null,0); + // Set values to the fields. + Data dataWithValues = new Data("","",1); + + List dataList = Arrays.asList(dataWithNothing, dataWithInitialValues, dataWithValues); + ObjectMapper mapper = new ObjectMapper(); + for(Data d : dataList){ + // Serialize + String json = mapper.writeValueAsString(d); + System.out.println(json); + + // Deserialize + Data deserialized = mapper.readValue(json, Data.class); + System.out.println(ToStringBuilder.reflectionToString(deserialized, ToStringStyle.SHORT_PREFIX_STYLE)); + } +``` - - シリアライズ後の json を見ると、参照型`String`の初期値は`null`、プリミティブ型`int`の初期値は`0`となっている。 - - `@JsonInclude(JsonInclude.Include.ALWAYS)` アノテーションを付与した項目は、値が`null`の場合でも項目が保持される。 - - `@JsonInclude(JsonInclude.Include.NON_NULL)` アノテーションを付与した項目は、値が`null`の場合には項目ごと除外されている(`undefined`となっている)。 +- シリアライズ後の json を見ると、参照型`String`の初期値は`null`、プリミティブ型`int`の初期値は`0`となっている。 +- `@JsonInclude(JsonInclude.Include.ALWAYS)` アノテーションを付与した項目は、値が`null`の場合でも項目が保持される。 +- `@JsonInclude(JsonInclude.Include.NON_NULL)` アノテーションを付与した項目は、値が`null`の場合には項目ごと除外されている(`undefined`となっている)。 - ```json - { - "nullableString1": null, - "notNullableInt": 0 - } +```json + { + "nullableString1": null, + "notNullableInt": 0 + } - { - "nullableString1": null, - "notNullableInt": 0 - } + { + "nullableString1": null, + "notNullableInt": 0 + } - { - "nullableString1": "", - "nullableString2": "", - "notNullableInt": 1 - } - ``` + { + "nullableString1": "", + "nullableString2": "", + "notNullableInt": 1 + } +``` - - デシリアライズ後のオブジェクトを見ると、json の項目が`undefined`であっても `null` であっても、`null` として保持されている。 +- デシリアライズ後のオブジェクトを見ると、json の項目が`undefined`であっても `null` であっても、`null` として保持されている。 - ```java - Data[nullableString1=,nullableString2=,notNullableInt=0] +```java + Data[nullableString1=,nullableString2=,notNullableInt=0] - Data[nullableString1=,nullableString2=,notNullableInt=0] + Data[nullableString1=,nullableString2=,notNullableInt=0] - Data[nullableString1=,nullableString2=,notNullableInt=1] - ``` + Data[nullableString1=,nullableString2=,notNullableInt=1] +```
@@ -1324,31 +1317,33 @@ remind_time: const deserialized: Data = JSON.parse(jsonString); console.log(deserialized) - ``` - - - シリアライズ後のjsonを見ると、`undefined`定義した項目は除外されている。 - - ```json - { - "nullable_string1": "value1", - "nullable_string2": "", - "nullable_string3": null, - "nullable_num1": 1, - "nullable_num2": 0, - "nullable_num3": null - } - ``` - - デシリアライズ後のオブジェクトを見ると、json の項目が`null` の場合にのみ`null` として保持されており、項目のない場合と区別されている。 +```` + +- シリアライズ後のjsonを見ると、`undefined`定義した項目は除外されている。 + +```json +{ + "nullable_string1": "value1", + "nullable_string2": "", + "nullable_string3": null, + "nullable_num1": 1, + "nullable_num2": 0, + "nullable_num3": null +} +```` + +- デシリアライズ後のオブジェクトを見ると、json の項目が`null` の場合にのみ`null` として保持されており、項目のない場合と区別されている。 + +```typescript +nullable_string1: "value1"; +nullable_string2: ""; +nullable_string3: null; +nullable_num1: 1; +nullable_num2: 0; +nullable_num3: null; +``` - ```typescript - nullable_string1: "value1"; - nullable_string2: ""; - nullable_string3: null; - nullable_num1: 1; - nullable_num2: 0; - nullable_num3: null; - ``` ### 参照リンク @@ -1361,450 +1356,448 @@ remind_time: OpenAPI ドキュメントは単一のファイルで構成することも複数の分割されたファイルで構成することもできるが、**複数のファイルに分割する**ことを推奨する。 理由は下記の通りである。 -- **APIごとに担当者を分けて設計する場合などに、複数人による編集によって意図しないコンフリクトが発生することを防ぐ。** +- **API ごとに担当者を分けて設計する場合などに、複数人による編集によって意図しないコンフリクトが発生することを防ぐ。** - **ファイルの肥大化による、可読性の低下を防ぐ。** ### 分割方法の選定 -開発方針やOpenAPIの使用用途に合わせて、都合の良いファイルの分割方法を採用する。例えば、以下のような方法がある。 +開発方針や OpenAPI の使用用途に合わせて、都合の良いファイルの分割方法を採用する。例えば、以下のような方法がある。 -1. APIごとに設計担当者を分けて、それぞれにOpenAPIを編集する場合は、APIの単位で分割する。 +1. API ごとに設計担当者を分けて、それぞれに OpenAPI を編集する場合は、API の単位で分割する。 2. テストツールとして [stoplightio/prism](https://github.com/stoplightio/prism)を使用する場合、テストケースごとにデータファイルを作成して、`examples` にファイルパスを指定する。 ### サンプル説明 -分割方法1, 2の両方に当てはまる場合のサンプルを用いて説明する。`openapi.yaml` とディレクトリ構成は下の通り。サンプルの全量は [サンプルzip Download](./reference/divided_files_sample.zip)からダウンロード可能。 +分割方法 1, 2 の両方に当てはまる場合のサンプルを用いて説明する。`openapi.yaml` とディレクトリ構成は下の通り。サンプルの全量は [サンプル zip Download](./reference/divided_files_sample.zip)からダウンロード可能。 -- 機能単位(path, method単位)にディレクトリを作成して、それぞれの定義ファイルを格納する。ディレクトリ名は `{path}_{method}` とすると管理し易い。 +- 機能単位(path, method 単位)にディレクトリを作成して、それぞれの定義ファイルを格納する。ディレクトリ名は `{path}_{method}` とすると管理し易い。 - `components` の `schemas` には、 - - API間で同じモデルを使用する場合は共通化して記載する(例えば、`Pet`)。 - - 各APIのリクエスト/リスポンスモデルの中で、モデルがネストする場合は、各モデルの単位で書き出す(例えば、`PetDetail`, `Pedigree`)。 - - ※schemasのモデルの中身は別ファイルに定義が可能だが、大本のopenapi.yamlにも命名のみ定義が必要。openapi.yamlの定義が無いとswaggerUIで確認した際にschemas定義が見えなくなってしまう。 + + - API 間で同じモデルを使用する場合は共通化して記載する(例えば、`Pet`)。 + - 各 API のリクエスト/リスポンスモデルの中で、モデルがネストする場合は、各モデルの単位で書き出す(例えば、`PetDetail`, `Pedigree`)。 + - ※schemas のモデルの中身は別ファイルに定義が可能だが、大本の openapi.yaml にも命名のみ定義が必要。openapi.yaml の定義が無いと swaggerUI で確認した際に schemas 定義が見えなくなってしまう。
ファイル分割例: openapi.yaml - ```yaml - openapi: "3.0.3" - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: http://petstore.swagger.io/v1 - tags: - - name: pets - description: Everything about your Pets - paths: - /pets: - get: - $ref: "./pets_get/pets_get.yaml#/operation" - post: - $ref: "./pets_post/pets_post.yaml#/operation" - /pets/{petId}: - get: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" - components: - schemas: - PetDetail: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" - Pedigree: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" - Pet: - $ref: "./common/pet.yaml" - Error: - $ref: "./common/error.yaml" - ``` + ```yaml + openapi: "3.0.3" + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: http://petstore.swagger.io/v1 + tags: + - name: pets + description: Everything about your Pets + paths: + /pets: + get: + $ref: "./pets_get/pets_get.yaml#/operation" + post: + $ref: "./pets_post/pets_post.yaml#/operation" + /pets/{petId}: + get: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" + components: + schemas: + PetDetail: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" + Pedigree: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" + Pet: + $ref: "./common/pet.yaml" + Error: + $ref: "./common/error.yaml" + ```
ファイル分割例: ディレクトリ構成 - ```sh - ├─openapi.gen.yaml - ├─openapi.yaml - │ - ├─common - │ ├─error.yaml - │ └─pet.yaml - │ - ├─pets-pet-id_get - │ ├─pets-pet-id_get.yaml - │ └─examples - │ └─res_example1.yaml - │ - ├─pets_get - │ ├─pets_get.yaml - │ └─examples - │ ├─res_example1.yaml - │ └─res_example2.yaml - │ - └─pets_post - ├─pets_post.yaml - └─examples - └─req_example1.yaml - ``` + ```sh + ├─openapi.gen.yaml + ├─openapi.yaml + │ + ├─common + │ ├─error.yaml + │ └─pet.yaml + │ + ├─pets-pet-id_get + │ ├─pets-pet-id_get.yaml + │ └─examples + │ └─res_example1.yaml + │ + ├─pets_get + │ ├─pets_get.yaml + │ └─examples + │ ├─res_example1.yaml + │ └─res_example2.yaml + │ + └─pets_post + ├─pets_post.yaml + └─examples + └─req_example1.yaml + ```
-- `openapi.yaml` の `paths` に記載したAPIファイルは以下のように作成する。 -- 複数API間に共通のモデルについては `openapi.yaml` に指定したキー(`../openapi.yaml#/components/schemas/Pet`)を参照する。 -- `examples` には、各APIのテストケースIDをキーとして指定(`ResExample1`)し、`value` に該当するテストケースのデータファイルパスを指定(`./examples/res_example1.yaml`)する。ファイル名は、指定したキーをスネークケースに変換したものを使用するとよい。 +- `openapi.yaml` の `paths` に記載した API ファイルは以下のように作成する。 +- 複数 API 間に共通のモデルについては `openapi.yaml` に指定したキー(`../openapi.yaml#/components/schemas/Pet`)を参照する。 +- `examples` には、各 API のテストケース ID をキーとして指定(`ResExample1`)し、`value` に該当するテストケースのデータファイルパスを指定(`./examples/res_example1.yaml`)する。ファイル名は、指定したキーをスネークケースに変換したものを使用するとよい。
API別ファイルの記載例: pets-pet-id_get.yaml - ```yaml - operation: - operationId: get-pets-pet-id - summary: Details for a pet + ```yaml + operation: + operationId: get-pets-pet-id + summary: Details for a pet + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/responses/ResPetsPetIdGet" + examples: + ResExample1: + value: + $ref: "./examples/res_example1.yaml" + "404": + description: not found error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ``` + +
+ +- OpenAPI の使用用途により、分割ファイルを 1 つのファイルにまとめる必要がある場合には、例えば[swagger-cli](https://apitools.dev/swagger-cli/)を使用して以下コマンドを実行する。 + + ```bash + swagger-cli bundle openapi.yaml --outfile openapi.gen.yaml --type yaml + ``` + +
+ ファイルBundle後: openapi.gen.yaml + + ```yaml + openapi: 3.0.3 + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: "http://petstore.swagger.io/v1" + tags: + - name: pets + description: Everything about your Pets + paths: + /pets: + get: + summary: List all pets + operationId: get-pets tags: - pets parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false schema: - type: string + type: integer + maximum: 100 + format: int32 responses: "200": - description: Expected response to a valid request + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string content: application/json: schema: - $ref: "#/components/responses/ResPetsPetIdGet" + type: array + maxItems: 100 + items: + type: object + required: + - id + - name + - category + - age + - sex + properties: + id: + type: integer + format: int64 + name: + type: string + maxLength: 50 + category: + type: string + maxLength: 10 + sub_category: + type: string + maxLength: 50 + age: + type: integer + format: int32 + sex: + type: string + maxLength: 6 + note: + type: string + maxLength: 200 + tag: + type: string + maxLength: 20 examples: ResExample1: value: - $ref: "./examples/res_example1.yaml" + - id: 10001 + name: ToyPoodle + category: dog + sub_category: ToyPoodle + age: 1 + sex: male + note: friendly + tag: dog10001 + - id: 10002 + name: Chihuahua + category: dog + sub_category: Chihuahua + age: 1 + sex: female + note: friendly + tag: dog10002 + - id: 10003 + name: Shiba + category: dog + sub_category: Shiba + age: 1 + sex: male + note: friendly + tag: dog10003 + - id: 10004 + name: MiniatureDachshund + category: dog + sub_category: MiniatureDachshund + age: 1 + sex: female + note: friendly + tag: dog10004 + ResExample2: + value: [] "404": description: not found error content: application/json: schema: - $ref: "../openapi.yaml#/components/schemas/Error" + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string "500": description: unexpected error content: application/json: schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: - type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` - -
- - -- OpenAPIの使用用途により、分割ファイルを1つのファイルにまとめる必要がある場合には、例えば[swagger-cli](https://apitools.dev/swagger-cli/)を使用して以下コマンドを実行する。 - - ```bash - swagger-cli bundle openapi.yaml --outfile openapi.gen.yaml --type yaml - ``` - -
- ファイルBundle後: openapi.gen.yaml - - ```yaml - openapi: 3.0.3 - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: 'http://petstore.swagger.io/v1' - tags: - - name: pets - description: Everything about your Pets - paths: - /pets: - get: - summary: List all pets - operationId: get-pets - tags: - - pets - parameters: - - name: limit - in: query - description: How many items to return at one time (max 100) - required: false + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + post: + summary: Register a pet + operationId: post-pets + tags: + - pets + requestBody: + content: + application/json: schema: - type: integer - maximum: 100 - format: int32 - responses: - '200': - description: A paged array of pets - headers: - x-next: - description: A link to the next page of responses - schema: - type: string - content: - application/json: - schema: - type: array - maxItems: 100 - items: - type: object - required: - - id - - name - - category - - age - - sex - properties: - id: - type: integer - format: int64 - name: - type: string - maxLength: 50 - category: - type: string - maxLength: 10 - sub_category: - type: string - maxLength: 50 - age: - type: integer - format: int32 - sex: - type: string - maxLength: 6 - note: - type: string - maxLength: 200 - tag: - type: string - maxLength: 20 - examples: - ResExample1: - value: - - id: 10001 - name: ToyPoodle - category: dog - sub_category: ToyPoodle - age: 1 - sex: male - note: friendly - tag: dog10001 - - id: 10002 - name: Chihuahua - category: dog - sub_category: Chihuahua - age: 1 - sex: female - note: friendly - tag: dog10002 - - id: 10003 - name: Shiba - category: dog - sub_category: Shiba - age: 1 - sex: male - note: friendly - tag: dog10003 - - id: 10004 - name: MiniatureDachshund - category: dog - sub_category: MiniatureDachshund - age: 1 - sex: female - note: friendly - tag: dog10004 - ResExample2: - value: [] - '404': - description: not found error - content: - application/json: - schema: - type: object - required: - - code - - message - properties: - code: - type: integer - format: int32 - message: - type: string - '500': - description: unexpected error - content: - application/json: - schema: - $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' - post: - summary: Register a pet - operationId: post-pets - tags: - - pets - requestBody: + required: + - pet + type: object + properties: + pet: + $ref: "#/paths/~1pets/get/responses/200/content/application~1json/schema/items" + examples: + ReqExample1: + value: + pet: + id: 10005 + name: FrenchBulldog + category: dog + sub_category: FrenchBulldog + age: 1 + sex: male + note: friendly + tag: dog10005 + required: false + responses: + "201": + description: Null response + "404": + description: not found error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "/pets/{petId}": + get: + summary: Details for a pet + operationId: get-pets-pet-id + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + "200": + description: Expected response to a valid request content: application/json: schema: required: - pet + - pet_detail type: object properties: pet: - $ref: '#/paths/~1pets/get/responses/200/content/application~1json/schema/items' + $ref: "#/paths/~1pets/get/responses/200/content/application~1json/schema/items" + pet_detail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string examples: - ReqExample1: + ResExample1: value: pet: - id: 10005 - name: FrenchBulldog + id: 10001 + name: ToyPoodle category: dog - sub_category: FrenchBulldog + sub_category: ToyPoodle age: 1 sex: male note: friendly - tag: dog10005 - required: false - responses: - '201': - description: Null response - '404': - description: not found error - content: - application/json: - schema: - $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' - '500': - description: unexpected error - content: - application/json: - schema: - $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' - '/pets/{petId}': - get: - summary: Details for a pet - operationId: get-pets-pet-id - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - '200': - description: Expected response to a valid request - content: - application/json: - schema: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: '#/paths/~1pets/get/responses/200/content/application~1json/schema/items' + tag: dog10001 pet_detail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: - type: string - examples: - ResExample1: - value: - pet: - id: 10001 - name: ToyPoodle - category: dog - sub_category: ToyPoodle - age: 1 - sex: male - note: friendly - tag: dog10001 - pet_detail: - breeder: BreederName - date_of_birth: '2023-10-31' - pedigree: - registration_no: 11111111 - date_of_registration: '2023-10-31' - pedigree_image: 9j2wBDAA...8QAPxAAAQQABAMGBAYDAAEDAg - '404': - description: not found error - content: - application/json: - schema: - $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' - '500': - description: unexpected error - content: - application/json: - schema: - $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' - - ``` + breeder: BreederName + date_of_birth: "2023-10-31" + pedigree: + registration_no: 11111111 + date_of_registration: "2023-10-31" + pedigree_image: 9j2wBDAA...8QAPxAAAQQABAMGBAYDAAEDAg + "404": + description: not found error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + ```
- --- # License diff --git a/documents/forOpenAPISpecification/file_standards.md b/documents/forOpenAPISpecification/file_standards.md index 607b6006..a618043a 100644 --- a/documents/forOpenAPISpecification/file_standards.md +++ b/documents/forOpenAPISpecification/file_standards.md @@ -8,13 +8,13 @@ OpenAPI ドキュメントは JSON 形式、YAML 形式いずれかのフォー ## ファイル名 -ファイルの拡張子は `yaml` とする。通常ファイル名は `api.yaml` や `swagger.yaml`(v2の場合) を推奨する。 +ファイルの拡張子は `yaml` とする。通常ファイル名は `api.yaml` や `swagger.yaml`(v2 の場合) を推奨する。 もし、複数の Swagger 定義を管理するため区別したい場合は `${service}_api.yaml` とする。 `${service}` にはサービス名を指定する -## YAMLバージョン +## YAML バージョン [YAML v1.2](https://yaml.org/spec/1.2.2/#61-indentation-spaces)を用いる。 @@ -44,7 +44,7 @@ description: "何かしらの説明" - Bool として認識させたくない("true", "false", "yes", "no", "y", "n", "on", "off") - `#` で始まる文字列(`#` はコメントを示す記号のためである。例: `#/definitions/Users`) -## YAML配列スタイル +## YAML 配列スタイル - 複数項目を指定する場合は、 **Flow style(配列スキーム)** を用いることを推奨する diff --git a/documents/forOpenAPISpecification/prerequisite.md b/documents/forOpenAPISpecification/prerequisite.md index 9abc9e35..932fc883 100644 --- a/documents/forOpenAPISpecification/prerequisite.md +++ b/documents/forOpenAPISpecification/prerequisite.md @@ -5,9 +5,11 @@ - 業務システム向けの Web API 提供 - サードパーティ向けに広く開発する Web API ではなく、限られたクライアントやシステムと連携すること - いわゆる、LSUDs(Large Set of Unknown Developers)ではなく、SSKDs(Small Set of Known Developers)を対象とする -* RESTish なWeb API - * 原理的なRESTを必ずしも守る必要はないが、例えばHTTPメソッドは、参照はGET、登録はPOST、更新はPUTやPATCH、削除はDELETEで使い分けていたり、Web APIの要求が成功すれば200(OK)、204(No Content)を返し、リソースが無ければ404(Not Found)、操作に失敗すれば500系のエラーを返すといったことを指す - * 本規約を利用するに当たり必須条件ではないが、定義例などはそれに基づいて記載しているので注意する + +* RESTish な Web API + - 原理的な REST を必ずしも守る必要はないが、例えば HTTP メソッドは、参照は GET、登録は POST、更新は PUT や PATCH、削除は DELETE で使い分けていたり、Web API の要求が成功すれば 200(OK)、204(No Content)を返し、リソースが無ければ 404(Not Found)、操作に失敗すれば 500 系のエラーを返すといったことを指す + - 本規約を利用するに当たり必須条件ではないが、定義例などはそれに基づいて記載しているので注意する + - スキーマファースト - OpenAPI Specification の定義ファイルを駆動に、クライアント・サーバサイドのコード生成やモック時の利用に用い、高速な Web API 開発につなげることを前提とする - Python における、FastAPI・Django REST Framework のように、アプリケーションコードから OpenAPI document を自動生成する開発手法も存在するが、本規約はこれは想定しない diff --git a/documents/forOpenAPISpecification/reference/DB_OpenAPI_Mapping_Example.md b/documents/forOpenAPISpecification/reference/DB_OpenAPI_Mapping_Example.md index 52dfdd31..2ad456c7 100644 --- a/documents/forOpenAPISpecification/reference/DB_OpenAPI_Mapping_Example.md +++ b/documents/forOpenAPISpecification/reference/DB_OpenAPI_Mapping_Example.md @@ -1,18 +1,18 @@ # DB OpenAPI Mapping Example -|データの種類|DB型|DDL定義|OpenAPI
項目必須/非必須|OpenAPI
Type/その他定義|API
リクエスト/リスポンス|備考| -|:----|:----|:----|:----|:----|:----|:----| -|区分値|varchar|NOT NULL, カラム名 <> ''|required|string/enum|項目必須、空値は許容しない| | -| | |NOT NULL default ''|-|string/enum|項目非必須、空値はundefinedまたは空文字として定義|空値を空文字で定義する場合、enumに空文字を含む必要がある。| -|フラグ|varchar|NOT NULL, カラム名 <> ''|required|string/enum|項目必須、空値は許容しない| | -| | |NOT NULL default ''|-|string/enum|項目非必須、空値はundefinedまたは空文字として定義|空値を空文字で定義する場合、enumに空文字を含む必要がある。| -|数値|integer|NOT NULL|required|integer|項目必須、空値は許容しない| | -| | |-|nullable: true|integer|項目非必須、空値はundefinedまたはnullとして定義| | -|数値(精度有)|numeric|NOT NULL|required|string/正規表現pattern|項目必須、空値は許容しない| | -| | |-|nullable: true|string/正規表現pattern|項目非必須、空値はundefinedまたはnullとして定義| | -|日付/時刻|date / timestamp|NOT NULL|required|string/format指定または正規表現pattern|項目必須、空値は許容しない| | -| | |-|nullable: true|string/format指定または正規表現pattern|項目非必須、空値はundefinedまたはnullとして定義| | -|コード/番号|varchar|NOT NULL, カラム名 <> ''|required|string/正規表現patternや桁数指定|項目必須、空値は許容しない| | -| | |NOT NULL default ''|-|string/正規表現patternや桁数指定|項目非必須、空値はundefinedまたは空文字として定義| | -|名前 / メモ|varchar / text|NOT NULL, カラム名 <> ''|required|string/正規表現patternや桁数指定|項目必須、空値は許容しない| | -| | |NOT NULL default ''|-|string/正規表現patternや桁数指定|項目非必須、空値はundefinedまたは空文字として定義| | +| データの種類 | DB 型 | DDL 定義 | OpenAPI
項目必須/非必須 | OpenAPI
Type/その他定義 | API
リクエスト/リスポンス | 備考 | +| :------------- | :--------------- | :----------------------- | :------------------------- | :--------------------------------------- | :-------------------------------------------------- | :---------------------------------------------------------- | +| 区分値 | varchar | NOT NULL, カラム名 <> '' | required | string/enum | 項目必須、空値は許容しない | | +| | | NOT NULL default '' | - | string/enum | 項目非必須、空値は undefined または空文字として定義 | 空値を空文字で定義する場合、enum に空文字を含む必要がある。 | +| フラグ | varchar | NOT NULL, カラム名 <> '' | required | string/enum | 項目必須、空値は許容しない | | +| | | NOT NULL default '' | - | string/enum | 項目非必須、空値は undefined または空文字として定義 | 空値を空文字で定義する場合、enum に空文字を含む必要がある。 | +| 数値 | integer | NOT NULL | required | integer | 項目必須、空値は許容しない | | +| | | - | nullable: true | integer | 項目非必須、空値は undefined または null として定義 | | +| 数値(精度有) | numeric | NOT NULL | required | string/正規表現 pattern | 項目必須、空値は許容しない | | +| | | - | nullable: true | string/正規表現 pattern | 項目非必須、空値は undefined または null として定義 | | +| 日付/時刻 | date / timestamp | NOT NULL | required | string/format 指定または正規表現 pattern | 項目必須、空値は許容しない | | +| | | - | nullable: true | string/format 指定または正規表現 pattern | 項目非必須、空値は undefined または null として定義 | | +| コード/番号 | varchar | NOT NULL, カラム名 <> '' | required | string/正規表現 pattern や桁数指定 | 項目必須、空値は許容しない | | +| | | NOT NULL default '' | - | string/正規表現 pattern や桁数指定 | 項目非必須、空値は undefined または空文字として定義 | | +| 名前 / メモ | varchar / text | NOT NULL, カラム名 <> '' | required | string/正規表現 pattern や桁数指定 | 項目必須、空値は許容しない | | +| | | NOT NULL default '' | - | string/正規表現 pattern や桁数指定 | 項目非必須、空値は undefined または空文字として定義 | | From 4c9fd8fb1ddeabccd8493ae9c324ba2f8addcd58 Mon Sep 17 00:00:00 2001 From: shotashota Date: Fri, 8 Mar 2024 14:53:33 +0900 Subject: [PATCH 08/27] add api get --- documents/forMarkdown/API_GET.md | 67 ++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 documents/forMarkdown/API_GET.md diff --git a/documents/forMarkdown/API_GET.md b/documents/forMarkdown/API_GET.md new file mode 100644 index 00000000..b490d1b3 --- /dev/null +++ b/documents/forMarkdown/API_GET.md @@ -0,0 +1,67 @@ +# [機能ID] 会員情報取得API GET /${パス} + +## 説明 + +- ユーザの会員情報を参照するAPI + +## 仕様 + +- ユーザの属性を参照する。 + - ユーザーマスタの全属性を返却する。 +- DBへのSELECT時に使用する当該ユーザのキーはアクセストークン.subとする + +## シーケンス図 + +```mermaid + + +sequenceDiagram +participant "Backend" as Backend +participant "DB" as db + +user ->> Backend: API Request + +note over Backend,db: 1. Retrieve user and physical subscription information + + Backend ->> db: 1.1 Select m_user, m_physical_sub_info + + alt no record + <- Backend: 1.1.1 Response status code: 400 + end + +note over Backend,db + 2. Retrieve required basic user attributes and + physical subscription information requirements for registered courses +end note + Backend -> db: 2.1 Select t_course_registration,\nm_course_basic_user_attribute, m_course + +<- Backend: Return response and status code: 200 + +@enduml + +``` + +## Request & Response + +### Request + +- なし + +### Response + +| Parameter | Description | Settings | Note | +| ------------------------------ | ------------------------------------------------------------------------------------------- | ---------------------------------- | ---- | +| last_name | 氏名 (姓) | m_user | | +| first_name | 氏名 (名) | m_user | | +| last_name_kana | 氏名カナ (姓) | m_user | | +| first_name_kana | 氏名カナ (名) | m_user | | +| date_of_birth | 生年月日 | m_user | | +| gender_type | 性別区分 | m_user | | +| tel | 電話番号 | m_user | | +| occupation_type | 職業区分 | m_user | | +| zipcode | 郵便番号 | m_user | | +| pref_code | 都道府県コード | m_user | | +| town | 市区町村大字 | m_user | | +| building | 番地・マンション名 | m_user | | +| address_kana | 住所カナ | m_user | | + From 64deac6c7eb2e48e642579d9a2cac2d45aaaf92e Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 22 Mar 2024 16:19:36 +0900 Subject: [PATCH 09/27] =?UTF-8?q?=E7=94=BB=E9=9D=A2=E8=A8=AD=E8=A8=88?= =?UTF-8?q?=E6=9B=B8=E3=81=AE=E3=82=B5=E3=83=B3=E3=83=97=E3=83=ABMarkdown?= =?UTF-8?q?=E3=82=92=E8=BF=BD=E5=8A=A0=20(#107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documents/forMarkdown/README.md | 26 +++----- ...42\350\250\255\350\250\210\346\233\270.md" | 62 +++++++++++++++++++ 2 files changed, 72 insertions(+), 16 deletions(-) create mode 100644 "documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" diff --git a/documents/forMarkdown/README.md b/documents/forMarkdown/README.md index 76629d92..94bc02c9 100644 --- a/documents/forMarkdown/README.md +++ b/documents/forMarkdown/README.md @@ -55,15 +55,14 @@ docs ├── 01_キャッチアップ # ドメイン知識など抑えておくべき前提知識 ├── 02_環境構築 # ├── 03_開発規約 # GitFlowなど、リリース方式、CI/CD周り -├── 04_ユーザーストーリー # -├── 05_画面レイアウト # Figmaのパスなど -├── 06_画面遷移図 # -├── 07_画面アクション -├── 08_API設計書 # OpenAPIのパス+各BL設計 -├── 09_データモデル # ERD, テーブル定義 -├── 10_IF設計書 # I/F定義+受信/送信BL設計 -├── 11_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 -├── 12_インフラ設計 # 監視、キャパシティサイジング、コスト +├── 04_ユーザーストーリー +├── 05_UI設計 # Figmaのパスなど +├── 06_画面設計書 +├── 07_API設計書 # OpenAPIのパス+各BL設計 +├── 08_データモデル # ERD, テーブル定義 +├── 09_IF設計書 # I/F定義+受信/送信BL設計 +├── 10_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 +├── 11_インフラ設計 # 監視、キャパシティサイジング、コスト ├── ... └── README.md ``` @@ -74,13 +73,8 @@ TODO 論理, 物理, etc. ## フロントエンド -### 画面遷移 - -TODO - -### 画面 xxx - -TODO +- UI設計(Figma) +- [](画面設計書.md) ## バックエンド diff --git "a/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" new file mode 100644 index 00000000..350e2689 --- /dev/null +++ "b/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" @@ -0,0 +1,62 @@ +# [機能ID] xxx売上履歴表示 + +## 概要 + +機能目的: + +- 確認ステータス、スキップステータスをもとに、過去のxxx売上履歴を確認する + +機能概要: + +- 過去1年分の売上履歴を対象に、検索表示する +- スキップ設定や確認ステータスの更新を行う + +## イベント概要 + +| No | イベント名 | イベント分類 |     処理説明 | +|--- |-----------------------------------------|---------------|------------------------------------------------| +| 1 | 初期表示 | 初期表示 | 初期検索条件に従いAPIを実行し、履歴表示する | +| 2 | 履歴検索 | ボタン押下 | 検索条件エリアの条件に従い、履歴の検索を行う | +| 3 | 保存 | ボタン押下 | 履歴テーブルで書き込んだ、スキップ、確認済の保存を行う | +| 4 | 検索結果 ページ送り/戻し | ボタン押下 | テーブルあたりの行数プルダウンで設定された行数に応じて表示切替する | +| 5 | 検索結果 ページ送り(100件以降データ) | ボタン押下 | 検索結果の表で、ページ送りする際、100件以降のデータの場合は再度APIに問い合わせ描画する | +| 6 | 画面入力値チェック | ボタン押下 | 検索条件のバリデーションチェックを行う | + +## イベント詳細 + +### 1. 初期表示 + +起動パラメータ: + +| Name | Value | Memo | +| --- | --- | --- | +| userState | {/* 略 */} | xxx状態 | + +初期表示イベント: + +- xxx + +利用API: + +| ID | オプション | +| --- | --- | +| API031 | /v1/salesresult?q=xxxx&date=${current_ymd} | + +画面表示制御: + +- 0件時 + - 空テーブル表示(メッセージは表示しない) +- HTTPステータスが200以外 + - メッセージID(MSG_BIZ_111)表示 + +### 2. 履歴検索 + +/v1/salesresult?q=xxxx&date=${current_ymd} + +### 3. 保存 + +### 4. 検索結果 ページ送り/戻し + +### 5. 検索結果 ページ送り(100件以降データ) + +### 6. 画面入力値チェック From 6ef7e71d132bd2805fc82b26a2fae96b8adff0d2 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Mon, 22 Apr 2024 17:27:51 +0900 Subject: [PATCH 10/27] Add future muscle partner ERD (#112) --- .../future_muscle_partner/erd.a5er | 364 ++++++++++++++++++ 1 file changed, 364 insertions(+) create mode 100644 documents/forMarkdown/future_muscle_partner/erd.a5er diff --git a/documents/forMarkdown/future_muscle_partner/erd.a5er b/documents/forMarkdown/future_muscle_partner/erd.a5er new file mode 100644 index 00000000..0f75bab0 --- /dev/null +++ b/documents/forMarkdown/future_muscle_partner/erd.a5er @@ -0,0 +1,364 @@ +# A5:ER FORMAT:18 +# A5:ER ENCODING:UTF8 +# A5:ER Mk-1 Copyright © 2007 m.matsubara +# A5:SQL Mk-2 Version 2.19.0 Copyright © 1997 - 2024 m.matsubara +# https://a5m2.mmatsubara.com + +[Manager] +ProjectName=フューチャーマッスルパートナー +Author= +MaxEntityRowShow=1000 +ReadOnlyRecommend=0 +Page=Main +PageInfo="Main",2,"A3Landscape",$FFFFFF +LogicalView=1 +DecodeDomain=0 +ViewModePageIndividually=1 +ViewMode=2 +ViewFormat=0 +UseNondependenceDashLine=0 +FontName=Tahoma +FontSize=6 +PaperSize=A4Landscape +HeaderLeft= +HeaderCenter= +HeaderRight= +FooterLeft= +FooterCenter= +FooterRight= +ShowPageoutRelation=1 +RDBMSTypeName=Oracle Database +DefaultPkName=%0:s_PKC +DefaultPkIndexName=%0:s_PKI +DefaultIndexName=%0:s_IX%1:d +DefaultFkName=%0:s_FK%1:d +SqlSeparator=0 +UpperCaseKeyword=0 +ShowTag=1 +ShowCommonAttributes=0 +BugFixEntityWidth=1 + +[Entity] +PName=trainee +LName=トレーニー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=900 +Top=400 +Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="表示氏名","display_name","",,,"","",$FFFFFFFF,"" +Field="自己紹介","self_introduction","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419164924 +Position="MAIN",900,400,254,275 +ZOrder=1 + +[Entity] +PName=booking +LName=予約 +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1100 +Top=950 +Field="予約ID","booking_id","",,,"","",$FFFFFFFF,"" +Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" +Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="開始日時","start_at","",,,"","",$FFFFFFFF,"" +Field="終了日時","end_at","",,,"","",$FFFFFFFF,"" +Field="予約ステータス区分","booking_status_typ","",,,"","",$FFFFFFFF,"" +Field="予約受付日時","booking_reception_at","",,,"","",$FFFFFFFF,"" +Field="トレーニング開始日時","training_start_at","",,,"","",$FFFFFFFF,"" +Field="トレーニング終了日時","training_end_at","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419165003 +Position="MAIN",1100,950,283,349 +ZOrder=2 + +[Entity] +PName=menu +LName=メニュー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1300 +Top=400 +Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="表示順序","display_order","",,,"","",$FFFFFFFF,"" +Field="メニュー名","menu_name","",,,"","",$FFFFFFFF,"" +Field="メニュー説明","menu_description","",,,"","",$FFFFFFFF,"" +Field="所要時間","required_time","",,,"","",$FFFFFFFF,"" +Field="料金","price","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419161745 +Position="MAIN",1300,400,238,333 +ZOrder=3 + +[Entity] +PName=trainer +LName=トレーナー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=400 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="単価","unit_price","",,,"","",$FFFFFFFF,"" +Field="営業開始時間","business_start_at","",,,"","",$FFFFFFFF,"" +Field="営業終了時間","business_end_at","",,,"","",$FFFFFFFF,"" +Field="公開メールアドレス","public_mail_addr","",,,"","",$FFFFFFFF,"" +Field="公開電話番号","public_tel","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419164109 +Position="MAIN",1650,400,426,296 +ZOrder=4 + +[Entity] +PName=calendar +LName=カレンダー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=850 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="日付","date","",,,"","",$FFFFFFFF,"" +Field="予約区分0000","booking_typ_0000","",,,"","",$FFFFFFFF,"" +Field="予約区分0030","予約区分0030","",,,"","",$FFFFFFFF,"" +Field="予約区分0100","予約区分0100","",,,"","",$FFFFFFFF,"" +Field="予約区分0130","予約区分0130","",,,"","",$FFFFFFFF,"" +Field="予約区分0200","予約区分0200","",,,"","",$FFFFFFFF,"" +Field="予約区分0230","予約区分0230","",,,"","",$FFFFFFFF,"" +Field="予約区分0300","予約区分0300","",,,"","",$FFFFFFFF,"" +Field="予約区分0330","予約区分0330","",,,"","",$FFFFFFFF,"" +Field="予約区分0400","予約区分0400","",,,"","",$FFFFFFFF,"" +Field="予約区分0430","予約区分0430","",,,"","",$FFFFFFFF,"" +Field="予約区分0500","予約区分0500","",,,"","",$FFFFFFFF,"" +Field="予約区分0530","予約区分0530","",,,"","",$FFFFFFFF,"" +Field="予約区分0600","予約区分0600","",,,"","",$FFFFFFFF,"" +Field="予約区分0630","予約区分0630","",,,"","",$FFFFFFFF,"" +Field="予約区分0700","予約区分0700","",,,"","",$FFFFFFFF,"" +Field="予約区分0730","予約区分0730","",,,"","",$FFFFFFFF,"" +Field="予約区分0800","予約区分0800","",,,"","",$FFFFFFFF,"" +Field="予約区分0830","予約区分0830","",,,"","",$FFFFFFFF,"" +Field="予約区分0900","予約区分0900","",,,"","",$FFFFFFFF,"" +Field="予約区分0930","予約区分0930","",,,"","",$FFFFFFFF,"" +Field="予約区分1000","予約区分1000","",,,"","",$FFFFFFFF,"" +Field="予約区分1030","予約区分1030","",,,"","",$FFFFFFFF,"" +Field="予約区分1100","予約区分1100","",,,"","",$FFFFFFFF,"" +Field="予約区分1130","予約区分1130","",,,"","",$FFFFFFFF,"" +Field="予約区分1200","予約区分1200","",,,"","",$FFFFFFFF,"" +Field="予約区分1230","予約区分1230","",,,"","",$FFFFFFFF,"" +Field="予約区分1300","予約区分1300","",,,"","",$FFFFFFFF,"" +Field="予約区分1330","予約区分1330","",,,"","",$FFFFFFFF,"" +Field="予約区分1400","予約区分1400","",,,"","",$FFFFFFFF,"" +Field="予約区分1430","予約区分1430","",,,"","",$FFFFFFFF,"" +Field="予約区分1500","予約区分1500","",,,"","",$FFFFFFFF,"" +Field="予約区分1530","予約区分1530","",,,"","",$FFFFFFFF,"" +Field="予約区分1600","予約区分1600","",,,"","",$FFFFFFFF,"" +Field="予約区分1630","予約区分1630","",,,"","",$FFFFFFFF,"" +Field="予約区分1700","予約区分1700","",,,"","",$FFFFFFFF,"" +Field="予約区分1730","予約区分1730","",,,"","",$FFFFFFFF,"" +Field="予約区分1800","予約区分1800","",,,"","",$FFFFFFFF,"" +Field="予約区分1830","予約区分1830","",,,"","",$FFFFFFFF,"" +Field="予約区分1900","予約区分1900","",,,"","",$FFFFFFFF,"" +Field="予約区分1930","予約区分1930","",,,"","",$FFFFFFFF,"" +Field="予約区分2000","予約区分2000","",,,"","",$FFFFFFFF,"" +Field="予約区分2030","予約区分2030","",,,"","",$FFFFFFFF,"" +Field="予約区分2100","予約区分2100","",,,"","",$FFFFFFFF,"" +Field="予約区分2130","予約区分2130","",,,"","",$FFFFFFFF,"" +Field="予約区分2200","予約区分2200","",,,"","",$FFFFFFFF,"" +Field="予約区分2230","予約区分2230","",,,"","",$FFFFFFFF,"" +Field="予約区分2300","予約区分2300","",,,"","",$FFFFFFFF,"" +Field="予約区分2330","予約区分2330","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419162555 +Position="MAIN",1650,850 +ZOrder=5 + +[Entity] +PName=trainer_workspace +LName=トレーナー勤務先 +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=2200 +Top=450 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="店舗ID","store_id","",,,"","",$FFFFFFFF,"" +Field="店舗名","store_name","",,,"","",$FFFFFFFF,"" +Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419163344 +Position="MAIN",2200,450 +ZOrder=6 + +[Entity] +PName=gym +LName=ジム +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=2350 +Top=250 +Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" +Field="ジム名","ジム名","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419163332 +Position="MAIN",2350,250 +ZOrder=7 + +[Relation] +Entity1=trainee +Entity2=booking +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4131,5869,3628,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165039 +LineMode=0 +Bar1=413 +Bar2=587 +Bar3=363 +TermPos1=R +TermPos2=R +ZOrder=8 + +[Relation] +Entity1=trainer +Entity2=menu +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4675,5325,2864,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165118 +LineMode=0 +Bar1=468 +Bar2=532 +Bar3=286 +TermPos1=R +TermPos2=R +ZOrder=9 + +[Relation] +Entity1=menu +Entity2=booking +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,5580,4420,4675,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165146 +LineMode=0 +Bar1=558 +Bar2=442 +Bar3=468 +TermPos1=R +TermPos2=R +ZOrder=10 + +[Relation] +Entity1=trainer +Entity2=calendar +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,7800,2200,7644,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165237 +LineMode=0 +Bar1=780 +Bar2=220 +Bar3=764 +TermPos1=R +TermPos2=R +ZOrder=11 + +[Relation] +Entity1=trainer_workspace +Entity2=gym +RelationType1=3 +RelationType2=2 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4440,5560,4238,R,R,"" +Dependence=0 +Caption= +PName= +ModifiedDateTime=20240419165300 +LineMode=0 +Bar1=444 +Bar2=556 +Bar3=424 +TermPos1=R +TermPos2=R +ZOrder=12 + +[Relation] +Entity1=trainer +Entity2=trainer_workspace +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4585,5415,2851,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165327 +LineMode=0 +Bar1=458 +Bar2=542 +Bar3=285 +TermPos1=R +TermPos2=R +ZOrder=13 From 6863f0ab7d62bc569d43928565357340850850fc Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 17 May 2024 16:24:29 +0900 Subject: [PATCH 11/27] =?UTF-8?q?=E3=80=90Markdown=E3=80=91Future=20Musche?= =?UTF-8?q?=20Partner=E3=81=AE=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=83=88=E4=BD=9C=E6=88=90=20(#117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add future muscle partner ERD * Muscle partnerのフォルダ構造を作成 --- .../future_muscle_partner/README.md | 33 ++ .../README.md" | 0 .../README.md" | 0 .../README.md" | 0 .../README.md" | 12 + .../README.md" | 0 .../erd.a5er" | 364 ++++++++++++++++++ .../06_IF\350\250\255\350\250\210/README.md" | 0 .../README.md" | 0 .../README.md" | 0 .../README.md" | 0 .../future_muscle_partner/docs/README.md | 20 + .../docs/future_muscle_partner_abstract.png | Bin 0 -> 9895 bytes 13 files changed, 429 insertions(+) create mode 100644 documents/forMarkdown/future_muscle_partner/README.md create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/01_\347\222\260\345\242\203\346\247\213\347\257\211/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/02_\351\226\213\347\231\272\350\246\217\347\264\204/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" create mode 100644 documents/forMarkdown/future_muscle_partner/docs/README.md create mode 100644 documents/forMarkdown/future_muscle_partner/docs/future_muscle_partner_abstract.png diff --git a/documents/forMarkdown/future_muscle_partner/README.md b/documents/forMarkdown/future_muscle_partner/README.md new file mode 100644 index 00000000..53e1d381 --- /dev/null +++ b/documents/forMarkdown/future_muscle_partner/README.md @@ -0,0 +1,33 @@ +## Future Muscle Partner + +~いきつけのジムでパーソナルトレーニングを受けよう~ のFuture Muscle Partnerのリポジトリ。 + +## サービスコンセプト + +パーソナルトレーナーを身近なものにして、質が高く安全で楽しいフィットネス体験を提供する。 + +![アプリを通してトレーニがトレーナに予約し、トレーニングを実施するフロー](docs/future_muscle_partner_abstract.png) + +サービス概要: + +- アプリ上でジム公認のトレーナーを検索&予約し、いきつけのジムでトレーニングを受けることができる + +主なアクターとメリット: + +- トレーニー + - 自分が通っているジムでパーソナル受けられる + - トレーナーの得意分野ごとにトレーナーを使い分けられる +- パーソナルトレーニー + - 24H型ジムでサービスを提供できる + - いつ/誰に/どんなメニューでトレーニングしたかを管理できる + +## フォルダ階層 + +```sh +. +├── backend # バックエンド系のコード +├── docs # 設計書 +├── frontend # フロントエンド系のコード +├── infra # インフラ系のコード +``` + diff --git "a/documents/forMarkdown/future_muscle_partner/docs/01_\347\222\260\345\242\203\346\247\213\347\257\211/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/01_\347\222\260\345\242\203\346\247\213\347\257\211/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/02_\351\226\213\347\231\272\350\246\217\347\264\204/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/02_\351\226\213\347\231\272\350\246\217\347\264\204/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..db55472e --- /dev/null +++ "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" @@ -0,0 +1,12 @@ +# Web API設計 + +## 一覧 + + + +| ID | 機能名 | メソッド | 詳細 | +| -- | --- | --| --| +| API01 | xxxx | GET | [API01設計書](API01)| +| API02 | xxxx | GET | [API02設計書](API02)| +| API03 | xxxx | GET | [API03設計書](API03)| + diff --git "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" new file mode 100644 index 00000000..0f75bab0 --- /dev/null +++ "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" @@ -0,0 +1,364 @@ +# A5:ER FORMAT:18 +# A5:ER ENCODING:UTF8 +# A5:ER Mk-1 Copyright © 2007 m.matsubara +# A5:SQL Mk-2 Version 2.19.0 Copyright © 1997 - 2024 m.matsubara +# https://a5m2.mmatsubara.com + +[Manager] +ProjectName=フューチャーマッスルパートナー +Author= +MaxEntityRowShow=1000 +ReadOnlyRecommend=0 +Page=Main +PageInfo="Main",2,"A3Landscape",$FFFFFF +LogicalView=1 +DecodeDomain=0 +ViewModePageIndividually=1 +ViewMode=2 +ViewFormat=0 +UseNondependenceDashLine=0 +FontName=Tahoma +FontSize=6 +PaperSize=A4Landscape +HeaderLeft= +HeaderCenter= +HeaderRight= +FooterLeft= +FooterCenter= +FooterRight= +ShowPageoutRelation=1 +RDBMSTypeName=Oracle Database +DefaultPkName=%0:s_PKC +DefaultPkIndexName=%0:s_PKI +DefaultIndexName=%0:s_IX%1:d +DefaultFkName=%0:s_FK%1:d +SqlSeparator=0 +UpperCaseKeyword=0 +ShowTag=1 +ShowCommonAttributes=0 +BugFixEntityWidth=1 + +[Entity] +PName=trainee +LName=トレーニー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=900 +Top=400 +Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="表示氏名","display_name","",,,"","",$FFFFFFFF,"" +Field="自己紹介","self_introduction","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419164924 +Position="MAIN",900,400,254,275 +ZOrder=1 + +[Entity] +PName=booking +LName=予約 +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1100 +Top=950 +Field="予約ID","booking_id","",,,"","",$FFFFFFFF,"" +Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" +Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="開始日時","start_at","",,,"","",$FFFFFFFF,"" +Field="終了日時","end_at","",,,"","",$FFFFFFFF,"" +Field="予約ステータス区分","booking_status_typ","",,,"","",$FFFFFFFF,"" +Field="予約受付日時","booking_reception_at","",,,"","",$FFFFFFFF,"" +Field="トレーニング開始日時","training_start_at","",,,"","",$FFFFFFFF,"" +Field="トレーニング終了日時","training_end_at","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419165003 +Position="MAIN",1100,950,283,349 +ZOrder=2 + +[Entity] +PName=menu +LName=メニュー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1300 +Top=400 +Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="表示順序","display_order","",,,"","",$FFFFFFFF,"" +Field="メニュー名","menu_name","",,,"","",$FFFFFFFF,"" +Field="メニュー説明","menu_description","",,,"","",$FFFFFFFF,"" +Field="所要時間","required_time","",,,"","",$FFFFFFFF,"" +Field="料金","price","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419161745 +Position="MAIN",1300,400,238,333 +ZOrder=3 + +[Entity] +PName=trainer +LName=トレーナー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=400 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="単価","unit_price","",,,"","",$FFFFFFFF,"" +Field="営業開始時間","business_start_at","",,,"","",$FFFFFFFF,"" +Field="営業終了時間","business_end_at","",,,"","",$FFFFFFFF,"" +Field="公開メールアドレス","public_mail_addr","",,,"","",$FFFFFFFF,"" +Field="公開電話番号","public_tel","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419164109 +Position="MAIN",1650,400,426,296 +ZOrder=4 + +[Entity] +PName=calendar +LName=カレンダー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=850 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="日付","date","",,,"","",$FFFFFFFF,"" +Field="予約区分0000","booking_typ_0000","",,,"","",$FFFFFFFF,"" +Field="予約区分0030","予約区分0030","",,,"","",$FFFFFFFF,"" +Field="予約区分0100","予約区分0100","",,,"","",$FFFFFFFF,"" +Field="予約区分0130","予約区分0130","",,,"","",$FFFFFFFF,"" +Field="予約区分0200","予約区分0200","",,,"","",$FFFFFFFF,"" +Field="予約区分0230","予約区分0230","",,,"","",$FFFFFFFF,"" +Field="予約区分0300","予約区分0300","",,,"","",$FFFFFFFF,"" +Field="予約区分0330","予約区分0330","",,,"","",$FFFFFFFF,"" +Field="予約区分0400","予約区分0400","",,,"","",$FFFFFFFF,"" +Field="予約区分0430","予約区分0430","",,,"","",$FFFFFFFF,"" +Field="予約区分0500","予約区分0500","",,,"","",$FFFFFFFF,"" +Field="予約区分0530","予約区分0530","",,,"","",$FFFFFFFF,"" +Field="予約区分0600","予約区分0600","",,,"","",$FFFFFFFF,"" +Field="予約区分0630","予約区分0630","",,,"","",$FFFFFFFF,"" +Field="予約区分0700","予約区分0700","",,,"","",$FFFFFFFF,"" +Field="予約区分0730","予約区分0730","",,,"","",$FFFFFFFF,"" +Field="予約区分0800","予約区分0800","",,,"","",$FFFFFFFF,"" +Field="予約区分0830","予約区分0830","",,,"","",$FFFFFFFF,"" +Field="予約区分0900","予約区分0900","",,,"","",$FFFFFFFF,"" +Field="予約区分0930","予約区分0930","",,,"","",$FFFFFFFF,"" +Field="予約区分1000","予約区分1000","",,,"","",$FFFFFFFF,"" +Field="予約区分1030","予約区分1030","",,,"","",$FFFFFFFF,"" +Field="予約区分1100","予約区分1100","",,,"","",$FFFFFFFF,"" +Field="予約区分1130","予約区分1130","",,,"","",$FFFFFFFF,"" +Field="予約区分1200","予約区分1200","",,,"","",$FFFFFFFF,"" +Field="予約区分1230","予約区分1230","",,,"","",$FFFFFFFF,"" +Field="予約区分1300","予約区分1300","",,,"","",$FFFFFFFF,"" +Field="予約区分1330","予約区分1330","",,,"","",$FFFFFFFF,"" +Field="予約区分1400","予約区分1400","",,,"","",$FFFFFFFF,"" +Field="予約区分1430","予約区分1430","",,,"","",$FFFFFFFF,"" +Field="予約区分1500","予約区分1500","",,,"","",$FFFFFFFF,"" +Field="予約区分1530","予約区分1530","",,,"","",$FFFFFFFF,"" +Field="予約区分1600","予約区分1600","",,,"","",$FFFFFFFF,"" +Field="予約区分1630","予約区分1630","",,,"","",$FFFFFFFF,"" +Field="予約区分1700","予約区分1700","",,,"","",$FFFFFFFF,"" +Field="予約区分1730","予約区分1730","",,,"","",$FFFFFFFF,"" +Field="予約区分1800","予約区分1800","",,,"","",$FFFFFFFF,"" +Field="予約区分1830","予約区分1830","",,,"","",$FFFFFFFF,"" +Field="予約区分1900","予約区分1900","",,,"","",$FFFFFFFF,"" +Field="予約区分1930","予約区分1930","",,,"","",$FFFFFFFF,"" +Field="予約区分2000","予約区分2000","",,,"","",$FFFFFFFF,"" +Field="予約区分2030","予約区分2030","",,,"","",$FFFFFFFF,"" +Field="予約区分2100","予約区分2100","",,,"","",$FFFFFFFF,"" +Field="予約区分2130","予約区分2130","",,,"","",$FFFFFFFF,"" +Field="予約区分2200","予約区分2200","",,,"","",$FFFFFFFF,"" +Field="予約区分2230","予約区分2230","",,,"","",$FFFFFFFF,"" +Field="予約区分2300","予約区分2300","",,,"","",$FFFFFFFF,"" +Field="予約区分2330","予約区分2330","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419162555 +Position="MAIN",1650,850 +ZOrder=5 + +[Entity] +PName=trainer_workspace +LName=トレーナー勤務先 +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=2200 +Top=450 +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="店舗ID","store_id","",,,"","",$FFFFFFFF,"" +Field="店舗名","store_name","",,,"","",$FFFFFFFF,"" +Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419163344 +Position="MAIN",2200,450 +ZOrder=6 + +[Entity] +PName=gym +LName=ジム +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=2350 +Top=250 +Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" +Field="ジム名","ジム名","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240419163332 +Position="MAIN",2350,250 +ZOrder=7 + +[Relation] +Entity1=trainee +Entity2=booking +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4131,5869,3628,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165039 +LineMode=0 +Bar1=413 +Bar2=587 +Bar3=363 +TermPos1=R +TermPos2=R +ZOrder=8 + +[Relation] +Entity1=trainer +Entity2=menu +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4675,5325,2864,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165118 +LineMode=0 +Bar1=468 +Bar2=532 +Bar3=286 +TermPos1=R +TermPos2=R +ZOrder=9 + +[Relation] +Entity1=menu +Entity2=booking +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,5580,4420,4675,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165146 +LineMode=0 +Bar1=558 +Bar2=442 +Bar3=468 +TermPos1=R +TermPos2=R +ZOrder=10 + +[Relation] +Entity1=trainer +Entity2=calendar +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,7800,2200,7644,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165237 +LineMode=0 +Bar1=780 +Bar2=220 +Bar3=764 +TermPos1=R +TermPos2=R +ZOrder=11 + +[Relation] +Entity1=trainer_workspace +Entity2=gym +RelationType1=3 +RelationType2=2 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4440,5560,4238,R,R,"" +Dependence=0 +Caption= +PName= +ModifiedDateTime=20240419165300 +LineMode=0 +Bar1=444 +Bar2=556 +Bar3=424 +TermPos1=R +TermPos2=R +ZOrder=12 + +[Relation] +Entity1=trainer +Entity2=trainer_workspace +RelationType1=2 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,4585,5415,2851,R,R,"" +Dependence=1 +Caption= +PName= +ModifiedDateTime=20240419165327 +LineMode=0 +Bar1=458 +Bar2=542 +Bar3=285 +TermPos1=R +TermPos2=R +ZOrder=13 diff --git "a/documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git "a/documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" new file mode 100644 index 00000000..e69de29b diff --git a/documents/forMarkdown/future_muscle_partner/docs/README.md b/documents/forMarkdown/future_muscle_partner/docs/README.md new file mode 100644 index 00000000..a74aa9da --- /dev/null +++ b/documents/forMarkdown/future_muscle_partner/docs/README.md @@ -0,0 +1,20 @@ +# docs + +設計書を管理する。 + +## フォルダ階層 + +```sh +docs +├── 01_環境構築 # 開発環境の構築手順 +├── 02_開発規約 # 開発ガイドライン、リリース手順など +├── 03_画面設計 # Figma、画面アクション +├── 04_WebAPI設計 # api.yaml、API処理設計 +├── 05_データ設計 # ERD、区分値 +├── 06_IF設計書 # I/F定義+受信/送信BL設計 +├── 07_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 +├── 08_帳票設計 # 業務、システム担当者向けのレポート +├── 09_インフラ設計 # ネットワーク設計、監視設計、通知設計、システム構成図、サービス構成図 +├── ... +└── README.md +``` diff --git a/documents/forMarkdown/future_muscle_partner/docs/future_muscle_partner_abstract.png b/documents/forMarkdown/future_muscle_partner/docs/future_muscle_partner_abstract.png new file mode 100644 index 0000000000000000000000000000000000000000..2f816600172775c5cfc419a5d05e6cd2839fdf0c GIT binary patch literal 9895 zcmcI~by!tjw=PJBlytXr3J6Fy(%m5~2q;LyraPsPmPQ&>8WA?#TS8$YARSw3!v;2- zrT(7p`_5nY-20sS2e1}%&N1hF=Xl2$bBq`&AbzKDLm)3Qz!_|k+y}=*lF}OUL*-tSTA0KDd+ePg6$G_ zDd0VV;4{3yRZ6?7sBVu$L1aHv44f14zuO%Ya&uNG)9rKktz{K4xhw2MZ)SeIx6lKY z3+0Hj*JUIXsnG4W2%h(9d%Jioyq&<`a|ylRtFM!~nf~@=)&DjsVFB86dz9q+;qK5{ z29Y0uqDwMTiZaM?GiH4&WFYF8jK94%xMpD)c$o%!0tz{^kh+`xk|JO!Wo#bbEu#>E z+_&z%8Lhooz02%Hc2d-LA&z1`g4(uUZcbc?7RrF`jCpYr#du2n9DFP#>TdhvG+7bYmndx6LCr@r<8 zy&@AR`0MJW{Sa8@OUz3PFL%FvUp28rLI?&O1m)Ew zaS~Abub)v-<7?9Ba~IYk2cQkPV)a(RXFu)kuJ52DMuQM6O{rHW5E|o#D1yXloT;zS zXRw8l6wuAaS1g9*s~;O~QnbH{<)q{0{C2=OXdCU{oDPr@;=x-Z3sxXubDTEXyH5xO zYQhytFPkUE*NNTMfGDfLy&dp&e`iT&dhz$X(L{br z@w)qkOBcnLl#4rM2nhUQE#>8NS_B=d2sy;EoYvi$&8hxnAp#GP%75a&S9c*Z`lliP z$!o5E%j>!AL%Z94=-X0leJw{}eRqXc^3<-P-|Oq*^?9FJz+L*(@0PVTdxGTc8UWOi z%Y&PAx4ngs%a#`L$Az_EXhTeIz}5lT-TU!Y)IaNp0EtbuV*Gu)BM1NU2(BKYFG8&L z$iV$}#&ghqw14wDKz{Q>?tS%;2^KX+5uw+X3Wg`u8Y}!8qLE!;?c0ql!WI#ovE#i= zhC=C6ga3e@^EP`>%;}_;hyJGGE<384c9;9u+I(G+hIL6^VQ6k?v3OQ>dV)#MU2{4{;J0ZwX*VYvMcyG2SegyiwQ zks_?oIWCErcV>OGfL?v9G%T=Eistq801xObXz|q5RXZO6M_zz7m$oOZ{k=+i6MIj# zIzgw){xv#jdzy9S&A=GZm1h?gQep@Thi8P_d+C~!hQb(DBf@L5n`6fl-E1cwH0g^gzVb9hbDEHEz-*UYWIM zj|)09;aB~5;_lX-H6PeQWX=}0Fts_BUGx}fk8pDEK#r;K_k2JcIu%NtU+#K@xE|J8 zBdPyN41158G);Oxx?&q!@^SS;wx7B6(@6kq3C6D`EDAouz%w@bAY{&xOj(}RbW{6t z_95G2AvyikDC zP42cP{Bq}TyffkkUkI6w0u(}=@vnZ0BVipB$lm>Nx#K@{c;W?b5ZgZKt@%x?tw}f> zesXeBAn7ar#P;>;*Ir)2iZzVcLb!92qoeWtr$c|Z;CTYE^XM+RV|)6STd&gkqAB<+ zu+s=$p6$#yBkJmS?I-rHt|W9>>sMdUDYbT~cK0?lg>t$H?2zFbcr_a!~T(?@Nj`7(A>@N-Gx5ceE~|U0u2;Z z3xsQLe>fbxK53BcEVGx7;YoWIC|$A+navU&o<%Ztml>?}47zTvIQsy;5ilD^b>(Zf zA3Rqhp_RV?;J(}UXMSH)hh^8P`0ClSrQF$uU}+x#h*>@O=U+Go8p;id zt8lfWRQp+>Lm!?#ed^_7fiB|ITPjRH>D>R~F|SwLr)tmeOa>NJUH!Ad02u=IiYctW zNAUobA_QTDdf=U0vVuZ1)ZFbJONE3o_RSX#KyHuMQ|ldH7jX#1cz(?J#iGjlXF{xo z@}98wxdS>dMkE|LbP_cymAeXnzi}nq`$_=R%K7Bq;8m|+*JLa5e)rg`g+YL%1_t#Wd&aWlHL*N8afV4FUA90G%x3##zfGvBZ&vgYv9 zh{prqlUI7e$D?pazT))H=rZQC_Kb=$ot&4+chkjQalD>0&H5}F>X9dAk0aZ#n4_p_ z`}>}`jM5}1b9XmfJRWeBPxzoQ43$eKY@QIYSsYEPb?^~Oq;h8RYQm>4>B4oY(@i9` zadd4cLt!b&8m;6_mk)?N=+i4h5-lY~%kdh0tJLDs~}>Poz82Z^htfHJ4YymsQesAwwg{B05(iqPpTWONo)h$Zj4zhHhpF^V0~P z8mGC;Ww-P52Z1uO5t)$(=>Ft-;zGGOX`3sGSN81vW%x@t8m6=7)gMR-F8yXrwQ@}B zJs;c5l{qRXXBStHHH!41vz#7hI3sICR?z$m@w)UVDyQwJxL#QmW6DtoDEbsfjiRDZ5Mfub zbdWDo8lWf}R{E+NISSe|Q&KkAMJ}Q~My{Q6{jeO{iuh5$EEZ@z+LAps*xjB}C$2#v z5ueT#Vdf&q8DQ=r{-~A4A*z%`XM|`;?o~{y#HpNMJAUvk4>Tge-)MGIGNaI;yfm&~0jyo9HBKAQb{$zlNS|Rp8+2fe9iY7iel(-@y zQDDU1X+yK1X*ZFpykUv{`x;5PF7ZMvt}7-9Uu`~V#{ED$PS&TTSmRQ={e+-Uec7wr zZaF(w(j4QNKi9Jx zwj*1z`;l~iK4R3^?~M0YyQfnLw?s=re>PvodOHYzG_2tTFAY*(EYy0Z9PAcC#_|k zdG%BC8O8?F6iGWZ&tL5^a~SXL+BmbimK3#qy$(MYejcq!aLWHkEKkQS$O9BZ_M0gfX%5K2}hK{b{X6w&! zI-wP_wTdn32S4jUuV4vgjvk70kGm(P?tv`|W%6A5mN~YS*Api=DrP;6?14*4nbdvL zOyPLf$qK-)y$*Ena(aN$br+#VPr$->&onuUBDjCxt42ZDlS&0O5qh-? zc2dTu2gYynrpI6R_a#2mQ0M4wSxMg4agBhJX)>kps9Ag|e%YpM^g*W7v|8qag)(z- z;t?AsHCel93!QAXprW$=^+8e~9^b)x3XH?-N+P^0PTi0OVZWgb9tTl9?t1UNSvT4) z_QEZ-TyK<)t?+s0n2tz?pa51P--nT%V*3^EGNB$AW=R@7Bib?kxrcGF(Om^o!y4XO z?%&vJqYTS>ObnP_i)EB>jt+>V$_JRG*_MsD7`(NUJ@T$BFr&K9&UZ3doIuX(rMQp| z_PI`9BQE%J&^#3rda(+77klCs=!t%&Z3VH8`m#wQ?JQN5&}qA3!qhYWRmzsj zMq$|rrdiBssSB>BGC=V5f0r^58wbK)`QexNir0JIJ>3-(EM1ZuO6TkN*D86gs1CgXy3r9~quj+8zYY-3$3uz9xG2 z(f5n3S@IwGE~qCxySQ0eUly+`Fcz;@`e$7z16Ny70(;H>PC;%1^TqpT^a0Y{cK1L3GoFCSK!3XVgEU;2|IXE|a$p3M2m?3bm3sXt3KS`5*TF|FQ&f@b&la z-)U%Q#>U2mlIif&FwD)(eQ}M9jpN+i-MI?h;M(iRvI#3^7STrguJvPJtP3!gHU893 zrkBcN%X0nt8_KQ;Ci`*bFmheJSXQXYr%Z4@#>wMp&InU8Gv>ygp5#r1IJ!>^&IVn2 zPkk}sbw3T?p=At=ok(NYJLOVChUIMX@k3>4m8k+CDDqF_Oqqm)|KL0LogoN5d#*jz zb2IbJOYFIfa~61)+1nBPYJa|NW9ZJc=^XzFQig!;Hid~Nnc>bWJ_=VqjC{$WR^*1m zI4dnXO~h7F9302Z&E2JkxlkK~Z$Hg{s6ztbXR|vm9p-b6W=7zbDG20uDqVNxrIK8F3@FioAWeT_1D1VqW2q{_B6|fo zd3d)5KUCP?kIBl)DO&sFk9Wj+{h_$c!pwQ)(*lIn4%M&QfG}K26g!$1F%O>f6oXvT*IDy^F^{787 zQjscGGazXE&9{8dD(g`D4F&q)E^QXw<&4Dkvf|r=FX$_o462ASq+Z+99*RWYKa>i+1ypmIDm*(~@=N7b&FGGEi0sL0Q<^ z*X1zM%zV1@E-%ODes2}3KwZesP5{)j%wCaN$oC-p!F*aS=~oAoZ}*8Xml))uT;x2J z0)yTxnqQ^nij_*nKpO6;X7yK5ZObDnJ7XWeND3XbXDKnk&MaKiVIw!{ReUW$MQVee zs1wDB*7(y0O3IUGJ4==EE!3`@~y)f$5n#sn@GZn;2v* zf#@}@pt?~KlmfU@GPR;{(ZU6@AT^8nlAE7eFiGaB7|VYhvTtq%w@wy>zD56{Q?Cw& zyTshX#fwi0XiSHj>>`PpF9Pwr#3HYT0Fpejk&fwzc;qG&FW$bNdekxyP-q}b2c#ahn7H> zkED)Ocg(@Mg}k#P1TmS*`6G$2<67D)ePhS~&u+S%(E9n}8xgNycTPrNc*B0l5l-vUp=@ahs48G|a`&QSj5 z4`}f^0mn<|_O>Uv8Av7|ky0~s&k}Jth?ZOLY31 z{sze0i;)gkkBmgfO>ZPFJA$m(sIT*}$EUec-R|hJCXF3rZU}qhg;Q8}Zw~3|)Tz_p zkr%7#UFhnR9d()7E@U4`R1+uAsUmP5^I52s{I_%uyob2*1Fc0qexUM8yaS?!(q>L+ z)QmeV4+&-Dl@=S| ziE39ai>*Zqc0FQW%`-t{4v-iRzyB5^DT_8c64FE6mVCwyYL=Kggi~Ikd_J_Vn8m7> z#Xctt1f_9${1!)7{F~<{s(%K5X#DU2zR3>~SJb#}x}X6=wb6tJp+!K}-fr<42q*q7 zG^u-4@Bj(8_P;2Cp)g8#2oN6pQAvF}m~SGvs*{5QTjX#5_z*E)P!WRX-20#HTjecX zT~83c^)D#ylq*kMzi~t>s5BW|HB8{$v%~v?Ee0^>Bc1}uL68D;d3kwpk+Llz1zIUE zyTA{5P<7*Q7khD?kkY+Met=A#N%U?EYQkga*P>NvsIO06?N3kGS11d$5WPKy)yVHT z8@SDwEQU>>2KEApBf58LyUus?%q+4OSCx6X$8M(^T1B!qm6yAiMFS?v1|etz%r^hA z)w~RXS(#TqvDXtup-?D$e#k^}4-aab7aFDeH{bM8OEJv&unzgS#!dkVhyA6%b#g+X08KdSwBVf*$5O%ybgO-mJQ=hKyf0L zUn#$7OMVmk&va$pqN1X$`weG3^fN@m&7K|ft4_|oQ?(!9v4zHFvAeiD)N+x?jbCeD z?vS5B(@HtL7b&;9){!rBMt~4cF&(22(tn!_r+cz2xX4x^dF=Jor;^Ok`-mPXJ zEj{|FhoE9fKqX;pbW|O&ZFQ{jOz#&M3@(&8DjhGjfz0WyJel>GO11W%!nqyjZD?f$GX~&6`qq-(bhdEHn|!X4);2DC3ZuclRmmG)`7R>l?s@xo|?NU zaChSPOA5%Z$oM6(Kvq<3g+V~r4G@UR%@4?gzbIeA%kIvX^B-mOb&*n_@rtCGsFf{S zmJU4qgw+rfpb+-Tx~ahXj{Yh5Br*LOcgNj64=BX~>&}*o-Bte770maJE+97J2e~|7 zgUP2G``&zcSGQA6Z6k3Ch-JmCI?O9&|P;Xu&UGdS4N^pO&omP$(SPI##Fd=3J* zWq=zmhC(^g?Dlqai_PFCxV1)SZMW?h4Z{@M>!xHnd~3}YYI0Xi#HChM8EWn0zJAGeNV-;-N+dMCd|du}-^SsxOBk@~8Pzjs`!-dT%{PHpzf`pN0~rQuF|1y1%-CeS zeIp%O8Y+6u)I$@X`_@!45UMqP(D?V0DDvEx%pR0$sT|&{FHfYS z3=54($6Ysz9CS@UBFcQW?(*ofl@bP!Lq)M@$d-ND8vmVaJ*a^^b_MYtzyXrj z{5iTL7xci@M?fV&gXPcig6*h3|4}J`Y=0DFHAne3TxHOr8^1FIO-fO(|H-l_R+viR z6keh@gs#li?g|)AZP$B(yo5It2A@CVw?dwM(GEettZ$P4l;Lrs*nz2ofg5U46F=hi z$oCG`V2#*WHg8g={Dq+Ew2}DZ?Nek{PS4$L3dg1Sr7D7mv1LZ2c>6pQ1guuSQ z!2QVQXmkjW<~p@qi&!29?I=2K?6eMB6nqyK zm$-#gZx|G)vT0Zl!Su^Nnblh0Ch^*9k4NEAB-4t|9$3!j00mDvbX&Pt4SYj5+h{OT zZF9tyh{Vg_;DQ~%sOFhaTuadfL zil41%ST#TmhAh*E*qjm{v&mFSfnUsOiNAYi39s=%ujg9$XjymVuA-e}dP=IXl88Yu zpKguwHK7YXwLn8F;iGz?@O#gV2tnAMMG4(0)R{GI9vrd5+&QEQ^hJDLfwDvsYktib=46~_m<6ayJx$~AnF+__-&Y=$TOI4 zYQHcU%q=6MwAzqqf?8kCltb;!n;v5$qxf(pihWM%I9|Z{;s4lqwULQb&s$7)ZuOZD zRCjZ-W+}r(RSg^|#%Cilay@j_in1#tB2I9~x zUS*OeQejP6o%I!Omm|mfyr-#2jvRF~6`M5G*7k(>gnAtZ!u&LOYhGSoaqfL<);HT5 z`@yPyS-&Y=2gAf_I)DQ<_kntc;tM8ggxHl*2kJdL^%LqbZ1|7Ix>0Gyd1Pvq%43mo zQv-86n?~@2O)`vtlAO`XDUeQ$J7#fJe|k!z5Zzj%iy tlYbSy8?B+#m;7J(s!IAL40?yvLz?3KndHL?@NpT6nv#}cy}V8Me*vO&BpLt! literal 0 HcmV?d00001 From 4606c9c641900a7c47f844ce2777efeb36efb569 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Mon, 3 Jun 2024 09:36:20 +0900 Subject: [PATCH 12/27] Add openapi.yaml of muscle partner (#124) 1st commit openapi.yaml --- .../openapi.yaml" | 704 ++++++++++++++++++ 1 file changed, 704 insertions(+) create mode 100644 "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" new file mode 100644 index 00000000..a8d4bbb8 --- /dev/null +++ "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" @@ -0,0 +1,704 @@ +openapi: 3.0.3 +info: + title: Future Muscle Partner API + description: パーソナルトレーナーのマッチング + version: 1.0.0 +tags: + - name: account + description: アカウント管理 + - name: profile + description: プロフィール + - name: trainer + description: パーソナルトレーナー + - name: booking + description: 予約 + - name: review + description: レビュー + - name: payment + description: 決済 + - name: provider + description: パーソナルトレーニング提供者 +security: + - Bearer: [] +paths: + /login: + post: + tags: + - account + summary: "[API01] ログインAPI" + operationId: loginUser + security: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LoginRequest' + responses: + '200': + description: ログインに成功しました。 + '400': + $ref: '#/components/responses/BadRequest' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /logout: + post: + tags: + - account + summary: "[API02] ログアウトAPI" + operationId: logoutUser + security: [] + responses: + '200': + description: ログアウトに成功しました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /signin: + post: + tags: + - account + summary: "[API03] 会員登録API" + operationId: registerUser + security: [] + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SigninRequest' + responses: + '200': + description: 会員登録に成功しました。 + '400': + $ref: '#/components/responses/BadRequest' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /signout: + post: + tags: + - account + summary: "[API04] 会員退会API" + operationId: signoutUser + responses: + '200': + description: 会員退会に成功しました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /profile: + get: + tags: + - profile + summary: "[API05] 自分のプロフィール表示API" + operationId: getUserProfile + responses: + '200': + description: プロフィールの取得に成功しました。 + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /trainers: + get: + tags: + - trainer + summary: "[API06] パーソナルトレーナー検索API" + operationId: searchTrainers + security: [] + responses: + '200': + description: トレーナーの検索結果を取得しました。 + '400': + $ref: '#/components/responses/BadRequest' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /trainers/{trainerId}/menu: + get: + tags: + - trainer + summary: "[API07] トレーニングメニュー取得API" + operationId: getTrainingMenu + security: [] + parameters: + - name: trainerId + in: path + description: トレーナーのID + required: true + schema: + type: string + responses: + '200': + description: トレーニングメニューを取得しました。 + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + + /trainers/{trainerId}/profile: + get: + tags: + - trainer + summary: "[API08] トレーナープロフィール取得API" + operationId: getTrainerProfile + security: [] + parameters: + - name: trainerId + in: path + description: トレーナーのID + required: true + schema: + type: string + responses: + '200': + description: トレーナープロフィールを取得しました。 + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /trainers/{trainerId}/reviews: + get: + tags: + - trainer + summary: "[API09] トレーナー口コミ取得API" + operationId: getTrainerReviews + security: [] + parameters: + - name: trainerId + in: path + description: トレーナーのID + required: true + schema: + type: string + responses: + '200': + description: トレーナーの口コミを取得しました。 + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /trainers/{trainerId}/schedule: + get: + tags: + - trainer + summary: "[API10] トレーナースケジュール取得API" + operationId: getTrainerSchedule + security: [] + parameters: + - name: trainerId + in: path + description: トレーナーのID + required: true + schema: + type: string + responses: + '200': + description: トレーナーのスケジュールを取得しました。 + '400': + $ref: '#/components/responses/BadRequest' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /bookings: + get: + tags: + - booking + summary: "[API11] 予約済みトレーニング取得API" + operationId: getBookings + responses: + '200': + description: ユーザーの予約情報を取得しました。 + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + post: + tags: + - booking + summary: "[API12] トレーニング予約API(仮登録)" + operationId: bookTraining + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingRequest' + responses: + '200': + description: 予約が仮登録されました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '409': + $ref: '#/components/responses/Conflict' + '422': + $ref: '#/components/responses/UnprocessableEntity' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /bookings/{bookingId}: + delete: + tags: + - booking + summary: "[API13] トレーニング予約削除" + operationId: deleteBooking + parameters: + - name: bookingId + in: path + description: 予約ID + required: true + schema: + type: string + responses: + '200': + description: 予約が削除されました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /bookings/{bookingId}/confirm: + post: + tags: + - booking + summary: "[API14] トレーニング予約API(本登録)" + operationId: confirmBooking + parameters: + - name: bookingId + in: path + description: 予約ID + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingConfirmationRequest' + responses: + '200': + description: 予約が本登録されました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '409': + $ref: '#/components/responses/Conflict' + '422': + $ref: '#/components/responses/UnprocessableEntity' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /booking/{bookingId}/status: + put: + tags: + - booking + summary: "[API15] トレーニング受講ステータス変更API" + operationId: updateTrainingStatus + parameters: + - name: bookingId + in: path + description: 予約ID + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingStatusUpdateRequest' + responses: + '200': + description: ステータスが更新されました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '404': + $ref: '#/components/responses/NotFound' + '409': + $ref: '#/components/responses/Conflict' + '422': + $ref: '#/components/responses/UnprocessableEntity' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /payment: + post: + tags: + - payment + summary: "[API16] 決済API" + operationId: makePayment + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequest' + responses: + '200': + description: 決済が完了しました。 + '400': + $ref: '#/components/responses/BadRequest' + '401': + $ref: '#/components/responses/Unauthorized' + '409': + $ref: '#/components/responses/Conflict' + '422': + $ref: '#/components/responses/UnprocessableEntity' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' + /reviews: + post: + tags: + - review + summary: "[API17] 口コミ登録" + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Review' + responses: + '200': + description: 口コミ登録成功 + /reviews/{reviewId}: + put: + tags: + - review + summary: "[API18] 口コミ修正" + parameters: + - name: reviewId + in: path + description: 口コミID + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Review' + responses: + '200': + description: 口コミ修正成功 + delete: + tags: + - review + summary: "[API19] 口コミ削除" + parameters: + - name: reviewId + in: path + description: 口コミID + required: true + schema: + type: string + responses: + '200': + description: 口コミ削除成功 + /trainer-register: + post: + tags: + - provider + summary: "[API20] トレーナー登録" + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' + responses: + '200': + description: トレーナー登録成功 + /trainer-attributes: + put: + tags: + - provider + summary: "[API21]トレーナー属性更新" + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainerAttributes' + responses: + '200': + description: トレーナー属性更新成功 + /training-menus: + post: + tags: + - provider + summary: "[API22] トレーニングメニュー登録" + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingMenu' + responses: + '200': + description: トレーニングメニュー登録成功 + /training-menu/{menuId}: + put: + tags: + - provider + summary: "[API23] トレーニングメニュー更新" + parameters: + - name: menuId + in: path + description: メニューID + required: true + schema: + type: integer + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingMenu' + responses: + '200': + description: トレーニングメニュー更新成功 + delete: + tags: + - provider + summary: "[API24] トレーニングメニュー削除" + parameters: + - name: menuId + in: path + description: メニューID + required: true + schema: + type: integer + responses: + '200': + description: トレーニングメニュー削除成功 + +components: + schemas: + ProblemDetailError: + description: A Problem Details object (RFC 9457) + type: object + properties: + title: + type: string + description: A short summary of the problem type. Written in English and readable for engineers (usually not suited for non technical stakeholders and not localized). + example: Service Unavailable + status: + type: integer + format: int32 + description: The HTTP status code generated by the origin server for this occurrence of the problem. + minimum: 400 + maximum: 600 + exclusiveMaximum: true + example: 503 + detail: + type: string + description: A human-readable explanation specific to this occurrence of the problem + example: + title: Description of the type of problem that occurred + status: 400 # HTTP response status, appropriate for the problem type + detail: Description of specific occurrence of the problem + + LoginRequest: + type: object + properties: + email: + type: string + format: email + description: メールアドレス + password: + type: string + format: password + description: パスワード + SigninRequest: + type: object + properties: + email: + type: string + format: email + description: メールアドレス + password: + type: string + format: password + description: パスワード + name: + type: string + description: 名前 + BookingRequest: + type: object + properties: + trainingId: + type: string + description: トレーニングのID + date: + type: string + format: date + description: トレーニングの日付 + PaymentRequest: + type: object + properties: + amount: + type: number + format: double + description: 支払金額 + method: + type: string + description: 支払方法 + BookingConfirmationRequest: + type: object + properties: + bookingId: + type: string + description: 予約のID + TrainingStatusUpdateRequest: + type: object + properties: + trainingId: + type: string + description: トレーニングのID + status: + type: string + description: ステータス + Review: + type: object + properties: + id: + type: string + title: + type: string + content: + type: string + Trainer: + type: object + properties: + id: + type: string + name: + type: string + age: + type: integer + TrainerAttributes: + type: object + properties: + speciality: + type: string + experience: + type: integer + TrainingMenu: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + responses: + BadRequest: + description: 400 Bad Request + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + Unauthorized: + description: 401 Unauthorized + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + Forbidden: + description: 403 Forbidden + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + NotFound: + description: 404 Not Found + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + Conflict: + description: 409 Conflict + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + UnprocessableEntity: + description: 422 Unprocessable Content + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + InternalServer: + description: 500 Internal Server + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + ServiceUnavailable: + description: 503 Service Unavailable + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemDetailError" + securitySchemes: + Bearer: + type: http + scheme: bearer + bearerFormat: JWT + description: 'Bearer トークン認証' From 721f192d776b0513da49b940c233092bb51af82c Mon Sep 17 00:00:00 2001 From: tk007 <53025495+TsubasaKanemitsu@users.noreply.github.com> Date: Mon, 24 Jun 2024 05:21:48 -0700 Subject: [PATCH 13/27] fix: to OAS 3.0.3 (#127) --- .../openapi.yaml" | 209 ++++++++++-------- 1 file changed, 115 insertions(+), 94 deletions(-) diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" index a8d4bbb8..2c3e0e07 100644 --- "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" +++ "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" @@ -25,15 +25,11 @@ paths: post: tags: - account - summary: "[API01] ログインAPI" + summary: API-001 ログイン operationId: loginUser security: [] requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/LoginRequest' + $ref: '#/components/requestBodies/ReqPostLoginBody' responses: '200': description: ログインに成功しました。 @@ -47,7 +43,7 @@ paths: post: tags: - account - summary: "[API02] ログアウトAPI" + summary: API-002 ログアウト operationId: logoutUser security: [] responses: @@ -69,15 +65,11 @@ paths: post: tags: - account - summary: "[API03] 会員登録API" + summary: API-003 会員登録 operationId: registerUser security: [] requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/SigninRequest' + $ref: '#/components/requestBodies/ReqPostSigninBody' responses: '200': description: 会員登録に成功しました。 @@ -91,7 +83,7 @@ paths: post: tags: - account - summary: "[API04] 会員退会API" + summary: API-004 会員退会 operationId: signoutUser responses: '200': @@ -108,7 +100,7 @@ paths: get: tags: - profile - summary: "[API05] 自分のプロフィール表示API" + summary: API-005 自分のプロフィール表示 operationId: getUserProfile responses: '200': @@ -123,7 +115,7 @@ paths: get: tags: - trainer - summary: "[API06] パーソナルトレーナー検索API" + summary: API-006 パーソナルトレーナー検索 operationId: searchTrainers security: [] responses: @@ -135,15 +127,15 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /trainers/{trainerId}/menu: + /trainers/{trainer_id}/menu: get: tags: - trainer - summary: "[API07] トレーニングメニュー取得API" + summary: API-007 トレーニングメニュー取得 operationId: getTrainingMenu security: [] parameters: - - name: trainerId + - name: trainer_id in: path description: トレーナーのID required: true @@ -161,15 +153,15 @@ paths: '503': $ref: '#/components/responses/ServiceUnavailable' - /trainers/{trainerId}/profile: + /trainers/{trainer_id}/profile: get: tags: - trainer - summary: "[API08] トレーナープロフィール取得API" + summary: API-008 トレーナープロフィール取得 operationId: getTrainerProfile security: [] parameters: - - name: trainerId + - name: trainer_id in: path description: トレーナーのID required: true @@ -186,15 +178,15 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /trainers/{trainerId}/reviews: + /trainers/{trainer_id}/reviews: get: tags: - trainer - summary: "[API09] トレーナー口コミ取得API" + summary: API-009 トレーナー口コミ取得 operationId: getTrainerReviews security: [] parameters: - - name: trainerId + - name: trainer_id in: path description: トレーナーのID required: true @@ -211,15 +203,15 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /trainers/{trainerId}/schedule: + /trainers/{trainer_id}/schedule: get: tags: - trainer - summary: "[API10] トレーナースケジュール取得API" + summary: API-010 トレーナースケジュール取得 operationId: getTrainerSchedule security: [] parameters: - - name: trainerId + - name: trainer_id in: path description: トレーナーのID required: true @@ -240,7 +232,7 @@ paths: get: tags: - booking - summary: "[API11] 予約済みトレーニング取得API" + summary: API-011 予約済みトレーニング取得 operationId: getBookings responses: '200': @@ -254,14 +246,10 @@ paths: post: tags: - booking - summary: "[API12] トレーニング予約API(仮登録)" + summary: API-012 トレーニング予約(仮登録) operationId: bookTraining requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/BookingRequest' + $ref: '#/components/requestBodies/ReqPostBookingBody' responses: '200': description: 予約が仮登録されました。 @@ -277,14 +265,14 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /bookings/{bookingId}: + /bookings/{booking_id}: delete: tags: - booking - summary: "[API13] トレーニング予約削除" + summary: API-013 トレーニング予約削除 operationId: deleteBooking parameters: - - name: bookingId + - name: booking_id in: path description: 予約ID required: true @@ -303,25 +291,21 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /bookings/{bookingId}/confirm: + /bookings/{booking_id}/confirm: post: tags: - booking - summary: "[API14] トレーニング予約API(本登録)" + summary: API-014 トレーニング予約(本登録) operationId: confirmBooking parameters: - - name: bookingId + - name: booking_id in: path description: 予約ID required: true schema: type: string requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/BookingConfirmationRequest' + $ref: '#/components/requestBodies/ReqPostBookingConfirmationBody' responses: '200': description: 予約が本登録されました。 @@ -337,25 +321,21 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /booking/{bookingId}/status: + /booking/{booking_id}/status: put: tags: - booking - summary: "[API15] トレーニング受講ステータス変更API" + summary: API-015 トレーニング受講ステータス変更 operationId: updateTrainingStatus parameters: - - name: bookingId + - name: booking_id in: path description: 予約ID required: true schema: type: string requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainingStatusUpdateRequest' + $ref: '#/components/requestBodies/ReqPostTrainingStatusUpdateBody' responses: '200': description: ステータスが更新されました。 @@ -377,14 +357,10 @@ paths: post: tags: - payment - summary: "[API16] 決済API" + summary: API-016 決済 operationId: makePayment requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentRequest' + $ref: '#/components/requestBodies/ReqPostPaymentBody' responses: '200': description: 決済が完了しました。 @@ -404,23 +380,19 @@ paths: post: tags: - review - summary: "[API17] 口コミ登録" + summary: API-017 口コミ登録 requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Review' + $ref: '#/components/requestBodies/ReqPostReviewBody' responses: '200': description: 口コミ登録成功 - /reviews/{reviewId}: + /reviews/{review_id}: put: tags: - review - summary: "[API18] 口コミ修正" + summary: API-018 口コミ修正 parameters: - - name: reviewId + - name: review_id in: path description: 口コミID required: true @@ -438,9 +410,9 @@ paths: delete: tags: - review - summary: "[API19] 口コミ削除" + summary: API-019 口コミ削除 parameters: - - name: reviewId + - name: review_id in: path description: 口コミID required: true @@ -453,13 +425,9 @@ paths: post: tags: - provider - summary: "[API20] トレーナー登録" + summary: API-020 トレーナー登録 requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Trainer' + $ref: '#/components/requestBodies/ReqPostTrainerBody' responses: '200': description: トレーナー登録成功 @@ -467,13 +435,9 @@ paths: put: tags: - provider - summary: "[API21]トレーナー属性更新" + summary: API-021 トレーナー属性更新 requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainerAttributes' + $ref: '#/components/requestBodies/ReqPostTrainerAttributesBody' responses: '200': description: トレーナー属性更新成功 @@ -481,23 +445,19 @@ paths: post: tags: - provider - summary: "[API22] トレーニングメニュー登録" + summary: API-022 トレーニングメニュー登録 requestBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainingMenu' + $ref: '#/components/requestBodies/ReqPostTrainingMenuBody' responses: '200': description: トレーニングメニュー登録成功 - /training-menu/{menuId}: + /training-menu/{menu_id}: put: tags: - provider - summary: "[API23] トレーニングメニュー更新" + summary: API-023 トレーニングメニュー更新 parameters: - - name: menuId + - name: menu_id in: path description: メニューID required: true @@ -515,9 +475,9 @@ paths: delete: tags: - provider - summary: "[API24] トレーニングメニュー削除" + summary: API-024 トレーニングメニュー削除 parameters: - - name: menuId + - name: menu_id in: path description: メニューID required: true @@ -647,6 +607,67 @@ components: type: string description: type: string + requestBodies: + ReqPostLoginBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LoginRequest' + ReqPostSigninBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SigninRequest' + ReqPostBookingBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingRequest' + ReqPostPaymentBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequest' + ReqPostBookingConfirmationBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingConfirmationRequest' + ReqPostTrainingStatusUpdateBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingStatusUpdateRequest' + ReqPostReviewBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Review' + ReqPostTrainerBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' + ReqPostTrainerAttributesBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainerAttributes' + ReqPostTrainingMenuBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingMenu' responses: BadRequest: description: 400 Bad Request From 35020eccac7019afc56f606589ec701b38aa4e46 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 28 Jun 2024 13:21:59 +0900 Subject: [PATCH 14/27] Update revie (#131) --- .../openapi.yaml" | 87 ++++++++++++------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" index 2c3e0e07..ff79016f 100644 --- "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" +++ "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: Future Muscle Partner API - description: パーソナルトレーナーのマッチング + description: パーソナルトレーナーのマッチングサービスAPI version: 1.0.0 tags: - name: account @@ -26,7 +26,7 @@ paths: tags: - account summary: API-001 ログイン - operationId: loginUser + operationId: login security: [] requestBody: $ref: '#/components/requestBodies/ReqPostLoginBody' @@ -40,11 +40,11 @@ paths: '503': $ref: '#/components/responses/ServiceUnavailable' /logout: - post: + post: tags: - account summary: API-002 ログアウト - operationId: logoutUser + operationId: logout security: [] responses: '200': @@ -61,15 +61,15 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /signin: + /signup: post: tags: - account summary: API-003 会員登録 - operationId: registerUser + operationId: signup security: [] requestBody: - $ref: '#/components/requestBodies/ReqPostSigninBody' + $ref: '#/components/requestBodies/ReqPostSignupBody' responses: '200': description: 会員登録に成功しました。 @@ -79,12 +79,12 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /signout: - post: + /account: + delete: tags: - account summary: API-004 会員退会 - operationId: signoutUser + operationId: deleteAccount responses: '200': description: 会員退会に成功しました。 @@ -111,11 +111,25 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' + put: + tags: + - profile + summary: API-006 プロフィール更新 + operationId: putUserProfile + responses: + '200': + description: プロフィールの更新に成功しました。 + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' /trainers: get: tags: - trainer - summary: API-006 パーソナルトレーナー検索 + summary: API-007 パーソナルトレーナー検索 operationId: searchTrainers security: [] responses: @@ -131,7 +145,7 @@ paths: get: tags: - trainer - summary: API-007 トレーニングメニュー取得 + summary: API-008 トレーニングメニュー取得 operationId: getTrainingMenu security: [] parameters: @@ -157,7 +171,7 @@ paths: get: tags: - trainer - summary: API-008 トレーナープロフィール取得 + summary: API-009 トレーナープロフィール取得 operationId: getTrainerProfile security: [] parameters: @@ -182,7 +196,7 @@ paths: get: tags: - trainer - summary: API-009 トレーナー口コミ取得 + summary: API-010 トレーナー口コミ取得 operationId: getTrainerReviews security: [] parameters: @@ -207,7 +221,7 @@ paths: get: tags: - trainer - summary: API-010 トレーナースケジュール取得 + summary: API-011 トレーナースケジュール取得 operationId: getTrainerSchedule security: [] parameters: @@ -232,7 +246,7 @@ paths: get: tags: - booking - summary: API-011 予約済みトレーニング取得 + summary: API-012 予約済みトレーニング取得 operationId: getBookings responses: '200': @@ -246,7 +260,7 @@ paths: post: tags: - booking - summary: API-012 トレーニング予約(仮登録) + summary: API-013 トレーニング予約(仮登録) operationId: bookTraining requestBody: $ref: '#/components/requestBodies/ReqPostBookingBody' @@ -269,7 +283,7 @@ paths: delete: tags: - booking - summary: API-013 トレーニング予約削除 + summary: API-014 トレーニング予約削除 operationId: deleteBooking parameters: - name: booking_id @@ -295,7 +309,7 @@ paths: post: tags: - booking - summary: API-014 トレーニング予約(本登録) + summary: API-015 トレーニング予約(本登録) operationId: confirmBooking parameters: - name: booking_id @@ -325,7 +339,7 @@ paths: put: tags: - booking - summary: API-015 トレーニング受講ステータス変更 + summary: API-016 トレーニング受講ステータス変更 operationId: updateTrainingStatus parameters: - name: booking_id @@ -357,7 +371,7 @@ paths: post: tags: - payment - summary: API-016 決済 + summary: API-017 決済 operationId: makePayment requestBody: $ref: '#/components/requestBodies/ReqPostPaymentBody' @@ -380,7 +394,8 @@ paths: post: tags: - review - summary: API-017 口コミ登録 + summary: API-018 口コミ登録 + operationId: postReview requestBody: $ref: '#/components/requestBodies/ReqPostReviewBody' responses: @@ -390,7 +405,8 @@ paths: put: tags: - review - summary: API-018 口コミ修正 + summary: API-019 口コミ修正 + operationId: putReview parameters: - name: review_id in: path @@ -410,7 +426,8 @@ paths: delete: tags: - review - summary: API-019 口コミ削除 + summary: API-020 口コミ削除 + operationId: deleteReview parameters: - name: review_id in: path @@ -421,21 +438,22 @@ paths: responses: '200': description: 口コミ削除成功 - /trainer-register: + /trainer: post: tags: - provider - summary: API-020 トレーナー登録 + summary: API-021 トレーナー登録 + operationId: postTrainer requestBody: $ref: '#/components/requestBodies/ReqPostTrainerBody' responses: '200': description: トレーナー登録成功 - /trainer-attributes: put: tags: - provider - summary: API-021 トレーナー属性更新 + summary: API-022 トレーナー属性更新 + operationId: putTrainer requestBody: $ref: '#/components/requestBodies/ReqPostTrainerAttributesBody' responses: @@ -445,17 +463,19 @@ paths: post: tags: - provider - summary: API-022 トレーニングメニュー登録 + summary: API-023 トレーニングメニュー登録 + operationId: postTrainingMenu requestBody: $ref: '#/components/requestBodies/ReqPostTrainingMenuBody' responses: '200': description: トレーニングメニュー登録成功 - /training-menu/{menu_id}: + /training-menus/{menu_id}: put: tags: - provider - summary: API-023 トレーニングメニュー更新 + summary: API-024 トレーニングメニュー更新 + operationId: putTrainingMenu parameters: - name: menu_id in: path @@ -475,7 +495,8 @@ paths: delete: tags: - provider - summary: API-024 トレーニングメニュー削除 + summary: API-025 トレーニングメニュー削除 + operationId: deleteTrainingMenu parameters: - name: menu_id in: path @@ -614,7 +635,7 @@ components: application/json: schema: $ref: '#/components/schemas/LoginRequest' - ReqPostSigninBody: + ReqPostSignupBody: required: true content: application/json: From e38b30860d0f26cb477098d19b189f4d71c69289 Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Wed, 3 Jul 2024 11:09:55 +0900 Subject: [PATCH 15/27] update (#97) --- ...40\350\250\255\350\250\210\346\233\270.md" | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" index e1addb52..710aa1c1 100644 --- "a/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\343\203\227\343\203\255\343\202\260\343\203\251\343\203\240\350\250\255\350\250\210\346\233\270.md" @@ -3,7 +3,7 @@ ## 処理概要 - xxx(なぜこれが必要なのか) -- xxx +- xxx受信の後続処理で起動し、xxx計算を行いxxxトランに登録する(処理の概略) ## 処理シーケンス @@ -16,45 +16,51 @@ database DB note over システム: 各種インプット取得 -システム -> DB: xxx\n[yyyyワーク]\n[zzzラン] +システム -> DB: 業務日付取得 [日付マスタ] +システム -> DB: 計算対象抽出xxx\n[xxx受信管理トラン]\n[xxx受信ワーク]\n[xxxマスタ]\n[yyyマスタ]\n[zzzマスタ] +システム -> システム: 支払い差し引き金額計算(※ビジネスロジック1) +システム -> DB: 登録\n[xxxトラン] +システム -> DB: 更新\n[xxx予測ワーク] @enduml ``` +## ビジネスロジック + +### ビジネスロジック1 + +```txt +支払金額 = 受信ワーク.商品コード * xxx * xxx - yyyy + +IF xxx 区分 + 支払金額 = 支払金額 * 支払い係数 + (支払金額 - 前回発注金額)/2 +END +``` + ## DB 項目 ### 取得 -- xxx 受信ワーク.会社コード -- xxx 受信ワーク.担当者コード -- xxx 受信ワーク.エリアコード +- xxxマスタ.支払い金額 +- xxxマスタ.特定商品区分 +- yyyマスタ.新古品フラグ +- zzzマスタ.前回発注金額 抽出条件: -- xxx -- xxx +- xxx受信管理トラン.業務日付 = 業務日付 +- xxx受信管理トラン.処理連番 = xxx受信管理トラン の最新の処理連番 ### 登録 -警告リストワークに以下のカラムでレコードを登録する - -- xxx ワーク.会社コード -- xxx ワーク.処理日付 -- xxx ワーク.yyy 区分 +- xxxトラン.会社コード = xxx +- xxxトラン.処理日付 = xxx +- xxxトラン.xxx区分 = xxx +- xxxトラン.支払金額 = ビジネスロジック1計算結果 ### 更新 -xxx 予測ワークの以下の項目を更新する +xxx 予測ワーク: - xxx 予測ワーク.優先度 - xxx 予測ワーク.処理予定日 - -## 補足事項 - -### 1.xxx 抽出 - -xxx - -### 2.優先度計算 - -xxx From 5a90626f94edc5dc17786337d6d380449e5e7a6a Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Wed, 3 Jul 2024 11:13:44 +0900 Subject: [PATCH 16/27] =?UTF-8?q?=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E8=A8=AD=E8=A8=88=E6=9B=B8=20(#106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\270\350\250\255\350\250\210\346\233\270.md" | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 "documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" diff --git "a/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" new file mode 100644 index 00000000..7abb3334 --- /dev/null +++ "b/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" @@ -0,0 +1,16 @@ +# MSG01 + +## メッセージ概要 + +- 目的: ログイン処理周りでのエラー +- スコープ: frontend, backend + +## メッセージ定義 + +| 識別子 | レベル | ステータス | メッセージ | コメント | +| ------ | ------ | ---------- | ------------------------------------------ | ---------------------------- | +| 10001 | E | 400 | ユーザー名またはパスワードが間違っています | ログイン画面で発生 | +| 10002 | W | | 文字数オーバーです | ログイン画面で発生 | +| 10003 | E | 500 | {domain}は無効なユーザードメインです | ユーザーの所属が異なっている | +| 10004 | F | 500 | EntraIDに接続できません | ログインのバックエンドで発生 | + From a23005c6731fd02794e6a2a651ee875713117ddd Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Wed, 3 Jul 2024 11:14:00 +0900 Subject: [PATCH 17/27] =?UTF-8?q?=E5=8C=BA=E5=88=86=E5=80=A4=E8=A8=AD?= =?UTF-8?q?=E8=A8=88=E6=9B=B8=20(#105)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...44\350\250\255\350\250\210\346\233\270.md" | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 "documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" diff --git "a/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" new file mode 100644 index 00000000..d1c46392 --- /dev/null +++ "b/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" @@ -0,0 +1,22 @@ +# ENUM01 ユーザー権限 + +## 区分値概要 + +- 目的: 画面のモードの切り替えに利用する +- 物理名: user permission level +- 型: string +- スコープ: frontend, backend +- マスターテーブル: m_user_role + +## 区分値定義 + +| 論理名 | 物理名 | 値 | バージョン | コメント | +| ------------------ | --------------- | --- | ---------- | -------- | +| ゲスト | guest | 01 | 1 | | +| 未認証ユーザー | unauthenticated | 02 | 1 | | +| 登録ユーザー | user | 03 | 1 | | +| プレミアムユーザー | premium_user | 04 | 2 | | +| 開発者 | developer | 05 | 0 | | +| テスター | tester | 06 | 0 | | +| 管理者 | administrator | 07 | 0 | | + From eb078276ca812f621a1a00c1cb7ff61de9d01675 Mon Sep 17 00:00:00 2001 From: tk007 <53025495+TsubasaKanemitsu@users.noreply.github.com> Date: Tue, 2 Jul 2024 19:15:21 -0700 Subject: [PATCH 18/27] add: new section (#96) --- ...IF\345\256\232\347\276\251\346\233\270.md" | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" index 3025e3b4..3728756a 100644 --- "a/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" +++ "b/documents/forMarkdown/IF\345\256\232\347\276\251\346\233\270.md" @@ -10,7 +10,16 @@ ## 環境情報 -Input: +### Input + +| Item | Value | +| ---------------- | ------------------------------------------------ | +| 連携 S3 バケット | `${env}-example-import` | +| プレフィックス | `activate/year=${yyyy}/month=${MM}/day=${dd}/` | +| ファイル名 | `${yyyy}-${mm}-${dd}-${hh}-${MM}-${SS}.csv` | +| 保持期限 | 3 年 | + +### Output | Item | Value | | ---------------- | ------------------------------------------------ | @@ -27,7 +36,7 @@ Input: | | 連携タイミング(随時/定時) | 定時 | | | | 頻度 | 1 回/日 | | | | 起動時間 | **16:00** | | -| | 門限 | **16:00** | | +| | 処理完了期限 | **16:00** | | | | 未着チェック(なし/WARN/ERROR) | WARN | | | | 全件/差分 | 差分 | | | | 0 件時連携 | あり | | @@ -59,6 +68,30 @@ company_cd,device_cd,activation_date 12121,00000053,2022-03-30 ``` +## 連携先定義 + +| Category | Item | Value | Memo | +| -------- | ----------------------------------- | --------- | -------------------- | +| Protocol | 連携方式(ファイル/API/ストリーム) | ファイル | | +| | 連携タイミング(随時/定時) | 定時 | | +| | 頻度 | 1 回/日 | | +| | 起動時間 | **16:00** | | +| | 処理完了期限 | **16:00** | | +| | 未着チェック(なし/WARN/ERROR) | WARN | | +| | 全件/差分 | 差分 | | +| | 0 件時連携 | あり | | +| Format | ファイル種別 | **CSV** | | +| | レイアウト | RFC 8259 | | +| | 文字コード | UTF-8 | | +| | 改行コード | LF | | +| | 圧縮 | - | | +| | 暗号化 | - | | +| | ヘッダ行 | あり | | +| | 項目順 | 固定 | 項目順は入れ替え不可 | +| | 機密情報 | - | | + + + ## 処理概要 - ファイル定義に則ったバリデーションを実施 @@ -119,6 +152,12 @@ end なし -## ビジネスロック +## ビジネスロジック 特記事項なし + +## エラー処理 +| Pattern | Description | recovery | +| -------- | ----------------------------------- | --------- | +| フォーマットエラー | 連携元から提供されているデータ形式が想定外 | 連携元またはIFの処理内容の修正と再実行(運用手順書のリンクでもいいかも) | + From c6e7e9edcac6cb8ae136636ea6edaa3f3d8076dd Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Thu, 4 Jul 2024 10:48:27 +0900 Subject: [PATCH 19/27] Update .editorconfig (#135) --- .editorconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.editorconfig b/.editorconfig index 991d43e2..f4296173 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,3 +5,6 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true end_of_line = lf + +[*.md] +trim_trailing_whitespace = false From 30ed64e0245bd1b18a8553cc716b0f0e2a3b9c34 Mon Sep 17 00:00:00 2001 From: tk007 <53025495+TsubasaKanemitsu@users.noreply.github.com> Date: Thu, 11 Jul 2024 08:00:49 -0700 Subject: [PATCH 20/27] Add attributes to Request and Response (#130) * fix: ERD * fix: endpoint parameter * add: attributes to request and response --- .../openapi.yaml" | 750 +++++++++++++++--- .../future_muscle_partner/erd.a5er | 77 +- 2 files changed, 704 insertions(+), 123 deletions(-) diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" index ff79016f..d3ba51da 100644 --- "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" +++ "b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" @@ -29,7 +29,11 @@ paths: operationId: login security: [] requestBody: - $ref: '#/components/requestBodies/ReqPostLoginBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LoginRequest' responses: '200': description: ログインに成功しました。 @@ -40,7 +44,7 @@ paths: '503': $ref: '#/components/responses/ServiceUnavailable' /logout: - post: + post: tags: - account summary: API-002 ログアウト @@ -69,7 +73,11 @@ paths: operationId: signup security: [] requestBody: - $ref: '#/components/requestBodies/ReqPostSignupBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SignupRequest' responses: '200': description: 会員登録に成功しました。 @@ -96,15 +104,19 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' - /profile: + /profile/{trainee_id}: get: tags: - profile - summary: API-005 自分のプロフィール表示 + summary: API-005 プロフィール表示 operationId: getUserProfile responses: '200': description: プロフィールの取得に成功しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/Profile' '401': $ref: '#/components/responses/Unauthorized' '500': @@ -116,6 +128,19 @@ paths: - profile summary: API-006 プロフィール更新 operationId: putUserProfile + parameters: + - name: trainee_id + in: path + description: トレーニーID + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileRequest' responses: '200': description: プロフィールの更新に成功しました。 @@ -135,6 +160,10 @@ paths: responses: '200': description: トレーナーの検索結果を取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' '400': $ref: '#/components/responses/BadRequest' '500': @@ -158,6 +187,10 @@ paths: responses: '200': description: トレーニングメニューを取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingMenu' '400': $ref: '#/components/responses/BadRequest' '404': @@ -184,6 +217,10 @@ paths: responses: '200': description: トレーナープロフィールを取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' '400': $ref: '#/components/responses/BadRequest' '404': @@ -209,6 +246,10 @@ paths: responses: '200': description: トレーナーの口コミを取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/Review' '400': $ref: '#/components/responses/BadRequest' '404': @@ -234,6 +275,10 @@ paths: responses: '200': description: トレーナーのスケジュールを取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/TrainerSchedule' '400': $ref: '#/components/responses/BadRequest' '404': @@ -243,27 +288,17 @@ paths: '503': $ref: '#/components/responses/ServiceUnavailable' /bookings: - get: - tags: - - booking - summary: API-012 予約済みトレーニング取得 - operationId: getBookings - responses: - '200': - description: ユーザーの予約情報を取得しました。 - '401': - $ref: '#/components/responses/Unauthorized' - '500': - $ref: '#/components/responses/InternalServer' - '503': - $ref: '#/components/responses/ServiceUnavailable' post: tags: - booking summary: API-013 トレーニング予約(仮登録) operationId: bookTraining requestBody: - $ref: '#/components/requestBodies/ReqPostBookingBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingRequest' responses: '200': description: 予約が仮登録されました。 @@ -279,6 +314,25 @@ paths: $ref: '#/components/responses/InternalServer' '503': $ref: '#/components/responses/ServiceUnavailable' + /bookings/{trainee_id}: + get: + tags: + - booking + summary: API-012 予約済みトレーニング取得 + operationId: getBookings + responses: + '200': + description: ユーザーの予約情報を取得しました。 + content: + application/json: + schema: + $ref: '#/components/schemas/Booking' + '401': + $ref: '#/components/responses/Unauthorized' + '500': + $ref: '#/components/responses/InternalServer' + '503': + $ref: '#/components/responses/ServiceUnavailable' /bookings/{booking_id}: delete: tags: @@ -319,7 +373,11 @@ paths: schema: type: string requestBody: - $ref: '#/components/requestBodies/ReqPostBookingConfirmationBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/BookingConfirmationRequest' responses: '200': description: 予約が本登録されました。 @@ -349,7 +407,11 @@ paths: schema: type: string requestBody: - $ref: '#/components/requestBodies/ReqPostTrainingStatusUpdateBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingStatusUpdateRequest' responses: '200': description: ステータスが更新されました。 @@ -374,7 +436,11 @@ paths: summary: API-017 決済 operationId: makePayment requestBody: - $ref: '#/components/requestBodies/ReqPostPaymentBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/PaymentRequest' responses: '200': description: 決済が完了しました。 @@ -397,7 +463,11 @@ paths: summary: API-018 口コミ登録 operationId: postReview requestBody: - $ref: '#/components/requestBodies/ReqPostReviewBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ReviewRequest' responses: '200': description: 口コミ登録成功 @@ -410,7 +480,7 @@ paths: parameters: - name: review_id in: path - description: 口コミID + description: レビューID required: true schema: type: string @@ -419,7 +489,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Review' + $ref: '#/components/schemas/ReviewUpdateRequest' responses: '200': description: 口コミ修正成功 @@ -445,7 +515,11 @@ paths: summary: API-021 トレーナー登録 operationId: postTrainer requestBody: - $ref: '#/components/requestBodies/ReqPostTrainerBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' responses: '200': description: トレーナー登録成功 @@ -455,7 +529,11 @@ paths: summary: API-022 トレーナー属性更新 operationId: putTrainer requestBody: - $ref: '#/components/requestBodies/ReqPostTrainerAttributesBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Trainer' responses: '200': description: トレーナー属性更新成功 @@ -466,7 +544,11 @@ paths: summary: API-023 トレーニングメニュー登録 operationId: postTrainingMenu requestBody: - $ref: '#/components/requestBodies/ReqPostTrainingMenuBody' + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TrainingMenu' responses: '200': description: トレーニングメニュー登録成功 @@ -545,7 +627,7 @@ components: type: string format: password description: パスワード - SigninRequest: + SignupRequest: type: object properties: email: @@ -559,16 +641,18 @@ components: name: type: string description: 名前 - BookingRequest: + ProfileRequest: type: object properties: - trainingId: + trainee_name: type: string - description: トレーニングのID - date: + description: トレーニー名 + display_name: type: string - format: date - description: トレーニングの日付 + description: 表示名 + self_introduction: + type: string + description: 自己紹介 PaymentRequest: type: object properties: @@ -579,116 +663,548 @@ components: method: type: string description: 支払方法 + BookingRequest: + type: object + properties: + menu_id: + type: string + description: トレーニングメニューのID + booking_status_typ: + type: string + enum: ["0"] + description: | + 予約ステータス区分 + 0: 仮登録 + trainee_id: + type: string + description: トレーニーID + training_start_at: + type: string + format: date + description: トレーニング開始日時 + training_end_at: + type: string + format: date + description: トレーニング終了日時 BookingConfirmationRequest: type: object properties: - bookingId: + booking_status_typ: type: string - description: 予約のID + enum: ["1"] + description: | + 予約ステータス区分 + 1: 本登録 TrainingStatusUpdateRequest: type: object properties: - trainingId: + booking_status_typ: type: string - description: トレーニングのID - status: + enum: ["2", "3"] + description: | + 予約ステータス区分 + 2: 受講中 + 3: 受講済み + ReviewRequest: + type: object + properties: + trainer_id: type: string - description: ステータス - Review: + description: トレーナーID + trainee_id: + type: string + description: トレー二ーID + comment: + type: string + description: レビューコメント + ReviewUpdateRequest: type: object properties: - id: + review_id: type: string - title: + description: レビューID + comment: type: string - content: + description: レビューコメント + Profile: + type: object + properties: + trainee_id: type: string - Trainer: + description: トレーニーID + trainee_name: + type: string + description: トレーニー名 + display_name: + type: string + description: 表示名 + self_introduction: + type: string + description: 自己紹介 + Booking: type: object properties: - id: + booking_id: type: string - name: + description: 予約ID + menu_id: type: string - age: + description: トレーニングメニューのID + trainer_id: + type: string + description: トレーナーのID + display_order: + type: string + description: 表示順序 + menu_name: + type: string + description: メニュー名 + menu_description: + type: string + description: メニュー説明 + required_time: + type: integer + description: 所要時間 + price: type: integer - TrainerAttributes: + description: 料金 + start_at: + type: string + format: date + description: 開始日時 + end_at: + type: string + format: date + description: 終了日時 + training_start_at: + type: string + format: date + description: トレーニング開始日時 + training_end_at: + type: string + format: date + description: トレーニング終了日時 + Trainer: type: object properties: - speciality: + trainer_id: type: string - experience: + description: トレーナーID + trainer_name: + type: string + description: トレーナー名 + unit_price: type: integer + description: 単価 + business_start_at: + type: string + format: date + description: 営業開始時間 + business_end_at: + type: string + format: date + description: 営業終了時間 + public_mail_addr: + type: string + format: email + description: 公開メールアドレス + public_tel: + type: string + description: 公開電話番号 + store_name: + type: string + description: 店舗名 + gym_name: + type: string + description: ジム名 + TrainerSchedule: + type: object + properties: + trainer_id: + type: string + description: トレーナーID + trainer_name: + type: string + description: トレーナー名 + date: + type: string + format: date + description: 日付け + booking_typ_0000: + type: string + enum: ["0", "1"] + description: | + 予約区分 00:00-00:30 + 0: 未予約 + 1: 予約済み + booking_typ_0030: + type: string + enum: ["0", "1"] + description: | + 予約区分 00:30-01:00 + 0: 未予約 + 1: 予約済み + booking_typ_0100: + type: string + enum: ["0", "1"] + description: | + 予約区分 01:00-01:30 + 0: 未予約 + 1: 予約済み + booking_typ_0130: + type: string + enum: ["0", "1"] + description: | + 予約区分 01:30-02:00 + 0: 未予約 + 1: 予約済み + booking_typ_0200: + type: string + enum: ["0", "1"] + description: | + 予約区分 02:00-02:30 + 0: 未予約 + 1: 予約済み + booking_typ_0230: + type: string + enum: ["0", "1"] + description: | + 予約区分 02:30-03:00 + 0: 未予約 + 1: 予約済み + booking_typ_0300: + type: string + description: | + 予約区分 03:00-03:30 + 0: 未予約 + 1: 予約済み + booking_typ_0330: + type: string + enum: ["0", "1"] + description: | + 予約区分 03:30-04:00 + 0: 未予約 + 1: 予約済み + booking_typ_0400: + type: string + enum: ["0", "1"] + description: | + 予約区分 04:00-04:30 + 0: 未予約 + 1: 予約済み + booking_typ_0430: + type: string + enum: ["0", "1"] + description: | + 予約区分 04:30-05:00 + 0: 未予約 + 1: 予約済み + booking_typ_0500: + type: string + enum: ["0", "1"] + description: | + 予約区分 05:00-05:30 + 0: 未予約 + 1: 予約済み + booking_typ_0530: + type: string + enum: ["0", "1"] + description: | + 予約区分 05:30-06:00 + 0: 未予約 + 1: 予約済み + booking_typ_0600: + type: string + description: | + 予約区分 06:00-06:30 + 0: 未予約 + 1: 予約済み + booking_typ_0630: + type: string + enum: ["0", "1"] + description: | + 予約区分 06:30-07:00 + 0: 未予約 + 1: 予約済み + booking_typ_0700: + type: string + enum: ["0", "1"] + description: | + 予約区分 07:00-07:30 + 0: 未予約 + 1: 予約済み + booking_typ_0730: + type: string + enum: ["0", "1"] + description: | + 予約区分 07:30-08:00 + 0: 未予約 + 1: 予約済み + booking_typ_0800: + type: string + enum: ["0", "1"] + description: | + 予約区分 08:00-08:30 + 0: 未予約 + 1: 予約済み + booking_typ_0830: + type: string + enum: ["0", "1"] + description: | + 予約区分 08:30-09:00 + 0: 未予約 + 1: 予約済み + booking_typ_0900: + type: string + enum: ["0", "1"] + description: | + 予約区分 09:00-09:30 + 0: 未予約 + 1: 予約済み + booking_typ_0930: + type: string + enum: ["0", "1"] + description: | + 予約区分 09:30-10:00 + 0: 未予約 + 1: 予約済み + booking_typ_1000: + type: string + enum: ["0", "1"] + description: | + 予約区分 10:00-10:30 + 0: 未予約 + 1: 予約済み + booking_typ_1030: + type: string + enum: ["0", "1"] + description: | + 予約区分 10:30-11:00 + 0: 未予約 + 1: 予約済み + booking_typ_1100: + type: string + enum: ["0", "1"] + description: | + 予約区分 11:00-11:30 + 0: 未予約 + 1: 予約済み + booking_typ_1130: + type: string + enum: ["0", "1"] + description: | + 予約区分 11:30-12:00 + 0: 未予約 + 1: 予約済み + booking_typ_1200: + type: string + enum: ["0", "1"] + description: | + 予約区分 12:00-12:30 + 0: 未予約 + 1: 予約済み + booking_typ_1230: + type: string + enum: ["0", "1"] + description: | + 予約区分 12:30-13:00 + 0: 未予約 + 1: 予約済み + booking_typ_1300: + type: string + enum: ["0", "1"] + description: | + 予約区分 13:00-13:30 + 0: 未予約 + 1: 予約済み + booking_typ_1330: + type: string + enum: ["0", "1"] + description: | + 予約区分 13:30-14:00 + 0: 未予約 + 1: 予約済み + booking_typ_1400: + type: string + enum: ["0", "1"] + description: | + 予約区分 14:00-14:30 + 0: 未予約 + 1: 予約済み + booking_typ_1430: + type: string + enum: ["0", "1"] + description: | + 予約区分 14:30-15:00 + 0: 未予約 + 1: 予約済み + booking_typ_1500: + type: string + enum: ["0", "1"] + description: | + 予約区分 15:00-15:30 + 0: 未予約 + 1: 予約済み + booking_typ_1530: + type: string + enum: ["0", "1"] + description: | + 予約区分 15:30-16:00 + 0: 未予約 + 1: 予約済み + booking_typ_1600: + type: string + enum: ["0", "1"] + description: | + 予約区分 16:00-16:30 + 0: 未予約 + 1: 予約済み + booking_typ_1630: + type: string + enum: ["0", "1"] + description: | + 予約区分 16:30-17:00 + 0: 未予約 + 1: 予約済み + booking_typ_1700: + type: string + enum: ["0", "1"] + description: | + 予約区分 17:00-17:30 + 0: 未予約 + 1: 予約済み + booking_typ_1730: + type: string + enum: ["0", "1"] + description: | + 予約区分 17:30-18:00 + 0: 未予約 + 1: 予約済み + booking_typ_1800: + type: string + enum: ["0", "1"] + description: | + 予約区分 18:00-18:30 + 0: 未予約 + 1: 予約済み + booking_typ_1830: + type: string + enum: ["0", "1"] + description: | + 予約区分 18:30-19:00 + 0: 未予約 + 1: 予約済み + booking_typ_1900: + type: string + enum: ["0", "1"] + description: | + 予約区分 19:00-19:30 + 0: 未予約 + 1: 予約済み + booking_typ_1930: + type: string + description: | + 予約区分 19:30-20:00 + 0: 未予約 + 1: 予約済み + booking_typ_2000: + type: string + enum: ["0", "1"] + description: | + 予約区分 20:00-20:30 + 0: 未予約 + 1: 予約済み + booking_typ_2030: + type: string + enum: ["0", "1"] + description: | + 予約区分 20:30-21:00 + 0: 未予約 + 1: 予約済み + booking_typ_2100: + type: string + enum: ["0", "1"] + description: | + 予約区分 21:00-21:30 + 0: 未予約 + 1: 予約済み + booking_typ_2130: + type: string + enum: ["0", "1"] + description: | + 予約区分 21:30-22:00 + 0: 未予約 + 1: 予約済み + booking_typ_2200: + type: string + enum: ["0", "1"] + description: | + 予約区分 22:00-22:30 + 0: 未予約 + 1: 予約済み + booking_typ_2230: + type: string + enum: ["0", "1"] + description: | + 予約区分 22:30-23:00 + 0: 未予約 + 1: 予約済み + booking_typ_2300: + type: string + enum: ["0", "1"] + description: | + 予約区分 23:00-23:30 + 0: 未予約 + 1: 予約済み + booking_typ_2330: + type: string + enum: ["0", "1"] + description: | + 予約区分 23:30-24:00 + 0: 未予約 + 1: 予約済み TrainingMenu: type: object properties: - id: + menu_id: type: string - name: + trainer_id: type: string - description: + description: トレーナーID + display_order: type: string - requestBodies: - ReqPostLoginBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/LoginRequest' - ReqPostSignupBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/SigninRequest' - ReqPostBookingBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/BookingRequest' - ReqPostPaymentBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/PaymentRequest' - ReqPostBookingConfirmationBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/BookingConfirmationRequest' - ReqPostTrainingStatusUpdateBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainingStatusUpdateRequest' - ReqPostReviewBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Review' - ReqPostTrainerBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/Trainer' - ReqPostTrainerAttributesBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainerAttributes' - ReqPostTrainingMenuBody: - required: true - content: - application/json: - schema: - $ref: '#/components/schemas/TrainingMenu' + description: 表示順序 + menu_name: + type: string + description: メニュー名 + menu_description: + type: string + description: メニュー説明 + required_time: + type: integer + description: 所要時間 + price: + type: integer + description: 料金 + Review: + type: object + properties: + review_id: + type: string + description: レビューID + display_name: + type: string + description: トレーニーの表示名 + trainer_name: + type: string + description: トレーナー名 + comment: + type: string + description: レビューコメント + posted_at: + type: string + format: date + description: 投稿日時 responses: BadRequest: description: 400 Bad Request diff --git a/documents/forMarkdown/future_muscle_partner/erd.a5er b/documents/forMarkdown/future_muscle_partner/erd.a5er index 0f75bab0..bce2a89f 100644 --- a/documents/forMarkdown/future_muscle_partner/erd.a5er +++ b/documents/forMarkdown/future_muscle_partner/erd.a5er @@ -1,7 +1,7 @@ # A5:ER FORMAT:18 # A5:ER ENCODING:UTF8 # A5:ER Mk-1 Copyright © 2007 m.matsubara -# A5:SQL Mk-2 Version 2.19.0 Copyright © 1997 - 2024 m.matsubara +# A5:SQL Mk-2 Version 2.19.2 Copyright © 1997 - 2024 m.matsubara # https://a5m2.mmatsubara.com [Manager] @@ -48,12 +48,13 @@ Page=MAIN Left=900 Top=400 Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="トレーニー名","trainee_name","",,,"","",$FFFFFFFF,"" Field="表示氏名","display_name","",,,"","",$FFFFFFFF,"" Field="自己紹介","self_introduction","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419164924 +ModifiedDateTime=20240711124838 Position="MAIN",900,400,254,275 ZOrder=1 @@ -101,7 +102,7 @@ Field="料金","price","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419161745 +ModifiedDateTime=20240711142913 Position="MAIN",1300,400,238,333 ZOrder=3 @@ -115,6 +116,7 @@ Page=MAIN Left=1650 Top=400 Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="トレーナー名","trainer_name","",,,"","",$FFFFFFFF,"" Field="単価","unit_price","",,,"","",$FFFFFFFF,"" Field="営業開始時間","business_start_at","",,,"","",$FFFFFFFF,"" Field="営業終了時間","business_end_at","",,,"","",$FFFFFFFF,"" @@ -123,7 +125,7 @@ Field="公開電話番号","public_tel","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419164109 +ModifiedDateTime=20240711124858 Position="MAIN",1650,400,426,296 ZOrder=4 @@ -221,14 +223,14 @@ TableInnerOption= TableOption= Page=MAIN Left=2350 -Top=250 +Top=200 Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" Field="ジム名","ジム名","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF ModifiedDateTime=20240419163332 -Position="MAIN",2350,250 +Position="MAIN",2350,200 ZOrder=7 [Relation] @@ -362,3 +364,66 @@ Bar3=285 TermPos1=R TermPos2=R ZOrder=13 + +[Entity] +PName=review +LName=レビュー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=100 +Field="レビューID","review_id","",,,"","",$FFFFFFFF,"" +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="トレーニーID","トレーニーID","",,,"","",$FFFFFFFF,"" +Field="コメント","comment","",,,"","",$FFFFFFFF,"" +Field="投稿日時","posted_at","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240711123631 +Position="MAIN",1650,100,132,141 +ZOrder=14 + +[Relation] +Entity1=trainee +Entity2=review +RelationType1=1 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,1183,1379,2885,R,R,"" +Dependence=1 +Caption= +PName= +LineMode=0 +Bar1=118 +Bar2=138 +Bar3=288 +TermPos1=R +TermPos2=R +ZOrder=17 + +[Relation] +Entity1=trainer +Entity2=review +RelationType1=1 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,6333,4889,5822,R,R,"" +Dependence=1 +Caption= +PName= +LineMode=0 +Bar1=633 +Bar2=489 +Bar3=582 +TermPos1=R +TermPos2=R +ZOrder=18 From 35f857b11b5cc7aa3e135faf9d5294218be8c0cf Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 12 Jul 2024 16:35:45 +0900 Subject: [PATCH 21/27] git mv ERD (#139) --- .../future_muscle_partner/README.md | 11 +- .../erd.a5er" | 77 +++- .../future_muscle_partner/erd.a5er | 429 ------------------ 3 files changed, 76 insertions(+), 441 deletions(-) delete mode 100644 documents/forMarkdown/future_muscle_partner/erd.a5er diff --git a/documents/forMarkdown/future_muscle_partner/README.md b/documents/forMarkdown/future_muscle_partner/README.md index 53e1d381..55050b68 100644 --- a/documents/forMarkdown/future_muscle_partner/README.md +++ b/documents/forMarkdown/future_muscle_partner/README.md @@ -1,4 +1,4 @@ -## Future Muscle Partner +# Future Muscle Partner ~いきつけのジムでパーソナルトレーニングを受けよう~ のFuture Muscle Partnerのリポジトリ。 @@ -15,11 +15,11 @@ 主なアクターとメリット: - トレーニー - - 自分が通っているジムでパーソナル受けられる - - トレーナーの得意分野ごとにトレーナーを使い分けられる + - 自分が通っているジムでパーソナル受けられる + - トレーナーの得意分野ごとにトレーナーを使い分けられる - パーソナルトレーニー - - 24H型ジムでサービスを提供できる - - いつ/誰に/どんなメニューでトレーニングしたかを管理できる + - 24H型ジムでサービスを提供できる + - いつ/誰に/どんなメニューでトレーニングしたかを管理できる ## フォルダ階層 @@ -30,4 +30,3 @@ ├── frontend # フロントエンド系のコード ├── infra # インフラ系のコード ``` - diff --git "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" index 0f75bab0..bce2a89f 100644 --- "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" +++ "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" @@ -1,7 +1,7 @@ # A5:ER FORMAT:18 # A5:ER ENCODING:UTF8 # A5:ER Mk-1 Copyright © 2007 m.matsubara -# A5:SQL Mk-2 Version 2.19.0 Copyright © 1997 - 2024 m.matsubara +# A5:SQL Mk-2 Version 2.19.2 Copyright © 1997 - 2024 m.matsubara # https://a5m2.mmatsubara.com [Manager] @@ -48,12 +48,13 @@ Page=MAIN Left=900 Top=400 Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" +Field="トレーニー名","trainee_name","",,,"","",$FFFFFFFF,"" Field="表示氏名","display_name","",,,"","",$FFFFFFFF,"" Field="自己紹介","self_introduction","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419164924 +ModifiedDateTime=20240711124838 Position="MAIN",900,400,254,275 ZOrder=1 @@ -101,7 +102,7 @@ Field="料金","price","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419161745 +ModifiedDateTime=20240711142913 Position="MAIN",1300,400,238,333 ZOrder=3 @@ -115,6 +116,7 @@ Page=MAIN Left=1650 Top=400 Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="トレーナー名","trainer_name","",,,"","",$FFFFFFFF,"" Field="単価","unit_price","",,,"","",$FFFFFFFF,"" Field="営業開始時間","business_start_at","",,,"","",$FFFFFFFF,"" Field="営業終了時間","business_end_at","",,,"","",$FFFFFFFF,"" @@ -123,7 +125,7 @@ Field="公開電話番号","public_tel","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF -ModifiedDateTime=20240419164109 +ModifiedDateTime=20240711124858 Position="MAIN",1650,400,426,296 ZOrder=4 @@ -221,14 +223,14 @@ TableInnerOption= TableOption= Page=MAIN Left=2350 -Top=250 +Top=200 Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" Field="ジム名","ジム名","",,,"","",$FFFFFFFF,"" EffectMode=None Color=$000000 BkColor=$FFFFFF ModifiedDateTime=20240419163332 -Position="MAIN",2350,250 +Position="MAIN",2350,200 ZOrder=7 [Relation] @@ -362,3 +364,66 @@ Bar3=285 TermPos1=R TermPos2=R ZOrder=13 + +[Entity] +PName=review +LName=レビュー +Comment= +TableInnerOption= +TableOption= +Page=MAIN +Left=1650 +Top=100 +Field="レビューID","review_id","",,,"","",$FFFFFFFF,"" +Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" +Field="トレーニーID","トレーニーID","",,,"","",$FFFFFFFF,"" +Field="コメント","comment","",,,"","",$FFFFFFFF,"" +Field="投稿日時","posted_at","",,,"","",$FFFFFFFF,"" +EffectMode=None +Color=$000000 +BkColor=$FFFFFF +ModifiedDateTime=20240711123631 +Position="MAIN",1650,100,132,141 +ZOrder=14 + +[Relation] +Entity1=trainee +Entity2=review +RelationType1=1 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,1183,1379,2885,R,R,"" +Dependence=1 +Caption= +PName= +LineMode=0 +Bar1=118 +Bar2=138 +Bar3=288 +TermPos1=R +TermPos2=R +ZOrder=17 + +[Relation] +Entity1=trainer +Entity2=review +RelationType1=1 +RelationType2=3 +Fields1= +Fields2= +Cardinarity1= +Cardinarity2= +Position="MAIN",0,6333,4889,5822,R,R,"" +Dependence=1 +Caption= +PName= +LineMode=0 +Bar1=633 +Bar2=489 +Bar3=582 +TermPos1=R +TermPos2=R +ZOrder=18 diff --git a/documents/forMarkdown/future_muscle_partner/erd.a5er b/documents/forMarkdown/future_muscle_partner/erd.a5er deleted file mode 100644 index bce2a89f..00000000 --- a/documents/forMarkdown/future_muscle_partner/erd.a5er +++ /dev/null @@ -1,429 +0,0 @@ -# A5:ER FORMAT:18 -# A5:ER ENCODING:UTF8 -# A5:ER Mk-1 Copyright © 2007 m.matsubara -# A5:SQL Mk-2 Version 2.19.2 Copyright © 1997 - 2024 m.matsubara -# https://a5m2.mmatsubara.com - -[Manager] -ProjectName=フューチャーマッスルパートナー -Author= -MaxEntityRowShow=1000 -ReadOnlyRecommend=0 -Page=Main -PageInfo="Main",2,"A3Landscape",$FFFFFF -LogicalView=1 -DecodeDomain=0 -ViewModePageIndividually=1 -ViewMode=2 -ViewFormat=0 -UseNondependenceDashLine=0 -FontName=Tahoma -FontSize=6 -PaperSize=A4Landscape -HeaderLeft= -HeaderCenter= -HeaderRight= -FooterLeft= -FooterCenter= -FooterRight= -ShowPageoutRelation=1 -RDBMSTypeName=Oracle Database -DefaultPkName=%0:s_PKC -DefaultPkIndexName=%0:s_PKI -DefaultIndexName=%0:s_IX%1:d -DefaultFkName=%0:s_FK%1:d -SqlSeparator=0 -UpperCaseKeyword=0 -ShowTag=1 -ShowCommonAttributes=0 -BugFixEntityWidth=1 - -[Entity] -PName=trainee -LName=トレーニー -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=900 -Top=400 -Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" -Field="トレーニー名","trainee_name","",,,"","",$FFFFFFFF,"" -Field="表示氏名","display_name","",,,"","",$FFFFFFFF,"" -Field="自己紹介","self_introduction","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240711124838 -Position="MAIN",900,400,254,275 -ZOrder=1 - -[Entity] -PName=booking -LName=予約 -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=1100 -Top=950 -Field="予約ID","booking_id","",,,"","",$FFFFFFFF,"" -Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" -Field="トレーニーID","trainee_id","",,,"","",$FFFFFFFF,"" -Field="開始日時","start_at","",,,"","",$FFFFFFFF,"" -Field="終了日時","end_at","",,,"","",$FFFFFFFF,"" -Field="予約ステータス区分","booking_status_typ","",,,"","",$FFFFFFFF,"" -Field="予約受付日時","booking_reception_at","",,,"","",$FFFFFFFF,"" -Field="トレーニング開始日時","training_start_at","",,,"","",$FFFFFFFF,"" -Field="トレーニング終了日時","training_end_at","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240419165003 -Position="MAIN",1100,950,283,349 -ZOrder=2 - -[Entity] -PName=menu -LName=メニュー -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=1300 -Top=400 -Field="メニューID","menu_id","",,,"","",$FFFFFFFF,"" -Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" -Field="表示順序","display_order","",,,"","",$FFFFFFFF,"" -Field="メニュー名","menu_name","",,,"","",$FFFFFFFF,"" -Field="メニュー説明","menu_description","",,,"","",$FFFFFFFF,"" -Field="所要時間","required_time","",,,"","",$FFFFFFFF,"" -Field="料金","price","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240711142913 -Position="MAIN",1300,400,238,333 -ZOrder=3 - -[Entity] -PName=trainer -LName=トレーナー -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=1650 -Top=400 -Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" -Field="トレーナー名","trainer_name","",,,"","",$FFFFFFFF,"" -Field="単価","unit_price","",,,"","",$FFFFFFFF,"" -Field="営業開始時間","business_start_at","",,,"","",$FFFFFFFF,"" -Field="営業終了時間","business_end_at","",,,"","",$FFFFFFFF,"" -Field="公開メールアドレス","public_mail_addr","",,,"","",$FFFFFFFF,"" -Field="公開電話番号","public_tel","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240711124858 -Position="MAIN",1650,400,426,296 -ZOrder=4 - -[Entity] -PName=calendar -LName=カレンダー -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=1650 -Top=850 -Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" -Field="日付","date","",,,"","",$FFFFFFFF,"" -Field="予約区分0000","booking_typ_0000","",,,"","",$FFFFFFFF,"" -Field="予約区分0030","予約区分0030","",,,"","",$FFFFFFFF,"" -Field="予約区分0100","予約区分0100","",,,"","",$FFFFFFFF,"" -Field="予約区分0130","予約区分0130","",,,"","",$FFFFFFFF,"" -Field="予約区分0200","予約区分0200","",,,"","",$FFFFFFFF,"" -Field="予約区分0230","予約区分0230","",,,"","",$FFFFFFFF,"" -Field="予約区分0300","予約区分0300","",,,"","",$FFFFFFFF,"" -Field="予約区分0330","予約区分0330","",,,"","",$FFFFFFFF,"" -Field="予約区分0400","予約区分0400","",,,"","",$FFFFFFFF,"" -Field="予約区分0430","予約区分0430","",,,"","",$FFFFFFFF,"" -Field="予約区分0500","予約区分0500","",,,"","",$FFFFFFFF,"" -Field="予約区分0530","予約区分0530","",,,"","",$FFFFFFFF,"" -Field="予約区分0600","予約区分0600","",,,"","",$FFFFFFFF,"" -Field="予約区分0630","予約区分0630","",,,"","",$FFFFFFFF,"" -Field="予約区分0700","予約区分0700","",,,"","",$FFFFFFFF,"" -Field="予約区分0730","予約区分0730","",,,"","",$FFFFFFFF,"" -Field="予約区分0800","予約区分0800","",,,"","",$FFFFFFFF,"" -Field="予約区分0830","予約区分0830","",,,"","",$FFFFFFFF,"" -Field="予約区分0900","予約区分0900","",,,"","",$FFFFFFFF,"" -Field="予約区分0930","予約区分0930","",,,"","",$FFFFFFFF,"" -Field="予約区分1000","予約区分1000","",,,"","",$FFFFFFFF,"" -Field="予約区分1030","予約区分1030","",,,"","",$FFFFFFFF,"" -Field="予約区分1100","予約区分1100","",,,"","",$FFFFFFFF,"" -Field="予約区分1130","予約区分1130","",,,"","",$FFFFFFFF,"" -Field="予約区分1200","予約区分1200","",,,"","",$FFFFFFFF,"" -Field="予約区分1230","予約区分1230","",,,"","",$FFFFFFFF,"" -Field="予約区分1300","予約区分1300","",,,"","",$FFFFFFFF,"" -Field="予約区分1330","予約区分1330","",,,"","",$FFFFFFFF,"" -Field="予約区分1400","予約区分1400","",,,"","",$FFFFFFFF,"" -Field="予約区分1430","予約区分1430","",,,"","",$FFFFFFFF,"" -Field="予約区分1500","予約区分1500","",,,"","",$FFFFFFFF,"" -Field="予約区分1530","予約区分1530","",,,"","",$FFFFFFFF,"" -Field="予約区分1600","予約区分1600","",,,"","",$FFFFFFFF,"" -Field="予約区分1630","予約区分1630","",,,"","",$FFFFFFFF,"" -Field="予約区分1700","予約区分1700","",,,"","",$FFFFFFFF,"" -Field="予約区分1730","予約区分1730","",,,"","",$FFFFFFFF,"" -Field="予約区分1800","予約区分1800","",,,"","",$FFFFFFFF,"" -Field="予約区分1830","予約区分1830","",,,"","",$FFFFFFFF,"" -Field="予約区分1900","予約区分1900","",,,"","",$FFFFFFFF,"" -Field="予約区分1930","予約区分1930","",,,"","",$FFFFFFFF,"" -Field="予約区分2000","予約区分2000","",,,"","",$FFFFFFFF,"" -Field="予約区分2030","予約区分2030","",,,"","",$FFFFFFFF,"" -Field="予約区分2100","予約区分2100","",,,"","",$FFFFFFFF,"" -Field="予約区分2130","予約区分2130","",,,"","",$FFFFFFFF,"" -Field="予約区分2200","予約区分2200","",,,"","",$FFFFFFFF,"" -Field="予約区分2230","予約区分2230","",,,"","",$FFFFFFFF,"" -Field="予約区分2300","予約区分2300","",,,"","",$FFFFFFFF,"" -Field="予約区分2330","予約区分2330","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240419162555 -Position="MAIN",1650,850 -ZOrder=5 - -[Entity] -PName=trainer_workspace -LName=トレーナー勤務先 -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=2200 -Top=450 -Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" -Field="店舗ID","store_id","",,,"","",$FFFFFFFF,"" -Field="店舗名","store_name","",,,"","",$FFFFFFFF,"" -Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240419163344 -Position="MAIN",2200,450 -ZOrder=6 - -[Entity] -PName=gym -LName=ジム -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=2350 -Top=200 -Field="ジムID","gym_id","",,,"","",$FFFFFFFF,"" -Field="ジム名","ジム名","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240419163332 -Position="MAIN",2350,200 -ZOrder=7 - -[Relation] -Entity1=trainee -Entity2=booking -RelationType1=2 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,4131,5869,3628,R,R,"" -Dependence=1 -Caption= -PName= -ModifiedDateTime=20240419165039 -LineMode=0 -Bar1=413 -Bar2=587 -Bar3=363 -TermPos1=R -TermPos2=R -ZOrder=8 - -[Relation] -Entity1=trainer -Entity2=menu -RelationType1=2 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,4675,5325,2864,R,R,"" -Dependence=1 -Caption= -PName= -ModifiedDateTime=20240419165118 -LineMode=0 -Bar1=468 -Bar2=532 -Bar3=286 -TermPos1=R -TermPos2=R -ZOrder=9 - -[Relation] -Entity1=menu -Entity2=booking -RelationType1=2 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,5580,4420,4675,R,R,"" -Dependence=1 -Caption= -PName= -ModifiedDateTime=20240419165146 -LineMode=0 -Bar1=558 -Bar2=442 -Bar3=468 -TermPos1=R -TermPos2=R -ZOrder=10 - -[Relation] -Entity1=trainer -Entity2=calendar -RelationType1=2 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,7800,2200,7644,R,R,"" -Dependence=1 -Caption= -PName= -ModifiedDateTime=20240419165237 -LineMode=0 -Bar1=780 -Bar2=220 -Bar3=764 -TermPos1=R -TermPos2=R -ZOrder=11 - -[Relation] -Entity1=trainer_workspace -Entity2=gym -RelationType1=3 -RelationType2=2 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,4440,5560,4238,R,R,"" -Dependence=0 -Caption= -PName= -ModifiedDateTime=20240419165300 -LineMode=0 -Bar1=444 -Bar2=556 -Bar3=424 -TermPos1=R -TermPos2=R -ZOrder=12 - -[Relation] -Entity1=trainer -Entity2=trainer_workspace -RelationType1=2 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,4585,5415,2851,R,R,"" -Dependence=1 -Caption= -PName= -ModifiedDateTime=20240419165327 -LineMode=0 -Bar1=458 -Bar2=542 -Bar3=285 -TermPos1=R -TermPos2=R -ZOrder=13 - -[Entity] -PName=review -LName=レビュー -Comment= -TableInnerOption= -TableOption= -Page=MAIN -Left=1650 -Top=100 -Field="レビューID","review_id","",,,"","",$FFFFFFFF,"" -Field="トレーナーID","trainer_id","",,,"","",$FFFFFFFF,"" -Field="トレーニーID","トレーニーID","",,,"","",$FFFFFFFF,"" -Field="コメント","comment","",,,"","",$FFFFFFFF,"" -Field="投稿日時","posted_at","",,,"","",$FFFFFFFF,"" -EffectMode=None -Color=$000000 -BkColor=$FFFFFF -ModifiedDateTime=20240711123631 -Position="MAIN",1650,100,132,141 -ZOrder=14 - -[Relation] -Entity1=trainee -Entity2=review -RelationType1=1 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,1183,1379,2885,R,R,"" -Dependence=1 -Caption= -PName= -LineMode=0 -Bar1=118 -Bar2=138 -Bar3=288 -TermPos1=R -TermPos2=R -ZOrder=17 - -[Relation] -Entity1=trainer -Entity2=review -RelationType1=1 -RelationType2=3 -Fields1= -Fields2= -Cardinarity1= -Cardinarity2= -Position="MAIN",0,6333,4889,5822,R,R,"" -Dependence=1 -Caption= -PName= -LineMode=0 -Bar1=633 -Bar2=489 -Bar3=582 -TermPos1=R -TermPos2=R -ZOrder=18 From f1ad57709b429e6b5fc7b0e8cf68218b94fba36e Mon Sep 17 00:00:00 2001 From: Junki Mano Date: Fri, 9 Aug 2024 10:56:32 +0900 Subject: [PATCH 22/27] rename directory (#163) --- .../03_\347\224\273\351\235\242/README.md" | 0 .../docs/04_WebAPI/README.md | 0 .../docs/04_WebAPI/openapi.yaml | 0 .../README.md" | 0 .../erd.a5er" | 0 .../future_muscle_partner/docs/06_IF/README.md | 0 .../README.md" | 0 .../08_\345\270\263\347\245\250/README.md" | 0 .../README.md" | 0 .../future_muscle_partner/docs/README.md | 18 +++++++++--------- 10 files changed, 9 insertions(+), 9 deletions(-) rename "documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" => "documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242/README.md" (100%) rename "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" => documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/README.md (100%) rename "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" => documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/openapi.yaml (100%) rename "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" => "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/README.md" (100%) rename "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" => "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/erd.a5er" (100%) rename "documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" => documents/forMarkdown/future_muscle_partner/docs/06_IF/README.md (100%) rename "documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" => "documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201/README.md" (100%) rename "documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" => "documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250/README.md" (100%) rename "documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" => "documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251/README.md" (100%) diff --git "a/documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242/README.md" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242\350\250\255\350\250\210/README.md" rename to "documents/forMarkdown/future_muscle_partner/docs/03_\347\224\273\351\235\242/README.md" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/README.md similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/README.md" rename to documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/README.md diff --git "a/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" b/documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/openapi.yaml similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/04_WebAPI\350\250\255\350\250\210/openapi.yaml" rename to documents/forMarkdown/future_muscle_partner/docs/04_WebAPI/openapi.yaml diff --git "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/README.md" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/README.md" rename to "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/README.md" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" "b/documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/erd.a5er" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277\350\250\255\350\250\210/erd.a5er" rename to "documents/forMarkdown/future_muscle_partner/docs/05_\343\203\207\343\203\274\343\202\277/erd.a5er" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" b/documents/forMarkdown/future_muscle_partner/docs/06_IF/README.md similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/06_IF\350\250\255\350\250\210/README.md" rename to documents/forMarkdown/future_muscle_partner/docs/06_IF/README.md diff --git "a/documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201/README.md" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201\350\250\255\350\250\210/README.md" rename to "documents/forMarkdown/future_muscle_partner/docs/07_\343\203\220\343\203\203\343\203\201/README.md" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250/README.md" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250\350\250\255\350\250\210/README.md" rename to "documents/forMarkdown/future_muscle_partner/docs/08_\345\270\263\347\245\250/README.md" diff --git "a/documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" "b/documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251/README.md" similarity index 100% rename from "documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251\350\250\255\350\250\210/README.md" rename to "documents/forMarkdown/future_muscle_partner/docs/09_\343\202\244\343\203\263\343\203\225\343\203\251/README.md" diff --git a/documents/forMarkdown/future_muscle_partner/docs/README.md b/documents/forMarkdown/future_muscle_partner/docs/README.md index a74aa9da..93ccb882 100644 --- a/documents/forMarkdown/future_muscle_partner/docs/README.md +++ b/documents/forMarkdown/future_muscle_partner/docs/README.md @@ -6,15 +6,15 @@ ```sh docs -├── 01_環境構築 # 開発環境の構築手順 -├── 02_開発規約 # 開発ガイドライン、リリース手順など -├── 03_画面設計 # Figma、画面アクション -├── 04_WebAPI設計 # api.yaml、API処理設計 -├── 05_データ設計 # ERD、区分値 -├── 06_IF設計書 # I/F定義+受信/送信BL設計 -├── 07_バッチ設計書 # タイマー、イベント起動の非同期処理のBL設計 -├── 08_帳票設計 # 業務、システム担当者向けのレポート -├── 09_インフラ設計 # ネットワーク設計、監視設計、通知設計、システム構成図、サービス構成図 +├── 01_環境構築 # 開発環境の構築手順 +├── 02_開発規約 # 開発ガイドライン、リリース手順など +├── 03_画面 # Figma、画面アクション +├── 04_WebAPI # api.yaml、API処理設計 +├── 05_データ # ERD、区分値 +├── 06_IF # I/F定義+受信/送信BL設計 +├── 07_バッチ # タイマー、イベント起動の非同期処理のBL設計 +├── 08_帳票 # 業務、システム担当者向けのレポート +├── 09_インフラ # ネットワーク設計、監視設計、通知設計、システム構成図、サービス構成図 ├── ... └── README.md ``` From a2900728643bdb8c61ebdc8903be89760503a04b Mon Sep 17 00:00:00 2001 From: ma91n Date: Mon, 2 Sep 2024 11:24:36 +0900 Subject: [PATCH 23/27] fix markdownlint --- ...70\350\250\255\350\250\210\346\233\270.md" | 1 - ...44\350\250\255\350\250\210\346\233\270.md" | 1 - ...42\350\250\255\350\250\210\346\233\270.md" | 124 +++++++++--------- 3 files changed, 62 insertions(+), 64 deletions(-) diff --git "a/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" index 7abb3334..30175def 100644 --- "a/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\343\203\241\343\203\203\343\202\273\343\203\274\343\202\270\350\250\255\350\250\210\346\233\270.md" @@ -13,4 +13,3 @@ | 10002 | W | | 文字数オーバーです | ログイン画面で発生 | | 10003 | E | 500 | {domain}は無効なユーザードメインです | ユーザーの所属が異なっている | | 10004 | F | 500 | EntraIDに接続できません | ログインのバックエンドで発生 | - diff --git "a/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" index d1c46392..f92e509c 100644 --- "a/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\345\214\272\345\210\206\345\200\244\350\250\255\350\250\210\346\233\270.md" @@ -19,4 +19,3 @@ | 開発者 | developer | 05 | 0 | | | テスター | tester | 06 | 0 | | | 管理者 | administrator | 07 | 0 | | - diff --git "a/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" "b/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" index 350e2689..eb450672 100644 --- "a/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" +++ "b/documents/forMarkdown/\347\224\273\351\235\242\350\250\255\350\250\210\346\233\270.md" @@ -1,62 +1,62 @@ -# [機能ID] xxx売上履歴表示 - -## 概要 - -機能目的: - -- 確認ステータス、スキップステータスをもとに、過去のxxx売上履歴を確認する - -機能概要: - -- 過去1年分の売上履歴を対象に、検索表示する -- スキップ設定や確認ステータスの更新を行う - -## イベント概要 - -| No | イベント名 | イベント分類 |     処理説明 | -|--- |-----------------------------------------|---------------|------------------------------------------------| -| 1 | 初期表示 | 初期表示 | 初期検索条件に従いAPIを実行し、履歴表示する | -| 2 | 履歴検索 | ボタン押下 | 検索条件エリアの条件に従い、履歴の検索を行う | -| 3 | 保存 | ボタン押下 | 履歴テーブルで書き込んだ、スキップ、確認済の保存を行う | -| 4 | 検索結果 ページ送り/戻し | ボタン押下 | テーブルあたりの行数プルダウンで設定された行数に応じて表示切替する | -| 5 | 検索結果 ページ送り(100件以降データ) | ボタン押下 | 検索結果の表で、ページ送りする際、100件以降のデータの場合は再度APIに問い合わせ描画する | -| 6 | 画面入力値チェック | ボタン押下 | 検索条件のバリデーションチェックを行う | - -## イベント詳細 - -### 1. 初期表示 - -起動パラメータ: - -| Name | Value | Memo | -| --- | --- | --- | -| userState | {/* 略 */} | xxx状態 | - -初期表示イベント: - -- xxx - -利用API: - -| ID | オプション | -| --- | --- | -| API031 | /v1/salesresult?q=xxxx&date=${current_ymd} | - -画面表示制御: - -- 0件時 - - 空テーブル表示(メッセージは表示しない) -- HTTPステータスが200以外 - - メッセージID(MSG_BIZ_111)表示 - -### 2. 履歴検索 - -/v1/salesresult?q=xxxx&date=${current_ymd} - -### 3. 保存 - -### 4. 検索結果 ページ送り/戻し - -### 5. 検索結果 ページ送り(100件以降データ) - -### 6. 画面入力値チェック +# [機能ID] xxx売上履歴表示 + +## 概要 + +機能目的: + +- 確認ステータス、スキップステータスをもとに、過去のxxx売上履歴を確認する + +機能概要: + +- 過去1年分の売上履歴を対象に、検索表示する +- スキップ設定や確認ステータスの更新を行う + +## イベント概要 + +| No | イベント名 | イベント分類 |     処理説明 | +|--- |-----------------------------------------|---------------|------------------------------------------------| +| 1 | 初期表示 | 初期表示 | 初期検索条件に従いAPIを実行し、履歴表示する | +| 2 | 履歴検索 | ボタン押下 | 検索条件エリアの条件に従い、履歴の検索を行う | +| 3 | 保存 | ボタン押下 | 履歴テーブルで書き込んだ、スキップ、確認済の保存を行う | +| 4 | 検索結果 ページ送り/戻し | ボタン押下 | テーブルあたりの行数プルダウンで設定された行数に応じて表示切替する | +| 5 | 検索結果 ページ送り(100件以降データ) | ボタン押下 | 検索結果の表で、ページ送りする際、100件以降のデータの場合は再度APIに問い合わせ描画する | +| 6 | 画面入力値チェック | ボタン押下 | 検索条件のバリデーションチェックを行う | + +## イベント詳細 + +### 1. 初期表示 + +起動パラメータ: + +| Name | Value | Memo | +| --- | --- | --- | +| userState | {/* 略 */} | xxx状態 | + +初期表示イベント: + +- xxx + +利用API: + +| ID | オプション | +| --- | --- | +| API031 | /v1/salesresult?q=xxxx&date=${current_ymd} | + +画面表示制御: + +- 0件時 + - 空テーブル表示(メッセージは表示しない) +- HTTPステータスが200以外 + - メッセージID(MSG_BIZ_111)表示 + +### 2. 履歴検索 + +/v1/salesresult?q=xxxx&date=${current_ymd} + +### 3. 保存 + +### 4. 検索結果 ページ送り/戻し + +### 5. 検索結果 ページ送り(100件以降データ) + +### 6. 画面入力値チェック From 0f41fca71275abdd6c1238c1145756ac1defdd73 Mon Sep 17 00:00:00 2001 From: ma91n Date: Mon, 2 Sep 2024 11:41:36 +0900 Subject: [PATCH 24/27] reset unnecessary diffs --- .../OpenAPI_Specification_3.0.3.md | 805 +++++++++--------- 1 file changed, 402 insertions(+), 403 deletions(-) diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md index 61079224..78651a18 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md @@ -105,8 +105,7 @@ Web API が提供する機能の概要・想定する利用者やユースケー アプリケーションのバージョン(git tag やリリースで管理するようなバージョン)とは別である。 - `major.minor` 形式を推奨する - - `0.1` 固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとにマイナーバージョンをインクリメントしていく + - `0.1` 固定で開発を進め、サービスのリリース時に `1.0` とし、その後の項目やオプション、パスの追加ごとにマイナーバージョンをインクリメントしていく 良い例: @@ -1238,68 +1237,68 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
ファイル分割例: openapi.yaml - ```yaml - openapi: "3.0.3" - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: http://petstore.swagger.io/v1 - tags: - - name: pets - description: Everything about your Pets - paths: - /pets: - get: - $ref: "./pets_get/pets_get.yaml#/operation" - post: - $ref: "./pets_post/pets_post.yaml#/operation" - /pets/{petId}: - get: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" - components: - schemas: - PetDetail: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" - Pedigree: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" - Pet: - $ref: "./common/pet.yaml" - Error: - $ref: "./common/error.yaml" - ``` + ```yaml + openapi: "3.0.3" + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: http://petstore.swagger.io/v1 + tags: + - name: pets + description: Everything about your Pets + paths: + /pets: + get: + $ref: "./pets_get/pets_get.yaml#/operation" + post: + $ref: "./pets_post/pets_post.yaml#/operation" + /pets/{petId}: + get: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" + components: + schemas: + PetDetail: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" + Pedigree: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" + Pet: + $ref: "./common/pet.yaml" + Error: + $ref: "./common/error.yaml" + ```
ファイル分割例: ディレクトリ構成 - ```sh - ├─openapi.gen.yaml - ├─openapi.yaml - │ - ├─common - │ ├─error.yaml - │ └─pet.yaml - │ - ├─pets-pet-id_get - │ ├─pets-pet-id_get.yaml - │ └─examples - │ └─res_example1.yaml - │ - ├─pets_get - │ ├─pets_get.yaml - │ └─examples - │ ├─res_example1.yaml - │ └─res_example2.yaml - │ - └─pets_post - ├─pets_post.yaml - └─examples - └─req_example1.yaml - ``` + ```sh + ├─openapi.gen.yaml + ├─openapi.yaml + │ + ├─common + │ ├─error.yaml + │ └─pet.yaml + │ + ├─pets-pet-id_get + │ ├─pets-pet-id_get.yaml + │ └─examples + │ └─res_example1.yaml + │ + ├─pets_get + │ ├─pets_get.yaml + │ └─examples + │ ├─res_example1.yaml + │ └─res_example2.yaml + │ + └─pets_post + ├─pets_post.yaml + └─examples + └─req_example1.yaml + ```
@@ -1310,81 +1309,81 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
API別ファイルの記載例: pets-pet-id_get.yaml - ```yaml - operation: - operationId: get-pets-pet-id - summary: Details for a pet - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - "200": - description: Expected response to a valid request - content: - application/json: - schema: - $ref: "#/components/responses/ResPetsPetIdGet" - examples: - ResExample1: - value: - $ref: "./examples/res_example1.yaml" - "404": - description: not found error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: + ```yaml + operation: + operationId: get-pets-pet-id + summary: Details for a pet + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/responses/ResPetsPetIdGet" + examples: + ResExample1: + value: + $ref: "./examples/res_example1.yaml" + "404": + description: not found error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ```
@@ -1397,300 +1396,300 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
ファイルBundle後: openapi.gen.yaml - ```yaml - openapi: 3.0.3 - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: "http://petstore.swagger.io/v1" - tags: - - name: pets - description: Everything about your Pets - paths: - /pets: - get: - summary: List all pets - operationId: get-pets - tags: - - pets - parameters: - - name: limit - in: query - description: How many items to return at one time (max 100) - required: false - schema: - type: integer - maximum: 100 - format: int32 - responses: - "200": - description: A paged array of pets - headers: - x-next: - description: A link to the next page of responses - schema: - type: string - content: - application/json: - schema: - type: array - maxItems: 100 - items: + ```yaml + openapi: 3.0.3 + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: "http://petstore.swagger.io/v1" + tags: + - name: pets + description: Everything about your Pets + paths: + /pets: + get: + summary: List all pets + operationId: get-pets + tags: + - pets + parameters: + - name: limit + in: query + description: How many items to return at one time (max 100) + required: false + schema: + type: integer + maximum: 100 + format: int32 + responses: + "200": + description: A paged array of pets + headers: + x-next: + description: A link to the next page of responses + schema: + type: string + content: + application/json: + schema: + type: array + maxItems: 100 + items: + type: object + required: + - id + - name + - category + - age + - sex + properties: + id: + type: integer + format: int64 + name: + type: string + maxLength: 50 + category: + type: string + maxLength: 10 + sub_category: + type: string + maxLength: 50 + age: + type: integer + format: int32 + sex: + type: string + maxLength: 6 + note: + type: string + maxLength: 200 + tag: + type: string + maxLength: 20 + examples: + ResExample1: + value: + - id: 10001 + name: ToyPoodle + category: dog + sub_category: ToyPoodle + age: 1 + sex: male + note: friendly + tag: dog10001 + - id: 10002 + name: Chihuahua + category: dog + sub_category: Chihuahua + age: 1 + sex: female + note: friendly + tag: dog10002 + - id: 10003 + name: Shiba + category: dog + sub_category: Shiba + age: 1 + sex: male + note: friendly + tag: dog10003 + - id: 10004 + name: MiniatureDachshund + category: dog + sub_category: MiniatureDachshund + age: 1 + sex: female + note: friendly + tag: dog10004 + ResExample2: + value: [] + "404": + description: not found error + content: + application/json: + schema: type: object required: - - id - - name - - category - - age - - sex + - code + - message properties: - id: - type: integer - format: int64 - name: - type: string - maxLength: 50 - category: - type: string - maxLength: 10 - sub_category: - type: string - maxLength: 50 - age: + code: type: integer format: int32 - sex: - type: string - maxLength: 6 - note: - type: string - maxLength: 200 - tag: + message: type: string - maxLength: 20 - examples: - ResExample1: - value: - - id: 10001 - name: ToyPoodle - category: dog - sub_category: ToyPoodle - age: 1 - sex: male - note: friendly - tag: dog10001 - - id: 10002 - name: Chihuahua - category: dog - sub_category: Chihuahua - age: 1 - sex: female - note: friendly - tag: dog10002 - - id: 10003 - name: Shiba - category: dog - sub_category: Shiba - age: 1 - sex: male - note: friendly - tag: dog10003 - - id: 10004 - name: MiniatureDachshund - category: dog - sub_category: MiniatureDachshund - age: 1 - sex: female - note: friendly - tag: dog10004 - ResExample2: - value: [] - "404": - description: not found error - content: - application/json: - schema: - type: object - required: - - code - - message - properties: - code: - type: integer - format: int32 - message: - type: string - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" - post: - summary: Register a pet - operationId: post-pets - tags: - - pets - requestBody: - content: - application/json: - schema: - required: - - pet - type: object - properties: - pet: - $ref: "#/paths/~1pets/get/responses/200/content/application~1json/schema/items" - examples: - ReqExample1: - value: - pet: - id: 10005 - name: FrenchBulldog - category: dog - sub_category: FrenchBulldog - age: 1 - sex: male - note: friendly - tag: dog10005 - required: false - responses: - "201": - description: Null response - "404": - description: not found error - content: - application/json: - schema: - $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" - "/pets/{petId}": - get: - summary: Details for a pet - operationId: get-pets-pet-id - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - "200": - description: Expected response to a valid request + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + post: + summary: Register a pet + operationId: post-pets + tags: + - pets + requestBody: content: application/json: schema: required: - pet - - pet_detail type: object properties: pet: $ref: "#/paths/~1pets/get/responses/200/content/application~1json/schema/items" - pet_detail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: - type: string examples: - ResExample1: + ReqExample1: value: pet: - id: 10001 - name: ToyPoodle + id: 10005 + name: FrenchBulldog category: dog - sub_category: ToyPoodle + sub_category: FrenchBulldog age: 1 sex: male note: friendly - tag: dog10001 - pet_detail: - breeder: BreederName - date_of_birth: "2023-10-31" - pedigree: - registration_no: 11111111 - date_of_registration: "2023-10-31" - pedigree_image: 9j2wBDAA...8QAPxAAAQQABAMGBAYDAAEDAg - "404": - description: not found error - content: - application/json: - schema: - $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: + tag: dog10005 + required: false + responses: + "201": + description: Null response + "404": + description: not found error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "/pets/{petId}": + get: + summary: Details for a pet + operationId: get-pets-pet-id + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "#/paths/~1pets/get/responses/200/content/application~1json/schema/items" + pet_detail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + examples: + ResExample1: + value: + pet: + id: 10001 + name: ToyPoodle + category: dog + sub_category: ToyPoodle + age: 1 + sex: male + note: friendly + tag: dog10001 + pet_detail: + breeder: BreederName + date_of_birth: "2023-10-31" + pedigree: + registration_no: 11111111 + date_of_registration: "2023-10-31" + pedigree_image: 9j2wBDAA...8QAPxAAAQQABAMGBAYDAAEDAg + "404": + description: not found error + content: + application/json: + schema: + $ref: "#/paths/~1pets/get/responses/404/content/application~1json/schema" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ```
From 426ef0806f675a4122bf699fe9e2caf017c4e931 Mon Sep 17 00:00:00 2001 From: ma91n Date: Mon, 2 Sep 2024 11:43:32 +0900 Subject: [PATCH 25/27] reset unnecessary diffs --- .../OpenAPI_Specification_3.0.3.md | 212 +++++++++--------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md index 78651a18..829a60b2 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md @@ -1237,38 +1237,38 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
ファイル分割例: openapi.yaml - ```yaml - openapi: "3.0.3" - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: http://petstore.swagger.io/v1 - tags: - - name: pets - description: Everything about your Pets - paths: - /pets: - get: - $ref: "./pets_get/pets_get.yaml#/operation" - post: - $ref: "./pets_post/pets_post.yaml#/operation" - /pets/{petId}: - get: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" - components: - schemas: - PetDetail: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" - Pedigree: - $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" - Pet: - $ref: "./common/pet.yaml" - Error: - $ref: "./common/error.yaml" - ``` + ```yaml + openapi: "3.0.3" + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: http://petstore.swagger.io/v1 + tags: + - name: pets + description: Everything about your Pets + paths: + /pets: + get: + $ref: "./pets_get/pets_get.yaml#/operation" + post: + $ref: "./pets_post/pets_post.yaml#/operation" + /pets/{petId}: + get: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/operation" + components: + schemas: + PetDetail: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/PetDetail" + Pedigree: + $ref: "./pets-pet-id_get/pets-pet-id_get.yaml#/components/schemas/Pedigree" + Pet: + $ref: "./common/pet.yaml" + Error: + $ref: "./common/error.yaml" + ```
@@ -1309,81 +1309,81 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
API別ファイルの記載例: pets-pet-id_get.yaml - ```yaml - operation: - operationId: get-pets-pet-id - summary: Details for a pet - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - "200": - description: Expected response to a valid request - content: - application/json: - schema: - $ref: "#/components/responses/ResPetsPetIdGet" - examples: - ResExample1: - value: - $ref: "./examples/res_example1.yaml" - "404": - description: not found error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: + ```yaml + operation: + operationId: get-pets-pet-id + summary: Details for a pet + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/responses/ResPetsPetIdGet" + examples: + ResExample1: + value: + $ref: "./examples/res_example1.yaml" + "404": + description: not found error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ```
From c3a5dd97e34ac5e7ebc4fcfeb572fb3d80914a12 Mon Sep 17 00:00:00 2001 From: ma91n Date: Mon, 2 Sep 2024 11:52:49 +0900 Subject: [PATCH 26/27] reset unnecessary diffs --- .../OpenAPI_Specification_3.0.3.md | 148 +++++++++--------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md index 829a60b2..1b01e67c 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md @@ -1309,81 +1309,81 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
API別ファイルの記載例: pets-pet-id_get.yaml - ```yaml - operation: - operationId: get-pets-pet-id - summary: Details for a pet - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: + ```yaml + operation: + operationId: get-pets-pet-id + summary: Details for a pet + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: + type: string + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/responses/ResPetsPetIdGet" + examples: + ResExample1: + value: + $ref: "./examples/res_example1.yaml" + "404": + description: not found error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: type: string - responses: - "200": - description: Expected response to a valid request - content: - application/json: - schema: - $ref: "#/components/responses/ResPetsPetIdGet" - examples: - ResExample1: - value: - $ref: "./examples/res_example1.yaml" - "404": - description: not found error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: - type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ```
From 7517fe000d14b9a9565970a2fe67e37cc47c7030 Mon Sep 17 00:00:00 2001 From: ma91n Date: Mon, 2 Sep 2024 11:54:51 +0900 Subject: [PATCH 27/27] reset unnecessary diffs --- .../OpenAPI_Specification_3.0.3.md | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md index 1b01e67c..84a41cfb 100644 --- a/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md +++ b/documents/forOpenAPISpecification/OpenAPI_Specification_3.0.3.md @@ -1309,81 +1309,81 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数
API別ファイルの記載例: pets-pet-id_get.yaml - ```yaml - operation: - operationId: get-pets-pet-id - summary: Details for a pet - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - "200": - description: Expected response to a valid request - content: - application/json: - schema: - $ref: "#/components/responses/ResPetsPetIdGet" - examples: - ResExample1: - value: - $ref: "./examples/res_example1.yaml" - "404": - description: not found error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - "500": - description: unexpected error - content: - application/json: - schema: - $ref: "../openapi.yaml#/components/schemas/Error" - components: - schemas: - PetDetail: - type: object - properties: - breeder: - type: string - date_of_birth: - type: string - format: date - pedigree: - $ref: "#/components/schemas/Pedigree" - Pedigree: - required: - - registration_no - - date_of_registration - - pedigree_image - type: object - properties: - registration_no: - type: integer - format: int64 - date_of_registration: - type: string - format: date - pedigree_image: + ```yaml + operation: + operationId: get-pets-pet-id + summary: Details for a pet + tags: + - pets + parameters: + - name: petId + in: path + required: true + description: The id of the pet to retrieve + schema: type: string - responses: - ResPetsPetIdGet: - required: - - pet - - pet_detail - type: object - properties: - pet: - $ref: "../common/pet.yaml" - pet_detail: - $ref: "#/components/schemas/PetDetail" - ``` + responses: + "200": + description: Expected response to a valid request + content: + application/json: + schema: + $ref: "#/components/responses/ResPetsPetIdGet" + examples: + ResExample1: + value: + $ref: "./examples/res_example1.yaml" + "404": + description: not found error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + "500": + description: unexpected error + content: + application/json: + schema: + $ref: "../openapi.yaml#/components/schemas/Error" + components: + schemas: + PetDetail: + type: object + properties: + breeder: + type: string + date_of_birth: + type: string + format: date + pedigree: + $ref: "#/components/schemas/Pedigree" + Pedigree: + required: + - registration_no + - date_of_registration + - pedigree_image + type: object + properties: + registration_no: + type: integer + format: int64 + date_of_registration: + type: string + format: date + pedigree_image: + type: string + responses: + ResPetsPetIdGet: + required: + - pet + - pet_detail + type: object + properties: + pet: + $ref: "../common/pet.yaml" + pet_detail: + $ref: "#/components/schemas/PetDetail" + ```
@@ -1650,7 +1650,7 @@ OpenAPI ドキュメントは単一のファイルで構成することも複数 content: application/json: schema: - $ref: "../openapi.yaml#/components/schemas/Error" + $ref: '#/paths/~1pets/get/responses/404/content/application~1json/schema' components: schemas: PetDetail: