body method
Defines the actual body code. path is passed relative to lib, baseName is the filename, and className is the filename converted to Pascal case.
実際の本体コードを定義します。pathにlibからの相対パス、baseNameにファイル名が渡され、classNameにファイル名をパスカルケースに変換した値が渡されます。
Implementation
@override
String body(String baseName, String className) {
return r"""
`documents/designs/page_design.md`に記載されている`Page設計書`から`Model設計書`を作成
1. `Page設計書`から`Model設計書`を作成
- 各`Page`に対して必要な`Model`を類推
- 類推した各`Model`に対して下記を定義
- `Model名`
- 末尾にModelはつけない形でPascalCaseで定義
- `ModelType`
- 下記から選択
- `Document`
- キーと値のペアのデータの塊
- 同一の構成で複数のデータは保存不可
- `Collection`
- `Document`を複数集めた塊
- 同一の構成で複数のデータが保存可能。特定の条件を指定し一致する`Document`のみを抽出することが可能。
- `ModelPath`
- Firestoreの`CollectionPath`、`DocumentPath`と同じように定義(e.g. `user/:user_id/friends`)
- `/`で階層を記述。
- 空の名前の階層は作らない(`//`といった記述はない)
- 先頭および末尾に`/`は記述しない。
- `ModelType`が`Collection`の場合奇数階層。(e.g. `user/:user_id/friends`)
- `ModelType`が`Document`の場合偶数階層。(e.g. `apps/setting`)
- 各階層で`:`が先頭に付与されている場合、`:`を除いた名前の変数となる。(e.g. `user/:user_id/friends`の場合は`user_id`が変数)
- データ構造として**とある要素が持つ要素**がある場合、その要素は親要素の下階層に入れる。さらにその時親要素の`DocumentID`が間に入る。
- ユーザーのデータとユーザーが持つフレンドという構成要素がある場合、`user`という`Collection`と各`user`の`DocumentID`(`user_id`)を親に持つ`user/:user_id/friends`という`Collection`を作成
- `Summary`
- `Model`に対する概要を定義
- `DataField`
- 各`Model`が持つデータのフィールド
- 各`DataField`に対して下記を定義
- `DataFieldName`
- `DataField`の名前をCamelCaseで定義
- `DataFieldType`
- `DataField`のタイプを定義。**必ず**下記から選択。
- ModelFieldValue(`documents/rules/docs/model_field_value_usage.md`)
- プリミティブタイプ(`documents/rules/docs/primitive_types.md`)
- `RequiredOrOptional`
- `Required`もしくは`Optional`
- `DefaultValue`
- `Optional`の場合入力されなかった場合のデフォルトの値
- `Summary`
- `DataField`の概要
- 例:
```markdown
<!-- documents/designs/model_design.md -->
## メモ
### ModelName
`Memo`
### ModelType
`Collection`
### ModelPath
`memo`
### Summary
実際のメモの内容を保存するデータ一覧
### DataField
| DataField | DataFieldName | DataFieldType | RequiredOrOptional | DefaultValue | Summary |
| --- | --- | --- | --- | --- | --- |
| タイトル | `title` | String | Required | | メモのタイトル |
| コンテンツ | `content` | String | Required | | メモの内容 |
| 添付画像 | `images` | List<ModelImageUri> | Optional | [] | メモの添付画像(複数可) |
| 作成者 | `createdBy` | ModelRef<UserModel> | Required | | メモの作成者。UserModelに紐づけ。 |
| 作成日時 | `createdAt` | ModelTimestamp | Optional | ModelTimestamp.now() | メモが作成された日時。 |
| 更新日時 | `updatedAt` | ModelTimestamp | Optional | ModelTimestamp.now() | メモが更新された日時。 |
| タグ | `tags` | List<ModelRef<UserModel>> | Optional | [] | メモに付与されたタグ。TagModelを複数紐づけ。 |
## ユーザー
### ModelName
`User`
### ModelType
`Collection`
### ModelPath
`user`
### Summary
メモの作成者を保存するデータ一覧。アプリ内に埋め込む予定。
### DataField
| DataField | DataFieldName | DataFieldType | RequiredOrOptional | DefaultValue | Summary |
| --- | --- | --- | --- | --- | --- |
| 名前 | `name` | String | Required | | ユーザー名。 |
| 自己紹介 | `introduction` | String | Optional | | ユーザーの自己紹介文。 |
| アイコン | `icon` | ModelImageUri | Optional | | ユーザーアイコンの画像URL。 |
| 作成日時 | `createdAt` | ModelTimestamp | Optional | ModelTimestamp.now() | ユーザーが作成された日時。 |
| 更新日時 | `updatedAt` | ModelTimestamp | Optional | ModelTimestamp.now() | ユーザーが更新された日時。 |
## タグ
### ModelName
`Tag`
### ModelType
`Collection`
### ModelPath
`tag`
### Summary
メモに付与されるタグの一覧を保存するデータ一覧
### DataField
| DataField | DataFieldName | DataFieldType | RequiredOrOptional | DefaultValue | Summary |
| --- | --- | --- | --- | --- | --- |
| タグ名 | `name` | String | Required | | タグ名。 |
| 作成日時 | `createdAt` | ModelTimestamp | Optional | ModelTimestamp.now() | タグが作成された日時。 |
| 更新日時 | `updatedAt` | ModelTimestamp | Optional | ModelTimestamp.now() | タグが更新された日時。 |
```
2. 作成した`Model設計書`を`documents/designs/model_design.md`に保存
""";
}