Skip to content

backend: DB migration created_by/updated_by + 統合 IT + AuthZ test 更新 (N4 / B-3) #279

Description

@win2cot

B-2 (#278) で実装した GET /api/tasks/{id}tasks テーブルに created_by/updated_by 列追加クロステナント分離の統合 IT で本番運用可能なレベルに固める。並行して 既存 TaskAuthorizationDomainServiceTest を ADR-0005 仕様(admin bypass の正確化) に更新する。

N4 (#86) を 7 分割した B-3 スコープ:

規約準拠の前提

規約 / ADR 内容
設計規約 §3.1 Flyway V1.0.0 直接追記運用(#248、Sprint 1 完了まで)
ADR-0005 admin bypass(全テナント横断アクセス)

やること

1. V1.0.0_01__create_tables.sql 更新

2. TaskEntityTest の更新

  • TaskJpaEntity コンストラクタ + getter テストに createdBy / updatedBy を追加(canPersistTask 等)

3. TaskCrossTenantIT.java 新規(統合 IT)

  • @SpringBootTest + Testcontainers MySQL
  • 2 テナント の tasks を seed
  • API endpoint GET /api/tasks/{id} を call、tenant 跨ぎアクセスで 404 返却を検証(Visibility 違反と同じ 404 統一)
  • 設計書 §9 マルチテナント分離要件に整合

4. TaskAuthorizationDomainServiceTest 更新

既存テストの admin bypass 期待値を ADR-0005 仕様 に整理:

  • SaaS Admin (role.isAdmin() == true) は全テナント横断で canView true
  • Tenant Admin はテナント内のみ true
  • 一般 member は visibility / assignee に従う
  • PRIVATE visibility は assignee 本人のみ true(担当者参照 test ケース追加)

実装側 TaskAuthorizationDomainService.java(line 31 if (role.isAdmin()) / line 63 || role.isAdmin())はそのまま、test 期待値のみを ADR-0005 整合に。

やらないこと

受け入れ条件

  • V1.0.0_01__create_tables.sqltasks.created_by/tasks.updated_by 列追加
  • TaskJpaEntitycreatedBy/updatedBy field + @PrePersist/@PreUpdate で自動セット
  • TaskEntityTestcreatedBy/updatedBy 含めて green
  • TaskCrossTenantIT で tenant 跨ぎ 404 検証 green(Testcontainers 経由)
  • TaskAuthorizationDomainServiceTest の admin bypass / Tenant Admin / 一般 member / PRIVATE 担当者参照 ケースが ADR-0005 整合で green
  • ./gradlew :webapi:test green、ApplicationModules.verify() green
  • CI green、UT カバレッジ 80%+

参照

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/backendJava / Spring バックエンド実装変更priority/p1High。現スプリント内で完了必須

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions