feat: add CategoryImportController for bulk JSON import and export of categories

- Implemented export functionality to retrieve all rows from specified category tables.
- Developed import functionality with strict validation and referential integrity checks.
- Added error handling for various import scenarios including invalid formats and duplicate entries.
- Introduced tests for import functionality to ensure correct behavior and validation.
This commit is contained in:
hamed
2026-06-30 21:51:06 +03:30
parent 803196108c
commit 22937dfa56
22 changed files with 2473 additions and 835 deletions
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [{"id": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_api_category_import_md", "label": "category-import.md", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L1"}, {"id": "api_category_import_category_import_export_api", "label": "Category Import / Export API", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L1"}, {"id": "api_category_import_get_api_v1_admin_categories_bundle_export", "label": "GET `/api/v1/admin/categories/{bundle}/export`", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L26"}, {"id": "api_category_import_response_200", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L35"}, {"id": "api_category_import_errors", "label": "Errors", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L45"}, {"id": "api_category_import_post_api_v1_admin_categories_bundle_import", "label": "POST `/api/v1/admin/categories/{bundle}/import`", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L54"}, {"id": "api_category_import_request_body_application_json", "label": "Request Body (`application/json`)", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L64"}, {"id": "api_category_import_per_row_validation_rules", "label": "Per-row validation rules", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L74"}, {"id": "api_category_import_response_200_88", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L88"}, {"id": "api_category_import_response_422_validation_failed_nothing_written", "label": "Response `422` (validation failed \u2014 nothing written)", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L93"}, {"id": "api_category_import_errors_104", "label": "Errors", "file_type": "document", "source_file": "docs/api/category-import.md", "source_location": "L104"}], "edges": [{"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_api_category_import_md", "target": "api_category_import_category_import_export_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L1", "weight": 1.0}, {"source": "api_category_import_category_import_export_api", "target": "api_category_import_get_api_v1_admin_categories_bundle_export", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L26", "weight": 1.0}, {"source": "api_category_import_get_api_v1_admin_categories_bundle_export", "target": "api_category_import_response_200", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L35", "weight": 1.0}, {"source": "api_category_import_get_api_v1_admin_categories_bundle_export", "target": "api_category_import_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L45", "weight": 1.0}, {"source": "api_category_import_category_import_export_api", "target": "api_category_import_post_api_v1_admin_categories_bundle_import", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L54", "weight": 1.0}, {"source": "api_category_import_post_api_v1_admin_categories_bundle_import", "target": "api_category_import_request_body_application_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L64", "weight": 1.0}, {"source": "api_category_import_post_api_v1_admin_categories_bundle_import", "target": "api_category_import_per_row_validation_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L74", "weight": 1.0}, {"source": "api_category_import_post_api_v1_admin_categories_bundle_import", "target": "api_category_import_response_200_88", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L88", "weight": 1.0}, {"source": "api_category_import_post_api_v1_admin_categories_bundle_import", "target": "api_category_import_response_422_validation_failed_nothing_written", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L93", "weight": 1.0}, {"source": "api_category_import_post_api_v1_admin_categories_bundle_import", "target": "api_category_import_errors_104", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/category-import.md", "source_location": "L104", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long