概要
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で進めるのが現実的:
テスト項目
- 各エンドポイントが従来通り動作すること(curl で正常系を確認)
docker compose exec api go build ./... が通ること
- 既存の自動テスト(あれば)が通ること
備考
- 詳細は内部チャンネル(Slack 等)参照
- 関連する設計議論:abstract.Crud 経由統一の方針
概要
Repository層のSQL文の組み立てを、
abstract.Crud経由かつプレースホルダ($1, $2 ...)に統一する。背景・動機
abstract.Crudインターフェースは可変長引数対応に拡張済み(user/session repository での先行対応にて)対象ファイル
以下11ファイルが対象(user/session は対応済みのため除外):
api/lib/internals/repository/task_repository.goapi/lib/internals/repository/shift_repository.goapi/lib/internals/repository/review_repository.goapi/lib/internals/repository/bureau_repository.goapi/lib/internals/repository/place_repository.goapi/lib/internals/repository/grade_repository.goapi/lib/internals/repository/department_repository.goapi/lib/internals/repository/time_repository.goapi/lib/internals/repository/question_rescue_repository.goapi/lib/internals/repository/shorthanded_rescue_repository.goapi/lib/internals/repository/trouble_rescue_repository.goGORM を使用している
shift_card_repository.goは方針を別途検討。実装内容
$1, $2 ...)への置換client.DB()直接呼び出し →crud.Read/crud.ReadByID/crud.UpdateDB経由への統一pq.Array使用箇所、入力なし関数)はそのまま進め方
ファイル数が多いため、ドメインごとに分割PRで進めるのが現実的:
task_repository.go,time_repository.go)shift_repository.go)review_repository.go)bureau_repository.go,place_repository.go,grade_repository.go,department_repository.go)question_rescue_repository.go,shorthanded_rescue_repository.go,trouble_rescue_repository.go)shift_card_repository.go)テスト項目
docker compose exec api go build ./...が通ること備考