feat(dashboard): persist active tab in URL and keep active tab on reload
All checks were successful
Deploy Canina / deploy (push) Successful in 1m30s

This commit is contained in:
parsa aghaei 2026-08-22 14:04:30 +03:30
parent a2b8afccc3
commit bf41ba038e
13 changed files with 17304 additions and 9367 deletions

View File

@ -1,3 +1,4 @@
import { Suspense } from 'react';
import type { Metadata } from 'next';
import UserDashboard from "../../components/UserDashboard";
import { getPageMetadata } from "../../lib/seo";
@ -12,6 +13,11 @@ export async function generateMetadata(): Promise<Metadata> {
}
export default function DashboardPage() {
return <UserDashboard />;
return (
<Suspense fallback={<div className="min-h-screen bg-medical-gray-50 flex items-center justify-center font-vazir text-xs text-medical-gray-400">در حال بارگذاری داشبورد...</div>}>
<UserDashboard />
</Suspense>
);
}

View File

@ -36,15 +36,30 @@ export default function UserDashboard() {
}, [isLoggedIn, router]);
const { orders } = useCartStore();
const [activeTab, setActiveTab] = React.useState<"profile" | "orders" | "wallet" | "addresses" | "tickets" | "pets" | "prescriptions" | "overview">("profile");
const validTabs = React.useMemo(() => ['profile', 'orders', 'wallet', 'addresses', 'tickets', 'pets', 'prescriptions'], []);
// Set tab from URL query param if present
// Initialize tab directly from URL or default to profile
const initialTab = (searchParams.get('tab') as "profile" | "orders" | "wallet" | "addresses" | "tickets" | "pets" | "prescriptions") || "profile";
const [activeTab, setActiveTab] = React.useState<"profile" | "orders" | "wallet" | "addresses" | "tickets" | "pets" | "prescriptions" | "overview">(
validTabs.includes(initialTab) ? initialTab : "profile"
);
// Handle tab click and update browser URL without full reloads
const handleTabChange = React.useCallback((tabId: "profile" | "orders" | "wallet" | "addresses" | "tickets" | "pets" | "prescriptions") => {
setActiveTab(tabId);
const newUrl = tabId === 'profile' ? '/dashboard' : `/dashboard?tab=${tabId}`;
window.history.replaceState(null, '', newUrl);
}, []);
// Sync tab if user navigates back/forward in browser history or searchParams change
useEffect(() => {
const tabParam = searchParams.get('tab');
if (tabParam && ['profile', 'orders', 'wallet', 'addresses', 'tickets', 'pets', 'prescriptions'].includes(tabParam)) {
if (tabParam && validTabs.includes(tabParam)) {
setActiveTab(tabParam as "profile" | "orders" | "wallet" | "addresses" | "tickets" | "pets" | "prescriptions");
} else if (!tabParam) {
setActiveTab("profile");
}
}, [searchParams]);
}, [searchParams, validTabs]);
const [isLoadingOrders, setIsLoadingOrders] = useState(false);
const [prescriptions, setPrescriptions] = useState<any[]>([]);
@ -402,7 +417,7 @@ export default function UserDashboard() {
{tabs.map(tab => (
<button
key={tab.id}
onClick={() => setActiveTab(tab.id as any)}
onClick={() => handleTabChange(tab.id as any)}
className={`flex items-center justify-center gap-2 px-3 sm:px-4 py-2.5 sm:py-3 rounded-xl sm:rounded-2xl transition-all font-bold text-xs sm:text-sm cursor-pointer ${activeTab === tab.id ? "bg-canina-blue text-white shadow-lg shadow-canina-blue/20" : "text-medical-gray-600 hover:bg-medical-gray-100 bg-medical-gray-50"}`}
>
<div className="flex-shrink-0">{tab.icon}</div>
@ -1214,7 +1229,7 @@ export default function UserDashboard() {
</div>
{isWalletRechargeAllowed ? (
<button
onClick={() => { setActiveTab("wallet"); setIsTopUpModalOpen(true); }}
onClick={() => { handleTabChange("wallet"); setIsTopUpModalOpen(true); }}
disabled={isTopUpModalOpen}
className="mt-5 sm:mt-8 bg-canina-blue text-white w-full py-3.5 sm:py-4 px-4 rounded-2xl font-black hover:bg-white hover:text-canina-blue transition-all shadow-lg shadow-black/20 flex items-center justify-center gap-2 text-xs sm:text-sm border border-canina-blue cursor-pointer"
>

View File

@ -144,7 +144,7 @@
"142": "OrderService",
"143": "admin.service.ts",
"144": "Baseline Command Plan & Reconciled Command History",
"145": "SmsSettingsPage.tsx",
"145": "MetricsController",
"146": "ErrorPages.tsx",
"147": "with-vpn.sh",
"148": "Architecture Specification",
@ -185,6 +185,7 @@
"183": "Raw Finding Verification & Disposition Report",
"184": "React + TypeScript + Vite",
"185": "Select.tsx",
"186": "Reports.tsx",
"187": "ts-node",
"188": "application/README.md",
"189": "@types/express",

File diff suppressed because one or more lines are too long

View File

@ -1,26 +1,26 @@
{
"0": ".retryPayment",
"0": "OrdersService",
"1": "productService.ts",
"2": "CmsController",
"3": "app.module.ts",
"4": "ReviewsService",
"4": "CreateReviewDto",
"5": "tickets.controller.ts",
"6": "userStore.ts",
"6": "AuthService",
"7": "MediaSelector.tsx",
"8": "PetProfile.tsx",
"9": "components/Skeleton.tsx",
"10": "DoctorsService",
"11": "trust-seals/page.tsx",
"9": "Roles",
"10": "DoctorQueryDto",
"11": "MenuService",
"12": "adminRoutes.tsx",
"13": "PrismaService",
"14": "pets/pets.controller.ts",
"15": "ProductsService",
"16": "lib/services/api.ts",
"16": "UserDashboard.tsx",
"17": "CreateVideoDto",
"18": "src/services/api.ts",
"19": "auth.controller.ts",
"20": "BE-001",
"21": "Roles",
"21": "SmsService",
"22": "FE-001",
"23": "ADM-001",
"24": "DB-001",
@ -29,57 +29,57 @@
"27": "DEVOPS-001",
"28": "DOC-001",
"29": "WholesaleService",
"30": "main.ts",
"30": "app-audit-verification.e2e-spec.js",
"31": "JwtAuthGuard",
"32": "ZibalService",
"33": "راهنمای تست سیستم (Software Testing)",
"34": "CategoriesController",
"35": "B2BService",
"36": "What You Must Do When Invoked",
"37": "toPersian",
"38": "UsersController",
"37": "lib/services/api.ts",
"38": "UsersService",
"39": "What You Must Do When Invoked",
"40": "SslController",
"41": "PodcastPlayerModal.tsx",
"42": "IngredientsService",
"43": "UsersService",
"44": "admin.module.ts",
"45": "Pagination.tsx",
"46": "SmsService",
"47": "OrdersService",
"43": "FaqService",
"44": "MediaController",
"45": "Media.tsx",
"46": "ContactService",
"47": "zibal.service.ts",
"48": "PrescriptionsService",
"49": "SmartAdvisorService",
"50": "TestimonialsService",
"51": "Role & Core Objective",
"52": "AuthController",
"53": "auth.module.ts",
"52": ".initiateOrderPayment",
"53": "ZibalEBankService",
"54": "compilerOptions",
"55": "Media.tsx",
"55": "PrescriptionsManager.tsx",
"56": "compilerOptions",
"57": "PetsController",
"58": "PaginationDto",
"59": "dependencies",
"60": "compilerOptions",
"61": "useSettingsStore",
"61": "HomeClient.tsx",
"62": "BlogsController",
"63": "reviews.controller.ts",
"63": "UpdateReviewDto",
"64": "BannersService",
"65": "Required Review Group Closures",
"66": "Coupons.tsx",
"67": "Operational Rules & Boundaries",
"68": "Operational Rules & Boundaries",
"69": "WikiController",
"70": "ApiOperation",
"71": "PetsController",
"70": "WikiController",
"71": ".update",
"72": "seo.module.ts",
"73": "admin.service.ts",
"73": "BlogsService",
"74": "🏢 AI Software Agency — Master Orchestration Protocol v3",
"75": "Operational Rules & Boundaries",
"76": "Operational Rules & Boundaries",
"77": "scripts",
"78": "Role & Core Objective",
"79": "HomeController",
"80": "VetGallery.tsx",
"80": "SafeImage.tsx",
"81": "devDependencies",
"82": "api",
"83": "Orders.tsx",
@ -97,12 +97,12 @@
"95": "Operational Rules & Boundaries",
"96": "exclude",
"97": "jest",
"98": "AdminController",
"98": "AdminService",
"99": "Comprehensive Change Log",
"100": "Operational Rules & Boundaries",
"101": "UITexts.tsx",
"102": "BlogsController",
"103": "ProductDto",
"103": "payment.service.ts",
"104": "WikiService",
"105": "1. Summary of Integrity Repairs Performed",
"106": "@nestjs/cli",
@ -110,8 +110,8 @@
"108": "Operational Rules & Boundaries",
"109": "Operational Rules & Boundaries",
"110": "AppService",
"111": "SmsLogQueryDto",
"112": "app-audit-verification.e2e-spec.js",
"111": "PetsController",
"112": "CreateEBankCheckoutDto",
"113": "Vazirmatn Changelog",
"114": "Vazirmatn Font فونت وزیرمتن",
"115": "Operational Rules & Boundaries",
@ -128,7 +128,7 @@
"126": "Role & Core Objective",
"127": "orchestrate.py",
"128": "backend/package.json",
"129": "CreateOrderDto",
"129": "CreateReminderDto",
"130": "graphify reference: extra exports and benchmark",
"131": "Phase 2 Final Quality Gate Summary Report",
"132": "Task Modifications Log",
@ -137,12 +137,12 @@
"135": "application/package.json",
"136": "generate-openapi.js",
"137": "PetsService",
"138": "payment.controller.ts",
"138": "InitiatePaymentDto",
"139": "System Discovery",
"140": "Product Requirement Document (PRD)",
"141": "WikiController",
"142": "seo.ts",
"143": "auth.service.ts",
"141": ".findAll",
"142": "OrderService",
"143": "admin.service.ts",
"144": "Baseline Command Plan & Reconciled Command History",
"145": "SmsSettingsPage.tsx",
"146": "ErrorPages.tsx",
@ -167,13 +167,13 @@
"165": "rebuild_honest_ledger.js",
"166": "validate_evidence_grade.js",
"167": "supertest",
"168": "getSeoConfig",
"168": "zibal-ebank.service.ts",
"169": "API Contract Specification",
"170": "⚙️ Backend Technical Review (05_dev_backend)",
"171": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"172": "🚀 SEO & Content Strategy Review (12_seo_content)",
"173": "@types/node",
"174": "BlogsService",
"174": "@types/react-dom",
"175": "seed-ui-texts.ts",
"176": "seed-wiki.ts",
"177": "update-blog.dto.ts",
@ -185,7 +185,6 @@
"183": "Raw Finding Verification & Disposition Report",
"184": "React + TypeScript + Vite",
"185": "Select.tsx",
"186": "AdminService",
"187": "ts-node",
"188": "application/README.md",
"189": "@types/express",
@ -213,8 +212,6 @@
"211": "@types/multer",
"212": "WholesaleApplyDto",
"213": "@testing-library/jest-dom",
"214": "PetsService",
"215": "VerifyOtpDto",
"216": "FormField.tsx",
"217": "Input.tsx",
"218": "Textarea.tsx",
@ -231,16 +228,12 @@
"229": "eslint-plugin-react-refresh",
"230": "@tailwindcss/postcss",
"231": "typescript",
"232": "Body",
"233": "@testing-library/react",
"234": "@types/react",
"235": "typescript",
"236": "vitest",
"237": "axios",
"238": "AddressDto",
"239": "blog/page.tsx",
"240": "ts-loader",
"241": "contact/page.tsx",
"242": "@types/bcrypt",
"243": "app.e2e-spec.js",
"244": "blog.entity.ts",
@ -290,22 +283,15 @@
"288": "Staging Docker Compose",
"289": "tailwindcss",
"290": "@types/passport-jwt",
"291": "NetworkBanner.tsx",
"291": "useSettingsStore",
"292": "@types/supertest",
"293": "typescript",
"294": "app-audit-verification.e2e-spec.d.ts",
"295": "app.e2e-spec.d.ts",
"296": "track/page.tsx",
"297": "ValidateCouponDto",
"298": "eslint-config-prettier",
"299": "catalog/page.tsx",
"300": "app/page.tsx",
"301": "videos/page.tsx",
"302": "RedisModule",
"303": "eslint-plugin-prettier",
"304": "eslint-config-next",
"305": "RouteErrorBoundary",
"309": "globals",
"310": "ReportsController",
"310": "admin.module.ts",
"312": "tailwindcss"
}

View File

@ -1,42 +1,42 @@
# Graph Report - canina (2026-08-19)
# Graph Report - canina (2026-08-22)
## Corpus Check
- 522 files · ~745,025 words
- 535 files · ~755,051 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 3702 nodes · 6325 edges · 309 communities (206 shown, 103 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 230 edges (avg confidence: 0.79)
- 3882 nodes · 6817 edges · 295 communities (197 shown, 98 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 259 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `df634fdb`
- Built from commit: `7203915e`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- .retryPayment
- OrdersService
- productService.ts
- CmsController
- app.module.ts
- ReviewsService
- CreateReviewDto
- tickets.controller.ts
- userStore.ts
- AuthService
- MediaSelector.tsx
- PetProfile.tsx
- components/Skeleton.tsx
- DoctorsService
- trust-seals/page.tsx
- Roles
- DoctorQueryDto
- MenuService
- adminRoutes.tsx
- PrismaService
- pets/pets.controller.ts
- ProductsService
- lib/services/api.ts
- UserDashboard.tsx
- CreateVideoDto
- src/services/api.ts
- auth.controller.ts
- BE-001
- Roles
- SmsService
- FE-001
- ADM-001
- DB-001
@ -45,57 +45,57 @@
- DEVOPS-001
- DOC-001
- WholesaleService
- main.ts
- app-audit-verification.e2e-spec.js
- JwtAuthGuard
- ZibalService
- راهنمای تست سیستم (Software Testing)
- CategoriesController
- B2BService
- What You Must Do When Invoked
- toPersian
- UsersController
- lib/services/api.ts
- UsersService
- What You Must Do When Invoked
- SslController
- PodcastPlayerModal.tsx
- IngredientsService
- UsersService
- admin.module.ts
- Pagination.tsx
- SmsService
- OrdersService
- FaqService
- MediaController
- Media.tsx
- ContactService
- zibal.service.ts
- PrescriptionsService
- SmartAdvisorService
- TestimonialsService
- Role & Core Objective
- AuthController
- auth.module.ts
- .initiateOrderPayment
- ZibalEBankService
- compilerOptions
- Media.tsx
- PrescriptionsManager.tsx
- compilerOptions
- PetsController
- PaginationDto
- dependencies
- compilerOptions
- useSettingsStore
- HomeClient.tsx
- BlogsController
- reviews.controller.ts
- UpdateReviewDto
- BannersService
- Required Review Group Closures
- Coupons.tsx
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- WikiController
- ApiOperation
- PetsController
- WikiController
- .update
- seo.module.ts
- admin.service.ts
- BlogsService
- 🏢 AI Software Agency — Master Orchestration Protocol v3
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- scripts
- Role & Core Objective
- HomeController
- VetGallery.tsx
- SafeImage.tsx
- devDependencies
- api
- Orders.tsx
@ -113,12 +113,12 @@
- Operational Rules & Boundaries
- exclude
- jest
- AdminController
- AdminService
- Comprehensive Change Log
- Operational Rules & Boundaries
- UITexts.tsx
- BlogsController
- ProductDto
- payment.service.ts
- WikiService
- 1. Summary of Integrity Repairs Performed
- @nestjs/cli
@ -126,8 +126,8 @@
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- AppService
- SmsLogQueryDto
- app-audit-verification.e2e-spec.js
- PetsController
- CreateEBankCheckoutDto
- Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries
@ -144,7 +144,7 @@
- Role & Core Objective
- orchestrate.py
- backend/package.json
- CreateOrderDto
- CreateReminderDto
- graphify reference: extra exports and benchmark
- Phase 2 Final Quality Gate Summary Report
- Task Modifications Log
@ -153,12 +153,12 @@
- application/package.json
- generate-openapi.js
- PetsService
- payment.controller.ts
- InitiatePaymentDto
- System Discovery
- Product Requirement Document (PRD)
- WikiController
- seo.ts
- auth.service.ts
- .findAll
- OrderService
- admin.service.ts
- Baseline Command Plan & Reconciled Command History
- SmsSettingsPage.tsx
- ErrorPages.tsx
@ -183,13 +183,13 @@
- rebuild_honest_ledger.js
- validate_evidence_grade.js
- supertest
- getSeoConfig
- zibal-ebank.service.ts
- API Contract Specification
- ⚙️ Backend Technical Review (05_dev_backend)
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- @types/node
- BlogsService
- @types/react-dom
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -201,7 +201,6 @@
- Raw Finding Verification & Disposition Report
- React + TypeScript + Vite
- Select.tsx
- AdminService
- ts-node
- application/README.md
- @types/express
@ -229,8 +228,6 @@
- @types/multer
- WholesaleApplyDto
- @testing-library/jest-dom
- PetsService
- VerifyOtpDto
- FormField.tsx
- Input.tsx
- Textarea.tsx
@ -247,15 +244,11 @@
- eslint-plugin-react-refresh
- @tailwindcss/postcss
- typescript
- Body
- @testing-library/react
- @types/react
- typescript
- vitest
- AddressDto
- blog/page.tsx
- ts-loader
- contact/page.tsx
- @types/bcrypt
- app.e2e-spec.js
- blog.entity.ts
@ -291,34 +284,27 @@
- Production Docker Compose
- Staging Docker Compose
- @types/passport-jwt
- NetworkBanner.tsx
- useSettingsStore
- @types/supertest
- typescript
- track/page.tsx
- ValidateCouponDto
- eslint-config-prettier
- catalog/page.tsx
- app/page.tsx
- videos/page.tsx
- RedisModule
- eslint-plugin-prettier
- eslint-config-next
- RouteErrorBoundary
- globals
- ReportsController
- admin.module.ts
- tailwindcss
## God Nodes (most connected - your core abstractions)
1. `PrismaService` - 81 edges
2. `Roles()` - 75 edges
3. `useSettingsStore` - 47 edges
1. `Roles()` - 103 edges
2. `PrismaService` - 87 edges
3. `useSettingsStore` - 51 edges
4. `SmsService` - 42 edges
5. `api` - 40 edges
6. `PaginationDto` - 39 edges
7. `AdminService` - 34 edges
8. `AdminController` - 33 edges
9. `getPageMetadata()` - 33 edges
10. `JwtAuthGuard` - 32 edges
5. `api` - 42 edges
6. `PaginationDto` - 41 edges
7. `ZibalService` - 37 edges
8. `JwtAuthGuard` - 35 edges
9. `AdminService` - 34 edges
10. `PaymentController` - 34 edges
## Surprising Connections (you probably didn't know these)
- `User Profile Photo` --conceptually_related_to--> `User Roles and Capabilities` [INFERRED]
@ -341,51 +327,51 @@
- **Rastikerdar Font Ecosystem** — frontend_application_public_fonts_shabnam_font_v5_0_1_readme, frontend_application_public_fonts_vazirmatn_v33_003_readme, vazir_font [EXTRACTED 0.95]
- **Canina Deployment Stack** — scripts_compose_prod, scripts_compose_stage [EXTRACTED 1.00]
## Communities (309 total, 103 thin omitted)
## Communities (295 total, 98 thin omitted)
### Community 0 - ".retryPayment"
Cohesion: 0.15
Nodes (11): ApiBadRequestResponse, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Get, Param (+3 more)
### Community 0 - "OrdersService"
Cohesion: 0.06
Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more)
### Community 1 - "productService.ts"
Cohesion: 0.08
Nodes (28): BlogPost, CatalogPageSpread(), CatalogPageSpreadProps, CategoryMeta, getFormBadge(), getSpeciesBadge(), FlipbookCatalog(), FlipbookCatalogProps (+20 more)
Cohesion: 0.07
Nodes (32): Blog(), generateMetadata(), getBlogs(), CatalogClient(), generateMetadata(), BlogPage(), BlogPost, CatalogPageSpread() (+24 more)
### Community 2 - "CmsController"
Cohesion: 0.09
Nodes (24): CmsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more)
### Community 3 - "app.module.ts"
Cohesion: 0.08
Nodes (30): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+22 more)
Cohesion: 0.06
Nodes (44): AuthModule, Module, B2BModule, Module, BannersModule, Module, CmsModule, Module (+36 more)
### Community 4 - "ReviewsService"
Cohesion: 0.12
Nodes (16): ReviewsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 4 - "CreateReviewDto"
Cohesion: 0.08
Nodes (24): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+16 more)
### Community 5 - "tickets.controller.ts"
Cohesion: 0.09
Nodes (31): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+23 more)
### Community 6 - "userStore.ts"
Cohesion: 0.10
Nodes (15): AddressModal(), AddressModalProps, SearchableSelect(), SearchableSelectProps, IRAN_PROVINCES, PROVINCE_CITIES, ApiErr, AuthResponse (+7 more)
Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+21 more)
### Community 7 - "MediaSelector.tsx"
Cohesion: 0.07
Nodes (27): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, BlogPost, Category (+19 more)
Cohesion: 0.08
Nodes (26): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+18 more)
### Community 8 - "PetProfile.tsx"
Cohesion: 0.14
Nodes (15): Header(), MENU_ICONS, OrderSuccess(), PrescriptionUploadModal(), PrescriptionUploadModalProps, CURRENT_SYMPTOMS, MEDICAL_HISTORIES, SmartAdvisorProps (+7 more)
### Community 9 - "components/Skeleton.tsx"
Cohesion: 0.29
Nodes (5): OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps
### Community 10 - "DoctorsService"
Cohesion: 0.12
Nodes (16): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
Nodes (18): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), OrderSuccess(), OrderRowSkeleton(), PetProfileSkeleton() (+10 more)
### Community 9 - "Roles"
Cohesion: 0.25
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
### Community 10 - "DoctorQueryDto"
Cohesion: 0.09
Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more)
### Community 11 - "MenuService"
Cohesion: 0.12
Nodes (16): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
### Community 12 - "adminRoutes.tsx"
Cohesion: 0.09
@ -393,39 +379,39 @@ Nodes (16): App(), HeroBanner, VetTestimonial, ContactInfoItem, ContactSubmissio
### Community 13 - "PrismaService"
Cohesion: 0.08
Nodes (16): ApiExcludeController, MetricsController, Controller, Get, Res, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+8 more)
Nodes (18): CategoryQuery, WikiQuery, AdminLoginInput, LoginInput, RegisterInput, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+10 more)
### Community 14 - "pets/pets.controller.ts"
Cohesion: 0.11
Nodes (19): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+11 more)
Cohesion: 0.16
Nodes (13): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+5 more)
### Community 15 - "ProductsService"
Cohesion: 0.10
Nodes (17): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+9 more)
Cohesion: 0.09
Nodes (19): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+11 more)
### Community 16 - "lib/services/api.ts"
Cohesion: 0.07
Nodes (26): ContactInfoItem, DeleteConfirmModal(), DeleteConfirmModalProps, OrderDetailsModal(), OrderDetailsModalProps, PRESET_AMOUNTS, TopUpModal(), TopUpModalProps (+18 more)
### Community 16 - "UserDashboard.tsx"
Cohesion: 0.11
Nodes (21): AddressModal(), AddressModalProps, BackButton(), BackButtonProps, CheckoutPage(), DeleteConfirmModal(), DeleteConfirmModalProps, HeaderButton() (+13 more)
### Community 17 - "CreateVideoDto"
Cohesion: 0.07
Nodes (32): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+24 more)
Cohesion: 0.08
Nodes (29): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+21 more)
### Community 18 - "src/services/api.ts"
Cohesion: 0.10
Nodes (23): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SmartAdvisorManager, SystemSettingsPage (+15 more)
Cohesion: 0.09
Nodes (25): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SeoSettingsPage, SmartAdvisorManager (+17 more)
### Community 19 - "auth.controller.ts"
Cohesion: 0.08
Nodes (24): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+16 more)
Cohesion: 0.06
Nodes (42): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+34 more)
### Community 20 - "BE-001"
Cohesion: 0.06
Nodes (32): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, BE-001, Category, Completion Statement, Confidence (+24 more)
### Community 21 - "Roles"
Cohesion: 0.07
Nodes (29): Roles(), ContactController, Body, Controller, Get, Param, Post, Put (+21 more)
### Community 21 - "SmsService"
Cohesion: 0.06
Nodes (27): SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString (+19 more)
### Community 22 - "FE-001"
Cohesion: 0.06
@ -459,25 +445,25 @@ Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternati
Cohesion: 0.14
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
### Community 30 - "main.ts"
Cohesion: 0.11
Nodes (11): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable (+3 more)
### Community 30 - "app-audit-verification.e2e-spec.js"
Cohesion: 0.07
Nodes (22): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable (+14 more)
### Community 31 - "JwtAuthGuard"
Cohesion: 0.19
Cohesion: 0.18
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 32 - "ZibalService"
Cohesion: 0.05
Nodes (42): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ApiPropertyOptional (+34 more)
Cohesion: 0.09
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
### Community 33 - "راهنمای تست سیستم (Software Testing)"
Cohesion: 0.07
Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more)
### Community 34 - "CategoriesController"
Cohesion: 0.09
Nodes (17): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
Cohesion: 0.10
Nodes (16): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
### Community 35 - "B2BService"
Cohesion: 0.13
@ -487,77 +473,77 @@ Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controlle
Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 37 - "toPersian"
Cohesion: 0.14
Nodes (27): ClientLayout(), VerifyContent(), ArchiveProductCard(), AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal(), BackButton() (+19 more)
### Community 37 - "lib/services/api.ts"
Cohesion: 0.08
Nodes (40): VerifyContent(), AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal(), BlogPost, BlogPreviewSection(), CartDrawer() (+32 more)
### Community 38 - "UsersController"
Cohesion: 0.21
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
### Community 38 - "UsersService"
Cohesion: 0.06
Nodes (38): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), JwtPayload, JwtStrategy, Injectable, AddressDto, ApiProperty (+30 more)
### Community 39 - "What You Must Do When Invoked"
Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 40 - "SslController"
Cohesion: 0.11
Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more)
Cohesion: 0.13
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
### Community 41 - "PodcastPlayerModal.tsx"
Cohesion: 0.40
Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps
### Community 42 - "IngredientsService"
Cohesion: 0.11
Nodes (16): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 43 - "UsersService"
Cohesion: 0.12
Nodes (9): ApiPropertyOptional, IsEmail, IsOptional, IsString, MinLength, UpdateProfileDto, Injectable, UserAddressInput (+1 more)
### Community 44 - "admin.module.ts"
Cohesion: 0.10
Nodes (18): AdminModule, Module, MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller (+10 more)
### Community 45 - "Pagination.tsx"
Cohesion: 0.13
Nodes (11): Pagination(), PaginationProps, Pet, GatewayHealth, Stats, Transaction, ProductItem, WikiTerm (+3 more)
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 47 - "OrdersService"
### Community 43 - "FaqService"
Cohesion: 0.14
Nodes (14): FaqController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 44 - "MediaController"
Cohesion: 0.11
Nodes (16): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 45 - "Media.tsx"
Cohesion: 0.11
Nodes (15): Pagination(), PaginationProps, getFileType(), Media, MediaManager(), Pet, GatewayHealth, Stats (+7 more)
### Community 46 - "ContactService"
Cohesion: 0.13
Nodes (11): ContactController, Body, Controller, Get, Param, Post, Put, Query (+3 more)
### Community 47 - "zibal.service.ts"
Cohesion: 0.16
Nodes (9): OrdersController, ApiBearerAuth, ApiTags, Controller, UseGuards, OrdersModule, Module, OrdersService (+1 more)
Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRequestOptions, PaymentRequestResult, PaymentVerifyResult, ZibalInquiryResponse, ZibalRequestResponse (+1 more)
### Community 48 - "PrescriptionsService"
Cohesion: 0.13
Cohesion: 0.14
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
### Community 49 - "SmartAdvisorService"
Cohesion: 0.11
Nodes (16): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 50 - "TestimonialsService"
Cohesion: 0.12
Cohesion: 0.13
Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 51 - "Role & Core Objective"
Cohesion: 0.09
Nodes (22): CREATE MODE — Normal Operation, Expected JSON Output Schema, File Scope Boundary, Forbidden Actions, MODE 1: REVIEW (called during Review Phase), MODE 2: CONTENT CREATION (standalone task from backlog), Operating Modes, Operational Rules & Boundaries (+14 more)
### Community 52 - "AuthController"
Cohesion: 0.25
Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more)
### Community 53 - "auth.module.ts"
Cohesion: 0.15
Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+2 more)
### Community 52 - ".initiateOrderPayment"
Cohesion: 0.19
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
### Community 54 - "compilerOptions"
Cohesion: 0.06
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
### Community 55 - "Media.tsx"
Cohesion: 0.14
Nodes (13): Badge(), BadgeProps, BadgeVariant, variantStyles, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media (+5 more)
### Community 55 - "PrescriptionsManager.tsx"
Cohesion: 0.22
Nodes (7): Badge(), BadgeProps, BadgeVariant, variantStyles, ProductItem, PrescriptionsManager, Prescription
### Community 56 - "compilerOptions"
Cohesion: 0.08
@ -568,8 +554,8 @@ Cohesion: 0.15
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### Community 58 - "PaginationDto"
Cohesion: 0.12
Nodes (13): PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min (+5 more)
Cohesion: 0.11
Nodes (11): BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional (+3 more)
### Community 59 - "dependencies"
Cohesion: 0.05
@ -579,20 +565,20 @@ Nodes (41): dependencies, bcrypt, bcryptjs, class-transformer, class-validator,
Cohesion: 0.10
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
### Community 61 - "useSettingsStore"
Cohesion: 0.09
Nodes (28): HomeClient(), HomeClientProps, CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, BrandLogo(), BrandLogoProps (+20 more)
### Community 61 - "HomeClient.tsx"
Cohesion: 0.13
Nodes (19): HomeClient(), HomeClientProps, generateMetadata(), getHomeData(), Home(), BannerPlacement(), BannerPlacementProps, Hero() (+11 more)
### Community 62 - "BlogsController"
Cohesion: 0.13
Nodes (15): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+7 more)
Cohesion: 0.14
Nodes (16): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
### Community 63 - "reviews.controller.ts"
Cohesion: 0.16
Nodes (13): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+5 more)
### Community 63 - "UpdateReviewDto"
Cohesion: 0.33
Nodes (5): ApiProperty, IsIn, IsOptional, IsString, UpdateReviewDto
### Community 64 - "BannersService"
Cohesion: 0.12
Cohesion: 0.13
Nodes (15): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
### Community 65 - "Required Review Group Closures"
@ -600,8 +586,8 @@ Cohesion: 0.10
Nodes (19): 10. Orders Backend, 11. Settings & Administrative Backend, 12. Prisma Schema, Migrations & Seed, 13. Redis & Temporary Auth State, 14. Unit & E2E Tests, 15. Docker, NGINX, Prometheus & Deployment Config, 16. Documentation & OpenAPI Artifacts, 1. Storefront Shell & Routing (+11 more)
### Community 66 - "Coupons.tsx"
Cohesion: 0.13
Nodes (12): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+4 more)
Cohesion: 0.10
Nodes (15): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+7 more)
### Community 67 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -615,21 +601,21 @@ Nodes (18): 1. Framework-Aware Analysis, 2. DOM & Semantic Structure Analysis, 3
Cohesion: 0.13
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 70 - "ApiOperation"
Cohesion: 0.13
Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 70 - "WikiController"
Cohesion: 0.20
Nodes (7): ApiTags, Controller, WikiController, Module, WikiModule, Injectable, WikiService
### Community 71 - "PetsController"
Cohesion: 0.14
Nodes (20): PetsController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+12 more)
### Community 71 - ".update"
Cohesion: 0.24
Nodes (11): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Delete, Get, Param, Patch (+3 more)
### Community 72 - "seo.module.ts"
Cohesion: 0.16
Nodes (10): SeoController, ApiOperation, ApiTags, Controller, Get, Param, SeoModule, Module (+2 more)
### Community 73 - "admin.service.ts"
Cohesion: 0.17
Nodes (14): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+6 more)
### Community 73 - "BlogsService"
Cohesion: 0.19
Nodes (4): BlogsModule, Module, BlogsService, Injectable
### Community 74 - "🏢 AI Software Agency — Master Orchestration Protocol v3"
Cohesion: 0.11
@ -655,17 +641,17 @@ Nodes (16): 1. Active Secret Scanning (All Modified Files), 2. Docker Container
Cohesion: 0.16
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
### Community 80 - "VetGallery.tsx"
Cohesion: 0.24
Nodes (8): DisplayVideoItem, FALLBACK_VIDEOS, TestimonialItem, PLAYBACK_RATES, VideoModalPlayer(), VideoModalPlayerProps, Video, videoService
### Community 80 - "SafeImage.tsx"
Cohesion: 0.13
Nodes (14): ProductDetailModalProps, SafeImage(), SafeImageProps, Testimonial, TestimonialsSection(), DisplayVideoItem, FALLBACK_VIDEOS, TestimonialItem (+6 more)
### Community 81 - "devDependencies"
Cohesion: 0.13
Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more)
Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more)
### Community 82 - "api"
Cohesion: 0.29
Nodes (6): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, api
Cohesion: 0.15
Nodes (10): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, MENU_TABS, MenuItem, MenuType (+2 more)
### Community 83 - "Orders.tsx"
Cohesion: 0.14
@ -696,8 +682,8 @@ Cohesion: 0.10
Nodes (21): dependencies, axios, lucide-react, react, react-dom, react-hot-toast, react-router-dom, recharts (+13 more)
### Community 90 - "ProductPage.tsx"
Cohesion: 0.12
Nodes (14): PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, CalculatorState, ICON_MAP, ProductPage(), useCalculatorStore, ProductReviews() (+6 more)
Cohesion: 0.17
Nodes (11): PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, CalculatorState, ICON_MAP, ProductPage(), useCalculatorStore, Tooltip() (+3 more)
### Community 91 - "compilerOptions"
Cohesion: 0.06
@ -727,9 +713,9 @@ Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./ts
Cohesion: 0.15
Nodes (13): jest, collectCoverageFrom, coverageDirectory, moduleFileExtensions, rootDir, testEnvironment, testRegex, transform (+5 more)
### Community 98 - "AdminController"
Cohesion: 0.12
Nodes (8): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, Put, UseGuards
### Community 98 - "AdminService"
Cohesion: 0.05
Nodes (38): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+30 more)
### Community 99 - "Comprehensive Change Log"
Cohesion: 0.15
@ -744,16 +730,12 @@ Cohesion: 0.10
Nodes (18): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, COLORS, RichTextEditor(), RichTextEditorProps, ToggleSwitch(), ToggleSwitchProps (+10 more)
### Community 102 - "BlogsController"
Cohesion: 0.13
Nodes (13): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param (+5 more)
Cohesion: 0.16
Nodes (14): BlogsController, ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+6 more)
### Community 103 - "ProductDto"
Cohesion: 0.22
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 104 - "WikiService"
Cohesion: 0.22
Nodes (3): Injectable, WikiQuery, WikiService
### Community 103 - "payment.service.ts"
Cohesion: 0.20
Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata
### Community 105 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -775,13 +757,13 @@ Nodes (10): 1. Pre-Deployment Checklist, 2. Build Verification, 3. Deployment St
Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 111 - "SmsLogQueryDto"
Cohesion: 0.25
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 111 - "PetsController"
Cohesion: 0.18
Nodes (9): PetsController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiTags, Controller, UploadedFile, UseGuards (+1 more)
### Community 112 - "app-audit-verification.e2e-spec.js"
Cohesion: 0.17
Nodes (11): app_module_1, client_1, common_1, decimal_interceptor_1, fs, http_exception_filter_1, jwt_1, path (+3 more)
### Community 112 - "CreateEBankCheckoutDto"
Cohesion: 0.22
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
### Community 113 - "Vazirmatn Changelog"
Cohesion: 0.18
@ -829,7 +811,7 @@ Nodes (9): Arch Linux, Contributors, Install, Known problems for variable versio
### Community 124 - "Spinner.tsx"
Cohesion: 0.08
Nodes (18): Spinner(), BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem, ProductReview (+10 more)
Nodes (18): Spinner(), FAQ, BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem (+10 more)
### Community 125 - "Sahel-Font"
Cohesion: 0.20
@ -847,9 +829,9 @@ Nodes (8): cmd_next_task(), cmd_progress(), cmd_reset(), cmd_status(), cmd_unblo
Cohesion: 0.22
Nodes (8): author, description, license, name, prisma, seed, private, version
### Community 129 - "CreateOrderDto"
Cohesion: 0.22
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
### Community 129 - "CreateReminderDto"
Cohesion: 0.29
Nodes (6): CreateReminderDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 130 - "graphify reference: extra exports and benchmark"
Cohesion: 0.22
@ -879,8 +861,8 @@ Nodes (8): name, private, scripts, build, dev, lint, start, version
Cohesion: 0.25
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 138 - "payment.controller.ts"
Cohesion: 0.42
### Community 138 - "InitiatePaymentDto"
Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 139 - "System Discovery"
@ -891,17 +873,13 @@ Nodes (7): Active Core Applications, Current Architecture, Evidence-Based Status
Cohesion: 0.29
Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements, 4. Non-Functional Requirements (Performance, Security), 5. Epic / Feature Breakdown, Product Requirement Document (PRD)
### Community 141 - "WikiController"
Cohesion: 0.21
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
### Community 141 - ".findAll"
Cohesion: 0.32
Nodes (6): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Get, Param, Query
### Community 142 - "seo.ts"
Cohesion: 0.20
Nodes (5): generateMetadata(), generateMetadata(), DEFAULT_SEO_CONFIG, PageMetadataOptions, SeoConfig
### Community 143 - "auth.service.ts"
Cohesion: 0.11
Nodes (8): AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, normalizeMobile(), RedisService, Injectable
### Community 143 - "admin.service.ts"
Cohesion: 0.07
Nodes (15): ApiExcludeController, CouponTargetInput, PaginationQuery, AuthService, Injectable, MetricsController, Controller, Get (+7 more)
### Community 144 - "Baseline Command Plan & Reconciled Command History"
Cohesion: 0.29
@ -983,9 +961,9 @@ Nodes (4): evidenceList, ledger, mandatoryMap, mandatoryScope
Cohesion: 0.40
Nodes (4): activeFiles, errors, validationOutput, warnings
### Community 168 - "getSeoConfig"
Cohesion: 0.24
Nodes (11): BlogPostPage(), generateMetadata(), getBlog(), revalidate, generateMetadata(), generateMetadata(), generateMetadata(), getWikiTerm() (+3 more)
### Community 168 - "zibal-ebank.service.ts"
Cohesion: 0.40
Nodes (4): EBankCheckoutListFilter, EBankCheckoutOptions, EBankIdentifiedPaymentFilter, EBankStatementFilter
### Community 169 - "API Contract Specification"
Cohesion: 0.50
@ -1003,10 +981,6 @@ Nodes (3): Architectural Overview, Critical Review Findings & Required Enhanceme
Cohesion: 0.50
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content)
### Community 174 - "BlogsService"
Cohesion: 0.22
Nodes (3): BlogQuery, BlogsService, Injectable
### Community 180 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
@ -1047,17 +1021,9 @@ Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Managem
Cohesion: 0.29
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
### Community 214 - "PetsService"
Cohesion: 0.29
Nodes (3): PetQuery, PetsService, Injectable
### Community 215 - "VerifyOtpDto"
Cohesion: 0.29
Nodes (6): ApiProperty, IsNotEmpty, IsString, Matches, VerifyOtpDto, Length
### Community 220 - "getPageMetadata"
Cohesion: 0.13
Nodes (8): generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), ArchivePage(), getPageMetadata()
Cohesion: 0.05
Nodes (33): generateMetadata(), BlogPostPage(), generateMetadata(), getBlog(), revalidate, generateMetadata(), generateMetadata(), generateMetadata() (+25 more)
### Community 221 - "CreateHealthLogDto"
Cohesion: 0.29
@ -1067,57 +1033,41 @@ Nodes (6): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsO
Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 238 - "AddressDto"
Cohesion: 0.29
Nodes (7): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString
### Community 239 - "blog/page.tsx"
Cohesion: 0.50
Nodes (4): Blog(), generateMetadata(), getBlogs(), BlogPage()
### Community 243 - "app.e2e-spec.js"
Cohesion: 0.50
Nodes (3): app_module_1, supertest_1, testing_1
### Community 297 - "ValidateCouponDto"
Cohesion: 0.50
Nodes (4): IsNotEmpty, IsNumber, IsString, ValidateCouponDto
### Community 300 - "app/page.tsx"
Cohesion: 0.67
Nodes (3): generateMetadata(), getHomeData(), Home()
### Community 302 - "RedisModule"
Cohesion: 0.67
Nodes (3): RedisModule, Global, Module
### Community 291 - "useSettingsStore"
Cohesion: 0.11
Nodes (23): ClientLayout(), BrandLogo(), BrandLogoProps, EnamadBadge(), FAQItem, FAQSection(), Footer(), Header() (+15 more)
### Community 305 - "RouteErrorBoundary"
Cohesion: 0.22
Nodes (3): Props, RouteErrorBoundary, State
### Community 310 - "ReportsController"
Cohesion: 0.16
Nodes (9): ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get, UseGuards, ReportsService (+1 more)
### Community 310 - "admin.module.ts"
Cohesion: 0.10
Nodes (15): AdminModule, Module, PetQuery, PetsService, Injectable, ReportsController, ApiBearerAuth, ApiOperation (+7 more)
## Knowledge Gaps
- **1259 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1254 more)
- **1269 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1264 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **103 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **98 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 `Roles()` connect `Roles` to `BannersService`, `ZibalService`, `CmsController`, `B2BService`, `ReviewsService`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `payment.controller.ts`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `WholesaleService`, `reviews.controller.ts`, `JwtAuthGuard`?**
_High betweenness centrality (0.052) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `UsersController`, `WikiController`, `OrdersService`, `HomeController`, `ProductsService`, `AuthController`?**
_High betweenness centrality (0.046) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CategoriesController`, `CmsController`, `tickets.controller.ts`, `admin.service.ts`, `DoctorsService`, `payment.controller.ts`, `admin.module.ts`, `UsersService`, `pets/pets.controller.ts`, `OrdersService`, `ProductsService`, `CreateVideoDto`, `auth.controller.ts`, `ReportsController`, `reviews.controller.ts`?**
_High betweenness centrality (0.024) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `OrdersService`, `BlogsController`, `UsersService`, `WikiController`, `PetsController`, `HomeController`, `ProductsService`, `auth.controller.ts`?**
_High betweenness centrality (0.063) - this node is a cross-community bridge._
- **Why does `Roles()` connect `Roles` to `BannersService`, `CmsController`, `B2BService`, `CreateReviewDto`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `FaqService`, `MenuService`, `ContactService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `SmsService`, `WholesaleService`, `JwtAuthGuard`?**
_High betweenness centrality (0.062) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `OrdersService`, `AdminService`, `CmsController`, `tickets.controller.ts`, `UsersService`, `BlogsService`, `DoctorQueryDto`, `pets/pets.controller.ts`, `ProductsService`, `CreateVideoDto`, `auth.controller.ts`, `admin.module.ts`, `PaginationDto`?**
_High betweenness centrality (0.033) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1259 weakly-connected nodes found - possible documentation gaps or missing edges._
_1269 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `OrdersService` be split into smaller, more focused modules?**
_Cohesion score 0.06168831168831169 - nodes in this community are weakly interconnected._
- **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.08078431372549019 - nodes in this community are weakly interconnected._
_Cohesion score 0.07039187227866474 - nodes in this community are weakly interconnected._
- **Should `CmsController` be split into smaller, more focused modules?**
_Cohesion score 0.0899854862119013 - nodes in this community are weakly interconnected._
- **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.08456659619450317 - nodes in this community are weakly interconnected._
_Cohesion score 0.0899854862119013 - nodes in this community are weakly interconnected._

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,16 +1,16 @@
# Graph Report - canina (2026-08-22)
## Corpus Check
- 535 files · ~755,051 words
- 535 files · ~755,173 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 3882 nodes · 6817 edges · 295 communities (197 shown, 98 thin omitted)
- 3882 nodes · 6817 edges · 296 communities (198 shown, 98 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 259 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `7203915e`
- Built from commit: `a2b8afcc`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@ -160,7 +160,7 @@
- OrderService
- admin.service.ts
- Baseline Command Plan & Reconciled Command History
- SmsSettingsPage.tsx
- MetricsController
- ErrorPages.tsx
- with-vpn.sh
- Architecture Specification
@ -201,6 +201,7 @@
- Raw Finding Verification & Disposition Report
- React + TypeScript + Vite
- Select.tsx
- Reports.tsx
- ts-node
- application/README.md
- @types/express
@ -327,7 +328,7 @@
- **Rastikerdar Font Ecosystem** — frontend_application_public_fonts_shabnam_font_v5_0_1_readme, frontend_application_public_fonts_vazirmatn_v33_003_readme, vazir_font [EXTRACTED 0.95]
- **Canina Deployment Stack** — scripts_compose_prod, scripts_compose_stage [EXTRACTED 1.00]
## Communities (295 total, 98 thin omitted)
## Communities (296 total, 98 thin omitted)
### Community 0 - "OrdersService"
Cohesion: 0.06
@ -398,8 +399,8 @@ Cohesion: 0.08
Nodes (29): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+21 more)
### Community 18 - "src/services/api.ts"
Cohesion: 0.09
Nodes (25): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SeoSettingsPage, SmartAdvisorManager (+17 more)
Cohesion: 0.10
Nodes (23): ProtectedRoute(), Login(), B2BManager, SeoSettingsPage, SmartAdvisorManager, SystemSettingsPage, ApiErrorPayload, failedQueue (+15 more)
### Community 19 - "auth.controller.ts"
Cohesion: 0.06
@ -586,8 +587,8 @@ Cohesion: 0.10
Nodes (19): 10. Orders Backend, 11. Settings & Administrative Backend, 12. Prisma Schema, Migrations & Seed, 13. Redis & Temporary Auth State, 14. Unit & E2E Tests, 15. Docker, NGINX, Prometheus & Deployment Config, 16. Documentation & OpenAPI Artifacts, 1. Storefront Shell & Routing (+11 more)
### Community 66 - "Coupons.tsx"
Cohesion: 0.10
Nodes (15): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+7 more)
Cohesion: 0.11
Nodes (14): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+6 more)
### Community 67 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -650,8 +651,8 @@ Cohesion: 0.13
Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more)
### Community 82 - "api"
Cohesion: 0.15
Nodes (10): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, MENU_TABS, MenuItem, MenuType (+2 more)
Cohesion: 0.12
Nodes (16): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, SEARCHABLE_PAGES, Topbar(), TopbarProps (+8 more)
### Community 83 - "Orders.tsx"
Cohesion: 0.14
@ -810,8 +811,8 @@ Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
### Community 124 - "Spinner.tsx"
Cohesion: 0.08
Nodes (18): Spinner(), FAQ, BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem (+10 more)
Cohesion: 0.09
Nodes (15): Spinner(), FAQ, MENU_TABS, MenuItem, MenuType, ProductReview, Reviews(), toPersianDigits() (+7 more)
### Community 125 - "Sahel-Font"
Cohesion: 0.20
@ -878,16 +879,16 @@ Cohesion: 0.32
Nodes (6): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Get, Param, Query
### Community 143 - "admin.service.ts"
Cohesion: 0.07
Nodes (15): ApiExcludeController, CouponTargetInput, PaginationQuery, AuthService, Injectable, MetricsController, Controller, Get (+7 more)
Cohesion: 0.10
Nodes (10): CouponTargetInput, PaginationQuery, AuthService, Injectable, normalizeMobile(), RedisModule, Global, Module (+2 more)
### Community 144 - "Baseline Command Plan & Reconciled Command History"
Cohesion: 0.29
Nodes (6): Attempted Command Execution Log, Backend `backend/package.json` Scripts, Baseline Command Plan & Reconciled Command History, Package Scripts Safety Analysis, Permitted Safe Checks for Phase 2, Root `package.json` Scripts
### Community 145 - "SmsSettingsPage.tsx"
Cohesion: 0.29
Nodes (7): PatternItem, SmsConfigState, SmsLogItem, SmsLogStats, SmsSettingsPage(), toPersianDigits(), SmsSettingsPage
### Community 145 - "MetricsController"
Cohesion: 0.20
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
### Community 147 - "with-vpn.sh"
Cohesion: 0.62
@ -1005,6 +1006,10 @@ Nodes (3): Expanding the ESLint configuration, React Compiler, React + TypeScrip
Cohesion: 0.50
Nodes (3): Select, SelectOption, SelectProps
### Community 186 - "Reports.tsx"
Cohesion: 0.20
Nodes (7): BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem, Reports
### Community 188 - "application/README.md"
Cohesion: 0.50
Nodes (3): Deploy on Vercel, Getting Started, Learn More

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff