Skip to content

feat(db): DB刷新基盤を実装 - #642

Open
hmjn023 wants to merge 1 commit into
developfrom
fix/issue-612-db-refresh-foundation
Open

feat(db): DB刷新基盤を実装#642
hmjn023 wants to merge 1 commit into
developfrom
fix/issue-612-db-refresh-foundation

Conversation

@hmjn023

@hmjn023 hmjn023 commented Jul 27, 2026

Copy link
Copy Markdown
Owner

概要

Issue #612 のDB刷新に向け、耐障害background job、media regionとCCIP revision、PostgreSQL 18移行リハーサルの基盤を追加します。

変更内容

  • claim token、lease、heartbeat、retry、dedupe、concurrency keyを持つjob registryとrepositoryを実装
  • media regionの永続化、crop render API、source/region revisionによるstale検知を追加
  • CCIPのPostgreSQL store、LanceDBとのdual-write、parity検証と移行支援を追加
  • PostgreSQL 18の隔離rehearsal compose、dump/restore validator、cutover runbookを追加
  • Drizzle migration、OpenAPI、関連するserver/Tauri/UIとテストを更新

技術詳細

  • 親jobは進捗記録として扱い、worker claim対象から除外します。
  • job完了・失敗はclaim tokenによるCASで保護し、期限切れleaseを再投入します。
  • crop画像バイナリではなくregion座標とrevisionを正本として扱います。
  • PostgreSQL major cutoverとCCIP read cutoverは独立したgateとしてrunbookに記載します。

検証

  • typecheck: 全workspace成功
  • lint: 成功
  • server unit: 175 passed
  • server integration: 77 passed
  • CLI: 11 passed
  • core: 22 passed
  • UI: 53 passed
  • application: 6 passed
  • DB: 8 passed
  • staged diff whitespace check: 成功

Refs #612

Add durable job leasing and revisions, persisted media regions, CCIP dual-write migration support, and PostgreSQL 18 rehearsal tooling.
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 103 files, which is 3 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 1d5a7535-625a-4a28-a8f8-a850899a4fac

📥 Commits

Reviewing files that changed from the base of the PR and between d1cef6a and 2787ce4.

📒 Files selected for processing (103)
  • apps/server/drizzle/0020_bizarre_otto_octavius.sql
  • apps/server/drizzle/meta/0020_snapshot.json
  • apps/server/drizzle/meta/_journal.json
  • apps/server/nitro.config.ts
  • apps/server/package.json
  • apps/server/public/openapi.json
  • apps/server/scripts/dump-db.ts
  • apps/server/scripts/lib/ccip-migration-core.ts
  • apps/server/scripts/restore-db.ts
  • apps/server/scripts/set-jobs-logged.ts
  • apps/server/scripts/validate-postgres-rehearsal.ts
  • apps/server/scripts/verify-pglite-bundle.ts
  • apps/server/src/application/registry.ts
  • apps/server/src/application/services/backup-service.ts
  • apps/server/src/application/services/ccip-vector-service.ts
  • apps/server/src/application/services/job-dispatch-service.ts
  • apps/server/src/application/services/maintenance-service.ts
  • apps/server/src/components/media/character-crop-modal.tsx
  • apps/server/src/domain/shared/api-contract.ts
  • apps/server/src/infrastructure/ai/dual-write-ccip-vector-store.ts
  • apps/server/src/infrastructure/ai/lancedb-ccip-vector-store.ts
  • apps/server/src/infrastructure/ai/postgres-ccip-vector-store.ts
  • apps/server/src/infrastructure/ai/remote-crop-request.ts
  • apps/server/src/infrastructure/ai/rust-ai-client.ts
  • apps/server/src/infrastructure/api-clients/ai-api.ts
  • apps/server/src/infrastructure/api/media-region-api-errors.ts
  • apps/server/src/infrastructure/api/media-region-render-handler.ts
  • apps/server/src/infrastructure/api/routers/ai-router.ts
  • apps/server/src/infrastructure/api/routers/imports-router.ts
  • apps/server/src/infrastructure/api/routers/jobs-router.ts
  • apps/server/src/infrastructure/api/routers/media-regions-router.ts
  • apps/server/src/infrastructure/bootstrap.ts
  • apps/server/src/infrastructure/jobs/ccip-job-query.ts
  • apps/server/src/infrastructure/jobs/ccip-jobs.ts
  • apps/server/src/infrastructure/jobs/download-jobs.ts
  • apps/server/src/infrastructure/jobs/file-watcher-service.ts
  • apps/server/src/infrastructure/jobs/job-errors.ts
  • apps/server/src/infrastructure/jobs/job-worker.ts
  • apps/server/src/infrastructure/jobs/tagging-jobs.ts
  • apps/server/src/infrastructure/jobs/thumbnails.ts
  • apps/server/src/infrastructure/processing/media-region-renderer.ts
  • apps/server/src/infrastructure/repositories/media-region-repository.ts
  • apps/server/src/routes/api/media-regions.$regionId.render.ts
  • apps/server/src/tests/integration/ai/ccip-revision-parity.test.ts
  • apps/server/src/tests/integration/ai/lancedb-ccip-vector-store.test.ts
  • apps/server/src/tests/integration/ai/postgres-ccip-vector-store.test.ts
  • apps/server/src/tests/integration/repository/job-repository.test.ts
  • apps/server/src/tests/integration/repository/media-region-repository.test.ts
  • apps/server/src/tests/unit/application/services/ccip-vector-service.test.ts
  • apps/server/src/tests/unit/application/services/maintenance-service.test.ts
  • apps/server/src/tests/unit/application/services/media-service.test.ts
  • apps/server/src/tests/unit/infrastructure/ai/dual-write-ccip-vector-store.test.ts
  • apps/server/src/tests/unit/infrastructure/ai/remote-crop-request.test.ts
  • apps/server/src/tests/unit/infrastructure/api/jobs-router.test.ts
  • apps/server/src/tests/unit/infrastructure/api/media-region-api-errors.test.ts
  • apps/server/src/tests/unit/infrastructure/api/media-region-render-handler.test.ts
  • apps/server/src/tests/unit/infrastructure/jobs/ccip-jobs.test.ts
  • apps/server/src/tests/unit/infrastructure/jobs/job-worker.test.ts
  • apps/server/src/tests/unit/infrastructure/jobs/tagging-jobs.test.ts
  • apps/server/src/tests/unit/media/copy-media-job.test.ts
  • apps/server/vite.config.ts
  • apps/tauri/src/components/media/character-crop-modal.tsx
  • apps/tauri/src/infrastructure/api-clients/server-orpc-client.ts
  • compose.pg18-rehearsal.yml
  • docs/runbooks/database-modernization-cutover.md
  • docs/runbooks/postgresql-18-rehearsal.md
  • packages/application/src/index.ts
  • packages/application/src/ports/ccip-vector-store.ts
  • packages/application/src/ports/index.ts
  • packages/application/src/ports/media-region-service.ts
  • packages/application/src/ports/media-service.ts
  • packages/application/src/ports/tagging-service.ts
  • packages/application/src/services/ccip-vector-service.ts
  • packages/application/src/services/index.ts
  • packages/application/src/services/media-processing-service.ts
  • packages/application/src/services/media-region-service.test.ts
  • packages/application/src/services/media-region-service.ts
  • packages/application/src/services/media-transfer-service.ts
  • packages/application/src/services/media-upload-service.ts
  • packages/application/src/services/tagging-service.ts
  • packages/core/package.json
  • packages/core/src/domain/config/config-schema.ts
  • packages/core/src/domain/contract/index.ts
  • packages/core/src/domain/contract/jobs.contract.ts
  • packages/core/src/domain/contract/media-regions.contract.ts
  • packages/core/src/domain/errors/index.ts
  • packages/core/src/domain/interfaces/ai-client.ts
  • packages/core/src/domain/jobs/registry.test.ts
  • packages/core/src/domain/jobs/registry.ts
  • packages/core/src/domain/jobs/schemas.ts
  • packages/core/src/domain/media-regions/schemas.ts
  • packages/core/src/domain/media/revision.ts
  • packages/core/src/domain/repositories/job-repository.ts
  • packages/core/src/domain/repositories/media-region-repository.ts
  • packages/core/src/domain/tagging/schemas.ts
  • packages/db/src/index.ts
  • packages/db/src/repositories/job-repository.test.ts
  • packages/db/src/repositories/job-repository.ts
  • packages/db/src/repositories/media-region-repository.ts
  • packages/db/src/schema.ts
  • packages/ui/src/character-crop-modal-state.ts
  • packages/ui/src/character-crop-modal.test.ts
  • packages/ui/src/character-crop-modal.tsx

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/issue-612-db-refresh-foundation

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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