Files
clinicpro/graphify-out/cache/ast/v0.8.44/37e0abb6301621c0888c4a656b37bc60ba1deea4c7f5682270b0a478d51ddd40.json
T
hamedandClaude Opus 4.8 2f0131171d feat(doctor): claim captcha+mobile, owner profile delete, admin map zoom fix
- DoctorClaimController: ALTCHA CaptchaGuard on /claim (dev no-op via
  ALTCHA_ENABLED=false); optional `mobile` field must match the logged-in
  user's number (422 ERR_CONFLICT_001 on mismatch)
- DoctorController::delete: now IS_AUTHENTICATED_FULLY — admin (any) or the
  owner of a claimed profile (IDOR-guarded); FK appointment guard kept
- DoctorDetailPage address map: MapController calls map.invalidateSize()
  before flyTo (fixes needing to pick a city twice on a freshly-mounted map);
  geocode retries once (nominatim empty/429 on first hit)
- tests: mobile mismatch, owner-delete allowed + others 403, unclaimed not
  deletable by random user
- docs: doctor-claim.md (mobile+captcha), doctor.md (delete permission)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 14:57:41 +03:30

1 line
19 KiB
JSON

{"nodes": [{"id": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_api_doctor_md", "label": "doctor.md", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L1"}, {"id": "api_doctor_doctor_api", "label": "Doctor API", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L1"}, {"id": "api_doctor_post_api_v1_doctor", "label": "POST `/api/v1/doctor`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L13"}, {"id": "api_doctor_request_body_application_json", "label": "Request Body (`application/json`)", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L19"}, {"id": "api_doctor_response_201", "label": "Response `201`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L43"}, {"id": "api_doctor_errors", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L63"}, {"id": "api_doctor_get_api_v1_doctor_uuid", "label": "GET `/api/v1/doctor/{uuid}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L72"}, {"id": "api_doctor_path_parameters", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L78"}, {"id": "api_doctor_response_200", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L83"}, {"id": "api_doctor_errors_122", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L122"}, {"id": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "label": "GET `/api/v1/clinic/my-doctor/{doctorUuid}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L129"}, {"id": "api_doctor_path_parameters_135", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L135"}, {"id": "api_doctor_response_200_140", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L140"}, {"id": "api_doctor_errors_159", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L159"}, {"id": "api_doctor_schedule_fields_notes", "label": "Schedule Fields Notes", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L167"}, {"id": "api_doctor_get_api_v1_doctors", "label": "GET `/api/v1/doctors`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L179"}, {"id": "api_doctor_query_parameters", "label": "Query Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L185"}, {"id": "api_doctor_response_200_196", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L196"}, {"id": "api_doctor_patch_api_v1_doctor_uuid", "label": "PATCH `/api/v1/doctor/{uuid}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L226"}, {"id": "api_doctor_path_parameters_232", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L232"}, {"id": "api_doctor_request_body_application_json_237", "label": "Request Body (`application/json`)", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L237"}, {"id": "api_doctor_response_200_256", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L256"}, {"id": "api_doctor_errors_259", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L259"}, {"id": "api_doctor_delete_api_v1_doctor_uuid", "label": "DELETE `/api/v1/doctor/{uuid}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L268"}, {"id": "api_doctor_path_parameters_278", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L278"}, {"id": "api_doctor_response_200_283", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L283"}, {"id": "api_doctor_errors_291", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L291"}, {"id": "api_doctor_post_file_upload_clinic_pro_doctor_field_image", "label": "POST `/file/upload/clinic_pro/doctor/field_image`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L301"}, {"id": "api_doctor_request", "label": "Request", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L307"}, {"id": "api_doctor_response_200_314", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L314"}, {"id": "api_doctor_errors_328", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L328"}, {"id": "api_doctor_get_api_v1_clinic_pro_doctor_addresses_doctorid", "label": "GET `/api/v1/clinic-pro/doctor-addresses/{doctorId}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L336"}, {"id": "api_doctor_path_parameters_342", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L342"}, {"id": "api_doctor_response_200_347", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L347"}, {"id": "api_doctor_post_api_v1_clinic_pro_doctor_address", "label": "POST `/api/v1/clinic-pro/doctor-address`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L386"}, {"id": "api_doctor_request_body", "label": "Request Body", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L392"}, {"id": "api_doctor_response_201_415", "label": "Response `201`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L415"}, {"id": "api_doctor_errors_430", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L430"}, {"id": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "label": "PATCH `/api/v1/clinic-pro/doctor-address/{id}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L439"}, {"id": "api_doctor_path_parameters_445", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L445"}, {"id": "api_doctor_request_body_450", "label": "Request Body", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L450"}, {"id": "api_doctor_response_200_453", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L453"}, {"id": "api_doctor_errors_456", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L456"}, {"id": "api_doctor_delete_api_v1_clinic_pro_doctor_address_id", "label": "DELETE `/api/v1/clinic-pro/doctor-address/{id}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L465"}, {"id": "api_doctor_response_200_471", "label": "Response `200`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L471"}, {"id": "api_doctor_errors_476", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L476"}, {"id": "api_doctor_post_api_v1_clinic_pro_doctor_address_from_clinic_clinicuuid", "label": "POST `/api/v1/clinic-pro/doctor-address/from-clinic/{clinicUuid}`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L485"}, {"id": "api_doctor_path_parameters_491", "label": "Path Parameters", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L491"}, {"id": "api_doctor_response_201_496", "label": "Response `201`", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L496"}, {"id": "api_doctor_errors_499", "label": "Errors", "file_type": "document", "source_file": "docs/api/doctor.md", "source_location": "L499"}], "edges": [{"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_api_doctor_md", "target": "api_doctor_doctor_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L1", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_post_api_v1_doctor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L13", "weight": 1.0}, {"source": "api_doctor_post_api_v1_doctor", "target": "api_doctor_request_body_application_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L19", "weight": 1.0}, {"source": "api_doctor_post_api_v1_doctor", "target": "api_doctor_response_201", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L43", "weight": 1.0}, {"source": "api_doctor_post_api_v1_doctor", "target": "api_doctor_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L63", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_get_api_v1_doctor_uuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L72", "weight": 1.0}, {"source": "api_doctor_get_api_v1_doctor_uuid", "target": "api_doctor_path_parameters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L78", "weight": 1.0}, {"source": "api_doctor_get_api_v1_doctor_uuid", "target": "api_doctor_response_200", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L83", "weight": 1.0}, {"source": "api_doctor_get_api_v1_doctor_uuid", "target": "api_doctor_errors_122", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L122", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L129", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "target": "api_doctor_path_parameters_135", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L135", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "target": "api_doctor_response_200_140", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L140", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "target": "api_doctor_errors_159", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L159", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_my_doctor_doctoruuid", "target": "api_doctor_schedule_fields_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L167", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_get_api_v1_doctors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L179", "weight": 1.0}, {"source": "api_doctor_get_api_v1_doctors", "target": "api_doctor_query_parameters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L185", "weight": 1.0}, {"source": "api_doctor_get_api_v1_doctors", "target": "api_doctor_response_200_196", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L196", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_patch_api_v1_doctor_uuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L226", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_doctor_uuid", "target": "api_doctor_path_parameters_232", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L232", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_doctor_uuid", "target": "api_doctor_request_body_application_json_237", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L237", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_doctor_uuid", "target": "api_doctor_response_200_256", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L256", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_doctor_uuid", "target": "api_doctor_errors_259", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L259", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_delete_api_v1_doctor_uuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L268", "weight": 1.0}, {"source": "api_doctor_delete_api_v1_doctor_uuid", "target": "api_doctor_path_parameters_278", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L278", "weight": 1.0}, {"source": "api_doctor_delete_api_v1_doctor_uuid", "target": "api_doctor_response_200_283", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L283", "weight": 1.0}, {"source": "api_doctor_delete_api_v1_doctor_uuid", "target": "api_doctor_errors_291", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L291", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_post_file_upload_clinic_pro_doctor_field_image", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L301", "weight": 1.0}, {"source": "api_doctor_post_file_upload_clinic_pro_doctor_field_image", "target": "api_doctor_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L307", "weight": 1.0}, {"source": "api_doctor_post_file_upload_clinic_pro_doctor_field_image", "target": "api_doctor_response_200_314", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L314", "weight": 1.0}, {"source": "api_doctor_post_file_upload_clinic_pro_doctor_field_image", "target": "api_doctor_errors_328", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L328", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_get_api_v1_clinic_pro_doctor_addresses_doctorid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L336", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_pro_doctor_addresses_doctorid", "target": "api_doctor_path_parameters_342", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L342", "weight": 1.0}, {"source": "api_doctor_get_api_v1_clinic_pro_doctor_addresses_doctorid", "target": "api_doctor_response_200_347", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L347", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_post_api_v1_clinic_pro_doctor_address", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L386", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address", "target": "api_doctor_request_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L392", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address", "target": "api_doctor_response_201_415", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L415", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address", "target": "api_doctor_errors_430", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L430", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L439", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_path_parameters_445", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L445", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_request_body_450", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L450", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_response_200_453", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L453", "weight": 1.0}, {"source": "api_doctor_patch_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_errors_456", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L456", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_delete_api_v1_clinic_pro_doctor_address_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L465", "weight": 1.0}, {"source": "api_doctor_delete_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_response_200_471", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L471", "weight": 1.0}, {"source": "api_doctor_delete_api_v1_clinic_pro_doctor_address_id", "target": "api_doctor_errors_476", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L476", "weight": 1.0}, {"source": "api_doctor_doctor_api", "target": "api_doctor_post_api_v1_clinic_pro_doctor_address_from_clinic_clinicuuid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L485", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address_from_clinic_clinicuuid", "target": "api_doctor_path_parameters_491", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L491", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address_from_clinic_clinicuuid", "target": "api_doctor_response_201_496", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L496", "weight": 1.0}, {"source": "api_doctor_post_api_v1_clinic_pro_doctor_address_from_clinic_clinicuuid", "target": "api_doctor_errors_499", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/api/doctor.md", "source_location": "L499", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}