Files
clinicpro/graphify-out/cache/ast/v0.8.44/b4a1a494a5417c78db3a85dc80fa158db77860e74eee9337fb15a5f5052f829f.json
T
hamed c2c6ae4d02 feat(migrations): add national_code_verified flag to users and normalize bank_account representation
- Added a new column `national_code_verified` to the `users` table.
- Normalized the `bank_account` field in the `representations` table from a single object to an array of IBANs with a default `verified` status of false.

feat(ApiIrService): implement identity verification client for api.ir

- Created `ApiIrService` to handle identity verification via api.ir.
- Implemented methods for matching national code with mobile and IBAN with national code and birth date.
- Added error handling and logging for external API requests.
2026-06-25 19:38:47 +03:30

1 line
16 KiB
JSON

{"nodes": [{"id": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_tasks_task_17_sms_task_md", "label": "task.md", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L1"}, {"id": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "label": "\u062a\u0633\u06a9 \u06f1\u06f7: \u0645\u0627\u0698\u0648\u0644 \u067e\u06cc\u0627\u0645\u06a9 (SMS)", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L1"}, {"id": "task_17_sms_task_\u062a\u0648\u0636\u06cc\u062d", "label": "\u062a\u0648\u0636\u06cc\u062d", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L3"}, {"id": "task_17_sms_task_endpoint_\u0647\u0627", "label": "Endpoint \u0647\u0627", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L11"}, {"id": "task_17_sms_task_\u067e\u06cc\u0634_\u0646\u06cc\u0627\u0632\u0647\u0627", "label": "\u067e\u06cc\u0634\u200c\u0646\u06cc\u0627\u0632\u0647\u0627", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L27"}, {"id": "task_17_sms_task_\u0632\u0645\u0627\u0646_\u062a\u062e\u0645\u06cc\u0646\u06cc", "label": "\u0632\u0645\u0627\u0646 \u062a\u062e\u0645\u06cc\u0646\u06cc", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L30"}, {"id": "task_17_sms_task_get_api_v1_sms_balance", "label": "GET /api/v1/sms/balance", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L35"}, {"id": "task_17_sms_task_post_api_v1_sms_queue", "label": "POST /api/v1/sms/queue", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L50"}, {"id": "task_17_sms_task_sms_providers_strategy_pattern", "label": "SMS Providers \u2014 Strategy Pattern", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L83"}, {"id": "task_17_sms_task_fallback_logic", "label": "Fallback Logic", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L96"}, {"id": "task_17_sms_task_symfony_messenger_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_async", "label": "Symfony Messenger \u2014 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc Async", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L116"}, {"id": "task_17_sms_task_\u0642\u0627\u0646\u0648\u0646_\u06a9\u0633\u0631_\u0645\u0648\u062c\u0648\u062f\u06cc", "label": "\u0642\u0627\u0646\u0648\u0646 \u06a9\u0633\u0631 \u0645\u0648\u062c\u0648\u062f\u06cc", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L168"}, {"id": "task_17_sms_task_\u0633\u0627\u062e\u062a\u0627\u0631_\u062c\u062f\u0648\u0644_sms_logs", "label": "\u0633\u0627\u062e\u062a\u0627\u0631 \u062c\u062f\u0648\u0644 sms_logs", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L182"}, {"id": "task_17_sms_task_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645", "label": "\u0646\u06a9\u0627\u062a \u0645\u0647\u0645", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L200"}, {"id": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "label": "\u0633\u06cc\u0633\u062a\u0645 \u062a\u0645\u067e\u0644\u06cc\u062a \u067e\u06cc\u0627\u0645\u06a9 \u0633\u0641\u0627\u0631\u0634\u06cc", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L208"}, {"id": "task_17_sms_task_\u062c\u0631\u06cc\u0627\u0646_\u06a9\u0644\u06cc", "label": "\u062c\u0631\u06cc\u0627\u0646 \u06a9\u0644\u06cc", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L210"}, {"id": "task_17_sms_task_\u062f\u0633\u062a\u0647_\u0628\u0646\u062f\u06cc_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0647\u0627_category", "label": "\u062f\u0633\u062a\u0647\u200c\u0628\u0646\u062f\u06cc \u062a\u0645\u067e\u0644\u06cc\u062a\u200c\u0647\u0627 (category)", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L236"}, {"id": "task_17_sms_task_\u0633\u0627\u062e\u062a\u0627\u0631_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0648_\u0645\u062a\u063a\u06cc\u0631\u0647\u0627", "label": "\u0633\u0627\u062e\u062a\u0627\u0631 \u062a\u0645\u067e\u0644\u06cc\u062a \u0648 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L246"}, {"id": "task_17_sms_task_get_api_v1_sms_sample_templates", "label": "GET /api/v1/sms/sample-templates", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L263"}, {"id": "task_17_sms_task_post_api_v1_sms_templates", "label": "POST /api/v1/sms/templates", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L282"}, {"id": "task_17_sms_task_patch_api_v1_sms_templates_uuid_submit", "label": "PATCH /api/v1/sms/templates/{uuid}/submit", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L322"}, {"id": "task_17_sms_task_patch_api_v1_sms_templates_uuid_approve_admin", "label": "PATCH /api/v1/sms/templates/{uuid}/approve (Admin)", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L345"}, {"id": "task_17_sms_task_patch_api_v1_sms_templates_uuid_reject_admin", "label": "PATCH /api/v1/sms/templates/{uuid}/reject (Admin)", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L363"}, {"id": "task_17_sms_task_get_api_v1_sms_templates", "label": "GET /api/v1/sms/templates", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L387"}, {"id": "task_17_sms_task_\u0645\u0646\u0637\u0642_\u0627\u0646\u062a\u062e\u0627\u0628_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0647\u0646\u06af\u0627\u0645_\u0627\u0631\u0633\u0627\u0644_\u067e\u06cc\u0627\u0645\u06a9", "label": "\u0645\u0646\u0637\u0642 \u0627\u0646\u062a\u062e\u0627\u0628 \u062a\u0645\u067e\u0644\u06cc\u062a \u0647\u0646\u06af\u0627\u0645 \u0627\u0631\u0633\u0627\u0644 \u067e\u06cc\u0627\u0645\u06a9", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L418"}, {"id": "task_17_sms_task_\u062c\u062f\u0648\u0644_sms_templates", "label": "\u062c\u062f\u0648\u0644 sms_templates", "file_type": "document", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L447"}], "edges": [{"source": "users_hamed_pj_my_pj_clinic_pro_clinicpro_docs_tasks_task_17_sms_task_md", "target": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L1", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u062a\u0648\u0636\u06cc\u062d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L3", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_endpoint_\u0647\u0627", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L11", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u067e\u06cc\u0634_\u0646\u06cc\u0627\u0632\u0647\u0627", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L27", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u0632\u0645\u0627\u0646_\u062a\u062e\u0645\u06cc\u0646\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L30", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_get_api_v1_sms_balance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L35", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_post_api_v1_sms_queue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L50", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_sms_providers_strategy_pattern", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L83", "weight": 1.0}, {"source": "task_17_sms_task_sms_providers_strategy_pattern", "target": "task_17_sms_task_fallback_logic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L96", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_symfony_messenger_\u067e\u06cc\u0627\u062f\u0647_\u0633\u0627\u0632\u06cc_async", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L116", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u0642\u0627\u0646\u0648\u0646_\u06a9\u0633\u0631_\u0645\u0648\u062c\u0648\u062f\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L168", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u0633\u0627\u062e\u062a\u0627\u0631_\u062c\u062f\u0648\u0644_sms_logs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L182", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u0646\u06a9\u0627\u062a_\u0645\u0647\u0645", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L200", "weight": 1.0}, {"source": "task_17_sms_task_\u062a\u0633\u06a9_\u06f1\u06f7_\u0645\u0627\u0698\u0648\u0644_\u067e\u06cc\u0627\u0645\u06a9_sms", "target": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L208", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_\u062c\u0631\u06cc\u0627\u0646_\u06a9\u0644\u06cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L210", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_\u062f\u0633\u062a\u0647_\u0628\u0646\u062f\u06cc_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0647\u0627_category", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L236", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_\u0633\u0627\u062e\u062a\u0627\u0631_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0648_\u0645\u062a\u063a\u06cc\u0631\u0647\u0627", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L246", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_get_api_v1_sms_sample_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L263", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_post_api_v1_sms_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L282", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_patch_api_v1_sms_templates_uuid_submit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L322", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_patch_api_v1_sms_templates_uuid_approve_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L345", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_patch_api_v1_sms_templates_uuid_reject_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L363", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_get_api_v1_sms_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L387", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_\u0645\u0646\u0637\u0642_\u0627\u0646\u062a\u062e\u0627\u0628_\u062a\u0645\u067e\u0644\u06cc\u062a_\u0647\u0646\u06af\u0627\u0645_\u0627\u0631\u0633\u0627\u0644_\u067e\u06cc\u0627\u0645\u06a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L418", "weight": 1.0}, {"source": "task_17_sms_task_\u0633\u06cc\u0633\u062a\u0645_\u062a\u0645\u067e\u0644\u06cc\u062a_\u067e\u06cc\u0627\u0645\u06a9_\u0633\u0641\u0627\u0631\u0634\u06cc", "target": "task_17_sms_task_\u062c\u062f\u0648\u0644_sms_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "docs/tasks/task-17-sms/task.md", "source_location": "L447", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}