Skip to content

fix: レスキューの発生時刻をJSTで返し、採番をRETURNINGで受け取る - #537

Merged
taminororo merged 2 commits into
developfrom
fix/kanba/535/rescue-time-jst-and-returning-id
Sep 17, 2026
Merged

taminororo merged 2 commits into
developfrom
fix/kanba/535/rescue-time-jst-and-returning-id

Conversation

@taminororo

Copy link
Copy Markdown
Collaborator

Close #535
Close #536

技大祭当日にレスキューを運用するための2点。どちらもレスキュー周りだけに閉じた修正で、DBスキーマの変更はない。

1. 発生時刻をJSTで返す(#535)

同じレコードがスプレッドシートとアプリで9時間ずれていた。2026-09-17 の疎通テストで実測した値。

スプシ「質問」3行目 発生時刻 : 2026-09-18 0:16:56   (JST)
GET /rescues の time      : 2026/09/17 15:16:56  (UTC)

スプレッドシートへ送る時刻はコントローラが Asia/Tokyo で整形しているのに、アプリへ返す時刻はロケーション変換なしだったため。表示直前の一箇所(entity)に変換を寄せた。

2. 採番をINSERTのRETURNINGで受け取る(#536)

作成後に最新行を読み直していたので、同時送信で他のリクエストの id を拾いうる。

// 変更前: api/lib/internals/repository/question_rescue_repository.go
query := "SELECT * FROM question_rescues ORDER BY id DESC LIMIT 1"

この id はスプレッドシートの対応番号になり、逆方向同期(スプシ→DB)の PUT 先にもなる。2026-09-17 に逆方向同期を有効にしたので、ずれると「Aさんへの返答がBさんのレスキューに書き込まれる」形で実害が出る。

INSERT ... RETURNING id に変え、使わなくなった FindNewRecord は3つのリポジトリから削除した。

テスト

go build ./...                                   build ok
go vet ./lib/...                                 vet ok
go test ./...                                    ok (entity / repository / usecase)

追加したテストは2種類。

  • formatRescueTime が UTC の値を JST で返すこと、ロケーションが違っても同じ瞬間なら同じ表示になること
  • Create が INSERT の RETURNING から id を受け取ること(go-sqlmock。作成後に読み直す実装に戻ると落ちる)

確認済みの動作

本番で往復の疎通を確認済み(送信→スプシ→返答記入→DB)。テスト行は削除済み。

GET /rescues が DB の timestamptz をロケーション変換せずに整形していたため、
スプレッドシート(Asia/Tokyo で整形)とアプリで同じレコードが9時間ずれていた。
表示直前の一箇所で JST に変換する。
作成後に ORDER BY id DESC LIMIT 1 で最新行を読み直していたため、
同時に送信されると他のリクエストの id を拾い、スプレッドシートの対応番号と
中身がずれる。逆方向同期を有効にしたので、返答が別のレスキューに書き込まれうる。
使わなくなった FindNewRecord は3つのリポジトリから削除する。
@coderabbitai

coderabbitai Bot commented Sep 17, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 19 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Advanced

Run ID: c8874683-38fc-4e7c-92c0-751b9e91d8a4

📥 Commits

Reviewing files that changed from the base of the PR and between 7942944 and 5c1b628.

📒 Files selected for processing (9)
  • api/lib/entity/rescue_response.go
  • api/lib/entity/rescue_response_time_test.go
  • api/lib/internals/repository/question_rescue_repository.go
  • api/lib/internals/repository/question_rescue_repository_sqlmock_test.go
  • api/lib/internals/repository/shorthanded_rescue_repository.go
  • api/lib/internals/repository/trouble_rescue_repository.go
  • api/lib/usecase/question_rescue_usecase.go
  • api/lib/usecase/shorthanded_rescue_usecase.go
  • api/lib/usecase/trouble_rescue_usecase.go

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

1 participant