Skip to content

refactor: SeaORM エンティティをスキーマファースト運用へ移行#202

Open
yupix wants to merge 47 commits into
mainfrom
refactor/seaorm-schema-first
Open

refactor: SeaORM エンティティをスキーマファースト運用へ移行#202
yupix wants to merge 47 commits into
mainfrom
refactor/seaorm-schema-first

Conversation

@yupix

@yupix yupix commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Summary

  • src/entities/ 配下の全38エンティティを sea-orm-cli による自動生成(スキーマファースト)へ移行
  • 手書きの OpenAPI 属性(ToSchema / #[schema(...)])は生成後パッチ方式で再付与
  • src/dto/ 削除済み(前 PR refactor: move DTOs from handlers to dedicated payload module #201 でPayloadへ移設済み)

変更内容

  • src/entities/_generated/ に sea-orm-codegen 生成ファイルを格納
  • 35エンティティ を5バッチに分けて順次再生成・QC PASS
  • SQLX_OFFLINE=true cargo build --bin backend エラーゼロ
  • cargo test --no-run コンパイル通過
  • pnpm openapi 再生成後 openapi.json 差分ゼロ
  • 秘密フィールド(password_hash 等)の非露出を確認済み

yupix added 30 commits June 25, 2026 05:46
…rkflow

案D(生成物隔離 + manifest postprocess)の labels パイロット。
_generated/labels.rs を sea-orm-cli dense 形式で生成し、
entity_openapi.toml + seaorm_postprocess.sh で OpenAPI 属性を再付与。
users セクションは別タスク(ashigaru2)で追加予定のため除去。
…king

Generate users from DB schema into _generated/, inject OpenAPI attrs via
entity_openapi.toml postprocess, and re-export from entities/users.rs.
password_hash and sessions_revoked_at remain schema(ignore) + serde skip.
@github-actions

github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown

Coverage Report for apps/frontend

Status Category Percentage Covered / Total
🟢 Lines 97.34% 110 / 113
🟢 Statements 95.96% 119 / 124
🟢 Functions 95.55% 43 / 45
🟢 Branches 88.88% 48 / 54
File CoverageNo changed files found.
Generated in workflow #316 for commit c751faa by the Vitest Coverage Report Action

@chromatic-com

chromatic-com Bot commented Jun 25, 2026

Copy link
Copy Markdown

Important

Testing in progress…

🟢 UI Tests: 21 tests unchanged
UI Review: Comparing 21 stories…
Storybook icon Storybook Publish: 21 stories published

@chromatic-com

chromatic-com Bot commented Jun 25, 2026

Copy link
Copy Markdown

Tip

All tests passed and all changes approved!

🟢 UI Tests: 21 tests unchanged
🟢 UI Review: 21 stories published -- no changes
Storybook icon Storybook Publish: 21 stories published

@github-actions

Copy link
Copy Markdown

レビュー結果

🟡 Medium

1. DateTimeWithTimeZone が7エンティティに残留

scripts/seaorm_postprocess.sh:42DateTimeWithTimeZoneDateTimeUtc の置換が定義されていますが、以下の7ファイルではまだ DateTimeWithTimeZone のままです:

ファイル 該当箇所
_generated/passkeys.rs:33,35 last_used_at, created_at
_generated/github_integrations.rs token_expires_at, created_at
_generated/personal_tokens.rs expires_at, last_used_at
_generated/oauth_connections.rs token_expires_at, created_at, updated_at
_generated/drive_folders.rs created_at
_generated/drive_folder_shares.rs expires_at, created_at
_generated/drive_files.rs created_at

他の28エンティティは DateTimeUtc に置換済みなので、バッチ生成時の見落としと思われます。seaorm_postprocess.sh を再実行して統一してください。

現在はコンパイルが通っていますが、DateTimeUtc (chrono::DateTime<Utc>) と DateTimeWithTimeZone (chrono::DateTime<FixedOffset>) は別型のため、将来のコード変更で暗黙の型不一致が発生するリスクがあります。


🔵 Low

  • entity_openapi.toml#[schema(as=...)] 書式が不統一(users, tenants, projects の3件は as=、残り32件は as = )。動作に影響ありませんが統一を推奨。

@github-actions

Copy link
Copy Markdown

レビューを投稿しました。主な指摘内容:

Medium: DateTimeWithTimeZone が7エンティティに残留しています。seaorm_postprocess.shDateTimeUtc への置換が定義されているのに、passkeys, github_integrations, personal_tokens, oauth_connections, drive_folders, drive_folder_shares, drive_files の7ファイルが置換漏れになっています。バッチ生成時の見落としと思われます。

Low: entity_openapi.toml#[schema(as=...)] 書式が3ファイルだけ as=(スペースなし)で他は as = (スペースあり)と不統一です。

New%20session%20-%202026-06-25T14%3A10%3A09.656Z
opencode session  |  github run

yupix added 6 commits June 25, 2026 14:25
…nの末尾改行

- entity_openapi.toml: format="uuid" → format = "uuid" (スペース揃え、7箇所)
- handlers/personal_tokens.rs: 不要な DateTimeWithTimeZone import を削除
- openapi.json: 末尾改行追加(biome format check 修正)
- entity_openapi.toml: recovery_codes.code_hashに#[schema(ignore)]/#[serde(skip_serializing)]を追加
- _generated/recovery_codes.rs: postprocess再実行で属性を付与
- _generated/*.rs: utoipa::ToSchema不要importを全35ファイルから削除
- seaorm_postprocess.sh: struct_attrs/doc重複挿入を防ぐ冪等ガード追加・ToSchema import注入ロジック削除
- handlers/admin_users.rs: 未使用のdrive_files/drive_folder_shares/drive_folders/tenants import削除
- seaorm_generate.sh: CRLF→LF変換(bash -n で syntax error になる問題を修正)
- seaorm_postprocess.sh: insert_linesが空の場合は改行を挿入しないよう修正
- _generated/{users,tenants,projects}.rs: as=→as= / format="→format = " 書式をTOMLと統一
  (これによりpostprocess再実行時に重複属性が挿入されなくなり完全冪等化)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant