Skip to content

batch-jobs を shared/model 直接利用にリファクタ#8

Merged
kantacky merged 2 commits into
mainfrom
refactor/batch-jobs-use-shared-model
May 10, 2026
Merged

batch-jobs を shared/model 直接利用にリファクタ#8
kantacky merged 2 commits into
mainfrom
refactor/batch-jobs-use-shared-model

Conversation

@kantacky

Copy link
Copy Markdown
Member

背景

internal/shared/model/ は Atlas マイグレーション (atlas.hclatlas-provider-gorm) の真実の供給源として参照されているが、これまで Go コードからは一切 import されていなかった。一方 internal/modules/batch-jobs/database/ が同じテーブル群に対する独自 GORM モデルを持っており、ID 型 (string vs uuid.UUID)、共通フィールド (Common 埋め込みの有無)、date カラムの Go 表現 (time.Time vs string) などで二重定義になっていた。スキーマドリフトの温床になるため、shared/model を Go コードからも正として使う形に揃える。

変更点

  • 削除: internal/modules/batch-jobs/database/*.go 全 9 ファイル
  • 追加: internal/modules/batch-jobs/repository/convert.go
    • modeldomain の境界変換 (uuid.UUIDstringdate 文字列 ↔ time.Time、UUIDv5 文字列の uuid.Parse) を集約
  • 改修: internal/modules/batch-jobs/repository/ の 8 ファイル
    • import 先を shared/model に切替
    • domain 層 (string ID 中心) は据え置き、変換は repository 境界のみで実施
    • notification_upsert は値型リレーション (Notification / User) の auto-upsert を抑止するため Omit(\"Notification\", \"User\") を追加
    • notification_list_pending の集計キーは uuid.UUID.String() を経由

shared/model 側の構造体は無変更。

確認

  • go build ./...
  • go vet ./...
  • go test ./... (batch-jobs 配下にテストは無いが既存テストは全てパス)
  • atlas migrate diff --env local が空 diff であること (Docker が必要なためレビュー時に手元で確認をお願いしたい)
  • cmd/build-class-change-notifications-job のローカル実行で notifications / notification_target_users の upsert と *_list_by_date 系の読み取りが期待通り動作すること
  • cmd/dispatch-notifications-job の pending 取得 → mark notified が機能すること

補足

shared/model 側に既存の不整合 (Subject の ID 二重宣言、MakeupClass.SubjectID の型不揃い) があるが、本 PR のスコープからは外している。別 PR で整理予定。

🤖 Generated with Claude Code

kantacky and others added 2 commits May 10, 2026 13:50
これまで batch-jobs モジュールは internal/modules/batch-jobs/database/
配下に独自の GORM モデルを持ち、Atlas マイグレーションの真実である
internal/shared/model と二重定義になっていた。スキーマドリフトの温床
だったため、リポジトリ層を shared/model を直接参照する形に移行する。

domain 層 (string ID 中心) は据え置き、repository/convert.go に model
↔ domain の境界変換 (uuid.UUID/string、date 文字列/time.Time、UUIDv5
文字列の uuid.Parse) を集約した。notification_upsert は値型リレーション
の auto-upsert を抑止するため Omit("Notification", "User") を追加して
いる。本コミットでは旧 database パッケージはまだ残しており、参照を
すべて剥がすところまでを行う。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
直前コミットで batch-jobs リポジトリ層は shared/model 直接利用に
切り替わり、internal/modules/batch-jobs/database 配下の GORM モデル
は参照されなくなったため、9 ファイルをまとめて削除する。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@kantacky kantacky self-assigned this May 10, 2026
@kantacky kantacky marked this pull request as ready for review May 10, 2026 04:53
@kantacky kantacky requested review from Copilot and masaya-osuga and removed request for Copilot May 10, 2026 04:53
@kantacky kantacky merged commit 01e08fa into main May 10, 2026
2 checks passed
@kantacky kantacky deleted the refactor/batch-jobs-use-shared-model branch May 10, 2026 04:55
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.

2 participants