add: ユーザー取得APIを追加して登録時の存在確認を修正#8
Conversation
There was a problem hiding this comment.
Pull request overview
ユーザー登録/更新時の存在確認を GET /v1/user/{user_id} で行えるように、バックエンドにユーザー取得APIを追加し、フロント側の存在確認ロジックを getBalance 依存から切り替えるPRです(Issue #7 対応)。
Changes:
- バックエンド:
GET /v1/user/{user_id}の OpenAPI 追加、UseCase/Handler/Repository 実装追加 - フロント: OpenAPI 型更新、
UserRepositoryImpl.getUser追加、管理画面(登録/更新)の存在確認APIをgetUserに切り替え - テスト: フロント/バックエンドの関連テストを追加・修正
Reviewed changes
Copilot reviewed 16 out of 17 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| sysken-pay-front/src/types/api-schema.d.ts | OpenAPI 生成型に GET /v1/user/{user_id} / GetUserResponse を反映 |
| sysken-pay-front/src/adapter/repository/UserRepositoryImpl.ts | getUser を追加してユーザー取得APIを呼び出し |
| sysken-pay-front/src/pages/admin/user-register/index.tsx | 登録時の存在確認を getBalance → getUser に切り替え |
| sysken-pay-front/src/pages/admin/user-update/index.tsx | 更新時の存在確認を getBalance → getUser に切り替え |
| sysken-pay-front/src/test/repository/UserRepositoryImpl.test.ts | getUser のユニットテスト追加 |
| sysken-pay-front/src/test/repository/PurchaseRepositoryImpl.test.ts | cancelPurchase のリクエストボディ期待値を現行スキーマ(items)に合わせて修正 |
| sysken-pay-backend/docs/openapi.yaml | GET /v1/user/{user_id} と GetUserResponse スキーマを追加 |
| sysken-pay-backend/app/usecase/user/get_user.go | ユーザー取得UseCaseを新規追加(IDバリデーション含む) |
| sysken-pay-backend/app/usecase/user/user_test.go | GetUser のテスト追加、既存テストの user_id 値調整 |
| sysken-pay-backend/app/ui/api/user/user.go | User Handler に GetUser を追加、DIを更新 |
| sysken-pay-backend/app/ui/api/user/response.go | GetUserResponse を追加 |
| sysken-pay-backend/app/server/server.go | GET /v1/user/{user_id} をルーティングに追加(Route構成変更) |
| sysken-pay-backend/app/domain/repository/user.go | UserRepository に GetUserByID を追加 |
| sysken-pay-backend/app/infra/repository/user.go | GetUserByID のDB実装を追加 |
| sysken-pay-backend/app/domain/object/user/user.go | user_id のフォーマットバリデーション(学籍番号形式)を追加 |
| sysken-pay-backend/app/domain/object/user/user_test.go | user_id フォーマットバリデーションに合わせてテスト更新 |
| sysken-pay-backend/app/domain/object/user/get_user.go | DB取得用のファクトリ NewUserFromDB を新規追加 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- created_at等の日時を timefmt.JST で JST(+09:00) オフセット付き出力に統一 (Z固定で実時刻を誤表現する問題を修正、全 response.go に横展開) - ApiError 型を追加し HTTP ステータスを保持、呼び出し側で 400/404 を分岐可能に - ユーザー登録/更新画面で 404(未登録)・400(形式不正)・その他を区別して表示 - OpenAPI の user_id に学籍番号フォーマットの pattern/example/説明を追記 - user テーブルに学籍番号フォーマットの CHECK 制約を追加
| ctx := r.Context() | ||
| foundUser, err := h.getUserUseCase.GetUser(ctx, userID) | ||
| if err != nil { | ||
| log.Printf("Failed to get user: %v", err) | ||
| if errors.Is(err, user.ErrInvalidUserID) { | ||
| apierrors.RespondError(w, http.StatusBadRequest, err.Error()) | ||
| return | ||
| } | ||
| apierrors.RespondError(w, http.StatusInternalServerError, err.Error()) | ||
| return |
| const response = { status: "success", user_id: "k24000", user_name: "シス研太郎" }; | ||
| mockGet.mockResolvedValue({ data: response, error: undefined, response: { status: 200 } }); | ||
|
|
||
| const result = await UserRepositoryImpl.getUser("k24000"); | ||
| expect(result).toEqual(response); | ||
| expect(mockGet).toHaveBeenCalledWith("/v1/user/{user_id}", { | ||
| params: { path: { user_id: "k24000" } }, | ||
| }); |
sana-sagegami
left a comment
There was a problem hiding this comment.
2つbugがあったので、直してください!
-
GET /v1/user/20X24042ですでに登録されているuserを要求すると404で返ってきている -
POST /v1/userですでに登録されているuserで登録しようとすると500で返ってきている
期待する動作
-
すでに登録されているuserを要求すると200でuser情報が返ってきて欲しい
-
すでに登録されているuserで登録しようとすると409(コンフリクト)が返ってきてほしい
検証
前提:20X24042は登録済み
ユーザー登録で20X24042を入力(本当はここで「登録済みユーザー」と表示されるはずが404のため通過してしまう)→名前の登録ボタンを押した後、赤文字でuser_idが重複している旨のバックエンドのエラーメッセージが表示される

バックエンドに登録されていない(404)と言われたのに、同じuser_idで登録してみると500(登録されている)と言われてしまっています!!!!!!


#7