Files
clinicpro/docs/ClinicPro_Manual_v2.md
T
hamed de1a78a235 feat: Implement SMS sending functionality with KavehNegar and Rangineh providers
- Add SendSmsMessage class for encapsulating SMS message data.
- Create KavehNegarProvider and RanginehProvider classes implementing SmsProviderInterface for sending SMS.
- Implement SmsLogRepository and SmsTemplateRepository for managing SMS logs and templates.
- Develop SendSmsHandler for handling SMS sending messages.
- Create SmsService to manage SMS dispatching and logging.
- Add UserProfileController for managing user profiles with CRUD operations.
- Implement UserProfile entity and repository for user profile data management.
- Update symfony.lock and bootstrap.php for project dependencies and environment setup.
2026-06-09 22:00:34 +03:30

223 KiB
Raw Blame History

title, version, status
title version status
کلینیک پرو — مستند جامع فنی و API 2.0.0 پیش‌نویس

کلینیک پرو — مستند جامع فنی و API

نسخه: 2.0.0  |  وضعیت: پیش‌نویس — در حال بررسی  |  سال: ۱۴۰۴

Base URL: https://back-dev.clinic-pro.ir

احراز هویت: Authorization: Bearer {access_token}  |  Content-Type: application/json

علامت 🆕 = این endpoint دارای Response Body واقعی از سرور است.


فهرست کلی

بخش اول — مستند محصول (PRD)

  1. معرفی محصول
  2. مدل داده و موجودیت‌ها
  3. مشخصات API (Task-based)
  4. سیستم حساب و صف پیامک
  5. فهرست مشکلات
  6. پیوست

بخش دوم — مستند کامل API (۹۹ Endpoint)


بخش اول — مستند محصول (PRD)

۱. معرفی محصول

کلینیک پرو یک سیستم جامع مدیریت کلینیک است که برای خدمت‌رسانی به دکترهای مستقل، کلینیک‌های چند پزشکی، نمایندگان شهری، منشی‌ها و بیماران طراحی شده است. این سیستم ثبت‌نام کاربران، احراز هویت، نوبت‌دهی آنلاین، مدیریت اشتراک، ارسال پیامک و جریان‌های مالی شامل پیگیری کمیسیون را پوشش می‌دهد.

۱.۱ نقش‌های سیستم

نقش توضیحات
Administrator ادمین ارشد — مدیریت تنظیمات پلتفرم، تعطیلات، پلن‌ها و نرخ کمیسیون
admin ادمین داخلی با دسترسی بالا
clinic صاحب کلینیک — مدیریت پروفایل کلینیک، دکترها و نوبت‌ها
doctor پزشک مستقل یا وابسته به کلینیک
doctor_s_secretary منشی اختصاصی دکتر (دسترسی‌ها از طریق JSON مدیریت می‌شود)
patient کاربر نهایی که نوبت رزرو می‌کند
representation نماینده شهری که روی دامنه خود فعالیت می‌کند

۱.۲ فلوهای عملیاتی اصلی

ثبت‌نام دکتر — مستقل

  • دکتر با شماره موبایل در سیستم ثبت‌نام می‌کند

  • سیستم حساب کاربری با نقش doctor ایجاد می‌کند

  • دکتر پروفایل را تکمیل و پلن را سابسکرایب می‌کند

ثبت‌نام دکتر — از طریق کلینیک

  • صاحب کلینیک دکتر را با شماره موبایل اضافه می‌کند

  • پیامک با لینک تأیید/رد برای دکتر ارسال می‌شود

  • در صورت رد: هیچ اقدامی انجام نمی‌شود

  • در صورت تأیید: پیامک با لینک دانلود نرم‌افزار ارسال می‌شود

ثبت‌نام دکتر — از طریق نماینده

  • نماینده شماره موبایل دکتر و اطلاعات مربوطه را وارد می‌کند

  • پیامک خوش‌آمدگویی با لینک دانلود نرم‌افزار برای دکتر ارسال می‌شود

  • در صورت سابسکرایب پلن توسط دکتر: کمیسیون به کیف پول نماینده واریز می‌شود

۱.۳ پلن‌های اشتراک

ویژگی پلن بیسیک (رایگان) پلن پیشرفته
تعداد منشی فعال ۱ منشی ۳ منشی
نوبت‌دهی آنلاین ✓ (با کمیسیون سایت) ✓ (با کمیسیون سایت)
نوبت‌دهی آفلاین
پشتیبان‌گیری (Backup)
نوبت توسط منشی بدون کمیسیون سایت بدون کمیسیون سایت

نکته: تعریف پلن‌ها (ویژگی‌ها، قیمت) باید از پنل ادمین قابل تنظیم باشد. مبلغ کمیسیون به ازای هر نوبت آنلاین نیز باید قابل تنظیم باشد (مثلاً ۱۰،۰۰۰ تومان به ازای هر نوبت).

۱.۴ سیستم پیامک

هر دکتر یا کلینیک باید یک حساب پیامک مستقل داشته باشد.

  • دکتر یا کلینیک حساب پیامک خود را با تعداد مشخصی پیامک شارژ می‌کند (مثلاً ۱۰۰۰ پیامک)

  • نرم‌افزار لوکال (Tauri) یک جاب اجرا می‌کند که یک روز قبل از نوبت برای بیماران پیامک یادآوری ارسال می‌کند

  • این پیامک‌ها در صف ارسال قرار می‌گیرند

  • به ازای هر پیامک ارسال‌شده، موجودی از حساب دکتر یا کلینیک کسر می‌شود

۲. مدل داده و موجودیت‌ها

۲.۱ کاربر (User)

موجودیت مرکزی سیستم. تمام نقش‌ها از این ساختار استفاده می‌کنند.

⚠ مشکل شناسایی‌شده: جدول کاربران به درستی ایجاد نشده است. باید بر اساس فیلدهای زیر بازسازی شود.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی — افزایشی خودکار بله
uuid UUID شناسه یکتای جهانی بله
uid Integer (FK→User) شناسه کاربر — ارجاع به خود جدول بله
mobile_number String (unique) شماره موبایل — به عنوان نام کاربری استفاده می‌شود بله
password String (hashed) رمز عبور — هش‌شده با Bcrypt بله
realname String نام و نام خانوادگی کامل بله
picture String (URL) آدرس تصویر پروفایل اختیاری
roles Array نقش‌های اختصاص‌یافته: administrator, admin, clinic, doctor, doctor_s_secretary, patient, representation بله
status Boolean وضعیت حساب: فعال / غیرفعال بله
created Timestamp زمان ایجاد رکورد بله
changed Timestamp آخرین زمان ویرایش بله

⚠ مشکل شناسایی‌شده: جدول نقش‌ها (Roles) به درستی ایجاد نشده است. نقش‌ها باید به صورت Enum تعریف و به کاربر متصل شوند.

۲.۲ انواع دسته‌بندی (Category Types)

⚠ مشکل شناسایی‌شده (Task-08): شهرها و استان‌ها به درستی ست نشده‌اند. تمام دسته‌بندی‌ها باید کاملاً تعریف شوند.

۲.۲.۱ تگ (Tag)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام تگ بله
status Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۲.۲ استان (State)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام استان بله
status Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۲.۳ شهر (City)

⚠ اصلاح شده: فیلد parent (ارجاع به استان) و سایر فیلدها باید کاملاً پیکربندی شوند.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام شهر بله
parent Integer (FK→state.id) ارجاع به استان مربوطه — الزامی بله
status Boolean فعال/غیرفعال بله
domain String دامنه نماینده این شهر اختیاری
representation Integer (FK→rep.id) نماینده مرتبط با شهر اختیاری
contactphone String شماره تماس اختیاری
email String ایمیل تماس اختیاری
description Text توضیحات شهر اختیاری
title String عنوان صفحه شهر اختیاری
keywords String کلمات کلیدی SEO اختیاری
footerDescription Text متن فوتر سایت نماینده اختیاری
footerDisclaimer Text سلب مسئولیت فوتر اختیاری
socialMedia JSON لینک‌های شبکه‌های اجتماعی اختیاری
weight Integer وزن مرتب‌سازی اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۲.۴ بیمه پایه (Basic Insurance)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام بیمه بله
logo String (URL) لوگوی بیمه اختیاری
status Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۲.۵ بیمه مکمل (Supplementary Insurance)

ساختار یکسان با بیمه پایه.

۲.۲.۶ تخصص دکتر (Doctor Specialty)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام تخصص بله
parent Integer (FK→specialty.id) تخصص والد (برای ساختار درختی) اختیاری
status Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۲.۷ خدمات دکتر (Doctor Services)

⚠ اصلاح شده (Task-05): در تمام پاسخ‌های API باید هم id و هم label (نام) ارسال شود.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی — الزامی در تمام پاسخ‌های API بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
label String نام خدمت — الزامی در تمام پاسخ‌های API بله
status Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۳ دکتر (Doctor)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) حساب کاربری متصل بله
label / name String نام نمایشی دکتر بله
gender Enum جنسیت: male / female بله
degree Enum expert │ general │ specialist │ subspecialistplus بله
doctor_id String شماره نظام پزشکی بله
doctor_mobile_number String شماره موبایل دکتر بله
clinic_specialty Integer (FK→specialty) تخصص اصلی دکتر بله
doctor_services Array<FK→services.id> خدمات ارائه‌شده (id + label باید در پاسخ‌ها برگردد) بله
state Integer (FK→state.id) استان محل فعالیت بله
city Integer (FK→city.id) شهر محل فعالیت بله
representation Integer (FK→rep.id) نماینده متصل (در صورت وجود) اختیاری
active_doctor_appointment Boolean آیا نوبت‌دهی آنلاین فعال است؟ بله
doctor_rate Decimal میانگین امتیاز بله
doctor_rate_percentage Float درصد امتیاز بله
info Text / JSON بیوگرافی و اطلاعات تکمیلی اختیاری
activity_time JSON ساعات کاری اختیاری
images Array آدرس تصاویر پروفایل اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۴ کلینیک (Clinic)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر صاحب کلینیک بله
label / name String نام کلینیک بله
address Text آدرس کامل بله
latitude Decimal عرض جغرافیایی بله
longitude Decimal طول جغرافیایی بله
telephone String شماره تماس بله
state Integer (FK→state.id) استان بله
city Integer (FK→city.id) شهر بله
clinic_specialty Array تخصص‌های کلینیک بله
doctor_services Array<FK→services.id> خدمات (id + label الزامی در پاسخ‌ها) بله
insurance Array<FK→insurance.id> بیمه‌های پذیرفته‌شده بله
doctors Array<FK→doctor.id> دکترهای عضو کلینیک بله
working_days JSON روزهای کاری هفته بله
24_7 Boolean آیا شبانه‌روزی فعال است؟ بله
logo String (URL) لوگوی کلینیک بله
images Array تصاویر گالری اختیاری
representation Integer (FK→rep.id) نماینده متصل اختیاری
info Text درباره کلینیک اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۵ آدرس‌های دکتر (Doctor Addresses)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
name String برچسب آدرس (مثلاً: مطب اصلی، شعبه) بله
doctor Integer (FK→doctor) دکتر مرتبط بله
address Text آدرس کامل بله
latitude Decimal عرض جغرافیایی بله
longitude Decimal طول جغرافیایی بله
telephone String شماره تماس محل بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۶ منشی دکتر (Doctor Secretary)

محدودیت منشی فعال باید هنگام ایجاد یا فعال‌سازی در سمت سرور بررسی شود.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
secretary Integer (FK→user) حساب کاربری منشی بله
doctor Integer (FK→doctor) دکتر مرتبط بله
active Boolean فعال/غیرفعال — پلن بیسیک: حداکثر ۱ منشی فعال؛ پلن پیشرفته: حداکثر ۳ منشی فعال بله
permission JSON نقشه دسترسی‌های دقیق منشی بله
telephone String شماره تماس منشی اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۷ نماینده (Representation)

⚠ اصلاح شده (Task-07): فیلدهای استان، شهر و شماره کارت بانکی باید به درستی تعریف شوند.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) حساب کاربری نماینده بله
label String نام نماینده بله
active Boolean فعال/غیرفعال بله
state Integer (FK→state.id) استان — الزامی (قبلاً وجود نداشت) بله
city Integer (FK→city.id) شهر — الزامی (قبلاً وجود نداشت) بله
address Text آدرس دفتر نماینده بله
domain String زیردامنه پورتال نماینده بله
bank_account JSON Array آرایه‌ای از اطلاعات کارت‌های بانکی. هر آیتم: { card_number, bank_name, is_default }. یکی باید is_default=true داشته باشد — الزامی (قبلاً وجود نداشت) بله
commission_percent Decimal درصد کمیسیون از هر نوبت آنلاین بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

نمونه ساختار JSON کارت‌های بانکی:

[ { "card_number": "6037-9999-1234-5678", "bank_name": "ملت", "is_default": true }, { "card_number": "5859-3312-4455-6677", "bank_name": "صادرات", "is_default": false } ]

۲.۸ تنظیمات نوبت (Appointment Settings)

⚠ اصلاح شده (Task-09): الگوریتم محاسبه اسلات‌ها باید اولویت Override را رعایت کند.

۲.۸.۱ برنامه هفتگی (Weekly Schedule)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سازنده بله
doctor_id Integer (FK→doctor) دکتر مرتبط بله
active Boolean فعال/غیرفعال بله
date Timestamp تاریخ مرجع برنامه بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۸.۲ تعطیلات (Holidays)

تعطیلات فقط توسط ادمین ثبت می‌شود.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) ادمین ثبت‌کننده تعطیلی بله
label String نام / توضیح تعطیلی بله
date Timestamp تاریخ تعطیل بله
active Boolean فعال/غیرفعال بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۸.۳ لغو تعطیل (Date Override)

دکتر می‌تواند یک روز تعطیل را override کند و در آن روز کار کند. Override اولویت بالاتری از تعطیلات دارد.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر دکتر بله
doctor_id Integer (FK→doctor) دکتری که Override ثبت کرده بله
date Timestamp تاریخ مورد نظر برای Override بله
setting JSON برنامه سفارشی برای آن روز (اسلات‌ها، ظرفیت و ...) بله
active Boolean آیا این Override فعال است؟ بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۸.۴ الگوریتم محاسبه اسلات‌های خالی

اولویت‌بندی هنگام محاسبه اسلات‌های موجود برای یک تاریخ مشخص:

اولویت منبع رفتار سیستم نتیجه
۱ (بالاترین) Date Override اگر Override فعال برای این تاریخ وجود داشت → از برنامه Override استفاده شود. تعطیلی نادیده گرفته می‌شود. باز
۲ Holidays اگر تاریخ تعطیل باشد AND Override وجود نداشته باشد → روز تعطیل، بدون اسلات. بسته
۳ (پایین‌ترین) Weekly Schedule اگر نه Override و نه تعطیلی → برنامه هفتگی اعمال می‌شود. طبق برنامه

۲.۹ نوبت (Appointment)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر بیمار بله
doctor_id Integer (FK→doctor) دکتر مربوطه بله
address Text آدرس محل نوبت بله
start_time Timestamp زمان شروع نوبت بله
end_time Timestamp زمان پایان نوبت بله
slot JSON متادیتای اسلات (شماره اسلات، مدت و ...) بله
status Enum وضعیت نوبت — جدول زیر بله
visited_at Timestamp زمان واقعی ویزیت اختیاری
representation Integer (FK→rep) در صورت رزرو از طریق دامنه نماینده اختیاری
info JSON توضیحات تکمیلی اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

وضعیت‌های نوبت (Appointment Status):

waiting_for_payment auto_cancel_unpaid reserved
cancelled_by_patient cancelled_by_doctor checked_in
waiting in_progress visited
no_show postponed completed

۲.۱۰ پرداخت (Payment Types)

۲.۱۰.۱ پرداخت نوبت

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) پرداخت‌کننده بله
reference_id Integer (FK→appt) نوبت مرتبط بله
amount Decimal مبلغ پرداختی (تومان) بله
payment_method String روش / درگاه پرداخت بله
payment_time Timestamp زمان پرداخت بله
ref_id String شماره مرجع درگاه بله
card_info JSON اطلاعات ماسک‌شده کارت بله
representation Integer (FK→rep) نماینده (در صورت پرداخت از طریق دامنه نماینده) اختیاری
frontend_address String (URL) آدرس بازگشت پس از پرداخت بله
status Enum pending │ received │ refund │ canceled بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۰.۲ پرداخت اشتراک

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر سابسکرایب‌کننده بله
reference_id Integer (FK→clinic│doc) کلینیک یا دکتر مربوطه بله
amount Decimal مبلغ اشتراک بله
payment_method String روش پرداخت بله
payment_time Timestamp زمان پرداخت بله
start_date Timestamp تاریخ شروع اشتراک بله
expiration_date Timestamp تاریخ انقضای اشتراک بله
ref_id String شماره مرجع درگاه بله
card_info JSON اطلاعات ماسک‌شده کارت بله
representation Integer (FK→rep) نماینده (در صورت وجود) اختیاری
frontend_address String (URL) آدرس بازگشت بله
status Enum pending │ received │ refund │ canceled بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۱ پروفایل بیمار (Profile)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) کاربر مرتبط بله
national_code String (10 رقم) کد ملی بله
national_code_approved Boolean تأیید کد ملی بله
date_of_birth Timestamp تاریخ تولد بله
gender Enum male │ female │ other بله
blood_type Enum A+ │ A- │ B+ │ B- │ O+ │ O- │ AB+ │ AB- بله
education Enum diploma │ postgraduate_diploma │ bachelor_s_degree │ master_s_degree │ doctorate بله
fathers_name String نام پدر اختیاری
family String وضعیت تأهل اختیاری
job String شغل اختیاری
address Text آدرس محل سکونت اختیاری
home_phone String تلفن منزل اختیاری
work_phone String تلفن محل کار اختیاری
basic_insurance Integer (FK→ins) بیمه پایه اختیاری
supplementary_insurance Integer (FK→ins) بیمه مکمل اختیاری
insurance_id String شماره عضویت بیمه اختیاری
other JSON متادیتای قابل توسعه اختیاری
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۲ وبلاگ (Blog)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uuid UUID شناسه یکتا بله
uid Integer (FK→User) نویسنده بله
label String عنوان پست بله
status Boolean منتشرشده / پیش‌نویس بله
top Boolean پست برجسته / پین‌شده بله
images Array (حداکثر ۵) حداکثر ۵ تصویر بله
tag Array (حداکثر ۵) حداکثر ۵ تگ دسته‌بندی بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۳ نظرات، لایک و امتیازدهی

۲.۱۳.۱ نظر (Comment)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uid Integer (FK→User) کاربر نظردهنده بله
doctor_id Integer (FK→doctor) دکتر مورد نظر بله
comment Text متن نظر بله
parent Integer (FK→comment) نظر والد (برای پاسخ‌های تودرتو) اختیاری
Approved Boolean وضعیت تأیید از سوی مدیر بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۳.۲ لایک (Like)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uid Integer (FK→User) کاربر بله
comment_id Integer (FK→comment) نظر هدف بله
like Boolean true = لایک، false = دیس‌لایک بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۲.۱۳.۳ امتیاز (Rate)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uid Integer (FK→User) کاربر امتیازدهنده بله
doctor_id Integer (FK→doctor) دکتر امتیازگیرنده بله
starts Decimal امتیاز ستاره‌ای کلی (مثلاً ۴.۵) بله
percent Float درصد امتیاز کلی بله
doctor_behavior Integer (۱-۵) امتیاز برخورد دکتر بله
accuracy_of_diagnosis Integer (۱-۵) امتیاز دقت تشخیص بله
waiting_time_at_clinic Integer (۱-۵) امتیاز زمان انتظار بله
doctor_expertise Integer (۱-۵) امتیاز تخصص دکتر بله
clinic_cleanliness Integer (۱-۵) امتیاز نظافت کلینیک بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۳. مشخصات API

تمام APIها باید بر اساس clini_pro.json مستند شوند و ورودی، خروجی و کدهای خطا به صورت کامل مشخص باشند.

Task-02: احراز هویت (Authentication)

⚠ اصلاح شده: فقط کاربران با نقش doctor، clinic یا doctor_s_secretary می‌توانند با نام کاربری/رمز عبور لاگین کنند. مسیر /oauth/userinfo باید دقیقاً شبیه به بک‌اند دروپال طراحی شود.

POST /oauth/token — ورود به سیستم

Endpoint POST /oauth/token
Method POST
ورودی Content-Type: application/x-www-form-urlencoded grant_type: password username: <mobile_number> password: client_id: <client_id> client_secret: <client_secret>
خروجی HTTP 200 { access_token: string, token_type: "Bearer", expires_in: number, refresh_token: string, scope: string }
خطاها 400 invalid_request — پارامتر اجباری ارسال نشده 401 invalid_client — اعتبارنامه نادرست 401 invalid_grant — نام کاربری یا رمز اشتباه 403 unauthorized_client — نقش کاربر مجاز نیست (فقط: doctor, clinic, doctor_s_secretary) 500 server_error

GET /oauth/userinfo — اطلاعات کاربر (سازگار با دروپال)

Endpoint GET /oauth/userinfo
Method GET
ورودی Header: Authorization: Bearer <access_token>
خروجی HTTP 200 { sub: string (uid), name: string (realname), preferred_username: string (mobile_number), email: string │ null, picture: string │ null, roles: string[], status: boolean, uid: number, uuid: string } نکته: ساختار پاسخ باید دقیقاً با /oauth/userinfo دروپال یکسان باشد.
خطاها 401 Unauthorized — توکن موجود نیست یا نامعتبر است 403 Forbidden — توکن معتبر اما حساب غیرفعال است 500 server_error

POST /oauth/token — تجدید توکن (Refresh)

Endpoint POST /oauth/token (refresh)
Method POST
ورودی grant_type: refresh_token refresh_token: <refresh_token> client_id: <client_id> client_secret: <client_secret>
خروجی HTTP 200 { access_token: string, token_type: "Bearer", expires_in: number, refresh_token: string }
خطاها 400 invalid_request 401 invalid_grant — refresh token منقضی یا نامعتبر 500 server_error

Task-05: API دکتر

⚠ اصلاح شده: آرایه‌های services و insurances باید در تمام پاسخ‌ها شامل id و label (نام) باشند.

GET /api/v1/doctors/{id}

Endpoint GET /api/v1/doctors/{id}
Method GET
ورودی Path: id (integer) — شناسه دکتر Header: Authorization: Bearer (اختیاری برای داده عمومی)
خروجی HTTP 200 { id, uuid, name, gender, degree, clinic_specialty: { id, label }, doctor_services: [{ id, label }, ...], ← الزامی state: { id, label }, city: { id, label }, representation: { id, label } │ null, active_doctor_appointment: boolean, doctor_rate, doctor_rate_percentage, images: [], info, activity_time }
خطاها 404 Not Found — دکتر یافت نشد 403 Forbidden — دسترسی کافی نیست 500 server_error

GET /api/v1/doctors/{id}/insurances

Endpoint GET /api/v1/doctors/{id}/insurances
Method GET
ورودی Path: id (integer) — شناسه دکتر
خروجی HTTP 200 { basic_insurance: [{ id, label, logo }, ...], supplementary_insurance: [{ id, label, logo }, ...] } نکته: هر آیتم باید id و label داشته باشد.
خطاها 404 Not Found 500 server_error

Task-07: API نماینده (Agent)

⚠ اصلاح شده: استان، شهر و شماره کارت بانکی باید در پاسخ‌ها وجود داشته باشند.

GET /api/v1/representations/{id}

Endpoint GET /api/v1/representations/{id}
Method GET
ورودی Path: id (integer) Header: Authorization: Bearer
خروجی HTTP 200 { id, uuid, label, active, state: { id, label }, ← الزامی city: { id, label }, ← الزامی domain, address, bank_account: [ { card_number, bank_name, is_default: true }, { card_number, bank_name, is_default: false } ], ← الزامی (آرایه با یک دیفالت) commission_percent }
خطاها 404 Not Found 403 Forbidden 500 server_error

POST /api/v1/representations/{id}/bank-accounts

Endpoint POST /api/v1/representations/{id}/bank-accounts
Method POST
ورودی Header: Authorization: Bearer Body (JSON): { card_number: string (16 رقم), bank_name: string, is_default: boolean } نکته: اگر is_default=true باشد، دیفالت سایر کارت‌ها لغو می‌شود.
خروجی HTTP 201 Created { success: true, bank_account: { card_number, bank_name, is_default } }
خطاها 400 Bad Request — فرمت شماره کارت نامعتبر 409 Conflict — کارت قبلاً ثبت شده 403 Forbidden 500 server_error

Task-08: API دسته‌بندی‌ها

⚠ اصلاح شده: استان‌ها و شهرها درست تنظیم نشده‌اند. تمام endpoint های دسته‌بندی باید داده کامل برگردانند.

GET /api/v1/categories/states — استان‌ها

Endpoint GET /api/v1/categories/states
Method GET
ورودی Query: ?status=1 (اختیاری) Header: Authorization: Bearer
خروجی HTTP 200 { data: [ { id, uuid, label, status }, ... ], total: number }
خطاها 401 Unauthorized 500 server_error

GET /api/v1/categories/cities — شهرها

Endpoint GET /api/v1/categories/cities
Method GET
ورودی Query: ?state_id=&status=1 (اختیاری) Header: Authorization: Bearer
خروجی HTTP 200 { data: [ { id, uuid, label, status, parent: { id, label }, ← ارجاع به استان domain, representation }, ... ], total: number }
خطاها 400 Bad Request — state_id نامعتبر 401 Unauthorized 500 server_error

سایر Endpoint های دسته‌بندی — الزامی

Endpoint فیلدهای بازگشتی
GET /api/v1/categories/tags id, uuid, label, status
GET /api/v1/categories/basic-insurances id, uuid, label, logo, status
GET /api/v1/categories/supplementary-insurances id, uuid, label, logo, status
GET /api/v1/categories/specialties id, uuid, label, parent, status
GET /api/v1/categories/doctor-services id, uuid, label, status

Task-09: API تنظیمات نوبت

GET /api/v1/appointment-settings/slots — دریافت اسلات‌های خالی

Endpoint GET /api/v1/appointment-settings/slots
Method GET
ورودی Query: doctor_id: integer (الزامی) date: string YYYY-MM-DD (الزامی) Header: Authorization: Bearer
خروجی HTTP 200 { date: string, doctor_id: integer, is_holiday: boolean, is_overridden: boolean, schedule_source: 'override' │ 'holiday_closed' │ 'weekly_schedule', available_slots: [ { slot_index, start_time, end_time, is_available }, ... ] } الگوریتم: Override > تعطیلی > برنامه هفتگی
خطاها 400 Bad Request — پارامتر اجباری ارسال نشده 404 Not Found — دکتر یافت نشد 500 server_error

POST /api/v1/appointment-settings/overrides — ثبت Override توسط دکتر

Endpoint POST /api/v1/appointment-settings/overrides
Method POST
ورودی Header: Authorization: Bearer <doctor_token> Body (JSON): { doctor_id: integer, date: string YYYY-MM-DD, setting: { slots: [{ start_time, end_time, capacity }] }, active: boolean }
خروجی HTTP 201 Created { id, uuid, doctor_id, date, setting, active, created }
خطاها 400 Bad Request — تاریخ یا تنظیم نامعتبر 403 Forbidden — دکتر مجاز به تغییر Override دیگری نیست 409 Conflict — Override برای این تاریخ قبلاً وجود دارد 500 server_error

POST /api/v1/appointment-settings/holidays — ثبت تعطیلی (فقط ادمین)

Endpoint POST /api/v1/appointment-settings/holidays
Method POST
ورودی Header: Authorization: Bearer <admin_token> Body (JSON): { label: string, date: string YYYY-MM-DD, active: boolean }
خروجی HTTP 201 Created { id, uuid, label, date, active, created }
خطاها 400 Bad Request — تاریخ نامعتبر 403 Forbidden — درخواست‌دهنده ادمین نیست 409 Conflict — تعطیلی برای این تاریخ قبلاً ثبت شده 500 server_error

۴. سیستم حساب و صف پیامک

۴.۱ حساب پیامک (SMS Account)

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
uid Integer (FK→User) کاربر مالک (دکتر یا کلینیک) بله
owner_type Enum doctor │ clinic بله
owner_id Integer FK به doctor.id یا clinic.id بله
balance Integer تعداد پیامک باقی‌مانده بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۴.۲ صف پیامک (SMS Queue)

نرم‌افزار لوکال (Tauri) جاب‌های ارسال پیامک ایجاد می‌کند. بک‌اند آن‌ها را در صف قرار می‌دهد و با هر ارسال، از موجودی کسر می‌کند.

نام فیلد نوع داده توضیحات الزامی
id Integer (PK) کلید اصلی بله
owner_id Integer (FK→sms_acct) حساب پیامک مالک بله
recipient_mobile String شماره موبایل گیرنده بله
message Text متن پیامک بله
scheduled_at Timestamp زمان برنامه‌ریزی‌شده ارسال (مثلاً یک روز قبل از نوبت) بله
sent_at Timestamp زمان واقعی ارسال اختیاری
status Enum queued │ sent │ failed │ cancelled بله
created Timestamp زمان ایجاد بله
changed Timestamp آخرین ویرایش بله

۴.۳ API پیامک

POST /api/v1/sms/queue — افزودن به صف

Endpoint POST /api/v1/sms/queue
Method POST
ورودی Header: Authorization: Bearer Body (JSON): { recipient_mobile: string, message: string, scheduled_at: ISO8601 timestamp }
خروجی HTTP 201 Created { id, status: 'queued', scheduled_at, remaining_balance: integer }
خطاها 400 Bad Request — شماره موبایل یا پیام نامعتبر 402 Payment Required — موجودی پیامک کافی نیست 403 Forbidden 500 server_error

GET /api/v1/sms/balance — موجودی حساب پیامک

Endpoint GET /api/v1/sms/balance
Method GET
ورودی Header: Authorization: Bearer
خروجی HTTP 200 { owner_id: integer, owner_type: 'doctor' │ 'clinic', balance: integer }
خطاها 401 Unauthorized 404 Not Found — حساب پیامک وجود ندارد 500 server_error

۵. فهرست مشکلات شناسایی‌شده و اصلاحات لازم

تسک مشکل اصلاح مورد نیاز وضعیت
عمومی جدول کاربران درست ایجاد نشده بازسازی با تمام فیلدهای بخش ۲.۱ 🔴 باز
عمومی جدول نقش‌ها درست ایجاد نشده تعریف Enum نقش‌ها و اتصال به کاربر 🔴 باز
عمومی ورودی/خروجی/خطاهای API تعریف نشده تمام APIها باید I/O و کد خطا بر اساس clini_pro.json داشته باشند 🔴 باز
Task-02 لاگین فقط برای نقش‌های مجاز فقط doctor, clinic, doctor_s_secretary مجاز به لاگین هستند 🔴 باز
Task-02 oauth/userinfo با دروپال یکسان نیست ساختار پاسخ باید دقیقاً با بک‌اند دروپال یکسان باشد 🔴 باز
Task-05 services/insurances فاقد id+name هستند هر آیتم باید { id, label } داشته باشد 🔴 باز
Task-07 استان و شهر نماینده ندارد فیلد state و city به موجودیت representation اضافه شود 🔴 باز
Task-07 اطلاعات کارت بانکی وجود ندارد bank_account به صورت آرایه JSON با is_default اضافه شود 🔴 باز
Task-08 استان/شهر درست ست نشده FK والد در city و endpoint استان باید داده کامل برگرداند 🔴 باز
Task-08 سایر دسته‌بندی‌ها ناقص هستند همه دسته‌بندی‌ها باید فیلد کامل برگردانند 🔴 باز
Task-09 ثبت تعطیلی فقط توسط ادمین نیست endpoint تعطیلات باید نقش admin بررسی کند 🔴 باز
Task-09 Override دکتر پیاده‌سازی نشده موجودیت Date Override با دسترسی دکتر اضافه شود 🔴 باز
Task-09 اولویت الگوریتم اسلات اشتباه است اولویت: Override > تعطیلی > برنامه هفتگی 🔴 باز

۶. پیوست

۶.۱ دیاگرام وضعیت نوبت

  • ایجاد با پرداخت آنلاین ← waiting_for_payment ← reserved (پس از پرداخت)

  • عدم پرداخت ← auto_cancel_unpaid

  • لغو توسط بیمار ← cancelled_by_patient

  • لغو توسط دکتر ← cancelled_by_doctor

  • ورود بیمار ← checked_in ← waiting ← in_progress ← visited یا no_show

  • تکمیل ← completed

  • تعویق ← postponed

۶.۲ جریان کمیسیون

  • بیمار از طریق دامنه نماینده نوبت رزرو می‌کند

  • مبلغ کمیسیون (قابل تنظیم در ادمین) به کیف پول نماینده واریز می‌شود

  • نکته مهم: کمیسیون از حق نوبت‌گیری است، نه از مبلغ کل نوبت

  • در صورت سابسکرایب پلن توسط دکتر: کمیسیون به کیف پول نماینده مربوطه واریز می‌شود

۶.۳ بررسی محدودیت منشی

  • هنگام فعال‌سازی منشی: تعداد منشی‌های فعال آن دکتر بررسی شود

  • پلن بیسیک: اگر ۱ منشی فعال وجود دارد، ثبت جدید رد شود

  • پلن پیشرفته: اگر ۳ منشی فعال وجود دارد، ثبت جدید رد شود

  • این بررسی باید کاملاً در سمت سرور انجام شود

۶.۴ محدوده سیستم (Scope)

کلینیک پرو صرفاً موارد زیر را هندل می‌کند:

  • ثبت‌نام و احراز هویت کاربران

  • نوبت‌دهی آنلاین

  • مدیریت نماینده و کمیسیون

  • مدیریت اشتراک

مدیریت جزئیات کلینیک، پرونده بیماران و سایر عملکردهای پیشرفته توسط نرم‌افزار لوکال Tauri هندل می‌شود و در اسکوپ این PRD نیست.


بخش دوم — مستند کامل API


فهرست مطالب

  1. احراز هویت (Authentication)
  2. کاربر (User)
  3. پروفایل بیمار (User Profile)
  4. دکتر (Doctor)
  5. آدرس دکتر (Doctor Address)
  6. کلینیک (Clinic)
  7. نماینده (Agent / Representation)
  8. دسته‌بندی‌ها (Categories)
  9. بیمه دکتر (Doctor Insurance)
  10. تنظیمات نوبت — برنامه هفتگی
  11. تنظیمات نوبت — Date Override
  12. تنظیمات نوبت — تعطیلات
  13. نوبت‌دهی (Appointment)
  14. منشی (Secretary)
  15. پرداخت (Payment)
  16. وبلاگ (Blog)

خطاهای عمومی

کد HTTP عنوان توضیح
400 Bad Request پارامتر اجباری نیست یا فرمت نادرست
401 Unauthorized توکن Bearer نامعتبر یا منقضی شده
403 Forbidden دسترسی مجاز نیست
404 Not Found منبع یافت نشد
422 Unprocessable Entity اعتبارسنجی داده شکست خورد
500 Internal Server Error خطای داخلی سرور

1. احراز هویت (Authentication)

1. 🔵 POST refresh token

POST /oauth/token

🔓 احراز هویت: الزامی نیست

Request Body

فیلد نوع الزامی توضیح / مثال
grant_type string refresh_token
client_id string
client_secret string
refresh_token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


2. 🟢 GET X-CSRF-Token

GET /session/token

🔓 احراز هویت: الزامی نیست

این API برای دریافت توکن CSRF از سرور استفاده می‌شود. این توکن برای ارسال درخواست‌های امن POST، PUT، DELETE و PATCH در سیستم نیاز است.

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


3. 🟢 GET user info 🆕

GET /oauth/userinfo

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API اطلاعات کاربر احراز هویت‌شده را با استفاده از توکن JWT برمی‌گرداند. برای استفاده از این endpoint باید کاربر از قبل احراز هویت شده و یک access token معتبر در اختیار داشته باشد.

پاسخ‌ها

200

فیلد نوع مثال / توضیح
email null null
email_verified boolean true
username string 09120671710
id string 22
uuid string d200f5c5-d717-4526-b263-d3bb7d0228d6
created string 1762262151
changed string 1762262267
status string 1
roles object {0, 2}
realName string single doctor
picture array (0) []
clinic_pro object {base_role, db_uuid, db_key...}
مثال کامل Response (کلیک کنید)
{
  "email": null,
  "email_verified": true,
  "username": "09120671710",
  "id": "22",
  "uuid": "d200f5c5-d717-4526-b263-d3bb7d0228d6",
  "created": "1762262151",
  "changed": "1762262267",
  "status": "1",
  "roles": {
    "0": "authenticated",
    "2": "doctor"
  },
  "realName": "single doctor",
  "picture": [],
  "clinic_pro": {
    "base_role": "doctor",
    "db_uuid": "61be915b-595a-42e5-bca5-f80d22f4f14a",
    "db_key": "22bea8c1dc64d9b0c744810722519efe7290276ecd82d9bc650482aa4539bf0d",
    "my_doctors_uuid": {
      "uuid": "61be915b-595a-42e5-bca5-f80d22f4f14a",
      "id": "29",
      "name": "single doctor"
    }
  }
}

2. کاربر (User)

4. 🔵 POST verify code

POST /api/v1/user/verify-code

🔓 احراز هویت: الزامی نیست

Request Body

فیلد نوع الزامی توضیح / مثال
mobile string
captcha_token string

مثال Request

{
  "mobile": "09120671713",
  "captcha_token": ""
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


5. 🔵 POST send code

POST /api/v1/user/send-code

🔓 احراز هویت: الزامی نیست

ارسال کد تأیید موبایل Endpoint POST https://back-dev. توضیح این درخواست برای ارسال کد تأیید (OTP) به شماره موبایل کاربر استفاده می‌شود.

Request Body

فیلد نوع الزامی توضیح / مثال
mobile string
captcha_token string

مثال Request

{
  "mobile": "09120671713",
  "captcha_token": ""
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


6. 🔵 POST register

POST /api/v1/user/register

🔓 احراز هویت: الزامی نیست

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


7. 🔴 DELETE delete user

DELETE /api/v1/user/5

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


8. 🟡 PATCH patch

PATCH /api/v1/user/2

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
field_name string
field_family string
mail string

مثال Request

{
  "field_name": "سحر ",
  "field_family": "صادقی",
  "mail": "hamedhosseini0143@gmail.com"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


9. 🟢 GET list secretary

GET /api/v1/secretaries/be1fc63e-0207-4fe4-a58b-5ac30953b742

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
active string — مثال: active

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


3. پروفایل بیمار (User Profile)

10. 🔵 POST post

POST /api/v1/user-profile

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
name string
description array<object>
birthday string
basic_insurance array<integer>
blood_type string
education string
fathers_name string
gender string
home_phone string
job string
marital_status string
supplementary_insurance string
work_phone string
address string
other array<object>

مثال Request

{
  "name": "test",
  "description": [
    {
      "value": "this is text",
      "format": "basic_html"
    }
  ],
  "birthday": "1234566",
  "basic_insurance": [
    251
  ],
  "blood_type": "ab_negative",
  "education": "postgraduate_diploma",
  "fathers_name": "gholam",
  "gender": "male",
  "home_phone": "07433332178",
  "job": "azad",
  "marital_status": "married",
  "supplementary_insurance": "308",
  "work_phone": "07433332178",
  "address": "askajhsaklsj",
  "other": [
    {
      "disease": [
        {
          "id": 1,
          "name": "فشار خون",
          "status": "false"
        },
        {
          "id": 2,
          "name": "دیابت",
          "status": "false"
        },
        {
          "id": 3,
          "name": "آسم",
          "status": "false"
        },
        {
          "id": 4,
          "name": "بیماری قلبی عروقی",
          "status": "false"
        },
        {
          "id": 5,
          "name": "سرطان",
          "status": "false"
        },
        {
          "id": 6,
          "name": "آلزایمر",
          "status": "false"
        },
        {
          "id": 7,
          "name": "پارکینسون",
          "status": "false"
        },
        {
          "id": 8,
          "name": "بیماری کلیوی",
          "status": "false"
        },
        {
          "id": 9,
          "name": "بیماری کبدی",
          "status": "false"
        },
        {
          "id": 10,
          "name": "سکته مغزی",
          "status": "false"
        },
        {
          "id": 11,
          "name": "افسردگی",
          "status": "false"
        },
        {
          "id": 12,
          "name": "اضطراب مزمن",
          "status": "false"
        },
        {
          "id": 13,
          "name": "میگرن",
          "status": "false"
        },
        {
          "id": 14,
          "name": "کم‌کاری تیروئید",
          "status": "false"
        },
        {
          "id": 15,
          "name": "پرکاری تیروئید",
          "status": "false"
        },
        {
          "id": 16,
          "name": "سل",
          "status": "false"
        },
        {
          "id": 17,
          "name": "هپاتیت B",
          "status": "false"
        },
        {
          "id": 18,
          "name": "هپاتیت C",
          "status": "false"
        },
        {
          "id": 19,
          "name": "HIV / ایدز",
          "status": "false"
        },
        {
          "id": 20,
          "name": "COVID-19",
          "status": "false"
        },
        {
          "id": 21,
          "name": "لوپوس",
          "status": "false"
        },
        {
          "id": 22,
          "name": "ام‌اس (MS)",
          "status": "false"
        },
        {
          "id": 23,
          "name": "آرتریت روماتوئید",
          "status": "false"
        },
        {
          "id": 24,
          "name": "پسوریازیس",
          "status": "false"
        },
        {
          "id": 25,
          "name": "صرع",
          "status": "false"
        },
        {
          "id": 26,
          "name": "بیماری سلیاک",
          "status": "false"
        },
        {
          "id": 27,
          "name": "عدم تحمل لاکتوز",
          "status": "false"
        },
        {
          "id": 28,
          "name": "چربی خون بالا",
          "status": "false"
        },
        {
          "id": 29,
          "name": "کم‌خونی",
          "status": "false"
        },
        {
          "id": 30,
          "name": "هموفیلی",
          "status": "false"
        }
      ],
      "allergies": [
        {
          "substance": "پنی‌سیلین",
          "reaction": "کهیر",
          "severity": "شدید"
        },
        {
          "substance": "گرده گیاهان",
          "reaction": "عطسه و آبریزش بینی",
          "severity": "خفیف"
        }
      ],
      "medications": [
        {
          "name": "لورازپام",
          "dose": "1mg",
          "frequency": "شب‌ها قبل خواب"
        },
        {
          "name": "آتنولول",
          "dose": "50mg",
          "frequency": "صبح‌ها"
        }
      ],
      "surgeries": [
        {
          "type": "آپاندکتومی",
          "year": 2015,
          "hospital": "بیمارستان امام خمینی"
        },
        {
          "type": "عمل قلب باز",
          "year": 2022,
          "hospital": "بیمارستان شهید رجایی"
        }
      ],
      "family_history": [
        {
          "relation": "پدر",
          "disease": "فشار خون"
        },
        {
          "relation": "مادر",
          "disease": "دیابت نوع 2"
        },
        {
          "relation": "خواهر",
          "disease": "آسم"
        }
      ],
      "relatives": [
        {
          "name": "علی",
          "relation": "پسر عمو",
          "contact": {
            "phone": "+989121234567",
            "email": "father@example.com",
            "address": "تهران، خیابان انقلاب، پلاک 12"
          }
        },
        {
          "name": "سارا",
          "relation": "خواهر",
          "contact": {
            "phone": "+989121234567",
            "email": "father@example.com",
            "address": "تهران، خیابان انقلاب، پلاک 12"
          }
        }
      ]
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


11. 🟢 GET get

GET /api/v1/user-profile/4cb9d9d5-c5ec-4aae-a464-af56e4502aa8

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت اطلاعات پروفایل کاربر با استفاده از UUID کاربر استفاده می‌شود. دسترسی به این endpoint نیاز به احراز هویت با توکن JWT و CSRF Token دارد.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


12. 🟡 PATCH path only disease

PATCH /api/v1/user-profile/fa845b62-194d-4f82-9007-958645026ce5

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
name string
description array<object>
birthday string
basic_insurance array<integer>
blood_type string
education string
fathers_name string
gender string
home_phone string
job string
marital_status string
supplementary_insurance string
work_phone string
address string
other array<object>

مثال Request

{
  "name": "test",
  "description": [
    {
      "value": "this is text",
      "format": "basic_html"
    }
  ],
  "birthday": "1234566",
  "basic_insurance": [
    251
  ],
  "blood_type": "ab_negative",
  "education": "postgraduate_diploma",
  "fathers_name": "gholam",
  "gender": "male",
  "home_phone": "07433332178",
  "job": "azad",
  "marital_status": "married",
  "supplementary_insurance": "308",
  "work_phone": "07433332178",
  "address": "askajhsaklsj",
  "other": [
    {
      "disease": [
        {
          "id": 1,
          "name": "فشار خون",
          "status": "false"
        },
        {
          "id": 2,
          "name": "دیابت",
          "status": "false"
        },
        {
          "id": 3,
          "name": "آسم",
          "status": "false"
        },
        {
          "id": 4,
          "name": "بیماری قلبی عروقی",
          "status": "false"
        },
        {
          "id": 5,
          "name": "سرطان",
          "status": "false"
        },
        {
          "id": 6,
          "name": "آلزایمر",
          "status": "false"
        },
        {
          "id": 7,
          "name": "پارکینسون",
          "status": "false"
        },
        {
          "id": 8,
          "name": "بیماری کلیوی",
          "status": "false"
        },
        {
          "id": 9,
          "name": "بیماری کبدی",
          "status": "false"
        },
        {
          "id": 10,
          "name": "سکته مغزی",
          "status": "false"
        },
        {
          "id": 11,
          "name": "افسردگی",
          "status": "false"
        },
        {
          "id": 12,
          "name": "اضطراب مزمن",
          "status": "false"
        },
        {
          "id": 13,
          "name": "میگرن",
          "status": "false"
        },
        {
          "id": 14,
          "name": "کم‌کاری تیروئید",
          "status": "false"
        },
        {
          "id": 15,
          "name": "پرکاری تیروئید",
          "status": "false"
        },
        {
          "id": 16,
          "name": "سل",
          "status": "false"
        },
        {
          "id": 17,
          "name": "هپاتیت B",
          "status": "false"
        },
        {
          "id": 18,
          "name": "هپاتیت C",
          "status": "false"
        },
        {
          "id": 19,
          "name": "HIV / ایدز",
          "status": "false"
        },
        {
          "id": 20,
          "name": "COVID-19",
          "status": "false"
        },
        {
          "id": 21,
          "name": "لوپوس",
          "status": "false"
        },
        {
          "id": 22,
          "name": "ام‌اس (MS)",
          "status": "false"
        },
        {
          "id": 23,
          "name": "آرتریت روماتوئید",
          "status": "false"
        },
        {
          "id": 24,
          "name": "پسوریازیس",
          "status": "false"
        },
        {
          "id": 25,
          "name": "صرع",
          "status": "false"
        },
        {
          "id": 26,
          "name": "بیماری سلیاک",
          "status": "false"
        },
        {
          "id": 27,
          "name": "عدم تحمل لاکتوز",
          "status": "false"
        },
        {
          "id": 28,
          "name": "چربی خون بالا",
          "status": "false"
        },
        {
          "id": 29,
          "name": "کم‌خونی",
          "status": "false"
        },
        {
          "id": 30,
          "name": "هموفیلی",
          "status": "false"
        }
      ],
      "allergies": [
        {
          "substance": "پنی‌سیلین",
          "reaction": "کهیر",
          "severity": "شدید"
        },
        {
          "substance": "گرده گیاهان",
          "reaction": "عطسه و آبریزش بینی",
          "severity": "خفیف"
        }
      ],
      "medications": [
        {
          "name": "لورازپام",
          "dose": "1mg",
          "frequency": "شب‌ها قبل خواب"
        },
        {
          "name": "آتنولول",
          "dose": "50mg",
          "frequency": "صبح‌ها"
        }
      ],
      "surgeries": [
        {
          "type": "آپاندکتومی",
          "year": 2015,
          "hospital": "بیمارستان امام خمینی"
        },
        {
          "type": "عمل قلب باز",
          "year": 2022,
          "hospital": "بیمارستان شهید رجایی"
        }
      ],
      "family_history": [
        {
          "relation": "پدر",
          "disease": "فشار خون"
        },
        {
          "relation": "مادر",
          "disease": "دیابت نوع 2"
        },
        {
          "relation": "خواهر",
          "disease": "آسم"
        }
      ],
      "relatives": [
        {
          "name": "علی",
          "relation": "پسر عمو",
          "contact": {
            "phone": "+989121234567",
            "email": "father@example.com",
            "address": "تهران، خیابان انقلاب، پلاک 12"
          }
        },
        {
          "name": "سارا",
          "relation": "خواهر",
          "contact": {
            "phone": "+989121234567",
            "email": "father@example.com",
            "address": "تهران، خیابان انقلاب، پلاک 12"
          }
        }
      ]
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


13. 🔴 DELETE delete

DELETE /api/v1/user-profile/e4fd81b4-31bc-4f9a-b300-da23026f9d79

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


4. دکتر (Doctor)

14. 🔵 POST post

POST /api/v1/doctor

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل اطلاعات پزشکان در سیستم کلینیک پرو طراحی شده است. شما می‌توانید از طریق این سرویس پزشکان جدید ثبت کنید، اطلاعات آن‌ها را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


15. 🟡 PATCH patch

PATCH /api/v1/doctor/9eb88108-1411-4e78-93ee-9b2149233f4e

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل اطلاعات پزشکان در سیستم کلینیک پرو طراحی شده است. شما می‌توانید از طریق این سرویس پزشکان جدید ثبت کنید، اطلاعات آن‌ها را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
title string
doctor_services array<string>

مثال Request

{
  "title": "hamed",
  "doctor_services": [
    "اکوکاردیوگرافی"
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


16. 🔴 DELETE delete

DELETE /api/v1/doctor/9eb88108-1411-4e78-93ee-9b2149233f4e

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل اطلاعات پزشکان در سیستم کلینیک پرو طراحی شده است. شما می‌توانید از طریق این سرویس پزشکان جدید ثبت کنید، اطلاعات آن‌ها را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


17. 🟢 GET get 🆕

GET /api/v1/doctor/61be915b-595a-42e5-bca5-f80d22f4f14a

🔓 احراز هویت: الزامی نیست

این API برای مدیریت کامل اطلاعات پزشکان در سیستم کلینیک پرو طراحی شده است. شما می‌توانید از طریق این سرویس پزشکان جدید ثبت کنید، اطلاعات آن‌ها را مشاهده، ویرایش یا حذف کنید.

پاسخ‌ها

200

فیلد نوع مثال / توضیح
id string 29
uuid string 61be915b-595a-42e5-bca5-f80d22f4f14a
name string single doctor
gender string woman
experience integer 21
activity_time string 1107808200
medical_system_code string 121212121212
detail string test
degree string specialist
specialties array (1) [{uuid, id, name}]
img array (1) [{url, fid, filename}]
expertise array (3) [{uuid, id, name}]
satisfaction string 60
point string 3.5
free_turn string اولین نوبت آزاد: سه‌شنبه 19 خرداد ساعت 15:00
hours_of_work string از شنبه تا چهارشنبه از ساعت 08:00 تا 18:00
address array (2) [{id, uuid, name}]
average_rate object {total_rates}
state array (1) [{uuid, id, name}]
city array (1) [{uuid, id, name}]
مثال کامل Response (کلیک کنید)
{
  "id": "29",
  "uuid": "61be915b-595a-42e5-bca5-f80d22f4f14a",
  "name": "single doctor",
  "gender": "woman",
  "experience": 21,
  "activity_time": "1107808200",
  "medical_system_code": "121212121212",
  "detail": "test",
  "degree": "specialist",
  "specialties": [
    {
      "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
      "id": "603",
      "name": "داخلی عمومی",
      "parent": "602"
    }
  ],
  "img": [
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/doctors/2025-11/2025-11-19-090938-screenclip.png",
      "fid": "98",
      "filename": "2025-11-19-090938-screenclip.png",
      "filemime": "image/png",
      "filesize": 173665
    }
  ],
  "expertise": [
    {
      "uuid": "6faff90a-92f6-4fe2-9f67-b11e2b82a0c6",
      "id": "1601",
      "name": "معاینه و تشخیص پزشک متخصص"
    },
    {
      "uuid": "2c4d4446-4e4a-42de-829b-c51d3103ad04",
      "id": "1602",
      "name": "ویزیت تخصصی"
    },
    {
      "uuid": "e5ac35df-af8f-4cef-8119-e92645512313",
      "id": "1603",
      "name": "ویزیت فوق تخصص"
    }
  ],
  "satisfaction": "60",
  "point": "3.5",
  "free_turn": "اولین نوبت آزاد: سه‌شنبه 19 خرداد ساعت 15:00",
  "hours_of_work": "از شنبه تا چهارشنبه از ساعت 08:00 تا 18:00",
  "address": [
    {
      "id": "39",
      "uuid": "7b759d2a-af8a-4730-8eb0-e77dcd3a724e",
      "name": "2آدرس مطب",
      "map": {
        "latitude": "53.121212",
        "longitude": "57.121212"
      },
      "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، برج ماندگار، طبقه هشتم",
      "telephone": "09120671756"
    },
    {
      "id": "40",
      "uuid": "458fcbc7-32be-4d30-80dd-f7c4c6f1dace",
      "name": "2آدرس مطب",
      "map": {
        "latitude": "53.121212",
        "longitude": "57.121212"
      },
      "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، برج ماندگار، طبقه هشتم",
      "telephone": "09120671756"
    }
  ],
  "average_rate": {
    "total_rates": null
  },
  "state": [
    {
      "uuid": "fffae390-b2e4-403f-8b1d-f2cb294c8059",
      "id": "23",
      "name": "کهگیلویه و بویراحمد"
    }
  ],
  "city": [
    {
      "uuid": "17993c45-8b46-41b8-8e1d-f1d7243a7b75",
      "id": "123",
      "name": "یاسوج",
      "parent": "23"
    }
  ]
}

18. 🟢 GET doctor list 🆕

GET /api/v1/doctors

🔓 احراز هویت: الزامی نیست

این API برای دریافت لیست پزشکان با قابلیت‌های پیشرفته جستجو، فیلتر و صفحه‌بندی طراحی شده است. شما می‌توانید از طریق این سرویس لیست کاملی از پزشکان را با امکان فیلتر کردن بر اساس نام، استان، شهر، تخصص، جنسیت، مدرک تحصیلی و وضعیت فعالیت دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
name string — مثال: علی
state string — مثال: 31
city string — مثال: 62
specialty string — مثال: 503
gender string — مثال: man
degree string — مثال: general
active array — مثال: 0
page string — مثال: 1
limit string — مثال: 10
sort string sort= ASC, DESC — مثال: DESC

پاسخ‌ها

200

فیلد نوع مثال / توضیح
data array (7) [{id, uuid, name}]
page object {totalRecords, totalPages, currentPage}
مثال کامل Response (کلیک کنید)
{
  "data": [
    {
      "id": "18",
      "uuid": "801094ca-b20d-4bfe-828c-37ff62c8a45c",
      "name": "doctor clinic",
      "gender": "woman",
      "degree": "specialist",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/tamin_ejtemaei.jpg",
          "fid": "23",
          "filename": "tamin_ejtemaei.jpg",
          "filemime": "image/jpeg",
          "filesize": 418044
        }
      ],
      "specialties": [
        {
          "uuid": "cd22005c-759a-4a4b-b54a-5471948d7ca4",
          "id": "602",
          "name": "داخلی",
          "parent": null
        },
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    },
    {
      "id": "20",
      "uuid": "9109ad21-62fa-42ec-aeee-1e45a88e54b9",
      "name": "doctor 3",
      "gender": "woman",
      "degree": "specialist",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/tamin_ejtemaei.jpg",
          "fid": "23",
          "filename": "tamin_ejtemaei.jpg",
          "filemime": "image/jpeg",
          "filesize": 418044
        }
      ],
      "specialties": [
        {
          "uuid": "cd22005c-759a-4a4b-b54a-5471948d7ca4",
          "id": "602",
          "name": "داخلی",
          "parent": null
        },
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    },
    {
      "id": "21",
      "uuid": "2123fc79-5ef2-4d8d-96b9-1aee353e58e4",
      "name": "doctor 2",
      "gender": "woman",
      "degree": "specialist",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/tamin_ejtemaei.jpg",
          "fid": "23",
          "filename": "tamin_ejtemaei.jpg",
          "filemime": "image/jpeg",
          "filesize": 418044
        }
      ],
      "specialties": [
        {
          "uuid": "cd22005c-759a-4a4b-b54a-5471948d7ca4",
          "id": "602",
          "name": "داخلی",
          "parent": null
        },
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    },
    {
      "id": "22",
      "uuid": "c1eaea3b-6b36-4547-9fa3-bea050117fd2",
      "name": "doctor 1",
      "gender": "woman",
      "degree": "specialist",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/tamin_ejtemaei.jpg",
          "fid": "23",
          "filename": "tamin_ejtemaei.jpg",
          "filemime": "image/jpeg",
          "filesize": 418044
        }
      ],
      "specialties": [
        {
          "uuid": "cd22005c-759a-4a4b-b54a-5471948d7ca4",
          "id": "602",
          "name": "داخلی",
          "parent": null
        },
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    },
    {
      "id": "29",
      "uuid": "61be915b-595a-42e5-bca5-f80d22f4f14a",
      "name": "single doctor",
      "gender": "woman",
      "degree": "specialist",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/doctors/2025-11/2025-11-19-090938-screenclip.png",
          "fid": "98",
          "filename": "2025-11-19-090938-screenclip.png",
          "filemime": "image/png",
          "filesize": 173665
        }
      ],
      "specialties": [
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "اولین نوبت آزاد: سه‌شنبه 19 خرداد ساعت 15:00",
      "hours_of_work": "از شنبه تا چهارشنبه از ساعت 08:00 تا 18:00",
      "active": true
    },
    {
      "id": "35",
      "uuid": "ce7afecc-57fd-4496-a3fd-e451b9e2d271",
      "name": "سحر",
      "gender": "woman",
      "degree": "general",
      "img": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/doctors/2025-11/003.png",
          "fid": "24",
          "filename": "003.png",
          "filemime": "image/png",
          "filesize": 34314
        }
      ],
      "specialties": [
        {
          "uuid": "d60a269d-f7d7-4589-8eab-451e6f740d40",
          "id": "603",
          "name": "داخلی عمومی",
          "parent": "602"
        }
      ],
      "satisfaction": "60",
      "point": "3.5",
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    },
    {
      "id": "34",
      "uuid": "1f8b1601-b8f5-4538-ad4a-cfc25843f533",
      "name": null,
      "gender": null,
      "degree": null,
      "img": [],
      "specialties": [],
      "satisfaction": null,
      "point": null,
      "free_turn": "نوبت آزادی موجود نیست",
      "hours_of_work": "اطلاعات برنامه هفتگی موجود نیست",
      "active": true
    }
  ],
  "page": {
    "totalRecords": 7,
    "totalPages": 1,
    "currentPage": 1
  }
}

19. 🔵 POST image upload

POST /file/upload/clinic_pro/doctor/field_image

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string
Content-Disposition string
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


20. 🟢 GET Clinic Doctor List

GET /api/v1/clinic/doctor-list/e4550163-5a88-4f67-b07e-cd6063738598

🔓 احراز هویت: الزامی نیست

این API برای دریافت لیست پزشکان یک کلینیک خاص طراحی شده است. با استفاده از این سرویس می‌توانید لیست پزشکان یک کلینیک را با امکانات فیلتر، جستجو، مرتب‌سازی و صفحه‌بندی دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
name string — مثال: علی
state string — مثال: 31
city string — مثال: 62
specialty string — مثال: 503
gender string — مثال: man
degree string — مثال: general
active array — مثال: 0
page string — مثال: 1
limit string — مثال: 10
sort string sort= ASC, DESC — مثال: DESC

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


21. 🟢 GET all doctor services

GET /api/v1/categorys/doctor_services

🔓 احراز هویت: الزامی نیست

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 30

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


22. 🟢 GET get doctor rate

GET /api/v1/clinicpro-comment/doctor-rate/86483134-d5b9-4110-a49c-f0c640ac0e00

🔓 احراز هویت: الزامی نیست

ارسالی در url مقدار uuid دکتر می باشد

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


23. 🔴 DELETE delete

DELETE /api/v1/rate/doctor/2824a1d0-edff-4b1f-84aa-ac617dcfadb2

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


5. آدرس دکتر (Doctor Address)

24. 🔵 POST post

POST /api/v1/clinic-pro/doctor-address

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل آدرس‌های مطب‌های پزشکان طراحی شده است. شما می‌توانید از طریق این سرویس آدرس‌های جدید برای پزشکان ایجاد کنید، آدرس‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


25. 🟡 PATCH patch

PATCH /api/v1/clinic-pro/doctor-address/48

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل آدرس‌های مطب‌های پزشکان طراحی شده است. شما می‌توانید از طریق این سرویس آدرس‌های جدید برای پزشکان ایجاد کنید، آدرس‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
title string
doctor_services array<string>

مثال Request

{
  "title": "hamed",
  "doctor_services": [
    "اکوکاردیوگرافی"
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


26. 🔴 DELETE delete

DELETE /api/v1/clinic-pro/doctor-address/37

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل آدرس‌های مطب‌های پزشکان طراحی شده است. شما می‌توانید از طریق این سرویس آدرس‌های جدید برای پزشکان ایجاد کنید، آدرس‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


27. 🟢 GET get 🆕

GET /api/v1/clinic-pro/doctor-address/39

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل آدرس‌های مطب‌های پزشکان طراحی شده است. شما می‌توانید از طریق این سرویس آدرس‌های جدید برای پزشکان ایجاد کنید، آدرس‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

فیلد نوع مثال / توضیح
id string 39
uuid string 7b759d2a-af8a-4730-8eb0-e77dcd3a724e
name string 2آدرس مطب
map object {latitude, longitude}
address string آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، ب
telephone string 09120671756
مثال کامل Response (کلیک کنید)
{
  "id": "39",
  "uuid": "7b759d2a-af8a-4730-8eb0-e77dcd3a724e",
  "name": "2آدرس مطب",
  "map": {
    "latitude": "53.121212",
    "longitude": "57.121212"
  },
  "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، برج ماندگار، طبقه هشتم",
  "telephone": "09120671756"
}

28. 🟢 GET list 🆕

GET /api/v1/clinic-pro/doctor-addresses/29

🔓 احراز هویت: الزامی نیست

این API برای دریافت لیست آدرس‌های مطب‌های یک پزشک خاص طراحی شده است. با استفاده از این سرویس می‌توانید تمام مکان‌هایی که پزشک مورد نظر در آنها فعالیت می‌کند را همراه با جزئیات کامل آدرس، ساعات کاری، اطلاعات تماس و موقعیت جغرافیایی دریافت کنید.

پاسخ‌ها

200

فیلد نوع مثال / توضیح
data array (2) [{id, uuid, name}]
page object {totalRecords, totalPages, currentPage}
مثال کامل Response (کلیک کنید)
{
  "data": [
    {
      "id": "39",
      "uuid": "7b759d2a-af8a-4730-8eb0-e77dcd3a724e",
      "name": "2آدرس مطب",
      "map": {
        "latitude": "53.121212",
        "longitude": "57.121212"
      },
      "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، برج ماندگار، طبقه هشتم",
      "telephone": "09120671756"
    },
    {
      "id": "40",
      "uuid": "458fcbc7-32be-4d30-80dd-f7c4c6f1dace",
      "name": "2آدرس مطب",
      "map": {
        "latitude": "53.121212",
        "longitude": "57.121212"
      },
      "address": "آذربايجان غربي، مياندوآب، خيابان ۱۵ خرداد (پشت پارک معلم)، برج ماندگار، طبقه هشتم",
      "telephone": "09120671756"
    }
  ],
  "page": {
    "totalRecords": 2,
    "totalPages": 1,
    "currentPage": 1
  }
}

6. کلینیک (Clinic)

29. 🟢 GET clinic list 🆕

GET /api/v1/clinics

🔓 احراز هویت: الزامی نیست

این API برای دریافت لیست کامل کلینیک‌های موجود در سیستم طراحی شده است. شما می‌توانید از طریق این سرویس لیست تمام کلینیک‌ها را با امکانات پیشرفته فیلترینگ، جستجو و صفحه‌بندی دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
state string — مثال: 13
city string — مثال: 32
specialty string — مثال: 511
page string — مثال: 1
limit string — مثال: 10
sort string — مثال: DESC

پاسخ‌ها

200

فیلد نوع مثال / توضیح
data array (4) [{id, uuid, title}]
page object {totalRecords, totalPages, currentPage}
مثال کامل Response (کلیک کنید)
{
  "data": [
    {
      "id": "23",
      "uuid": "e4550163-5a88-4f67-b07e-cd6063738598",
      "title": "clinic 1",
      "state": [
        {
          "uuid": "c0fe6c46-6120-4c53-8d6a-def5b6de3173",
          "id": "29",
          "name": "هرمزگان"
        }
      ],
      "city": [
        {
          "uuid": "81b18aae-7701-47d7-a07b-b3316c2d5081",
          "id": "130",
          "name": "بندرعباس",
          "parent": "29"
        }
      ],
      "clinic_logo": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/clinics/logo/2025-11/003_7.png",
          "fid": "96",
          "filename": "003_7.png",
          "filemime": "image/png",
          "filesize": 39281
        }
      ],
      "doctors": 3,
      "address": " بندرعباس: رسالت شمالی- میدان صادقیه- ساختمان پاسارگاد- طبقه 4 و 5",
      "field_working_days": "شنبه تا سه شنبه ساعد ۱۲:۲۰"
    },
    {
      "id": "24",
      "uuid": "2a58c3c3-9755-4231-8ab8-27030405e55d",
      "title": "clinic 2",
      "state": [
        {
          "uuid": "4f95230b-8cd0-4934-89cc-bd5719412c61",
          "id": "8",
          "name": "تهران"
        }
      ],
      "city": [],
      "clinic_logo": [],
      "doctors": 1,
      "address": " بندرعباس: رسالت شمالی- میدان صادقیه- ساختمان پاسارگاد- طبقه 4 و 5",
      "field_working_days": "شنبه تا سه شنبه ساعد ۱۲:۲۰"
    },
    {
      "id": "32",
      "uuid": "4919e517-2719-40bf-b35a-e36a5d8a93f1",
      "title": null,
      "state": [],
      "city": [],
      "clinic_logo": [],
      "doctors": 0,
      "address": null,
      "field_working_days": null
    },
    {
      "id": "33",
      "uuid": "6f6b2e6c-09db-4577-8fed-9ba92e82786c",
      "title": null,
      "state": [],
      "city": [],
      "clinic_logo": [],
      "doctors": 0,
      "address": null,
      "field_working_days": null
    }
  ],
  "page": {
    "totalRecords": 4,
    "totalPages": 1,
    "currentPage": 1
  }
}

30. 🟢 GET get 🆕

GET /api/v1/clinic/e4550163-5a88-4f67-b07e-cd6063738598

🔓 احراز هویت: الزامی نیست

این API برای مدیریت کامل کلینیک‌ها در سیستم طراحی شده است. شما می‌توانید از طریق این API کلینیک‌های جدید ایجاد کنید، اطلاعات کلینیک‌های موجود را مشاهده، ویرایش یا حذف کنید.

پاسخ‌ها

200

فیلد نوع مثال / توضیح
id string 23
uuid string e4550163-5a88-4f67-b07e-cd6063738598
title string clinic 1
images_clinic array (5) [{url, fid, filename}]
clinic_logo array (1) [{url, fid, filename}]
phone_number string ۰۶۱-۳۳۹۱۶۵۸۹
caption string مجموعه کلینیک‌های فخرائی دارای 20 سال سابقه‌‌ی فعالیت در زمی
list_bime array (4) [{uuid, id, name}]
specialties array (3) [{uuid, id, name}]
services array (5) [{uuid, id, name}]
clinic_specialty array (3) [{uuid, id, name}]
doctors integer 3
doctor_list null null
city array (1) [{uuid, id, name}]
state array (1) [{uuid, id, name}]
location string بندرعباس: رسالت شمالی- میدان صادقیه- ساختمان پاسارگاد- طبقه
map object {latitude, longitude}
24_7 boolean true
field_working_days string شنبه تا سه شنبه ساعد ۱۲:۲۰
مثال کامل Response (کلیک کنید)
{
  "id": "23",
  "uuid": "e4550163-5a88-4f67-b07e-cd6063738598",
  "title": "clinic 1",
  "images_clinic": [
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/2025-11/003_52.png",
      "fid": "91",
      "filename": "003_52.png",
      "filemime": "image/png",
      "filesize": 34314
    },
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/2025-11/003_53.png",
      "fid": "92",
      "filename": "003_53.png",
      "filemime": "image/png",
      "filesize": 34314
    },
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/2025-11/003_54.png",
      "fid": "93",
      "filename": "003_54.png",
      "filemime": "image/png",
      "filesize": 34314
    },
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/2025-11/003_55.png",
      "fid": "94",
      "filename": "003_55.png",
      "filemime": "image/png",
      "filesize": 34314
    },
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/2025-11/003_56.png",
      "fid": "95",
      "filename": "003_56.png",
      "filemime": "image/png",
      "filesize": 34314
    }
  ],
  "clinic_logo": [
    {
      "url": "https://clinic-pro-back.ddev.site/sites/default/files/clinics/logo/2025-11/003_7.png",
      "fid": "96",
      "filename": "003_7.png",
      "filemime": "image/png",
      "filesize": 39281
    }
  ],
  "phone_number": "۰۶۱-۳۳۹۱۶۵۸۹",
  "caption": "مجموعه کلینیک‌های فخرائی دارای 20 سال سابقه‌‌ی فعالیت در زمینه کاشت مو و زیبایی در داخل ایران و دیگر کشور‌های جهان است. مجموعه ما در طی این مدت با کسب بیش از صدهزار تجربه موفق در این زمینه توانسته است...",
  "list_bime": [
    {
      "uuid": "aee3930e-9532-47a0-829c-a18c813ce566",
      "id": "1559",
      "name": "بیمه آتیه سازان حافظ",
      "logo": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/hafez-insurance.png",
          "fid": "5",
          "filename": "hafez-insurance.png",
          "filemime": "image/png",
          "filesize": 16100
        }
      ]
    },
    {
      "uuid": "5cc67174-b6ab-4dfd-8d10-c9899bfb2dc3",
      "id": "1555",
      "name": "بیمه SOS",
      "logo": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/sos.jpeg",
          "fid": "21",
          "filename": "sos.jpeg",
          "filemime": "image/jpeg",
          "filesize": 14933
        }
      ]
    },
    {
      "uuid": "f0bfa574-129f-4152-9634-f4f4f9ad098a",
      "id": "1558",
      "name": "بیمه حکمت",
      "logo": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/hekmat.png",
          "fid": "6",
          "filename": "hekmat.png",
          "filemime": "image/png",
          "filesize": 3999
        }
      ]
    },
    {
      "uuid": "47aeb87b-317e-4a3a-a0be-bf22d355c376",
      "id": "1552",
      "name": "بیمه ایران",
      "logo": [
        {
          "url": "https://clinic-pro-back.ddev.site/sites/default/files/insurance/images/iran.png",
          "fid": "7",
          "filename": "iran.png",
          "filemime": "image/png",
          "filesize": 118443
        }
      ]
    }
  ],
  "specialties": [
    {
      "uuid": "11712ce2-8992-4313-902f-45874082bba1",
      "id": "610",
      "name": "روماتولوژی (بیماری‌های مفاصل)",
      "parent": "602"
    },
    {
      "uuid": "64209ecd-bdb4-4bca-969b-93103484a40a",
      "id": "611",
      "name": "نورولوژی (عصبی)",
      "parent": "602"
    },
    {
      "uuid": "40f84ae6-ea0d-4cac-98a7-941732198961",
      "id": "613",
      "name": "جراحی عمومی",
      "parent": "612"
    }
  ],
  "services": [
    {
      "uuid": "2c4d4446-4e4a-42de-829b-c51d3103ad04",
      "id": "1602",
      "name": "ویزیت تخصصی"
    },
    {
      "uuid": "e5ac35df-af8f-4cef-8119-e92645512313",
      "id": "1603",
      "name": "ویزیت فوق تخصص"
    },
    {
      "uuid": "35884454-5f90-41f7-9010-7df369cd405a",
      "id": "1604",
      "name": "ویزیت آنلاین / مشاوره مجازی"
    },
    {
      "uuid": "09677f90-8a56-4063-9c3d-801a6ca1feed",
      "id": "1606",
      "name": "مشاوره تلفنی پزشکی"
    },
    {
      "uuid": "b0ae84b7-2eb5-4b10-bb54-b8770497df95",
      "id": "1700",
      "name": "تست‌های ژنومی گسترده (NGS پایه)"
    }
  ],
  "clinic_specialty": [
    {
      "uuid": "11712ce2-8992-4313-902f-45874082bba1",
      "id": "610",
      "name": "روماتولوژی (بیماری‌های مفاصل)",
      "parent": "602"
    },
    {
      "uuid": "64209ecd-bdb4-4bca-969b-93103484a40a",
      "id": "611",
      "name": "نورولوژی (عصبی)",
      "parent": "602"
    },
    {
      "uuid": "40f84ae6-ea0d-4cac-98a7-941732198961",
      "id": "613",
      "name": "جراحی عمومی",
      "parent": "612"
    }
  ],
  "doctors": 3,
  "doctor_list": null,
  "city": [
    {
      "uuid": "81b18aae-7701-47d7-a07b-b3316c2d5081",
      "id": "130",
      "name": "بندرعباس",
      "parent": "29"
    }
  ],
  "state": [
    {
      "uuid": "c0fe6c46-6120-4c53-8d6a-def5b6de3173",
      "id": "29",
      "name": "هرمزگان"
    }
  ],
  "location": " بندرعباس: رسالت شمالی- میدان صادقیه- ساختمان پاسارگاد- طبقه 4 و 5",
  "map": {
    "latitude": "27.200632975404",
    "longitude": "56.356043815613"
  },
  "24_7": true,
  "field_working_days": "شنبه تا سه شنبه ساعد ۱۲:۲۰"
}

31. 🟡 PATCH patch

PATCH /api/v1/clinic/e4550163-5a88-4f67-b07e-cd6063738598

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل کلینیک‌ها در سیستم طراحی شده است. شما می‌توانید از طریق این API کلینیک‌های جدید ایجاد کنید، اطلاعات کلینیک‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
name string
address string
telephone string
latitude string
longitude string
insurance array<string>
info string
doctor_services array<string>
working_days string
24_7 integer
image_clinic array<integer>
clinic_logo array<integer>

مثال Request

{
  "name": "Doctorghach",
  "address": "تهران خیابان آزادی",
  "telephone": "۰۶۱-۳۳۹۱۶۵۸۹",
  "latitude": "",
  "longitude": "",
  "insurance": [],
  "info": "sas",
  "doctor_services": [],
  "working_days": "شنبه تا سه شنبه ساعد ۱۲:۲۰",
  "24_7": 1,
  "image_clinic": [
    19
  ],
  "clinic_logo": [
    20
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


32. 🔵 POST post

POST /api/v1/clinic

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت کامل کلینیک‌ها در سیستم طراحی شده است. شما می‌توانید از طریق این API کلینیک‌های جدید ایجاد کنید، اطلاعات کلینیک‌های موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
name string
state array<integer>
city array<integer>
address string
telephone string
latitude string
longitude string
insurance array<integer>
info string
doctor_services array<integer>
working_days string
24_7 integer
image_clinic array<integer>
clinic_logo array<integer>

مثال Request

{
  "name": "Doctorghach",
  "state": [
    1
  ],
  "city": [
    32
  ],
  "address": "تهران خیابان آزادی",
  "telephone": "۰۶۱-۳۳۹۱۶۵۸۹",
  "latitude": "50.21",
  "longitude": "57.212",
  "insurance": [
    300,
    301
  ],
  "info": "sas",
  "doctor_services": [
    575,
    576
  ],
  "working_days": "شنبه تا سه شنبه ساعد ۱۲:۲۰",
  "24_7": 1,
  "image_clinic": [
    19
  ],
  "clinic_logo": [
    20
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


33. 🔵 POST image_clinic

POST /file/upload/clinic_pro/clinic/field_image_clinic

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string
Content-Disposition string
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


POST /file/upload/clinic_pro/clinic/field_clinic_logo

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string
Content-Disposition string
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


35. 🟡 PATCH patch

PATCH /api/v1/clinicpro/rate/9708cac9-b0d5-4342-a39e-625991deae0e

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
correct_diagnosis integer
doctor_skill integer
behavior_doctor integer
office_cleaning integer
time_in_office integer
doctor integer
rate integer

مثال Request

{
  "correct_diagnosis": 0,
  "doctor_skill": 0,
  "behavior_doctor": 0,
  "office_cleaning": 0,
  "time_in_office": 0,
  "doctor": 0,
  "rate": 0
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


36. 🟢 GET get my rate

GET /api/v1/clinicpro/rate/86483134-d5b9-4110-a49c-f0c640ac0e00

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

ارسالی در url مقدار uuid دکتر می باشد و این رست برای ریت کاربر می باشد

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


37. 🔵 POST post

POST /api/v1/clinicpro/rate

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
correct_diagnosis integer
doctor_skill integer
behavior_doctor integer
office_cleaning integer
time_in_office integer
doctor integer
rate integer

مثال Request

{
  "correct_diagnosis": 100,
  "doctor_skill": 100,
  "behavior_doctor": 100,
  "office_cleaning": 100,
  "time_in_office": 100,
  "doctor": 1,
  "rate": 2
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


38. 🟢 GET Unapproved comments

GET /api/v1/clinicpro/unverified-comments/47

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
page string
limit string

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


39. 🟡 PATCH Comment confirmation

PATCH /api/v1/clinicpro/unverified-comments/37

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

مثال Request


پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


40. 🔵 POST post

POST /api/v1/clinicpro/comment

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

مثال Request


پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


41. 🟡 PATCH patch

PATCH /api/v1/clinicpro/comment/fb469645-ea66-4cd6-91ae-6f112b0a4df7

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
correct_diagnosis integer
doctor_skill integer
behavior_doctor integer
office_cleaning integer
time_in_office integer
doctor integer
rate integer

مثال Request

{
  "correct_diagnosis": 50,
  "doctor_skill": 60,
  "behavior_doctor": 70,
  "office_cleaning": 80,
  "time_in_office": 90,
  "doctor": 1,
  "rate": 2
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


42. 🔴 DELETE delete

DELETE /api/v1/clinicpro/comment/fb469645-ea66-4cd6-91ae-6f112b0a4df7

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


43. 🟢 GET get

GET /api/v1/clinicpro/comment/a70368e6-2efe-4671-a0f7-b72fb268fd10

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


44. 🟢 GET list comment

GET /api/v1/clinicpro/comments/47

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
page string
limit string

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


45. 🔵 POST post

POST /api/v1/clinicpro/like

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

مثال Request


پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


46. 🟡 PATCH patch

PATCH /api/v1/clinicpro/like/402bcad1-013f-442c-8038-35c3516e5068

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

مثال Request


پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


7. نماینده (Agent / Representation)

47. 🔵 POST POST

POST /api/v1/agent

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


48. 🟡 PATCH PATCH

PATCH /api/v1/agent/945a7e43-eedb-4246-8c9a-08029e05e1b1

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


49. 🟢 GET GET

GET /api/v1/agent/945a7e43-eedb-4246-8c9a-08029e05e1b1

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


50. 🟢 GET get

GET /api/v1/representation/ab2c58dd-a025-4e2e-afbb-e4376a13b3bb

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


51. 🟢 GET my-appointments

GET /api/v1/representation/my-appointments/40

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


52. 🟢 GET my-doctor

GET /api/v1/representation/my-doctor/40

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
page string
limit string

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


53. 🟢 GET representation_filter

GET /api/v1/representation/filter/41

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
page string
limit string
timestamp string

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


54. 🟢 GET yearly-income

GET /api/v1/representation/yearly-income/41

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

پارامترهای Query

پارامتر نوع الزامی توضیح
page string
limit string
timestamp string

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


8. دسته‌بندی‌ها (Categories)

55. 🟢 GET all tag

GET /api/v1/categorys/tag

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 10

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


56. 🟢 GET supplementary_insurance

GET /api/v1/categorys/supplementary_insurance

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 10

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


57. 🟢 GET categories list

GET /api/v1/categorys/insurance_type

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 10
parent string — مثال: 12

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


58. 🟢 GET all state

GET /api/v1/categorys/state

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 32

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


59. 🟢 GET all city

GET /api/v1/categorys/city

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 30
parent string — مثال: 18

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


60. 🟢 GET all specially doctor

GET /api/v1/categorys/specially_doctor

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت و مدیریت دسته‌بندی‌های مختلف سیستم طراحی شده است. شما می‌توانید از طریق این API لیست دسته‌بندی‌های مختلفی مانند شهرها، استان‌ها، تخصص‌های پزشکی، انواع بیمه و سایر دسته‌بندی‌ها را با قابلیت صفحه‌بندی و فیلتر دریافت کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
limit string — مثال: 30

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


61. 🔵 POST post

POST /api/v1/category

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
type string
name string

مثال Request

{
  "type": "doctor_services",
  "name": "تست"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


62. 🟡 PATCH patch

PATCH /api/v1/category/571

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
name string

مثال Request

{
  "name": "hamed"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


63. 🔴 DELETE DELETE

DELETE /api/v1/category/7675

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
name string

مثال Request

{
  "name": "hamed"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


9. بیمه دکتر (Doctor Insurance)

64. 🔵 POST post

POST /api/v1/insurance/

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
field_doctor string
field_insurance_type string
field_price string

مثال Request

{
  "field_doctor": "31",
  "field_insurance_type": "7658",
  "field_price": "1234"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


65. 🔴 DELETE DELETE

DELETE /api/v1/insurance/2

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
name string

مثال Request

{
  "name": "hamed"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


66. 🟢 GET get

GET /api/v1/insurance/7

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


67. 🟡 PATCH patch

PATCH /api/v1/insurance/1

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
field_doctor string
field_insurance_type string
field_price string

مثال Request

{
  "field_doctor": "31",
  "field_insurance_type": "7658",
  "field_price": "23000"
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


10. تنظیمات نوبت — برنامه هفتگی

68. 🔵 POST post

POST /api/v1/appointment-settings/weekly-schedule

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت برنامه کاری هفتگی پزشکان طراحی شده است. با استفاده از این سرویس می‌توانید برنامه کاری هفتگی یک پزشک را ایجاد، مشاهده، ویرایش و حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
doctor_id string
setting array<object>

مثال Request

{
  "doctor_id": "47",
  "setting": [
    {
      "0": {
        "morning": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 48
          },
          "start_time": "10:00",
          "end_time": "13:00"
        },
        "evening": {
          "active": 0
        }
      },
      "1": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 49
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "2": {
        "morning": {
          "active": 1,
          "number_of_turns": 8,
          "turn_time": 15,
          "location": {
            "id": 48
          },
          "start_time": "09:00",
          "end_time": "12:00"
        },
        "evening": {
          "active": 1,
          "number_of_turns": 6,
          "turn_time": 20,
          "location": {
            "id": 48
          },
          "start_time": "16:00",
          "end_time": "18:00"
        }
      },
      "3": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 12,
          "turn_time": 10,
          "location": {
            "id": 49
          },
          "start_time": "15:00",
          "end_time": "19:00"
        }
      },
      "4": {
        "morning": {
          "active": 1,
          "number_of_turns": 7,
          "turn_time": 15,
          "location": {
            "id": 48
          },
          "start_time": "08:30",
          "end_time": "11:15"
        },
        "evening": {
          "active": 0
        }
      },
      "5": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "6": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 5,
          "turn_time": 15,
          "location": {
            "id": 49
          },
          "start_time": "17:00",
          "end_time": "18:15"
        }
      }
    }
  ]
}

پاسخ‌ها

403

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


69. 🟡 PATCH patch

PATCH /api/v1/appointment-settings/weekly-schedule/0f694f98-63f0-4b96-b7ff-ca99bb9eceb9

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت برنامه کاری هفتگی پزشکان طراحی شده است. با استفاده از این سرویس می‌توانید برنامه کاری هفتگی یک پزشک را ایجاد، مشاهده، ویرایش و حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
setting array<object>

مثال Request

{
  "setting": [
    {
      "0": {
        "morning": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 48
          },
          "start_time": "10:00",
          "end_time": "13:00"
        },
        "evening": {
          "active": 0
        }
      },
      "1": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 49
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "2": {
        "morning": {
          "active": 1,
          "number_of_turns": 8,
          "turn_time": 15,
          "location": {
            "id": 48
          },
          "start_time": "09:00",
          "end_time": "12:00"
        },
        "evening": {
          "active": 1,
          "number_of_turns": 6,
          "turn_time": 20,
          "location": {
            "id": 48
          },
          "start_time": "16:00",
          "end_time": "18:00"
        }
      },
      "3": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 12,
          "turn_time": 10,
          "location": {
            "id": 49
          },
          "start_time": "15:00",
          "end_time": "19:00"
        }
      },
      "4": {
        "morning": {
          "active": 1,
          "number_of_turns": 7,
          "turn_time": 15,
          "location": {
            "id": 48
          },
          "start_time": "08:30",
          "end_time": "11:15"
        },
        "evening": {
          "active": 0
        }
      },
      "5": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "6": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 5,
          "turn_time": 15,
          "location": {
            "id": 49
          },
          "start_time": "17:00",
          "end_time": "18:15"
        }
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


70. 🟢 GET get

GET /api/v1/appointment-settings/weekly-schedule/61be915b-595a-42e5-bca5-f80d22f4f14a

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت برنامه کاری هفتگی پزشکان طراحی شده است. با استفاده از این سرویس می‌توانید برنامه کاری هفتگی یک پزشک را ایجاد، مشاهده، ویرایش و حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


11. تنظیمات نوبت — Date Override

71. 🟢 GET list

GET /api/v1/appointment-settings/date-override/list/be1fc63e-0207-4fe4-a58b-5ac30953b742

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


72. 🔵 POST post

POST /api/v1/appointment-settings/date-override

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
doctor_id integer
date string
setting array<object>

مثال Request

{
  "doctor_id": 47,
  "date": "1749301477",
  "setting": [
    {
      "morning": {
        "active": 1,
        "number_of_turns": 10,
        "turn_time": 10,
        "location": {
          "id": 48
        },
        "start_time": "10:00",
        "end_time": "13:00"
      },
      "evening": {
        "active": 0
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


73. 🟡 PATCH patch

PATCH /api/v1/appointment-settings/date-override/5d066da0-aeab-477c-9bf0-32b0f5648445

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
setting array<object>

مثال Request

{
  "setting": [
    {
      "0": {
        "morning": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "10:00",
          "end_time": "13:00"
        },
        "evening": {
          "active": 0
        }
      },
      "1": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "2": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "3": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "4": {
        "morning": {
          "active": 0
        },
        "evening": {
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "5": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "6": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


74. 🔴 DELETE delete

DELETE /api/v1/appointment-settings/date-override/9c3cf561-a236-4f1e-9577-612be5c2fc5f

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


75. 🟢 GET get

GET /api/v1/appointment-settings/date-override/be1fc63e-0207-4fe4-a58b-5ac30953b742

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


12. تنظیمات نوبت — تعطیلات

76. 🔴 DELETE delete

DELETE /api/v1/booking-setting/76a70dde-e3e8-4413-a961-94e7d263bef7

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


77. 🔵 POST post

POST /api/v1/appointment-settings/holidays

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
doctor_id integer
date string
setting array<object>

مثال Request

{
  "doctor_id": 47,
  "date": "1749301477",
  "setting": [
    {
      "morning": {
        "active": 1,
        "number_of_turns": 10,
        "turn_time": 10,
        "location": {
          "id": 48
        },
        "start_time": "10:00",
        "end_time": "13:00"
      },
      "evening": {
        "active": 0
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


78. 🟡 PATCH patch

PATCH /api/v1/appointment-settings/holidays/55deaeb6-d72e-4bde-9e2e-0b298c98b93b

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
setting array<object>

مثال Request

{
  "setting": [
    {
      "0": {
        "morning": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "10:00",
          "end_time": "13:00"
        },
        "evening": {
          "active": 0
        }
      },
      "1": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "2": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "3": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "4": {
        "morning": {
          "active": 0
        },
        "evening": {
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "5": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "6": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


79. 🔴 DELETE delete

DELETE /api/v1/appointment-settings/holidays/55deaeb6-d72e-4bde-9e2e-0b298c98b93b

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


80. 🟢 GET get

GET /api/v1/appointment-settings/holidays/55deaeb6-d72e-4bde-9e2e-0b298c98b93b

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


13. نوبت‌دهی (Appointment)

81. 🟢 GET appointment slots

GET /api/v1/appointment-slots

🔓 احراز هویت: الزامی نیست

این API برای دریافت اسلات‌های زمانی دردسترس برای نوبت‌دهی پزشکی طراحی شده است. شما می‌توانید از طریق این API اسلات‌های خالی یک پزشک خاص در تاریخ مشخصی را مشاهده کنید و سپس آن‌ها را برای ایجاد نوبت استفاده کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
date integer
doctor_id integer

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


82. 🔵 POST post

POST /api/v1/appointment

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت نوبت‌های پزشکی طراحی شده است. شما می‌توانید از طریق این API نوبت‌های جدید ایجاد کنید، نوبت‌های موجود را مشاهده کنید، آن‌ها را ویرایش کنید یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
type string
name string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


83. 🟢 GET Days Not Available For Appointments

GET /api/v1/appointment/not-available/29

🔓 احراز هویت: الزامی نیست

این API برای دریافت لیست کامل روزهای تعطیل رسمی ایران طراحی شده است. این اطلاعات شامل تعطیلات ملی، مذهبی و رسمی کشور می‌باشد که برای تمام پزشکان و کلینیک‌ها اعمال می‌شود.

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


84. 🟢 GET My Appointments

GET /api/v1/appointment/my-appointments/22

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مشاهده و مدیریت نوبت‌های پزشکی شما طراحی شده است. با استفاده از این سرویس می‌توانید لیست تمام نوبت‌های خود را مشاهده کنید و آن‌ها را بر اساس وضعیت فیلتر کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
status string — مثال: reserved
page string
limit string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


14. منشی (Secretary)

85. 🔵 POST post

POST /api/v1/secretary

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


86. 🟡 PATCH patch

PATCH /api/v1/secretary/b2269db9-9999-4b6b-a4b7-c2a424b0a7f3

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
setting array<object>

مثال Request

{
  "setting": [
    {
      "0": {
        "morning": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "10:00",
          "end_time": "13:00"
        },
        "evening": {
          "active": 0
        }
      },
      "1": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "2": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 1,
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "3": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "4": {
        "morning": {
          "active": 0
        },
        "evening": {
          "number_of_turns": 10,
          "turn_time": 10,
          "location": {
            "id": 12,
            "name": "مطب ۱"
          },
          "start_time": "15:00",
          "end_time": "19:30"
        }
      },
      "5": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      },
      "6": {
        "morning": {
          "active": 0
        },
        "evening": {
          "active": 0
        }
      }
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


87. 🟢 GET get

GET /api/v1/secretary/65ab3371-9904-4348-bb5d-a3c035417e28

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


15. پرداخت (Payment)

88. 🟢 GET get

GET /api/v1/payment/76a10c47-49af-4bb5-9113-5dbab608ed2f

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


89. 🟡 PATCH patch

PATCH /api/v1/payment

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


90. 🔵 POST post

POST /api/v1/payment

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


91. 🔴 DELETE delete

DELETE /api/v1/payment

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


92. 🟢 GET My Payments

GET /api/v1/payment/my-payments/32

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مشاهده و مدیریت پرداخت‌های شما طراحی شده است. با استفاده از این سرویس می‌توانید لیست تمام پرداخت‌های خود را مشاهده کنید، وضعیت پرداخت‌ها را پیگیری کنید و تاریخچه مالی خود را بررسی کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
status string — مثال: reserved
page string
limit string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


16. وبلاگ (Blog)

93. 🟢 GET top blogs 🆕

GET /api/v1/blogs/top

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت لیست مقالات برتر و ویژه وبلاگ طراحی شده است. این مقالات دارای اولویت بالا و محتوای مهم هستند که معمولاً در بخش‌های ویژه سایت نمایش داده می‌شوند.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

آرایه‌ای از آبجکت — تعداد در مثال: 4 آیتم. ساختار هر آیتم:

فیلد نوع مثال / توضیح
uuid string 95f6acb0-3331-4141-801e-004e8460edac
title string روش های خانگی محافظت از پوست در تابستان
status string 1
body object {value, format}
created string 1763536163
changed string 1763537699
author string single doctor
images array (1) [{url, fid, filename}]
tag array (3) [{uuid, id, name}]
مثال کامل Response (کلیک کنید)
[
  {
    "uuid": "95f6acb0-3331-4141-801e-004e8460edac",
    "title": "روش های خانگی محافظت از پوست در تابستان",
    "status": "1",
    "body": {
      "value": "تغییر یا جهش در DNA می تواند باعث شود سلول های طبیعی پستان به سلول های سرطانی تبدیل شوند. برخی از تغییرات DNA از طریق والدین منتقل می شود (وراثتی) و می توانند ریسک ابتلا به کانسر سینه را افزایش دهند. ...",
      "format": "full_html"
    },
    "created": "1763536163",
    "changed": "1763537699",
    "author": "single doctor",
    "images": [
      {
        "url": "https://clinic-pro-back.ddev.site/sites/default/files/blog/screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "fid": "97",
        "filename": "screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "filemime": "image/png",
        "filesize": 320787
      }
    ],
    "tag": [
      {
        "uuid": "24926497-fc2d-47d7-82ae-26cbbc4d6468",
        "id": "2501",
        "name": "مجله"
      },
      {
        "uuid": "6c6a488b-1051-43a2-887b-0ec7a05e52d5",
        "id": "2500",
        "name": "سلامتی"
      },
      {
        "uuid": "8f787827-12e7-486b-be78-15d78bcf84b5",
        "id": "2502",
        "name": "سلامت و روان"
      }
    ]
  },
  {
    "uuid": "5a9fe394-2ebf-4e32-ae74-6670aa5aa46a",
    "title": "روش های خانگی محافظت از پوست در تابستان",
    "status": "1",
    "body": {
      "value": "تغییر یا جهش در DNA می تواند باعث شود سلول های طبیعی پستان به سلول های سرطانی تبدیل شوند. برخی از تغییرات DNA از طریق والدین منتقل می شود (وراثتی) و می توانند ریسک ابتلا به کانسر سینه را افزایش دهند. ...",
      "format": "full_html"
    },
    "created": "1763536163",
    "changed": "1763537686",
    "author": "single doctor",
    "images": [
      {
        "url": "https://clinic-pro-back.ddev.site/sites/default/files/blog/screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "fid": "97",
        "filename": "screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "filemime": "image/png",
        "filesize": 320787
      }
    ],
    "tag": [
      {
        "uuid": "24926497-fc2d-47d7-82ae-26cbbc4d6468",
        "id": "2501",
        "name": "مجله"
      }
    ]
  },
  {
    "uuid": "9d4d4233-9741-4549-acc1-4fc8798c77bf",
    "title": "روش های خانگی محافظت از پوست در تابستان",
    "status": "1",
    "body": {
      "value": "تغییر یا جهش در DNA می تواند باعث شود سلول های طبیعی پستان به سلول های سرطانی تبدیل شوند. برخی از تغییرات DNA از طریق والدین منتقل می شود (وراثتی) و می توانند ریسک ابتلا به کانسر سینه را افزایش دهند. ...",
      "format": "full_html"
    },
    "created": "1763536162",
    "changed": "1763537710",
    "author": "single doctor",
    "images": [
      {
        "url": "https://clinic-pro-back.ddev.site/sites/default/files/blog/screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "fid": "97",
        "filename": "screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "filemime": "image/png",
        "filesize": 320787
      }
    ],
    "tag": [
      {
        "uuid": "6c6a488b-1051-43a2-887b-0ec7a05e52d5",
        "id": "2500",
        "name": "سلامتی"
      },
      {
        "uuid": "8f787827-12e7-486b-be78-15d78bcf84b5",
        "id": "2502",
        "name": "سلامت و روان"
      },
      {
        "uuid": "9db5fe73-ea1c-401d-b8e6-5c7459a06975",
        "id": "2503",
        "name": "تغذیه"
      }
    ]
  },
  {
    "uuid": "836ed807-9f6b-4ebb-aa43-e8d27b183b30",
    "title": "روش های خانگی محافظت از پوست در تابستان",
    "status": "1",
    "body": {
      "value": "تغییر یا جهش در DNA می تواند باعث شود سلول های طبیعی پستان به سلول های سرطانی تبدیل شوند. برخی از تغییرات DNA از طریق والدین منتقل می شود (وراثتی) و می توانند ریسک ابتلا به کانسر سینه را افزایش دهند. ...",
      "format": "full_html"
    },
    "created": "1763536161",
    "changed": "1763537721",
    "author": "single doctor",
    "images": [
      {
        "url": "https://clinic-pro-back.ddev.site/sites/default/files/blog/screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "fid": "97",
        "filename": "screencapture-howraz-checkout-2025-11-19-10_16_27.png",
        "filemime": "image/png",
        "filesize": 320787
      }
    ],
    "tag": [
      {
        "uuid": "6c6a488b-1051-43a2-887b-0ec7a05e52d5",
        "id": "2500",
        "name": "سلامتی"
      },
      {
        "uuid": "8f787827-12e7-486b-be78-15d78bcf84b5",
        "id": "2502",
        "name": "سلامت و روان"
      },
      {
        "uuid": "9db5fe73-ea1c-401d-b8e6-5c7459a06975",
        "id": "2503",
        "name": "تغذیه"
      }
    ]
  }
]

94. 🔵 POST post

POST /api/v1/blog/

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای مدیریت مطالب وبلاگ در سیستم طراحی شده است. شما می‌توانید از طریق این API مقالات جدید ایجاد کنید، مقالات موجود را مشاهده، ویرایش یا حذف کنید.

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string
X-CSRF-Token string

Request Body

فیلد نوع الزامی توضیح / مثال
label string
description string
field_image array<object>

مثال Request

{
  "label": "asas",
  "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit, dapibus commodo ligula id facilisi nibh mus, scelerisque fringilla quam maecenas at morbi. Scelerisque hac ridiculus diam nascetur cubilia morbi...",
  "field_image": [
    {
      "target_id": 1
    },
    {
      "target_id": 2
    }
  ]
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


95. 🟡 PATCH patch

PATCH /api/v1/blog/72522a1d-67c0-4625-b436-0892d186dc4b

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این endpoint برای ویرایش اطلاعات یک مقاله موجود استفاده می‌شود. شناسه یکتای مقاله تنها فیلدهایی که می‌خواهید تغییر دهید را ارسال کنید: - 200: مقاله با موفقیت به‌روزرسانی شد - 400: داده‌های ارسالی نامعتبر هستند - 404: مقاله یافت نشد - 401: احراز هویت مورد نیاز است - 403: دسترسی به ویرایش این مقاله ندارید - 422: خطا در اعتبارسنجی داده‌ها - 500: خطای داخلی سرور --- - 200: مقاله با موفقیت حذف شد - 404: مقاله یافت نشد - 401: احراز هویت مورد نیاز است - 403: دسترسی به حذف این مقاله ندارید - 500: خطای داخلی سرور --- - label: عنوان مقاله - description: محتوای کامل مقاله - image: آرایه‌ای از شناسه‌های تصاویر - tag: آرایه‌ای از شناسه‌های برچسب‌ها - top: وضعیت ویژه بودن مقاله (1 = ویژه، 0 = معمولی) - uuid: شناسه یکتا (تولید خودکار) - title: عنوان مقاله (از label تبدیل می‌شود) - body: آبجکت محتوا (از description تبدیل می‌شود) - author: نام نویسنده (تولید خودکار) - status: وضعیت انتشار (تولید خودکار) - created: زمان ایجاد (timestamp خودکار) - changed: زمان آخرین تغییر (timestamp خودکار) - images: آرایه تصاویر با URL های کامل - tag: آرایه برچسب‌ها (ممکن است خالی باشد) فیلد image یک آرایه از شناسه‌های عددی تصاویر است: - هر عدد نمایانگر یک تصویر آپلود شده در سیستم است - این شناسه‌ها در response به URL های کامل تبدیل می‌شوند فیلد tag یک آرایه از شناسه‌های عددی برچسب‌ها است: - هر عدد نمایانگر یک برچسب از پیش تعریف شده در سیستم است - این شناسه‌ها در response ممکن است به نام‌های برچسب تبدیل شوند - 1: مقاله ویژه و مهم (نمایش در بالای لیست) - 0: مقاله معمولی - فیلد label به title در response تبدیل می‌شود - فیلد description به **body.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

Request Body

فیلد نوع الزامی توضیح / مثال
label string
description string

مثال Request

{
  "label": "test",
  "description": "Lorem ipsum dolor sit amet consectetur adipiscing elit, dapibus commodo ligula id facilisi nibh mus, scelerisque fringilla quam maecenas at morbi. Scelerisque hac ridiculus diam nascetur cubilia morbi..."
}

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


96. 🔴 DELETE delete

DELETE /api/v1/blog/72522a1d-67c0-4625-b436-0892d186dc4b

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این endpoint برای حذف یک مقاله استفاده می‌شود. شناسه یکتای مقاله - 200: مقاله با موفقیت حذف شد - 404: مقاله یافت نشد - 401: احراز هویت مورد نیاز است - 403: دسترسی به حذف این مقاله ندارید - 500: خطای داخلی سرور --- - label: عنوان مقاله - description: محتوای کامل مقاله - image: آرایه‌ای از شناسه‌های تصاویر - tag: آرایه‌ای از شناسه‌های برچسب‌ها - top: وضعیت ویژه بودن مقاله (1 = ویژه، 0 = معمولی) - uuid: شناسه یکتا (تولید خودکار) - title: عنوان مقاله (از label تبدیل می‌شود) - body: آبجکت محتوا (از description تبدیل می‌شود) - author: نام نویسنده (تولید خودکار) - status: وضعیت انتشار (تولید خودکار) - created: زمان ایجاد (timestamp خودکار) - changed: زمان آخرین تغییر (timestamp خودکار) - images: آرایه تصاویر با URL های کامل - tag: آرایه برچسب‌ها (ممکن است خالی باشد) فیلد image یک آرایه از شناسه‌های عددی تصاویر است: - هر عدد نمایانگر یک تصویر آپلود شده در سیستم است - این شناسه‌ها در response به URL های کامل تبدیل می‌شوند فیلد tag یک آرایه از شناسه‌های عددی برچسب‌ها است: - هر عدد نمایانگر یک برچسب از پیش تعریف شده در سیستم است - این شناسه‌ها در response ممکن است به نام‌های برچسب تبدیل شوند - 1: مقاله ویژه و مهم (نمایش در بالای لیست) - 0: مقاله معمولی - فیلد label به title در response تبدیل می‌شود - فیلد description به **body.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string
Content-Type string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


97. 🟢 GET get blog

GET /api/v1/blog/1805d516-46d3-474d-96ba-023bad40c516

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این endpoint برای مشاهده جزئیات یک مقاله خاص استفاده می‌شود. شناسه یکتای مقاله (مثال: 550e8400-e29b-41d4-a716-446655440000) - 200: مقاله با موفقیت بازیابی شد - 404: مقاله یافت نشد - 401: احراز هویت مورد نیاز است - 500: خطای داخلی سرور --- - label: عنوان مقاله - description: محتوای کامل مقاله - image: آرایه‌ای از شناسه‌های تصاویر - tag: آرایه‌ای از شناسه‌های برچسب‌ها - top: وضعیت ویژه بودن مقاله (1 = ویژه، 0 = معمولی) - uuid: شناسه یکتا (تولید خودکار) - title: عنوان مقاله (از label تبدیل می‌شود) - body: آبجکت محتوا (از description تبدیل می‌شود) - author: نام نویسنده (تولید خودکار) - status: وضعیت انتشار (تولید خودکار) - created: زمان ایجاد (timestamp خودکار) - changed: زمان آخرین تغییر (timestamp خودکار) - images: آرایه تصاویر با URL های کامل - tag: آرایه برچسب‌ها (ممکن است خالی باشد) فیلد image یک آرایه از شناسه‌های عددی تصاویر است: - هر عدد نمایانگر یک تصویر آپلود شده در سیستم است - این شناسه‌ها در response به URL های کامل تبدیل می‌شوند فیلد tag یک آرایه از شناسه‌های عددی برچسب‌ها است: - هر عدد نمایانگر یک برچسب از پیش تعریف شده در سیستم است - این شناسه‌ها در response ممکن است به نام‌های برچسب تبدیل شوند - 1: مقاله ویژه و مهم (نمایش در بالای لیست) - 0: مقاله معمولی - فیلد label به title در response تبدیل می‌شود - فیلد description به **body.

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


98. 🟢 GET list blogs

GET /api/v1/blogs

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

این API برای دریافت لیست تمام مقالات وبلاگ در سیستم طراحی شده است. شما می‌توانید از طریق این API لیست مقالات را با قابلیت‌های جستجو، فیلترینگ، صفحه‌بندی و مرتب‌سازی مشاهده کنید.

پارامترهای Query

پارامتر نوع الزامی توضیح
page string — مثال: 1
title string — مثال: نشانه های
limit string — مثال: 10
tag string — مثال: 3637

هدرهای اضافی

هدر نوع الزامی توضیح
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.


99. 🔵 POST image upload

POST /file/upload/blog/blog/field_image

🔐 احراز هویت: Authorization: Bearer {access_token} — الزامی

هدرهای اضافی

هدر نوع الزامی توضیح
Content-Type string
Content-Disposition string
X-CSRF-Token string

پاسخ‌ها

200

⚠️ ساختار پاسخ مستند نشده — باید در Symfony تعریف و مستند شود.