Skip to content

fix: 場所・タスク・レビューを作る API で、作った行の id を RETURNING id で受け取る #581

Description

@taminororo

開発目的

場所・タスク・レビューを作る API で、作った行の id を INSERT の RETURNING id で受け取るようにする。

今は INSERT のあとに、いちばん新しい行(ORDER BY id DESC LIMIT 1)を読み直して、それを作った行として返している。同じ表に同時に別の行が作られると、別の行を返すことがある。レスキューと users は同じ形を #536(PR #537・#538)で直したので、残りの3つもそろえる。

API UseCase 読み直し
POST /places api/lib/usecase/place_usecase.go#placeUseCase.CreatePlace FindNewRecord
POST /tasks api/lib/usecase/task_usecase.go#taskUseCase.CreateTask FindNewRecord
POST /reviews api/lib/usecase/review_usecase.go#reviewUseCase.CreateReview FindNewRecord

いちばん取り違えやすいのは POST /reviews で、技大祭の期間中に多くの人が同じ時間帯に送る。場所とタスクは管理画面から作るので、同時に作られることは少ない。

考えられる開発内容

  • 3つの repository の Create を、RETURNING id で id を返す形にする(お手本は api/lib/internals/repository/user_repository.go#userRepository.Create)
  • 3つの UseCase で、返ってきた id で行を読み直す(FindNewRecord を使わない)
  • go-sqlmock のテストで、INSERT が RETURNING id を含み、その id で読み直すことを確かめる(お手本は api/lib/internals/repository/user_repository_sqlmock_test.go)
  • 使われなくなった FindNewRecord を消す。bureau・department・grade・shift の repository にも、どこからも呼ばれていない FindLatestRecord がある(名前が違うので注意。git grep -n FindLatestRecord api/ で確かめられる)
  • AGENTS.md の Known Transitional Issues から「作成後の最新行の読み直し」の行を消す(PR docs: チームの約束事とコードの書き方のうち、メモにしかないものを workflow.md と AGENTS.md に書く #578 で足す予定の行)

考えられる開発時間

3〜4時間

備考

  • レスポンスの形は変えない。変えるのは、どの行を返すかだけ
  • 本番への反映は api のイメージの作り直しが要る(docs/operations/deploy.md)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions