ユーザー情報に基づいたソートを実装#12
Conversation
There was a problem hiding this comment.
Pull request overview
科目一覧 API に userId クエリを追加し、指定ユーザーの「コース・学年」に基づいて科目の並び順を最適化する変更です。併せて、OpenAPI / 生成コード(oapi-codegen)を更新しています。
Changes:
userId指定時にユーザー属性(専門区分 → コース → 学年)に基づく安定ソートを適用- Academic モジュールに User の domain / repository を追加してユーザー属性を取得
- OpenAPI と
gen/academicを更新し、userIdパラメータを API に反映
Reviewed changes
Copilot reviewed 8 out of 9 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| internal/modules/academic/service/subject.go | SortByUserAttribute フラグに応じて科目リストを安定ソート |
| internal/modules/academic/repository/user.go | users テーブルからコース/学年を取得する repo を追加 |
| internal/modules/academic/handler/subject_list.go | userId 指定時にユーザー情報を取得してフィルタへ注入 |
| internal/modules/academic/handler/handler.go | Handler に userRepo を注入できるように拡張 |
| internal/modules/academic/domain/user.go | Academic ドメインに User を追加 |
| internal/modules/academic/domain/subject.go | SubjectListFilter にユーザー属性ソート用フィールドを追加 |
| gen/academic/api.gen.go | oapi-codegen 再生成(userId パラメータ反映・strict handler 実装更新等) |
| cmd/academic-api/main.go | UserRepository を組み立てて Handler に注入 |
| api/openapi/academic/openapi.yaml | /v1/subjects に userId クエリを追加 |
Files not reviewed (1)
- gen/academic/api.gen.go: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| strictHandler := api.NewStrictHandler(h, []api.StrictMiddlewareFunc{ | ||
| middleware.DeadlineErrorMapper(), | ||
| }) |
| - name: userId | ||
| in: query | ||
| required: false | ||
| description: ユーザーID; 指定した場合はユーザーのコース・学年に近い順にソートする |
| items: | ||
| $ref: '#/components/schemas/DottoFoundationV1.CulturalSubjectCategory' | ||
| explode: false | ||
| - name: userId |
There was a problem hiding this comment.
openapi.yamlファイルは直接いじるんじゃなくて、TypeSpecリポジトリで管理するんだよね〜
なので、このPRではこの編集はいらないかな
| @@ -0,0 +1,7 @@ | |||
| package domain | |||
|
|
|||
| } | ||
|
|
||
| type userRepository interface { | ||
| FindByID(ctx context.Context, id string) (domain.User, bool, error) |
There was a problem hiding this comment.
アーキテクチャ的にHandler -> Repositoryの直接依存はしてないはず
既存のAPIエンドポイントがどのようなフローかを見るといいかも👊
|
|
||
| // Handler + Router | ||
| h := handler.NewHandler(subjectSvc, facultySvc, roomSvc, timetableItemSvc, courseRegistrationSvc, personalCalendarItemSvc, cancelledClassSvc, makeupClassSvc, roomChangeSvc, facultyRoomSvc) | ||
| h := handler.NewHandler(subjectSvc, facultySvc, roomSvc, timetableItemSvc, courseRegistrationSvc, personalCalendarItemSvc, cancelledClassSvc, makeupClassSvc, roomChangeSvc, facultyRoomSvc, userRepo) |
There was a problem hiding this comment.
https://github.com/fun-dotto/server/pull/12/changes#r3360449248
に関連して、他のやつは全部Serviceを注入しているはず
| return userToDomain(record), true, nil | ||
| } | ||
|
|
||
| func userToDomain(m model.User) domain.User { |
There was a problem hiding this comment.
このファイルの差分自体が多分いらなくなるかもなんだけど、変換処理をこの場所でやっているところは他にない気がする!
やったこと
確認したこと