Skip to content

Repository層のクエリ書式統一(プレースホルダ化と crud 経由統一) #266

@taminororo

Description

@taminororo

概要

Repository層のSQL文の組み立てを、abstract.Crud 経由かつプレースホルダ($1, $2 ...)に統一する。

背景・動機

  • 一部 repository ファイルで SQL を文字列連結で組み立てており、書式が混在している
  • PostgreSQL のプレースホルダ機構で組み立てる方針に統一することで、可読性と保守性を向上させる
  • abstract.Crud インターフェースは可変長引数対応に拡張済み(user/session repository での先行対応にて)

対象ファイル

以下11ファイルが対象(user/session は対応済みのため除外):

  • api/lib/internals/repository/task_repository.go
  • api/lib/internals/repository/shift_repository.go
  • api/lib/internals/repository/review_repository.go
  • api/lib/internals/repository/bureau_repository.go
  • api/lib/internals/repository/place_repository.go
  • api/lib/internals/repository/grade_repository.go
  • api/lib/internals/repository/department_repository.go
  • api/lib/internals/repository/time_repository.go
  • api/lib/internals/repository/question_rescue_repository.go
  • api/lib/internals/repository/shorthanded_rescue_repository.go
  • api/lib/internals/repository/trouble_rescue_repository.go

GORM を使用している shift_card_repository.go は方針を別途検討。

実装内容

  • 文字列連結 → プレースホルダ($1, $2 ...)への置換
  • client.DB() 直接呼び出し → crud.Read / crud.ReadByID / crud.UpdateDB 経由への統一
  • 既に安全な関数(pq.Array 使用箇所、入力なし関数)はそのまま

進め方

ファイル数が多いため、ドメインごとに分割PRで進めるのが現実的:

  • PR-A: task系 (task_repository.go, time_repository.go)
  • PR-B: shift系 (shift_repository.go)
  • PR-C: review系 (review_repository.go)
  • PR-D: master系 (bureau_repository.go, place_repository.go, grade_repository.go, department_repository.go)
  • PR-E: rescue系 (question_rescue_repository.go, shorthanded_rescue_repository.go, trouble_rescue_repository.go)
  • PR-F: GORM 方針確定 (shift_card_repository.go)

テスト項目

  • 各エンドポイントが従来通り動作すること(curl で正常系を確認)
  • docker compose exec api go build ./... が通ること
  • 既存の自動テスト(あれば)が通ること

備考

  • 詳細は内部チャンネル(Slack 等)参照
  • 関連する設計議論:abstract.Crud 経由統一の方針

Metadata

Metadata

Assignees

No one assigned

    Labels

    Size-M開発時間の目安は10時間✨Backendバックエンドのタスク. 主にGo, TypeScriptを使用優先度0Must, Minimum・最低限実装しないといけない枠🔨改修改修。バグ修正とはちょっと違うけど完全に新規作成でもないやつとか

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions