Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Merges dev into stage, bringing in the latest backend API refactors (dependency naming, admin endpoint rework), Meilisearch-backed search + infra wiring, expanded schema validations, and corresponding client + test updates.
Changes:
- Add Meilisearch configuration, dependencies, API endpoints, and integration tests (service + API), plus infra docker-compose wiring.
- Refactor server DB dependency/fixture naming (
get_db/session→get_db_session/db_session) and extract shared query/serializer utilities. - Update client to match API surface changes (admin/access-request/user services, route paths) and refactor header actions.
Reviewed changes
Copilot reviewed 182 out of 200 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| server/pyproject.toml | Add deps (httpx, meilisearch sdk, deptry) + deptry config |
| server/makefile | Add deptry target; update phony targets |
| server/conftest.py | Register Meilisearch fixtures |
| server/app/tests/services/workout_exercise/utilities.py | Rename session arg to db_session |
| server/app/tests/services/workout_exercise/test_get_next_workout_exercise_position.py | Use db_session fixture/name |
| server/app/tests/services/workout_exercise/test_delete_workout_exercise.py | Use db_session + updated service param names |
| server/app/tests/services/workout/utilities.py | Rename session arg to db_session |
| server/app/tests/services/workout/test_query_workouts.py | Use db_session fixture/name |
| server/app/tests/services/workout/test_get_workouts.py | Use db_session fixture/name |
| server/app/tests/services/workout/test_get_workout.py | Use db_session fixture/name |
| server/app/tests/services/workout/test_get_owned_workout.py | Removed; moved under utilities queries tests (deleted) |
| server/app/tests/services/workout/test_delete_workout.py | Use db_session fixture/name |
| server/app/tests/services/workout/test_create_workout.py | Use db_session fixture/name |
| server/app/tests/services/utilities.py | Point serializer import to shared utilities; db_session rename |
| server/app/tests/services/user/test_get_users_ordered_by_username.py | Use db_session fixture/name |
| server/app/tests/services/user/test_get_users.py | Import get_users from user service; db_session rename |
| server/app/tests/services/user/test_get_user_by_username.py | Use db_session fixture/name |
| server/app/tests/services/user/test_get_user_by_identifier.py | Use db_session fixture/name |
| server/app/tests/services/user/test_get_user_by_email.py | Use db_session fixture/name |
| server/app/tests/services/user/test_get_admin_users.py | Use db_session fixture/name |
| server/app/tests/services/token/test_get_tokens.py | Use db_session fixture/name |
| server/app/tests/services/token/test_expire_tokens.py | Use db_session fixture/name |
| server/app/tests/services/set/utilities.py | Rename session arg to db_session |
| server/app/tests/services/set/test_get_next_set_number.py | Use db_session fixture/name |
| server/app/tests/services/set/test_delete_set.py | Use db_session fixture/name |
| server/app/tests/services/search/utilities.py | Add Meilisearch task wait helper (new) |
| server/app/tests/services/search/test_search_muscle_groups.py | Add service-level muscle-group search test (new) |
| server/app/tests/services/search/test_search_exercises.py | Add service-level exercise search tests (new) |
| server/app/tests/services/search/test_reindex.py | Add reindex orchestrator test (new) |
| server/app/tests/services/search/test_index_muscle_groups.py | Add indexing test for muscle groups (new) |
| server/app/tests/services/search/test_index_exercises.py | Add indexing test for exercises (new) |
| server/app/tests/services/search/test_get_task.py | Add get_task service test (new) |
| server/app/tests/services/search/init.py | Package init (new/empty) |
| server/app/tests/services/muscle_group/utilities.py | Add muscle-group test utilities (new) |
| server/app/tests/services/muscle_group/test_get_muscle_groups_ordered_by_name.py | Use db_session fixture/name + formatting |
| server/app/tests/services/muscle_group/test_get_muscle_groups_by_ids.py | Avoid hard-coded IDs; use lookup utility |
| server/app/tests/services/muscle_group/init.py | Package init (new/empty) |
| server/app/tests/services/feedback/test_create_feedback_service.py | Rename db param to db_session and update queries |
| server/app/tests/services/exercise/utilities.py | Rename session arg; remove duplicated get_muscle_group_id |
| server/app/tests/services/exercise/test_get_owned_exercise.py | Use db_session fixture/name |
| server/app/tests/services/exercise/test_get_exercises.py | Use db_session fixture/name |
| server/app/tests/services/exercise/test_get_exercise.py | Use db_session fixture/name |
| server/app/tests/services/exercise/test_delete_exercise.py | Use shared get_muscle_group_id; db_session rename |
| server/app/tests/services/exercise/test_create_exercise.py | Switch query_exercises import; add IntegrityError test |
| server/app/tests/services/auth/test_reset_password.py | Use db_session + renamed service args |
| server/app/tests/services/auth/test_request_password_reset.py | Use db_session + renamed service args |
| server/app/tests/services/auth/test_refresh.py | Use db_session + renamed service args |
| server/app/tests/services/auth/test_login.py | Use db_session + renamed service args |
| server/app/tests/services/access_request/test_get_latest_access_request_by_email.py | Use db_session fixture/name |
| server/app/tests/services/access_request/test_get_access_requests.py | Import get_access_requests from access_request service |
| server/app/tests/services/access_request/test_get_access_request_by_id.py | Test private accessor; db_session rename |
| server/app/tests/services/access_request/init.py | Package init (new/empty) |
| server/app/tests/services/_utilities/serializers/test_to_workout_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_workout_exercise_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_workout_base.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_user_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_set_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_muscle_group_public.py | Add serializer test for muscle groups (new) |
| server/app/tests/services/_utilities/serializers/test_to_exercise_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_exercise_document.py | Add exercise document serializer tests (new) |
| server/app/tests/services/_utilities/serializers/test_to_exercise_base.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/serializers/test_to_access_request_public.py | Update serializer import to shared utilities |
| server/app/tests/services/_utilities/queries/test_query_sets.py | Switch to shared query_sets + db_session naming |
| server/app/tests/services/_utilities/queries/test_query_exercises.py | Switch to shared query_exercises + db_session naming |
| server/app/tests/services/_utilities/queries/test_get_owned_workout.py | Move get_owned_workout tests to utilities queries (new) |
| server/app/tests/services/_utilities/queries/init.py | Package init (new/empty) |
| server/app/tests/services/_utilities/init.py | Package init (new/empty) |
| server/app/tests/models/schemas/test_workout.py | Add schema validation test for null started_at (new) |
| server/app/tests/models/schemas/test_exercise.py | Add schema validation tests for null fields (new) |
| server/app/tests/fixtures/settings.py | Add Meilisearch settings into test Settings fixture |
| server/app/tests/fixtures/meilisearch.py | Add Meilisearch testcontainer + ms_client fixture (new) |
| server/app/tests/fixtures/database.py | Rename engine/connection/session fixtures to db_* |
| server/app/tests/fixtures/client.py | Override get_db_session + get_ms_client dependencies |
| server/app/tests/core/utilities.py | Rename helper arg to db_session |
| server/app/tests/core/security/utilities.py | Rename helper arg to db_session |
| server/app/tests/core/security/test_get_token.py | Use db_session and renamed kwargs |
| server/app/tests/core/security/test_expire_tokens.py | Use db_session and renamed kwargs |
| server/app/tests/core/security/test_authenticate_user.py | Use db_session and renamed kwargs |
| server/app/tests/core/dependencies/test_get_sessionmaker.py | Removed in favor of get_db_sessionmaker tests (deleted) |
| server/app/tests/core/dependencies/test_get_ms_client.py | Add dependency test for Meilisearch client (new) |
| server/app/tests/core/dependencies/test_get_db_sessionmaker.py | Add tests for cached db sessionmaker (new) |
| server/app/tests/core/dependencies/test_get_db_session.py | Add tests for get_db_session generator behavior (new) |
| server/app/tests/core/dependencies/test_get_db.py | Removed in favor of get_db_session tests (deleted) |
| server/app/tests/core/dependencies/test_get_current_user.py | Update param names to db_session |
| server/app/tests/core/dependencies/test_get_current_admin.py | Update serializer import + db_session naming |
| server/app/tests/core/dependencies/test_build_ms_client.py | Add caching test for build_ms_client (new) |
| server/app/tests/core/database/test_is_unique_violation.py | Add tests for is_unique_violation helper (new) |
| server/app/tests/api/workout_exercise/utilities.py | Rename session arg to db_session |
| server/app/tests/api/workout_exercise/test_delete_workout_exercise.py | Update endpoint path + db_session naming |
| server/app/tests/api/workout_exercise/test_create_workout_exercise.py | Update endpoint path + db_session naming |
| server/app/tests/api/workout/utilities.py | Rename session arg to db_session |
| server/app/tests/api/workout/test_update_workout.py | Use db_session naming; add 422 started_at null test |
| server/app/tests/api/workout/test_get_workouts.py | Use db_session naming |
| server/app/tests/api/workout/test_get_workout.py | Use db_session naming |
| server/app/tests/api/workout/test_delete_workout.py | Use db_session naming |
| server/app/tests/api/utilities.py | Rename helper args to db_session |
| server/app/tests/api/user/test_get_users.py | Update endpoint path (/api/users) + rename test |
| server/app/tests/api/user/test_get_current_user.py | Use db_session naming |
| server/app/tests/api/set/test_update_set.py | Update nested endpoint path + db_session naming |
| server/app/tests/api/set/test_delete_set.py | Update nested endpoint path + db_session naming |
| server/app/tests/api/set/test_create_set.py | Update nested endpoint path + db_session naming |
| server/app/tests/api/search/utilities.py | Add API helper for reindex (new) |
| server/app/tests/api/search/test_search_muscle_groups.py | Add API search test coverage (new) |
| server/app/tests/api/search/test_search_exercises.py | Add API test scaffold (new) |
| server/app/tests/api/search/test_reindex.py | Add API reindex tests incl. admin gating (new) |
| server/app/tests/api/search/test_get_task.py | Add API task status tests incl. admin gating (new) |
| server/app/tests/api/search/init.py | Package init (new/empty) |
| server/app/tests/api/exercise/utilities.py | Switch to shared query/serializer imports; db_session naming |
| server/app/tests/api/exercise/test_update_exercise.py | Use db_session; add 422 null-field tests |
| server/app/tests/api/exercise/test_get_exercises.py | Use db_session naming |
| server/app/tests/api/exercise/test_get_exercise.py | Use db_session naming |
| server/app/tests/api/exercise/test_delete_exercise.py | Use db_session naming |
| server/app/tests/api/exercise/test_create_exercise.py | Use db_session naming |
| server/app/tests/api/auth/test_reset_password.py | Use db_session naming |
| server/app/tests/api/auth/test_request_access.py | Use db_session naming |
| server/app/tests/api/auth/test_register.py | Use db_session naming |
| server/app/tests/api/access_request/test_update_access_request_status.py | Update endpoint path + db_session naming |
| server/app/tests/api/access_request/test_get_access_requests.py | Update endpoint path + db_session naming |
| server/app/tests/api/access_request/init.py | Package init (new/empty) |
| server/app/services/workout.py | Use shared get_owned_workout + shared serializers; db_session naming |
| server/app/services/utilities/serializers.py | Centralize serializer helpers (new) |
| server/app/services/utilities/queries.py | Centralize common query helpers (new) |
| server/app/services/user.py | Add get_users; move serializer import; db_session naming |
| server/app/services/token.py | Rename db param to db_session |
| server/app/services/muscle_group.py | Use shared serializer; db_session naming |
| server/app/services/feedback.py | Rename db param to db_session |
| server/app/services/admin.py | Remove admin service module (deleted) |
| server/app/services/access_request.py | Move admin access-request ops here; add status update logic |
| server/app/models/schemas/workout_exercise.py | Type notes with WorkoutExerciseNotes alias |
| server/app/models/schemas/workout.py | Add notes type alias + validator preventing null started_at |
| server/app/models/schemas/types.py | Expand/centralize type aliases (notes, search, feedback, etc.) |
| server/app/models/schemas/set.py | Type notes with SetNotes alias |
| server/app/models/schemas/search.py | Add SearchRequest/SearchResponse schemas (new) |
| server/app/models/schemas/feedback.py | Use typed fields for url/title/description |
| server/app/models/schemas/exercise.py | Add ExerciseDocument + validators for non-null updates |
| server/app/models/schemas/config.py | Add MeilisearchSettings |
| server/app/models/enums.py | Add SearchIndex enum |
| server/app/models/database/workout_exercise.py | Extract unique constraint name constant |
| server/app/models/database/set.py | Extract unique constraint name constant |
| server/app/models/database/exercise.py | Extract unique constraint name constant |
| server/app/core/security.py | Rename db params to db_session; route through updated services |
| server/app/core/dependencies.py | Rename DB deps; add Meilisearch client dependency |
| server/app/core/database.py | Add is_unique_violation helper + constant |
| server/app/core/config.py | Add ms settings to Settings |
| server/app/api/router.py | Replace admin router with access_request + search routers |
| server/app/api/endpoints/workout_exercise.py | Change routes to nested /workouts/{id}/exercises and db_session dep |
| server/app/api/endpoints/workout.py | Switch to get_db_session dependency |
| server/app/api/endpoints/user.py | Add admin-only GET /users endpoint |
| server/app/api/endpoints/set.py | Change routes to nested workouts/exercises/sets and db_session dep |
| server/app/api/endpoints/search.py | Add search/reindex/task endpoints (new) |
| server/app/api/endpoints/muscle_group.py | Switch to get_db_session dependency |
| server/app/api/endpoints/health.py | Switch to get_db_session dependency |
| server/app/api/endpoints/feedback.py | Switch to get_db_session dependency |
| server/app/api/endpoints/exercise.py | Switch to get_db_session dependency |
| server/app/api/endpoints/auth.py | Switch to get_db_session dependency; rename kwargs |
| server/app/api/endpoints/access_request.py | Replace /admin/* with /access-requests/* |
| config/infra/docker-compose.yml | Add Meilisearch service + env wiring for server/migrations |
| config/infra/docker-compose.override.yml | Expose Meilisearch port in override |
| config/env/.env.example | Add MS__* env vars |
| client/vite.config.ts | Adjust Vite config; remove vite-tsconfig-paths |
| client/src/pages/Admin.tsx | Use AccessRequestService/UserService instead of AdminService |
| client/src/layout/AppLayout.tsx | Refactor header/nav; delegate actions to HeaderActions |
| client/src/components/exercises/ExercisesTable.tsx | Lint suppression for Set type argument |
| client/src/components/exercises/ExerciseFormDialog.tsx | Adjust react-hook-form typing invocation |
| client/src/components/data-table/DataTable.tsx | Remove explicit generic on columnVisibility state |
| client/src/components/HeaderActions.tsx | New shared header actions component (new) |
| client/src/components/FeedbackFormDialog.tsx | Make trigger customizable via props |
| client/src/components/AccessRequestsTable.tsx | Switch AdminService → AccessRequestService; lint suppression |
| client/src/api/generated/core/utils.gen.ts | Generated comment punctuation tweak |
| client/src/api/generated/core/types.gen.ts | Generated comment punctuation tweak |
| client/src/api/generated/client/utils.gen.ts | Generated formatting/comment tweaks |
| client/src/api/axios.ts | Lint suppression for buildUrl generic |
| client/package.json | Bump deps; remove vite-tsconfig-paths |
| agent-browser.json | Add agent-browser config (new) |
| PROJECT_OVERVIEW.md | Update documented API surface & add search section |
| .gitignore | Ignore browser-profile directory |
| .github/workflows/test-server.yml | Run deptry in CI before type checks |
| .github/copilot-instructions.md | Document agent-browser usage |
Files not reviewed (1)
- client/package-lock.json: Language not supported
server/app/tests/services/_utilities/serializers/test_to_muscle_group_public.py
Show resolved
Hide resolved
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.