feat: add CategoryImporter service and SeedCategoriesCommand for seeding category data

- Implemented CategoryImporter service to handle bulk export/import logic for categories.
- Created SeedCategoriesCommand to seed category tables from JSON files in data/seed/.
- Added validation and normalization for category data during import.
- Ensured proper error handling and user feedback during the seeding process.
This commit is contained in:
hamed
2026-06-30 21:58:44 +03:30
parent 22937dfa56
commit 9eb5a03258
22 changed files with 5236 additions and 1032 deletions
+1 -5
View File
@@ -653,13 +653,9 @@
"651": "Community 651",
"652": "Community 652",
"653": "Community 653",
"659": "Community 659",
"660": "Community 660",
"661": "Community 661",
"654": "Community 654",
"662": "Community 662",
"663": "Community 663",
"666": "Community 666",
"667": "Community 667",
"668": "Community 668",
"669": "Community 669",
"670": "Community 670",
+112 -148
View File
@@ -1,16 +1,16 @@
# Graph Report - clinicpro (2026-06-30)
## Corpus Check
- 657 files · ~453,738 words
- 663 files · ~463,560 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 8314 nodes · 11496 edges · 665 communities (540 shown, 125 thin omitted)
- 8328 nodes · 11514 edges · 661 communities (532 shown, 129 thin omitted)
- Extraction: 98% EXTRACTED · 2% INFERRED · 0% AMBIGUOUS · INFERRED: 264 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `80319610`
- Built from commit: `22937dfa`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -655,13 +655,9 @@
- [[_COMMUNITY_Community 651|Community 651]]
- [[_COMMUNITY_Community 652|Community 652]]
- [[_COMMUNITY_Community 653|Community 653]]
- [[_COMMUNITY_Community 659|Community 659]]
- [[_COMMUNITY_Community 660|Community 660]]
- [[_COMMUNITY_Community 661|Community 661]]
- [[_COMMUNITY_Community 654|Community 654]]
- [[_COMMUNITY_Community 662|Community 662]]
- [[_COMMUNITY_Community 663|Community 663]]
- [[_COMMUNITY_Community 666|Community 666]]
- [[_COMMUNITY_Community 667|Community 667]]
- [[_COMMUNITY_Community 668|Community 668]]
- [[_COMMUNITY_Community 669|Community 669]]
- [[_COMMUNITY_Community 672|Community 672]]
@@ -683,45 +679,45 @@
assets/admin/components/ServiceTariffModal.tsx → assets/admin/lib/utils.ts
- `PersianDatePicker()` --calls--> `formatDate()` [EXTRACTED]
assets/admin/components/ui/PersianDatePicker.tsx → assets/admin/lib/utils.ts
- `MyFinancialPage()` --calls--> `formatRial()` [EXTRACTED]
assets/admin/pages/MyFinancialPage.tsx → assets/admin/lib/utils.ts
- `RepresentationSettlementPage()` --calls--> `formatRial()` [EXTRACTED]
assets/admin/pages/RepresentationSettlementPage.tsx → assets/admin/lib/utils.ts
- `SmsPage()` --calls--> `formatDateTime()` [EXTRACTED]
assets/admin/pages/SmsPage.tsx → assets/admin/lib/utils.ts
- `PrivateRoute()` --calls--> `useAuthStore` [EXTRACTED]
assets/admin/App.tsx → assets/admin/stores/authStore.ts
- `PublicRoute()` --calls--> `useAuthStore` [EXTRACTED]
assets/admin/App.tsx → assets/admin/stores/authStore.ts
## Import Cycles
- None detected.
## Communities (665 total, 125 thin omitted)
## Communities (661 total, 129 thin omitted)
### Community 0 - "Community 0"
Cohesion: 0.04
Nodes (46): ALLOWED_ROLES, PrivateRoute(), PublicRoute(), RoleRoute(), queryClient, toastStyle, NewAppointmentModal(), LogoUploadField() (+38 more)
Cohesion: 0.05
Nodes (43): ALLOWED_ROLES, PrivateRoute(), PublicRoute(), RoleRoute(), queryClient, toastStyle, AddForm, addSchema (+35 more)
### Community 1 - "Community 1"
Cohesion: 0.03
Nodes (41): AddressData, AddrForm, addrSchema, AVATAR_COLORS, BookingMeta, CityOpt, DateOverrideData, DEFAULT_BOOKING_META (+33 more)
### Community 2 - "Community 2"
Cohesion: 0.10
Nodes (19): get, BeforeInstallPromptEvent, usePwaInstall(), api, ApiError, getToken(), refreshOnce(), request() (+11 more)
Cohesion: 0.07
Nodes (27): get, BeforeInstallPromptEvent, usePwaInstall(), api, ApiError, getToken(), refreshOnce(), request() (+19 more)
### Community 3 - "Community 3"
Cohesion: 0.05
Nodes (43): PaginatedResponse, formatDate(), STATUS_FILTERS, FILTERS, Breakdown, SOURCE_LABEL, Summary, STATUS_FILTERS (+35 more)
Cohesion: 0.04
Nodes (71): PaginatedResponse, formatDate(), ALL_STATUSES, AppointmentDetailPage(), STATUS_FILTERS, FILTERS, Breakdown, SOURCE_LABEL (+63 more)
### Community 4 - "Community 4"
Cohesion: 0.05
Nodes (11): DoctorServiceController, DoctorService, Doctor, DoctorServiceRepository, Collection, self, User, WeeklySchedule (+3 more)
Cohesion: 0.06
Nodes (8): DoctorService, Doctor, DoctorServiceRepository, Collection, self, User, WeeklySchedule, ManagerRegistry
### Community 5 - "Community 5"
Cohesion: 0.07
Nodes (3): UserProfile, self, User
### Community 6 - "Community 6"
Cohesion: 0.17
Nodes (8): SettlementController, SettlementRepository, Settlement, JsonResponse, Request, User, ManagerRegistry, User
Cohesion: 0.12
Nodes (12): SettlementController, SettlementRepository, WalletTransactionRepository, Settlement, JsonResponse, Request, User, ManagerRegistry (+4 more)
### Community 7 - "Community 7"
Cohesion: 0.07
@@ -729,7 +725,7 @@ Nodes (5): Clinic, Collection, Doctor, self, User
### Community 8 - "Community 8"
Cohesion: 0.08
Nodes (30): useSubscription(), AdminLayout(), avatarBg(), buildSections(), HUES, Props, ROLE_LABELS, Section (+22 more)
Nodes (28): useSubscription(), AdminLayout(), avatarBg(), buildSections(), HUES, Props, ROLE_LABELS, Section (+20 more)
### Community 9 - "Community 9"
Cohesion: 0.04
@@ -740,8 +736,8 @@ Cohesion: 0.04
Nodes (46): Clinic Address Management, Clinic API, DELETE `/api/v1/admin/clinic/{clinicUuid}/doctor/{doctorUuid}`, `DELETE /api/v1/clinic/{clinicUuid}/address/{addressUuid}`, Errors, Errors, Errors, Errors (+38 more)
### Community 11 - "Community 11"
Cohesion: 0.06
Nodes (35): FreeVisitPrice(), Pricing, usePaymentConfig(), ApiResponse, formatRial(), InsurancePricingPage(), FinancialSummary, MonthlyEntry (+27 more)
Cohesion: 0.05
Nodes (33): usePaymentConfig(), ApiResponse, emptyFeatures(), FEATURE_KEYS, FEATURE_LABELS, PeriodForm, periodSchema, PLAN_DISPLAY (+25 more)
### Community 12 - "Community 12"
Cohesion: 0.05
@@ -752,16 +748,16 @@ Cohesion: 0.08
Nodes (28): cn(), formatDateTime(), iranMobileOptionalSchema, iranMobileSchema, isValidIranMobile(), maskMobile(), sanitizeMobileInput(), toDate() (+20 more)
### Community 14 - "Community 14"
Cohesion: 0.10
Nodes (12): AppointmentSettingsController, DateOverride, Holiday, DateOverrideRepository, HolidayRepository, JsonResponse, Request, User (+4 more)
Cohesion: 0.15
Nodes (8): AppointmentSettingsController, Holiday, HolidayRepository, JsonResponse, Request, User, Doctor, ManagerRegistry
### Community 15 - "Community 15"
Cohesion: 0.10
Nodes (13): PaymentController, MockGateway, SepGateway, JsonResponse, Payment, PaymentGatewayInterface, Request, Response (+5 more)
### Community 16 - "Community 16"
Cohesion: 0.09
Nodes (6): PatientSession, Appointment, Collection, PatientRecord, self, SessionService
Cohesion: 0.07
Nodes (7): PatientSession, SmsWallet, Appointment, Collection, PatientRecord, self, SessionService
### Community 17 - "Community 17"
Cohesion: 0.05
@@ -772,20 +768,20 @@ Cohesion: 0.05
Nodes (38): API, API, API, API, API, Route, Route, Route (+30 more)
### Community 19 - "Community 19"
Cohesion: 0.07
Nodes (21): Contract, InsuranceOption, KIND_LABEL, ALL_STATUSES, AppointmentDetailPage(), FormData, schema, AdminUser (+13 more)
Cohesion: 0.09
Nodes (17): Contract, InsuranceOption, KIND_LABEL, FormData, schema, AdminUser, ChangeRoleModal(), getPrimaryRole() (+9 more)
### Community 20 - "Community 20"
Cohesion: 0.15
Nodes (3): AdminApiController, JsonResponse, Request
Cohesion: 0.12
Nodes (4): AdminApiController, InputValidator, JsonResponse, Request
### Community 21 - "Community 21"
Cohesion: 0.05
Nodes (34): formatNumber(), ClinicDetailPage(), AdminCharts, AdminDashboard(), AdminRecent, AdminStats, APPT_CLS, APPT_COLOR (+26 more)
Nodes (42): FreeVisitPrice(), Pricing, formatNumber(), formatRial(), ClinicDetailPage(), AdminCharts, AdminDashboard(), AdminRecent (+34 more)
### Community 22 - "Community 22"
Cohesion: 0.15
Nodes (9): RatingController, Like, LikeRepository, JsonResponse, Request, User, Comment, ManagerRegistry (+1 more)
Cohesion: 0.11
Nodes (14): RatingController, Like, Rate, LikeRepository, RateRepository, JsonResponse, Request, User (+6 more)
### Community 23 - "Community 23"
Cohesion: 0.05
@@ -800,8 +796,8 @@ Cohesion: 0.05
Nodes (39): Appointment API, Error Responses, Errors, Errors, Errors, Errors, Errors, Errors (+31 more)
### Community 26 - "Community 26"
Cohesion: 0.24
Nodes (4): InsuranceController, JsonResponse, Request, User
Cohesion: 0.15
Nodes (7): InsuranceController, EntityInsurancePricing, EntityInsurancePricingRepository, JsonResponse, Request, User, ManagerRegistry
### Community 27 - "Community 27"
Cohesion: 0.05
@@ -860,8 +856,8 @@ Cohesion: 0.09
Nodes (4): User, PasswordAuthenticatedUserInterface, self, UserInterface
### Community 41 - "Community 41"
Cohesion: 0.04
Nodes (41): CityForm, citySchema, ImportError, InsuranceForm, insuranceSchema, ProvinceForm, provinceSchema, ServiceForm (+33 more)
Cohesion: 0.06
Nodes (23): CityForm, citySchema, ImportError, InsuranceForm, insuranceSchema, LogoUploadField(), ProvinceForm, provinceSchema (+15 more)
### Community 42 - "Community 42"
Cohesion: 0.07
@@ -893,7 +889,7 @@ Nodes (4): Payment, Appointment, self, User
### Community 49 - "Community 49"
Cohesion: 0.07
Nodes (20): AppointmentsPage(), BookingSlot, CancelledBadge(), DateNavigator(), EMPTY_ARR, getPersianWeekDay(), navBtnSx, SessionGroup (+12 more)
Nodes (21): AppointmentsPage(), BookingSlot, CancelledBadge(), DateNavigator(), EMPTY_ARR, getPersianWeekDay(), navBtnSx, NewAppointmentModal() (+13 more)
### Community 50 - "Community 50"
Cohesion: 0.07
@@ -908,8 +904,8 @@ Cohesion: 0.07
Nodes (26): الزامات UI, باگ‌فیکس صفحه نوبت‌ها, باگ ۱ — کرش تقویم, باگ ۲ — روز هفته در DateNavigator, باگ ۳ — پیام «slot نیست», باگ ۴ — نوبت جدید: نام اجباری + find-or-create patient, باگ ۵ — patient_mobile نشان می‌دهد موبایل پزشک, باگ ۶ — نوبت‌های رزرو شده در نمایش زمانبندی (+18 more)
### Community 53 - "Community 53"
Cohesion: 0.11
Nodes (13): AppLogRepository, ClaimItemRepository, DoctorInsuranceRepository, PreRegistrationRepository, SmsSettingsRepository, ServiceEntityRepository, SmsSettings, ManagerRegistry (+5 more)
Cohesion: 0.08
Nodes (15): AppLogRepository, CityRepository, ClaimItemRepository, InvoiceItemRepository, PreRegistrationRepository, SiteConfigRepository, ServiceEntityRepository, ManagerRegistry (+7 more)
### Community 54 - "Community 54"
Cohesion: 0.10
@@ -945,24 +941,20 @@ Nodes (22): Billing API — صورتحساب (فاز ۴ سیستم صورتحس
### Community 62 - "Community 62"
Cohesion: 0.08
Nodes (20): Authentication, ClinicPro — API Documentation Index, Error Code Reference, Modules, Standard Response Envelope, Bulk import / export, DELETE `/api/v1/admin/specialty/{id}`, Errors (+12 more)
Nodes (24): Bulk import / export, DELETE `/api/v1/admin/specialty/{id}`, Errors, Errors, Errors, Errors, GET `/api/v1/admin/specialties`, GET `/api/v1/specialties` (+16 more)
### Community 63 - "Community 63"
Cohesion: 0.22
Nodes (5): AuthController, RateLimiterFactory, JsonResponse, Request, User
### Community 64 - "Community 64"
Cohesion: 0.32
Nodes (4): SmsWalletController, JsonResponse, Request, User
Cohesion: 0.20
Nodes (7): SmsWalletController, SmsSettingsRepository, SmsSettings, JsonResponse, Request, User, ManagerRegistry
### Community 65 - "Community 65"
Cohesion: 0.08
Nodes (24): 2. کاربر (User), 4. 🔵 `POST` verify code, 5. 🔵 `POST` send code, 6. 🔵 `POST` register, 7. 🔴 `DELETE` delete user, 8. 🟡 `PATCH` patch, 9. 🟢 `GET` list secretary, Request Body (+16 more)
### Community 66 - "Community 66"
Cohesion: 0.07
Nodes (4): ClinicStaff, SmsSettings, self, self
### Community 67 - "Community 67"
Cohesion: 0.11
Nodes (4): Invoice, Collection, InvoiceItem, self
@@ -1015,10 +1007,6 @@ Nodes (3): SubscriptionPlan, Collection, self
Cohesion: 0.09
Nodes (22): dependencies, @ckeditor/ckeditor5-build-classic, @ckeditor/ckeditor5-react, @fontsource/vazirmatn, @heroicons/react, @hookform/resolvers, jalaali-js, leaflet (+14 more)
### Community 82 - "Community 82"
Cohesion: 0.05
Nodes (14): CategoryImportTest, Connection, RepositoryClassMappingTest, KernelTestCase, LoggerInterface, DbLogger, KavehNegarProvider, RanginehProvider (+6 more)
### Community 83 - "Community 83"
Cohesion: 0.09
Nodes (21): Backend, CSS / UI, Frontend, روند اجرای هر قابلیت, قبل از شروع — تحلیل پرامپت و ساخت Todo, قوانین اجرا (اجباری — هیچ استثنایی ندارد), قوانین خاص این پروژه, مثال اجرا (+13 more)
@@ -1032,8 +1020,8 @@ Cohesion: 0.07
Nodes (29): devDependencies, @babel/core, @babel/preset-env, @babel/preset-react, @babel/preset-typescript, core-js, @hotwired/stimulus, jsdom (+21 more)
### Community 86 - "Community 86"
Cohesion: 0.07
Nodes (13): AppointmentExpiryServiceTest, LowTierFixesTest, SendCodeMobileRateLimitTest, ClaimsListPaginationTest, ServiceItemStaffOwnershipTest, EntityManagerInterface, KernelBrowser, CommentPaginationTest (+5 more)
Cohesion: 0.06
Nodes (15): AppointmentExpiryServiceTest, LowTierFixesTest, SendCodeMobileRateLimitTest, ClaimsListPaginationTest, ServiceItemDeleteCleanupTest, ServiceItemStaffOwnershipTest, EntityManagerInterface, KernelBrowser (+7 more)
### Community 87 - "Community 87"
Cohesion: 0.10
@@ -1068,8 +1056,8 @@ Cohesion: 0.10
Nodes (20): 12. تنظیمات نوبت — تعطیلات, 76. 🔴 `DELETE` delete, 77. 🔵 `POST` post, 78. 🟡 `PATCH` patch, 79. 🔴 `DELETE` delete, 80. 🟢 `GET` get, Request Body, Request Body (+12 more)
### Community 95 - "Community 95"
Cohesion: 0.09
Nodes (7): ClinicSubscription, TenantInsuranceService, CoverageRule, TenantInsurance, Payment, SubscriptionPeriod, SubscriptionPlan
Cohesion: 0.15
Nodes (4): ClinicSubscription, Payment, SubscriptionPeriod, SubscriptionPlan
### Community 96 - "Community 96"
Cohesion: 0.18
@@ -1096,7 +1084,7 @@ Cohesion: 0.10
Nodes (19): Backend — endpoint اشتراک, Frontend — App.tsx, Frontend — authStore, Frontend — Sidebar, اعمال محدودیت‌های اشتراک در پنل ادمین (Frontend Gate), ترتیب اجرا, زمینه, فایل‌های مرتبط (+11 more)
### Community 102 - "Community 102"
Cohesion: 0.10
Cohesion: 0.11
Nodes (19): Bulk import / export, DELETE `/api/v1/admin/tag/{id}`, Errors, Errors, Errors, Errors, GET `/api/v1/admin/tags`, GET `/api/v1/tags` (+11 more)
### Community 103 - "Community 103"
@@ -1121,7 +1109,7 @@ Nodes (6): AppointmentController, Appointment, Doctor, JsonResponse, Request, Us
### Community 108 - "Community 108"
Cohesion: 0.18
Nodes (7): BaseController, CategoryController, SmsMessageController, JsonResponse, JsonResponse, JsonResponse, Request
Nodes (7): BaseController, CategoryController, CategoryImportController, JsonResponse, JsonResponse, Request, JsonResponse
### Community 109 - "Community 109"
Cohesion: 0.29
@@ -1328,8 +1316,8 @@ Cohesion: 0.13
Nodes (13): Architecture, Auth, Backend (PHP/Symfony), Backend — `src/`, Category / Bundle system, Commands, Database, First-time setup (+5 more)
### Community 163 - "Community 163"
Cohesion: 0.11
Nodes (18): autoload, autoload-dev, psr-4, psr-4, conflict, symfony/symfony, description, extra (+10 more)
Cohesion: 0.13
Nodes (14): autoload, autoload-dev, psr-4, psr-4, conflict, symfony/symfony, description, license (+6 more)
### Community 164 - "Community 164"
Cohesion: 0.29
@@ -1399,10 +1387,6 @@ Nodes (3): PatientRecord, Collection, User
Cohesion: 0.23
Nodes (3): WeeklySchedule, Doctor, self
### Community 182 - "Community 182"
Cohesion: 0.13
Nodes (13): emptyFeatures(), FEATURE_KEYS, FEATURE_LABELS, PeriodForm, periodSchema, PLAN_DISPLAY, PlanForm, planSchema (+5 more)
### Community 183 - "Community 183"
Cohesion: 0.14
Nodes (13): `UserDetailPage.tsx` — فقط user query, زمینه, فایل‌های مرتبط, قرارداد پروفایل (`UserProfile.toArray`), مشکل / هدف, نمایش پروفایل کاربر در صفحه‌ی جزئیات کاربرِ پنل ادمین, نکات مهم, وضعیت فعلی (کد واقعی) (+5 more)
@@ -1473,7 +1457,7 @@ Nodes (13): Endpoint ها, PATCH /api/v1/secretary/{uuid}, POST /api/v1/secretar
### Community 201 - "Community 201"
Cohesion: 0.15
Nodes (13): Admin API, Clinic Invitation Management, GET `/api/v1/admin/representations`, GET `/api/v1/admin/secretaries`, GET /api/v1/admin/settings, PATCH /api/v1/admin/settings, Query Parameters, Query Parameters (+5 more)
Nodes (13): Admin API, Clinic Invitation Management, GET `/api/v1/admin/payments`, GET `/api/v1/admin/representations`, GET /api/v1/admin/settings, PATCH /api/v1/admin/settings, Payment Management, Query Parameters (+5 more)
### Community 202 - "Community 202"
Cohesion: 0.15
@@ -1488,16 +1472,16 @@ Cohesion: 0.21
Nodes (6): AuthenticationException, ExceptionSubscriber, SecurityHeadersSubscriber, EventSubscriberInterface, ExceptionEvent, ResponseEvent
### Community 205 - "Community 205"
Cohesion: 0.10
Nodes (14): Command, CancelExpiredAppointmentsCommand, CreateAdminCommand, SeedSmsMessageTemplatesCommand, SmsMessageTemplateRepository, SmsTextResolver, SmsMessageTemplate, InputInterface (+6 more)
Cohesion: 0.13
Nodes (13): Command, CancelExpiredAppointmentsCommand, CreateAdminCommand, SeedCategoriesCommand, SeedSmsMessageTemplatesCommand, InputInterface, OutputInterface, InputInterface (+5 more)
### Community 206 - "Community 206"
Cohesion: 0.35
Nodes (6): DashboardController, Clinic, DoctorSecretary, JsonResponse, Request, User
### Community 207 - "Community 207"
Cohesion: 0.15
Nodes (13): ۲. مدل داده و موجودیت‌ها, ۲.۱ کاربر (User), ۲.۱۰ پرداخت (Payment Types), ۲.۱۰.۱ پرداخت نوبت, ۲.۱۰.۲ پرداخت اشتراک, ۲.۱۱ پروفایل بیمار (Profile), ۲.۱۲ وبلاگ (Blog), ۲.۳ دکتر (Doctor) (+5 more)
Cohesion: 0.07
Nodes (30): ۲. مدل داده و موجودیت‌ها, ۲.۱ کاربر (User), ۲.۱۰ پرداخت (Payment Types), ۲.۱۰.۱ پرداخت نوبت, ۲.۱۰.۲ پرداخت اشتراک, ۲.۱۱ پروفایل بیمار (Profile), ۲.۱۲ وبلاگ (Blog), ۲.۱۳ نظرات، لایک و امتیازدهی (+22 more)
### Community 208 - "Community 208"
Cohesion: 0.23
@@ -1664,8 +1648,8 @@ Cohesion: 0.18
Nodes (11): 1. 🔵 `POST` refresh token, 1. احراز هویت (Authentication), 2. 🟢 `GET` X-CSRF-Token, 3. 🟢 `GET` user info 🆕, Request Body, بخش دوم — مستند کامل API, خطاهای عمومی, فهرست مطالب (+3 more)
### Community 255 - "Community 255"
Cohesion: 0.18
Nodes (11): GET /api/v1/doctors/{id}, GET /api/v1/doctors/{id}/insurances, GET /api/v1/representations/{id}, GET /oauth/userinfo — اطلاعات کاربر (سازگار با دروپال), POST /api/v1/representations/{id}/bank-accounts, POST /oauth/token — تجدید توکن (Refresh), POST /oauth/token — ورود به سیستم, Task-02: احراز هویت (Authentication) (+3 more)
Cohesion: 0.11
Nodes (19): GET /api/v1/appointment-settings/slots — دریافت اسلات‌های خالی, GET /api/v1/categories/cities — شهرها, GET /api/v1/categories/states — استان‌ها, GET /api/v1/doctors/{id}, GET /api/v1/doctors/{id}/insurances, GET /api/v1/representations/{id}, GET /oauth/userinfo — اطلاعات کاربر (سازگار با دروپال), POST /api/v1/appointment-settings/holidays — ثبت تعطیلی (فقط ادمین) (+11 more)
### Community 256 - "Community 256"
Cohesion: 0.29
@@ -1736,8 +1720,8 @@ Cohesion: 0.18
Nodes (10): Endpoint های موجود که تغییر می‌کنند, GET /api/v1/admin/dashboard/charts?from=UNIX&to=UNIX, GET /api/v1/dashboard/clinic, GET /api/v1/dashboard/doctor, تسک ۱۶: داشبورد هوشمند — چارت + فیلتر زمانی, توضیح, زمان تخمینی, فیلتر بازه زمانی (+2 more)
### Community 274 - "Community 274"
Cohesion: 0.22
Nodes (3): CategoryImportController, JsonResponse, Request
Cohesion: 0.19
Nodes (5): Authentication, ClinicPro — API Documentation Index, Error Code Reference, Modules, Standard Response Envelope
### Community 275 - "Community 275"
Cohesion: 0.38
@@ -1748,8 +1732,8 @@ Cohesion: 0.20
Nodes (9): Architecture Audit — ClinicPro Symfony 7 Migration, Architecture Score (بعد از اصلاحات), Architecture Violations, Executive Summary, Final Verdict (بعد از اصلاحات), Missing Requirements (کامل), اصلاحات اعمال‌شده (بعد از Audit), دلیل تصمیم (+1 more)
### Community 277 - "Community 277"
Cohesion: 0.20
Nodes (9): بخش اول — مستند محصول (PRD), فهرست کلی, کلینیک پرو — مستند جامع فنی و API, ۵. فهرست مشکلات شناسایی‌شده و اصلاحات لازم, ۶. پیوست, ۶.۱ دیاگرام وضعیت نوبت, ۶.۲ جریان کمیسیون, ۶.۳ بررسی محدودیت منشی (+1 more)
Cohesion: 0.08
Nodes (23): GET /api/v1/sms/balance — موجودی حساب پیامک, POST /api/v1/sms/queue — افزودن به صف, بخش اول — مستند محصول (PRD), ثبت‌نام دکتر — از طریق نماینده, ثبت‌نام دکتر — از طریق کلینیک, ثبت‌نام دکتر — مستقل, فهرست کلی, کلینیک پرو — مستند جامع فنی و API (+15 more)
### Community 279 - "Community 279"
Cohesion: 0.20
@@ -1853,7 +1837,7 @@ Nodes (16): آماده‌سازی پروژه ClinicPro برای دیپلوی ر
### Community 304 - "Community 304"
Cohesion: 0.04
Nodes (56): 29. 🟢 `GET` clinic list 🆕, 30. 🟢 `GET` get 🆕, 31. 🟡 `PATCH` patch, 33. 🔵 `POST` image_clinic, 34. 🔵 `POST` image logo, 36. 🟢 `GET` get my rate, 37. 🔵 `POST` post, 39. 🟡 `PATCH` Comment confirmation (+48 more)
Nodes (52): 29. 🟢 `GET` clinic list 🆕, 30. 🟢 `GET` get 🆕, 31. 🟡 `PATCH` patch, 32. 🔵 `POST` post, 33. 🔵 `POST` image_clinic, 34. 🔵 `POST` image logo, 36. 🟢 `GET` get my rate, 37. 🔵 `POST` post (+44 more)
### Community 306 - "Community 306"
Cohesion: 0.07
@@ -1903,10 +1887,6 @@ Nodes (3): SubscriptionPlanRepository, ManagerRegistry, SubscriptionPlan
Cohesion: 0.36
Nodes (3): TariffRepository, ManagerRegistry, Tariff
### Community 318 - "Community 318"
Cohesion: 0.15
Nodes (5): EntityInsurancePricing, TenantInsuranceCleanupTest, EntityInsurancePricingRepository, TenantInsuranceCleanupService, ManagerRegistry
### Community 319 - "Community 319"
Cohesion: 0.39
Nodes (3): UserRepository, ManagerRegistry, User
@@ -1979,10 +1959,6 @@ Nodes (15): ClaimsPage.tsx — بدون صفحه‌بندی، فقط `data.data.
Cohesion: 0.39
Nodes (5): JsonContains, FunctionNode, Node, Parser, SqlWalker
### Community 340 - "Community 340"
Cohesion: 0.24
Nodes (5): WalletTransactionRepository, WalletTransactionsPaginationTest, ManagerRegistry, User, WalletTransaction
### Community 341 - "Community 341"
Cohesion: 0.12
Nodes (15): بازنویسی متن استارت‌اپی و رفع نمایش موبایل صفحه فرود (Landing), تست نهایی, راهنمای بازنویسی (نمونه لحن استارت‌اپی — می‌توانی بهترش کنی), زمینه, فایل‌های مرتبط, مشکل / هدف, مشکل ۲٫۱ — سرریز هدر روی گوشی, مشکل ۲٫۲ — منوی موبایل با inline-style شکننده باز می‌شود و بسته نمی‌شود (+7 more)
@@ -2004,20 +1980,20 @@ Cohesion: 0.25
Nodes (8): بک‌اند — تغییرات `Appointment` entity:, بک‌اند — تغییرات `AppointmentController::book()`:, بک‌اند — موجودیت `SiteConfig` (جدید):, بک‌اند — کنترلر تنظیمات ادمین (جدید):, فرانت‌اند — تغییرات `AppointmentsPage.tsx`:, فرانت‌اند — صفحه تنظیمات ادمین (جدید):, مرحله ۹ — سیستم کمیسیون نوبت‌دهی (بک‌اند + فرانت‌اند) — جدید, منطق کسب‌وکار:
### Community 346 - "Community 346"
Cohesion: 0.39
Nodes (3): CityRepository, City, ManagerRegistry
Cohesion: 0.26
Nodes (3): TenantInsuranceService, CoverageRule, TenantInsurance
### Community 347 - "Community 347"
Cohesion: 0.25
Nodes (8): ثبت‌نام دکتر — از طریق نماینده, ثبت‌نام دکتر — از طریق کلینیک, ثبت‌نام دکتر — مستقل, ۱. معرفی محصول, ۱.۱ نقش‌های سیستم, ۱.۲ فلوهای عملیاتی اصلی, ۱.۳ پلن‌های اشتراک, ۱.۴ سیستم پیامک
Cohesion: 0.36
Nodes (3): DoctorServiceController, JsonResponse, Request
### Community 348 - "Community 348"
Cohesion: 0.39
Nodes (3): ProvinceRepository, ManagerRegistry, Province
### Community 349 - "Community 349"
Cohesion: 0.20
Nodes (10): Category Import / Export API, Errors, Errors, GET `/api/v1/admin/categories/{bundle}/export`, Per-row validation rules, POST `/api/v1/admin/categories/{bundle}/import`, Request Body (`application/json`), Response `200` (+2 more)
Cohesion: 0.18
Nodes (11): Category Import / Export API, Errors, Errors, GET `/api/v1/admin/categories/{bundle}/export`, Per-row validation rules, POST `/api/v1/admin/categories/{bundle}/import`, Request Body (`application/json`), Response `200` (+3 more)
### Community 350 - "Community 350"
Cohesion: 0.43
@@ -2028,8 +2004,8 @@ Cohesion: 0.50
Nodes (4): UserActiveContextRepository, ManagerRegistry, User, UserActiveContext
### Community 352 - "Community 352"
Cohesion: 0.38
Nodes (5): Rate, RateRepository, Doctor, ManagerRegistry, User
Cohesion: 0.25
Nodes (4): SmsMessageTemplateRepository, SmsTextResolver, SmsMessageTemplate, ManagerRegistry
### Community 354 - "Community 354"
Cohesion: 0.36
@@ -2087,6 +2063,10 @@ Nodes (7): ادمین, دکتر نمونه کامل — تبریز, دکتران
Cohesion: 0.29
Nodes (7): Dashboard, GET `/api/v1/admin/dashboard/charts`, GET `/api/v1/admin/dashboard/recent`, GET `/api/v1/admin/dashboard/stats`, Response `200`, Response `200`, Response `200`
### Community 368 - "Community 368"
Cohesion: 0.21
Nodes (5): DateOverrideOwnershipTest, DateOverride, DateOverrideRepository, Doctor, ManagerRegistry
### Community 369 - "Community 369"
Cohesion: 0.29
Nodes (7): php-http/discovery, symfony/flex, symfony/runtime, config, allow-plugins, bump-after-update, sort-packages
@@ -2099,10 +2079,6 @@ Nodes (7): Authentication, Authorization, Input Validation, Logging Security, Ra
Cohesion: 0.15
Nodes (6): UniqueConstraintsTest, FinancialBreakdown, FinancialBreakdownRepository, FinancialBreakdownIntegrityTest, ManagerRegistry, Payment
### Community 372 - "Community 372"
Cohesion: 0.25
Nodes (8): ۲.۲ انواع دسته‌بندی (Category Types), ۲.۲.۱ تگ (Tag), ۲.۲.۲ استان (State), ۲.۲.۳ شهر (City), ۲.۲.۴ بیمه پایه (Basic Insurance), ۲.۲.۵ بیمه مکمل (Supplementary Insurance), ۲.۲.۶ تخصص دکتر (Doctor Specialty), ۲.۲.۷ خدمات دکتر (Doctor Services)
### Community 374 - "Community 374"
Cohesion: 0.29
Nodes (7): API, Entity جدید, Frontend, اپیک ۱ — پرسنل (Staff), توضیح, فایل‌های جدید, نیازمندی‌های کارکردی
@@ -2199,14 +2175,26 @@ Nodes (6): ClaimAmountBoundsTest, ClaimsListNPlusOneTest, ClaimItem, Claim, Doct
Cohesion: 0.33
Nodes (4): initiate(), verify(), PaymentInitResult, PaymentVerifyResult
### Community 400 - "Community 400"
Cohesion: 0.23
Nodes (5): AbstractMigration, Schema, Version20260609131553, Schema, Version20260609134741
### Community 405 - "Community 405"
Cohesion: 0.47
Nodes (3): CommissionService, Payment, Representation
### Community 407 - "Community 407"
Cohesion: 0.36
Nodes (3): SmsService, SendSmsMessage, SmsProviderInterface
### Community 418 - "Community 418"
Cohesion: 0.17
Nodes (11): دیپلوی ClinicPro روی Coolify (Docker Compose), رفع اشکال, مراحل دیپلوی, معماری دیپلوی, نکات عملیاتی, چند دامنه فرانت‌اند (مهم), ۱. ساخت Resource در Coolify, ۲. اختصاص دامنه (+3 more)
### Community 440 - "Community 440"
Cohesion: 0.43
Nodes (3): SmsMessageController, JsonResponse, Request
### Community 452 - "Community 452"
Cohesion: 0.10
Nodes (12): ClinicAddress, ClinicDoctorItem, ClinicInvitation, EditForm, editSchema, HUES_LIST, INV_STATUS_MAP, IRAN_CENTER (+4 more)
@@ -2300,8 +2288,8 @@ Cohesion: 0.40
Nodes (5): Errors, Notes, POST `/api/v1/notification-mobile/request-otp`, Request Body, Response `200`
### Community 482 - "Community 482"
Cohesion: 0.33
Nodes (6): GET /api/v1/sms/balance — موجودی حساب پیامک, POST /api/v1/sms/queue — افزودن به صف, ۴. سیستم حساب و صف پیامک, ۴.۱ حساب پیامک (SMS Account), ۴.۲ صف پیامک (SMS Queue), ۴.۳ API پیامک
Cohesion: 0.38
Nodes (3): RepositoryClassMappingTest, KernelTestCase, DbLoggerTest
### Community 483 - "Community 483"
Cohesion: 0.40
@@ -2323,10 +2311,6 @@ Nodes (5): Errors, GET `/api/v1/representation/dashboard/summary`, GET `/api/v1/
Cohesion: 0.40
Nodes (5): Admin Endpoints, GET /api/v1/admin/sms/settings/review, GET /api/v1/admin/sms/wallet-report, POST /api/v1/admin/sms/settings/{id}/approve, POST /api/v1/admin/sms/settings/{id}/reject
### Community 492 - "Community 492"
Cohesion: 0.40
Nodes (5): 32. 🔵 `POST` post, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 493 - "Community 493"
Cohesion: 0.20
Nodes (9): Backend Audit Backlog — ClinicPro, ☐ CRITICAL, ✅ DONE (committed on backend-audit), ☐ EPICS (design debt — cross-repo, defer; do NOT quick-fix), ☐ HIGH, ☐ LOW, ☐ MEDIUM, Progress (this audit session) (+1 more)
@@ -2611,10 +2595,6 @@ Nodes (15): دیپلوی ClinicPro (Symfony) روی لیارا با Docker, زم
Cohesion: 0.50
Nodes (4): API های جدید که باید ساخته شوند, API های موجود (استفاده کن، تغییر نده), تغییر روی API موجود, وضعیت فعلی API (مهم — قبل از پیاده‌سازی بخوان)
### Community 583 - "Community 583"
Cohesion: 0.23
Nodes (5): AbstractMigration, Schema, Version20260609134112, Schema, Version20260628165710
### Community 584 - "Community 584"
Cohesion: 0.50
Nodes (3): Entity: UserProfile, ساختار فایل‌ها, معماری — تسک ۰۳: ماژول پروفایل کاربر
@@ -2672,8 +2652,8 @@ Cohesion: 0.67
Nodes (3): POST `/api/v1/admin/sms/template/{uuid}/approve`, Request Body (`application/json`), Response `200`
### Community 602 - "Community 602"
Cohesion: 0.40
Nodes (5): Errors, PATCH `/api/v1/admin/specialty/{id}`, Path Parameters, Request Body (all optional), Response `200`
Cohesion: 0.48
Nodes (3): DoctorInsuranceRepository, DoctorInsurance, ManagerRegistry
### Community 603 - "Community 603"
Cohesion: 0.67
@@ -2695,17 +2675,13 @@ Nodes (5): DELETE `/api/v1/billing/tenant-insurances/{uuid}`, GET `/api/v1/billi
Cohesion: 0.39
Nodes (3): ClinicStaffRepository, ClinicStaff, ManagerRegistry
### Community 608 - "Community 608"
Cohesion: 0.50
Nodes (4): Errors, POST `/api/v1/admin/specialty`, Request Body (`application/json`), Response `201`
### Community 612 - "Community 612"
Cohesion: 0.67
Nodes (3): بک‌اند, فرانت‌اند, وضعیت فعلی کد (مهم — قبل از تغییر بخوان)
### Community 618 - "Community 618"
Cohesion: 0.16
Nodes (5): ServiceItemDeleteCleanupTest, ServiceCoverageNPlusOneTest, TenantServiceCoverageRepository, ManagerRegistry, TenantServiceCoverage
Cohesion: 0.12
Nodes (6): ServiceCoverageNPlusOneTest, TenantInsuranceCleanupTest, TenantServiceCoverageRepository, TenantInsuranceCleanupService, ManagerRegistry, TenantServiceCoverage
### Community 631 - "Community 631"
Cohesion: 0.50
@@ -2747,17 +2723,17 @@ Nodes (3): POST `/api/v1/admin/insurance/{id}/upload-logo`, Request, Response `2
Cohesion: 0.40
Nodes (5): 35. 🟡 `PATCH` patch, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 647 - "Community 647"
Cohesion: 0.43
Nodes (3): InvoiceItemRepository, InvoiceItem, ManagerRegistry
### Community 648 - "Community 648"
Cohesion: 0.40
Nodes (5): ۲.۸ تنظیمات نوبت (Appointment Settings), ۲.۸.۱ برنامه هفتگی (Weekly Schedule), ۲.۸.۲ تعطیلات (Holidays), ۲.۸.۳ لغو تعطیل (Date Override), ۲.۸.۴ الگوریتم محاسبه اسلات‌های خالی
Nodes (5): 41. 🟡 `PATCH` patch, Request Body, مثال Request, هدرهای اضافی, پاسخ‌ها
### Community 649 - "Community 649"
Cohesion: 0.50
Nodes (4): GET `/api/v1/admin/secretaries`, Query Parameters, Response `200`, Secretary Management
### Community 650 - "Community 650"
Cohesion: 0.40
Nodes (3): Props, StatTone, TONE
Cohesion: 0.50
Nodes (4): extra, symfony, allow-contrib, require
### Community 651 - "Community 651"
Cohesion: 0.53
@@ -2771,49 +2747,37 @@ Nodes (4): GET `/api/v1/admin/pre-registrations`, POST `/api/v1/admin/pre-regist
Cohesion: 0.50
Nodes (4): 38. 🟢 `GET` Unapproved comments, هدرهای اضافی, پارامترهای Query, پاسخ‌ها
### Community 659 - "Community 659"
### Community 654 - "Community 654"
Cohesion: 0.50
Nodes (4): GET /api/v1/appointment-settings/slots — دریافت اسلات‌های خالی, POST /api/v1/appointment-settings/holidays — ثبت تعطیلی (فقط ادمین), POST /api/v1/appointment-settings/overrides — ثبت Override توسط دکتر, Task-09: API تنظیمات نوبت
### Community 660 - "Community 660"
Cohesion: 0.50
Nodes (4): GET /api/v1/categories/cities — شهرها, GET /api/v1/categories/states — استان‌ها, Task-08: API دسته‌بندی‌ها, سایر Endpoint های دسته‌بندی — الزامی
### Community 661 - "Community 661"
Cohesion: 0.50
Nodes (4): ۲.۱۳ نظرات، لایک و امتیازدهی, ۲.۱۳.۱ نظر (Comment), ۲.۱۳.۲ لایک (Like), ۲.۱۳.۳ امتیاز (Rate)
Nodes (4): 44. 🟢 `GET` list comment, هدرهای اضافی, پارامترهای Query, پاسخ‌ها
### Community 662 - "Community 662"
Cohesion: 0.50
Nodes (4): Application Logs, GET `/api/v1/admin/logs`, Query Parameters, Response `200`
### Community 667 - "Community 667"
Cohesion: 0.50
Nodes (4): GET `/api/v1/admin/payments`, Payment Management, Query Parameters, Response `200`
### Community 672 - "Community 672"
Cohesion: 0.50
Nodes (4): GET `/api/v1/admin/settlements`, Query Parameters, Response `200`, Settlement Management
## Knowledge Gaps
- **3563 isolated node(s):** `ALLOWED_ROLES`, `Pricing`, `TenantInsurance`, `CoverageRow`, `Draft` (+3558 more)
- **3564 isolated node(s):** `ALLOWED_ROLES`, `Pricing`, `TenantInsurance`, `CoverageRow`, `Draft` (+3559 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **125 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **129 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `BaseController` connect `Community 108` to `Community 4`, `Community 6`, `Community 138`, `Community 139`, `Community 14`, `Community 15`, `Community 274`, `Community 275`, `Community 20`, `Community 22`, `Community 26`, `Community 164`, `Community 295`, `Community 300`, `Community 301`, `Community 175`, `Community 176`, `Community 177`, `Community 58`, `Community 59`, `Community 63`, `Community 64`, `Community 70`, `Community 71`, `Community 75`, `Community 206`, `Community 230`, `Community 103`, `Community 104`, `Community 107`, `Community 109`, `Community 121`, `Community 122`, `Community 252`?**
_High betweenness centrality (0.037) - this node is a cross-community bridge._
- **Why does `Version20260614181657` connect `Community 431` to `Community 583`?**
_High betweenness centrality (0.017) - this node is a cross-community bridge._
- **Why does `Version20260625150304` connect `Community 457` to `Community 583`?**
- **Why does `BaseController` connect `Community 108` to `Community 6`, `Community 138`, `Community 139`, `Community 14`, `Community 15`, `Community 275`, `Community 20`, `Community 22`, `Community 26`, `Community 164`, `Community 295`, `Community 300`, `Community 301`, `Community 175`, `Community 176`, `Community 177`, `Community 440`, `Community 58`, `Community 59`, `Community 63`, `Community 64`, `Community 70`, `Community 71`, `Community 75`, `Community 206`, `Community 347`, `Community 230`, `Community 103`, `Community 104`, `Community 107`, `Community 109`, `Community 121`, `Community 122`, `Community 252`?**
_High betweenness centrality (0.028) - this node is a cross-community bridge._
- **Why does `ApiTestCase` connect `Community 86` to `Community 609`, `Community 541`, `Community 484`, `Community 574`, `Community 618`, `Community 397`, `Community 495`, `Community 368`, `Community 497`, `Community 594`, `Community 562`, `Community 371`, `Community 565`, `Community 535`, `Community 636`, `Community 573`, `Community 318`, `Community 575`?**
_High betweenness centrality (0.019) - this node is a cross-community bridge._
- **Why does `Version20260614181657` connect `Community 431` to `Community 400`?**
_High betweenness centrality (0.017) - this node is a cross-community bridge._
- **What connects `ALLOWED_ROLES`, `Pricing`, `TenantInsurance` to the rest of the system?**
_3563 weakly-connected nodes found - possible documentation gaps or missing edges._
_3564 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Community 0` be split into smaller, more focused modules?**
_Cohesion score 0.04471153846153846 - nodes in this community are weakly interconnected._
_Cohesion score 0.047107014848950336 - nodes in this community are weakly interconnected._
- **Should `Community 1` be split into smaller, more focused modules?**
_Cohesion score 0.028985507246376812 - nodes in this community are weakly interconnected._
- **Should `Community 2` be split into smaller, more focused modules?**
_Cohesion score 0.10037878787878787 - nodes in this community are weakly interconnected._
_Cohesion score 0.07317073170731707 - nodes in this community are weakly interconnected._
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [], "edges": [], "skipped": "data json (non-object root)"}
@@ -0,0 +1 @@
{"nodes": [], "edges": [], "skipped": "data json (non-object root)"}
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"nodes": [], "edges": [], "skipped": "data json (non-object root)"}
@@ -0,0 +1 @@
{"nodes": [], "edges": [], "skipped": "data json (non-object root)"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+935 -609
View File
File diff suppressed because it is too large Load Diff
+36 -6
View File
@@ -2300,8 +2300,8 @@
"semantic_hash": ""
},
"config/services.yaml": {
"mtime": 1782749831.6264865,
"ast_hash": "e2fbe3625e44dc10f140933838278ac1",
"mtime": 1782843927.2499301,
"ast_hash": "6ddd0cb49e2be3c0d29348e843166ed1",
"semantic_hash": ""
},
"docs/Architecture_Audit.md": {
@@ -3415,8 +3415,8 @@
"semantic_hash": ""
},
"src/Category/Controller/CategoryImportController.php": {
"mtime": 1782839057.0287304,
"ast_hash": "f4d8651689e73ca956bc2a9570bba695",
"mtime": 1782843840.4128816,
"ast_hash": "c7d911f98ab9a98e3f8394370ebc2021",
"semantic_hash": ""
},
"tests/Category/CategoryImportTest.php": {
@@ -3425,8 +3425,38 @@
"semantic_hash": ""
},
"docs/api/category-import.md": {
"mtime": 1782839220.8153825,
"ast_hash": "da0c24b873a9f46c97cd8760ac4eeba5",
"mtime": 1782844030.4935105,
"ast_hash": "d7eaf7bd2002ca82b3a95e16b0eb34dd",
"semantic_hash": ""
},
"data/seed/cities.json": {
"mtime": 1782843868.7730389,
"ast_hash": "2baadcc7287ed58538b074906b531efc",
"semantic_hash": ""
},
"data/seed/doctor_services.json": {
"mtime": 1782843868.7779899,
"ast_hash": "4001a6181d3279c2f850e20748a33566",
"semantic_hash": ""
},
"data/seed/provinces.json": {
"mtime": 1782843868.7706103,
"ast_hash": "24b4c89c8deb44101cedaa3006b74751",
"semantic_hash": ""
},
"data/seed/specialties.json": {
"mtime": 1782843868.7755058,
"ast_hash": "37dc79f859896696d1f7dd74afecfabe",
"semantic_hash": ""
},
"src/Category/Command/SeedCategoriesCommand.php": {
"mtime": 1782843891.8818347,
"ast_hash": "2aa038b0454d52de87cc30f83d8c9da0",
"semantic_hash": ""
},
"src/Category/Service/CategoryImporter.php": {
"mtime": 1782843813.8434396,
"ast_hash": "47a348a1a7cf97da5de81caad5f026d9",
"semantic_hash": ""
}
}