Skip to content

fix: ユーザー作成の採番をINSERTのRETURNINGで受け取る - #538

Merged
taminororo merged 1 commit into
developfrom
fix/kanba/returning-id-users
Sep 17, 2026
Merged

taminororo merged 1 commit into
developfrom
fix/kanba/returning-id-users

Conversation

@taminororo

@taminororo taminororo commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

PR #537(#536)でレスキュー3テーブルに入れた採番の修正を、users にも同じ形で広げる。

変更前

作成したレコードの id を「テーブルの最新行」から取り直していた。

// api/lib/internals/repository/user_repository.go
query := "SELECT * FROM users ORDER BY id DESC LIMIT 1"

INSERT と SELECT が別ステートメントなので、ほぼ同時に別のユーザーが作成されると、そちらの行を読む。

変更後

INSERT ... RETURNING id で採番を受け取り、その id で対象行を引く。使わなくなった FindNewRecord は UserRepository から削除した。

呼び出し元は3か所。

mail_auth_usecase.go  WebSignUp            : 最新行 → RETURNING の id で取得
user_usecase.go       CreateUser           : 最新行 → RETURNING の id で取得
user_usecase.go       UpdateUsersFromGAS   : 名前で再取得 → RETURNING の id で取得

3つ目は名簿送信の新規作成。名前での引き直しをやめたので、同名や表記ゆれの影響も受けなくなる。

テスト

go build ./...    build ok
go vet ./lib/...  vet ok
go test ./...     ok (entity / repository / usecase)
  • TestUserRepositoryCreate_ReturnsIDFromInsert を追加。最新行を読み直す実装に戻すと落ちる
  • TestUpdateUsersFromGAS_新規ユーザーはmailとslackUserIDを保存する を新しい経路(RETURNING と id での再取得)に更新
  • go-sqlmock のフェイク db.Client が同一パッケージに3つ重複していたので、リポジトリ非依存の newDBMock を追加した。今回のテストはこれを使う。既存3ファイルはそのまま

Summary by CodeRabbit

  • 改善
    • ユーザー作成時に発行されたIDを使って、作成直後のユーザー情報を正確に取得できるようになりました。
    • サインアップや外部サービス連携による新規ユーザー登録で、同名ユーザーや名前の表記ゆれに左右されにくくなりました。

Create 後に ORDER BY id DESC LIMIT 1 で最新行を読み直す実装は、
同時に作成された別のレコードを掴む。レスキュー3テーブル(#536)と同じく
INSERT ... RETURNING id に揃え、使わなくなった FindNewRecord を削除する。
名簿送信の新規作成も、名前での再取得から採番した id での取得に変える。
@coderabbitai

coderabbitai Bot commented Sep 17, 2026 •

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: 23b4bc5c-d341-44da-b442-99e9c998cb25

📥 Commits

Reviewing files that changed from the base of the PR and between 1ea9115 and 16867de.

📒 Files selected for processing (6)
  • api/lib/internals/repository/sqlmock_helper_test.go
  • api/lib/internals/repository/user_repository.go
  • api/lib/internals/repository/user_repository_sqlmock_test.go
  • api/lib/usecase/mail_auth_usecase.go
  • api/lib/usecase/user_usecase.go
  • api/lib/usecase/user_usecase_gas_sqlmock_test.go

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

UserRepository.Create が新規ユーザーのIDを返すように変更されました。各ユースケースはそのIDでユーザーを再取得します。FindNewRecord は削除され、関連するsqlmockテストが更新されています。

Changes

ユーザー作成IDフロー

Layer / File(s) Summary
Repositoryの契約とID返却
api/lib/internals/repository/user_repository.go, api/lib/internals/repository/sqlmock_helper_test.go, api/lib/internals/repository/user_repository_sqlmock_test.go
UserRepository.Create は (int, error) を返すようになりました。実装は INSERT ... RETURNING id を実行し、取得したIDを返します。FindNewRecord は削除されました。sqlmockテストとテスト用DBクライアントを追加しました。
ユースケースのID再取得
api/lib/usecase/mail_auth_usecase.go, api/lib/usecase/user_usecase.go, api/lib/usecase/user_usecase_gas_sqlmock_test.go
WebSignUp、CreateUser、UpdateUsersFromGAS は、Create が返すIDを使って Find を呼び出します。GAS連携のsqlmockは RETURNING id とIDによる再取得を検証します。

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant WebSignUp
  participant UserRepository
  participant Database
  WebSignUp->>UserRepository: Create(...)
  UserRepository->>Database: INSERT ... RETURNING id
  Database-->>UserRepository: 作成したユーザーID
  UserRepository-->>WebSignUp: ユーザーID
  WebSignUp->>UserRepository: Find(ユーザーID)
  UserRepository->>Database: SELECT FROM users WHERE id
  Database-->>UserRepository: ユーザー情報
  UserRepository-->>WebSignUp: ユーザー情報
Loading

Merge Risk: ⚪ Minimal · up to 16867

The ID-based creation flow is compatible with the configured database and consistently used by the updated call sites. No actionable merge risk remains.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed タイトルは、INSERT ... RETURNING によってユーザー作成時の採番IDを受け取る主要な変更を明確に示しています。
Description check ✅ Passed 概要、変更前後の動作、影響する呼び出し元、テスト内容、検証結果、備考が記載されています。画面スクリーンショットは省略されていますが、テンプレート上は任意のため問題ありません。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 6 files.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

@taminororo
taminororo merged commit 67718ee into develop Sep 17, 2026
3 checks passed
@taminororo
taminororo deleted the fix/kanba/returning-id-users branch September 17, 2026 16:11
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