- Created app/lib_api_crud_v3.py to house core security, filtering, and sanitization logic. - Implemented reusable sanitize_payload() to generically strip virtual lookup fields (*_id_random) and view-only fields (fields_to_exclude_from_db). - Updated app/routers/api_crud_v3.py to use the new library and consolidated sanitization across all Create/Update endpoints. - Documented Phase 1 completion in documentation/REFACTOR_API_CRUD_V3.md.
1.5 KiB
1.5 KiB
Refactoring Plan: API CRUD V3
Goal: Modularize app/routers/api_crud_v3.py to improve maintainability, readability, and reusability. The file currently mixes route definitions, security enforcement, data sanitization, and helper utilities.
Phase 1: Extract Helpers & Core Logic (Safest) - COMPLETED
Objective: Move pure functions and business logic out of the router file.
- Create
app/lib_api_crud_v3.py: DONE - Update
app/routers/api_crud_v3.py: DONE (All endpoints now usesanitize_payload).
Phase 2: Separate Child/Nested Routes - PLANNED
-
Create
app/routers/api_crud_v3_nested.py:- Move
get_child_obj_li - Move
post_child_obj - Move
get_child_obj - Move
patch_child_obj - Move
delete_child_obj
- Move
-
Update
app/main.py(or router inclusion):- Ensure the new router is included, OR include it within
api_crud_v3.pyif preferred to keep a single import point.
- Ensure the new router is included, OR include it within
Phase 3: Schema Introspection
Objective: Isolate database introspection logic.
- Create
app/lib_schema_v3.py(or similar):- Move the logic inside
get_obj_schema(SQLDESCRIBEparsing, Pydantic introspection) to a helper function.
- Move the logic inside
Execution Strategy
We will execute Phase 1 first as it provides immediate value (removing code duplication for sanitization) with minimal risk to routing logic.
Testing
After each move:
- Run
tests/test_v3_router_filtering.py(requires update to import from new location if we test the lib directly). - Verify application startup.