Files
clinicpro/graphify-out/cache/ast/v0.8.44/7e99c6ac299dcc704fa82e35341b0d933f80d0290e6851e0c5d7e8c67a44bf4f.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
20 KiB
JSON

{"nodes": [{"id": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "label": "DoctorImportService.php", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L1"}, {"id": "service_doctorimportservice_doctorimportservice", "label": "DoctorImportService", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L23"}, {"id": "service_doctorimportservice_doctorimportservice_construct", "label": ".__construct()", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L28"}, {"id": "service_doctorimportservice_doctorimportservice_import", "label": ".import()", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34"}, {"id": "user", "label": "User", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34"}, {"id": "doctorimportresult", "label": "DoctorImportResult", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34"}, {"id": "service_doctorimportservice_doctorimportservice_doimport", "label": ".doImport()", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L46"}, {"id": "service_doctorimportservice_doctorimportservice_syncrefcollection", "label": ".syncRefCollection()", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L120"}, {"id": "collection", "label": "Collection", "file_type": "code", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L120"}], "edges": [{"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "user", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L5", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "doctor", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L6", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "city", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L7", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "province", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L8", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "specialty", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L9", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "uniqueconstraintviolationexception", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L10", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "entitymanagerinterface", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L11", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "managerregistry", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L12", "weight": 1.0}, {"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_src_doctor_service_doctorimportservice_php", "target": "service_doctorimportservice_doctorimportservice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L23", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice", "target": "service_doctorimportservice_doctorimportservice_construct", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L28", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice", "target": "service_doctorimportservice_doctorimportservice_import", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice_import", "target": "user", "relation": "references", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34", "weight": 1.0, "context": "parameter_type"}, {"source": "service_doctorimportservice_doctorimportservice_import", "target": "doctorimportresult", "relation": "references", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L34", "weight": 1.0, "context": "return_type"}, {"source": "service_doctorimportservice_doctorimportservice", "target": "service_doctorimportservice_doctorimportservice_doimport", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L46", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice_doimport", "target": "user", "relation": "references", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L46", "weight": 1.0, "context": "parameter_type"}, {"source": "service_doctorimportservice_doctorimportservice_doimport", "target": "doctorimportresult", "relation": "references", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L46", "weight": 1.0, "context": "return_type"}, {"source": "service_doctorimportservice_doctorimportservice", "target": "service_doctorimportservice_doctorimportservice_syncrefcollection", "relation": "method", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L120", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice_syncrefcollection", "target": "collection", "relation": "references", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L120", "weight": 1.0, "context": "parameter_type"}, {"source": "service_doctorimportservice_doctorimportservice_import", "target": "service_doctorimportservice_doctorimportservice_doimport", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L37", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice_doimport", "target": "user", "relation": "references_constant", "confidence": "EXTRACTED", "confidence_score": 1.0, "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L56", "weight": 1.0}, {"source": "service_doctorimportservice_doctorimportservice_doimport", "target": "service_doctorimportservice_doctorimportservice_syncrefcollection", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "src/Doctor/Service/DoctorImportService.php", "source_location": "L105", "weight": 1.0}], "raw_calls": [{"caller_nid": "service_doctorimportservice_doctorimportservice_import", "callee": "resetManager", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L41", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "wrapInTransaction", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L48", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "\\App\\Shared\\Util\\PersianText", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L51", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "trim", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L52", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "trim", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L53", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getRepository", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L55", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getRepository", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L56", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "findOneBy", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L59", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getOwnerStatus", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L63", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "substr", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L69", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "md5", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L69", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "findOneBy", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L70", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setRealName", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L73", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setStatus", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L74", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "addRole", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L75", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "persist", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L76", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setSource", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L79", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setOwnerStatus", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L80", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setActiveDoctorAppointment", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L81", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getUser", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L86", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "str_starts_with", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L88", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getMobileNumber", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L88", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "hasRole", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L89", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "addRole", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L90", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setName", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L94", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setMedicalSystemCode", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L95", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setManagedBy", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L96", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getId", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L96", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "array_key_exists", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L97", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "array_key_exists", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L97", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setSourceRef", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L98", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "empty", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L100", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setGender", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L100", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "empty", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L101", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setDegree", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L101", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "array_key_exists", "is_member_call": false, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L102", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "setInfo", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L102", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getSpecialties", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L105", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getProvinces", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L106", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "getCities", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L107", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "persist", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L109", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_doimport", "callee": "flush", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L110", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_syncrefcollection", "callee": "clear", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L125", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_syncrefcollection", "callee": "find", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L127", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_syncrefcollection", "callee": "getRepository", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L127", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_syncrefcollection", "callee": "contains", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L128", "receiver": null}, {"caller_nid": "service_doctorimportservice_doctorimportservice_syncrefcollection", "callee": "add", "is_member_call": true, "source_file": "/Users/hamed/pj/my_pj/clinic_pro/clinicpro/src/Doctor/Service/DoctorImportService.php", "source_location": "L129", "receiver": null}]}