fix(router): add ErrorBoundary and lazyWithRetry to prevent dynamic import chunk failures
All checks were successful
Deploy Canina / deploy (push) Successful in 31s

This commit is contained in:
parsa aghaei 2026-08-18 17:38:22 +03:30
parent f430c4931f
commit f306b95f62
14 changed files with 48329 additions and 47545 deletions

View File

@ -0,0 +1,111 @@
import { Component, ReactNode, ErrorInfo } from 'react';
import { AlertCircle, RefreshCw, Home } from 'lucide-react';
interface Props {
children: ReactNode;
fallback?: ReactNode;
}
interface State {
hasError: boolean;
error: Error | null;
isChunkLoadError: boolean;
}
export class RouteErrorBoundary extends Component<Props, State> {
public state: State = {
hasError: false,
error: null,
isChunkLoadError: false,
};
public static getDerivedStateFromError(error: Error): State {
const isChunk =
error.name === 'ChunkLoadError' ||
/Failed to fetch dynamically imported module/i.test(error.message) ||
/Loading chunk .* failed/i.test(error.message) ||
/dynamically imported module/i.test(error.message);
return {
hasError: true,
error,
isChunkLoadError: isChunk,
};
}
public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
console.error('[RouteErrorBoundary] Uncaught error:', error, errorInfo);
// Auto-reload on chunk mismatch once to seamlessly fetch updated assets from server
if (this.state.isChunkLoadError) {
const storageKey = 'canina_chunk_reload_ts';
const lastReload = sessionStorage.getItem(storageKey);
const now = Date.now();
// Only auto-reload if we haven't done so in the last 10 seconds
if (!lastReload || now - parseInt(lastReload, 10) > 10000) {
sessionStorage.setItem(storageKey, String(now));
window.location.reload();
}
}
}
private handleReload = () => {
window.location.reload();
};
private handleGoHome = () => {
window.location.href = '/';
};
public render() {
if (this.state.hasError) {
if (this.props.fallback) {
return this.props.fallback;
}
return (
<div className="min-h-[400px] flex items-center justify-center p-6 font-vazir" dir="rtl">
<div className="bg-white p-8 rounded-3xl shadow-xl border border-gray-200 max-w-md w-full text-center space-y-5">
<div className="w-16 h-16 bg-amber-50 text-amber-600 rounded-3xl flex items-center justify-center mx-auto border border-amber-200">
<AlertCircle className="w-8 h-8" />
</div>
<div className="space-y-1.5">
<h3 className="text-lg font-black text-gray-900">
{this.state.isChunkLoadError
? 'نسخه جدیدی از پنل ادمین منتشر شده است'
: 'خطا در بارگذاری بخش مورد نظر'}
</h3>
<p className="text-xs text-gray-500 font-medium leading-relaxed">
{this.state.isChunkLoadError
? 'فایل‌های جاوااسکریپت این بخش روی سرور به‌روزرسانی شده‌اند. برای بارگذاری نسخه جدید دکمه بروزرسانی را بزنید.'
: this.state.error?.message || 'یک خطای غیرمنتظره در بارگذاری صفحه رخ داد.'}
</p>
</div>
<div className="flex items-center justify-center gap-3 pt-2">
<button
onClick={this.handleReload}
className="bg-purple-600 hover:bg-purple-700 text-white text-xs font-bold py-2.5 px-5 rounded-xl transition-all flex items-center gap-2 shadow-md shadow-purple-200 cursor-pointer"
>
<RefreshCw className="w-4 h-4" />
<span>بروزرسانی صفحه</span>
</button>
<button
onClick={this.handleGoHome}
className="bg-gray-100 hover:bg-gray-200 text-gray-700 text-xs font-bold py-2.5 px-4 rounded-xl transition-all flex items-center gap-1.5 cursor-pointer"
>
<Home className="w-4 h-4" />
<span>داشبورد</span>
</button>
</div>
</div>
</div>
);
}
return this.props.children;
}
}

View File

@ -1,44 +1,44 @@
/* eslint-disable react-refresh/only-export-components */
import { lazy } from 'react';
import type { ComponentType } from 'react';
import { createBrowserRouter, Navigate } from 'react-router-dom';
import Layout from '../components/Layout';
import ProtectedRoute from '../components/ProtectedRoute';
import Login from '../pages/Login';
import { RouteErrorBoundary } from '../components/RouteErrorBoundary';
import { lazyWithRetry } from '../utils/lazyWithRetry';
// Lazy loading admin pages
const Dashboard = lazy(() => import('../pages/Dashboard'));
const Users = lazy(() => import('../pages/Users'));
const Products = lazy(() => import('../pages/Products'));
const Orders = lazy(() => import('../pages/Orders'));
const Coupons = lazy(() => import('../pages/Coupons'));
const Settings = lazy(() => import('../pages/Settings'));
const Reports = lazy(() => import('../pages/Reports'));
const Categories = lazy(() => import('../pages/Categories'));
const Blogs = lazy(() => import('../pages/Blogs'));
const Wiki = lazy(() => import('../pages/Wiki'));
const Pets = lazy(() => import('../pages/Pets'));
const UITexts = lazy(() => import('../pages/UITexts'));
const Media = lazy(() => import('../pages/Media'));
const CMS = lazy(() => import('../pages/CMS'));
const WholesaleApplications = lazy(() => import('../pages/WholesaleApplications'));
const Videos = lazy(() => import('../pages/Videos'));
const ContactSubmissions = lazy(() => import('../pages/ContactSubmissions'));
const BannersManager = lazy(() => import('../pages/BannersManager'));
const SmartAdvisorManager = lazy(() => import('../pages/SmartAdvisorManager'));
const TestimonialsManager = lazy(() => import('../pages/TestimonialsManager'));
const IngredientsManager = lazy(() => import('../pages/IngredientsManager'));
const PrescriptionsManager = lazy(() => import('../pages/PrescriptionsManager'));
const B2BManager = lazy(() => import('../pages/B2BManager'));
const SeoSettingsPage = lazy(() => import('../pages/SeoSettingsPage'));
const FinancialSettingsPage = lazy(() => import('../pages/FinancialSettingsPage'));
const SystemSettingsPage = lazy(() => import('../pages/SystemSettingsPage'));
const SmsSettingsPage = lazy(() => import('../pages/SmsSettingsPage'));
const SslSettingsPage = lazy(() => import('../pages/SslSettingsPage'));
const Transactions = lazy(() => import('../pages/Transactions'));
const Tickets = lazy(() => import('../pages/Tickets'));
const Reviews = lazy(() => import('../pages/Reviews'));
const DoctorsManager = lazy(() => import('../pages/DoctorsManager'));
// Lazy loading admin pages with automatic retry and cache recovery
const Dashboard = lazyWithRetry(() => import('../pages/Dashboard'));
const Users = lazyWithRetry(() => import('../pages/Users'));
const Products = lazyWithRetry(() => import('../pages/Products'));
const Orders = lazyWithRetry(() => import('../pages/Orders'));
const Coupons = lazyWithRetry(() => import('../pages/Coupons'));
const Settings = lazyWithRetry(() => import('../pages/Settings'));
const Reports = lazyWithRetry(() => import('../pages/Reports'));
const Categories = lazyWithRetry(() => import('../pages/Categories'));
const Blogs = lazyWithRetry(() => import('../pages/Blogs'));
const Wiki = lazyWithRetry(() => import('../pages/Wiki'));
const Pets = lazyWithRetry(() => import('../pages/Pets'));
const UITexts = lazyWithRetry(() => import('../pages/UITexts'));
const Media = lazyWithRetry(() => import('../pages/Media'));
const CMS = lazyWithRetry(() => import('../pages/CMS'));
const WholesaleApplications = lazyWithRetry(() => import('../pages/WholesaleApplications'));
const Videos = lazyWithRetry(() => import('../pages/Videos'));
const ContactSubmissions = lazyWithRetry(() => import('../pages/ContactSubmissions'));
const BannersManager = lazyWithRetry(() => import('../pages/BannersManager'));
const SmartAdvisorManager = lazyWithRetry(() => import('../pages/SmartAdvisorManager'));
const TestimonialsManager = lazyWithRetry(() => import('../pages/TestimonialsManager'));
const IngredientsManager = lazyWithRetry(() => import('../pages/IngredientsManager'));
const PrescriptionsManager = lazyWithRetry(() => import('../pages/PrescriptionsManager'));
const B2BManager = lazyWithRetry(() => import('../pages/B2BManager'));
const SeoSettingsPage = lazyWithRetry(() => import('../pages/SeoSettingsPage'));
const FinancialSettingsPage = lazyWithRetry(() => import('../pages/FinancialSettingsPage'));
const SystemSettingsPage = lazyWithRetry(() => import('../pages/SystemSettingsPage'));
const SmsSettingsPage = lazyWithRetry(() => import('../pages/SmsSettingsPage'));
const SslSettingsPage = lazyWithRetry(() => import('../pages/SslSettingsPage'));
const Transactions = lazyWithRetry(() => import('../pages/Transactions'));
const Tickets = lazyWithRetry(() => import('../pages/Tickets'));
const Reviews = lazyWithRetry(() => import('../pages/Reviews'));
const DoctorsManager = lazyWithRetry(() => import('../pages/DoctorsManager'));
export interface AdminRouteConfig {
path: string;
@ -50,13 +50,16 @@ export const router = createBrowserRouter([
{
path: '/login',
element: <Login />,
errorElement: <RouteErrorBoundary><Login /></RouteErrorBoundary>,
},
{
element: <ProtectedRoute />,
errorElement: <RouteErrorBoundary><Layout /></RouteErrorBoundary>,
children: [
{
path: '/',
element: <Layout />,
errorElement: <RouteErrorBoundary><Layout /></RouteErrorBoundary>,
children: [
{ index: true, element: <Dashboard /> },
{ path: 'users/*', element: <Users /> },

View File

@ -0,0 +1,35 @@
import { ComponentType, lazy } from 'react';
/**
* Wraps dynamic React.lazy imports with retry logic and auto cache-busting
* to prevent "Failed to fetch dynamically imported module" errors after deployments.
*/
export function lazyWithRetry<T extends ComponentType<unknown>>(
componentImport: () => Promise<{ default: T }>,
retriesLeft = 2,
interval = 1000
): React.LazyExoticComponent<T> {
return lazy(() =>
new Promise<{ default: T }>((resolve, reject) => {
componentImport()
.then(resolve)
.catch((error: unknown) => {
if (retriesLeft <= 0) {
// Check if page was already reloaded for chunk error
const hasReloaded = sessionStorage.getItem('chunk_retry_reloaded');
if (!hasReloaded) {
sessionStorage.setItem('chunk_retry_reloaded', 'true');
window.location.reload();
return;
}
reject(error);
return;
}
setTimeout(() => {
lazyWithRetry(componentImport, retriesLeft - 1, interval);
}, interval);
});
})
);
}

View File

@ -1,24 +1,24 @@
{
"0": "ApiOperation",
"0": "OrdersService",
"1": "productService.ts",
"2": "CmsController",
"3": "app.module.ts",
"4": "reviews.controller.ts",
"5": "tickets.controller.ts",
"6": "UserDashboard.tsx",
"7": "MediaSelector.tsx",
"7": "Spinner.tsx",
"8": "admin.module.ts",
"9": "PetProfile.tsx",
"10": "DoctorsService",
"11": "useSettingsStore",
"12": "adminRoutes.tsx",
"13": "PrismaService",
"14": "BlogsController",
"14": ".findAll",
"15": "ProductsService",
"16": "lib/services/api.ts",
"17": "CreateVideoDto",
"18": "src/services/api.ts",
"19": "pets/pets.controller.ts",
"19": "auth.service.ts",
"20": "BE-001",
"21": "Roles",
"22": "FE-001",
@ -42,13 +42,13 @@
"40": "SslController",
"41": "PodcastPlayerModal.tsx",
"42": "IngredientsService",
"43": "RedisService",
"43": "AuthService",
"44": "MediaController",
"45": "Pagination.tsx",
"45": "Transactions.tsx",
"46": "SmsService",
"47": "OrdersService",
"48": "PrescriptionsService",
"49": "SmartAdvisorService",
"47": "OrdersController",
"48": "PrescriptionsController",
"49": "SmartAdvisorController",
"50": "TestimonialsService",
"51": "Role & Core Objective",
"52": "ContactService",
@ -57,7 +57,7 @@
"55": "Media.tsx",
"56": "compilerOptions",
"57": "PetsController",
"58": "PaginationDto",
"58": "BlogsController",
"59": "dependencies",
"60": "compilerOptions",
"61": "HomeClient.tsx",
@ -69,7 +69,7 @@
"67": "Operational Rules & Boundaries",
"68": "Operational Rules & Boundaries",
"69": "WikiController",
"70": "AdminQueryDto",
"70": "ApiOperation",
"71": "PetsController",
"72": "seo.module.ts",
"73": "admin.service.ts",
@ -97,15 +97,15 @@
"95": "Operational Rules & Boundaries",
"96": "exclude",
"97": "jest",
"98": "AdminController",
"98": "AdminService",
"99": "Comprehensive Change Log",
"100": "Operational Rules & Boundaries",
"101": "AdminService",
"101": "Body",
"102": "devDependencies",
"103": "ProductDto",
"104": "auth.controller.ts",
"104": ".adminLogin",
"105": "1. Summary of Integrity Repairs Performed",
"106": "BlogsService",
"106": "PaginationDto",
"107": "Operational Rules & Boundaries",
"108": "Operational Rules & Boundaries",
"109": "Operational Rules & Boundaries",
@ -140,11 +140,11 @@
"138": "InitiatePaymentDto",
"139": "System Discovery",
"140": "Product Requirement Document (PRD)",
"141": "WikiController",
"141": "pagination.dto.ts",
"142": "globals",
"143": "@nestjs/cli",
"144": "Baseline Command Plan & Reconciled Command History",
"145": "Spinner.tsx",
"145": "SmsSettingsPage.tsx",
"146": "ErrorPages.tsx",
"147": "with-vpn.sh",
"148": "Architecture Specification",
@ -173,7 +173,7 @@
"171": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"172": "🚀 SEO & Content Strategy Review (12_seo_content)",
"173": "@types/node",
"174": "ZibalCallbackQueryDto",
"174": ".handleZibalCallback",
"175": "seed-ui-texts.ts",
"176": "seed-wiki.ts",
"177": "update-blog.dto.ts",
@ -231,7 +231,7 @@
"229": "eslint-plugin-react-refresh",
"230": "@tailwindcss/postcss",
"231": "typescript",
"232": "@nestjs/core",
"232": "RegisterDto",
"233": "@testing-library/react",
"234": "@types/react",
"235": "typescript",
@ -242,7 +242,7 @@
"240": "ts-loader",
"241": "passport-jwt",
"242": "@types/bcrypt",
"243": "MetricsController",
"243": "RedisService",
"244": "blog.entity.ts",
"245": "home.entity.ts",
"246": "wiki.entity.ts",
@ -304,5 +304,14 @@
"302": "@eslint/eslintrc",
"303": "axios",
"304": "tailwindcss",
"312": "tailwindcss"
"305": "RouteErrorBoundary",
"306": ".findAll",
"307": "AdminLoginDto",
"308": "VerifyOtpDto",
"309": ".deleteScientificTerm",
"310": "PetsService",
"311": "AuthController",
"312": "tailwindcss",
"313": "ValidateCouponDto",
"314": "reflect-metadata"
}

File diff suppressed because one or more lines are too long

View File

@ -1,9 +1,9 @@
{
"0": "AdminService",
"0": "ApiOperation",
"1": "productService.ts",
"2": "CmsController",
"3": "app.module.ts",
"4": "CreateReviewDto",
"4": "reviews.controller.ts",
"5": "tickets.controller.ts",
"6": "UserDashboard.tsx",
"7": "MediaSelector.tsx",
@ -18,7 +18,7 @@
"16": "lib/services/api.ts",
"17": "CreateVideoDto",
"18": "src/services/api.ts",
"19": "B2BService",
"19": "pets/pets.controller.ts",
"20": "BE-001",
"21": "Roles",
"22": "FE-001",
@ -28,13 +28,13 @@
"26": "TEST-001",
"27": "DEVOPS-001",
"28": "DOC-001",
"29": "WholesaleApplyDto",
"29": "WholesaleService",
"30": "main.ts",
"31": "JwtAuthGuard",
"32": "ZibalService",
"33": "راهنمای تست سیستم (Software Testing)",
"34": "CategoriesController",
"35": "B2BController",
"35": "B2BService",
"36": "What You Must Do When Invoked",
"37": "userStore.ts",
"38": "UsersService",
@ -46,9 +46,9 @@
"44": "MediaController",
"45": "Pagination.tsx",
"46": "SmsService",
"47": "OrdersController",
"48": "PrescriptionsController",
"49": "SmartAdvisorController",
"47": "OrdersService",
"48": "PrescriptionsService",
"49": "SmartAdvisorService",
"50": "TestimonialsService",
"51": "Role & Core Objective",
"52": "ContactService",
@ -62,8 +62,8 @@
"60": "compilerOptions",
"61": "HomeClient.tsx",
"62": "BlogsController",
"63": "AuthController",
"64": "prescriptions.controller.ts",
"63": "SettingsService",
"64": "BannersService",
"65": "Required Review Group Closures",
"66": "Coupons.tsx",
"67": "Operational Rules & Boundaries",
@ -97,27 +97,28 @@
"95": "Operational Rules & Boundaries",
"96": "exclude",
"97": "jest",
"98": "OrdersService",
"98": "AdminController",
"99": "Comprehensive Change Log",
"100": "Operational Rules & Boundaries",
"101": "CreateOrderDto",
"102": "@types/passport-jwt",
"103": "@types/supertest",
"104": "auth.service.ts",
"101": "AdminService",
"102": "devDependencies",
"103": "ProductDto",
"104": "auth.controller.ts",
"105": "1. Summary of Integrity Repairs Performed",
"106": "typescript",
"106": "BlogsService",
"107": "Operational Rules & Boundaries",
"108": "Operational Rules & Boundaries",
"109": "Operational Rules & Boundaries",
"110": "AppService",
"112": "eslint-plugin-prettier",
"111": "SmsLogQueryDto",
"112": "WholesaleApplyDto",
"113": "Vazirmatn Changelog",
"114": "Vazirmatn Font فونت وزیرمتن",
"115": "Operational Rules & Boundaries",
"116": "compilerOptions",
"117": "compilerOptions",
"118": "backend/README.md",
"119": "devDependencies",
"119": "eslint",
"120": "Repository Map",
"121": "validate_integrity.js",
"122": "admin-panel/package.json",
@ -135,8 +136,8 @@
"134": "ErrorBoundary",
"135": "application/package.json",
"136": "generate-openapi.js",
"137": "payment.module.ts",
"138": "payment.controller.ts",
"137": "AdminTransactionFilterDto",
"138": "InitiatePaymentDto",
"139": "System Discovery",
"140": "Product Requirement Document (PRD)",
"141": "WikiController",
@ -172,6 +173,7 @@
"171": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"172": "🚀 SEO & Content Strategy Review (12_seo_content)",
"173": "@types/node",
"174": "ZibalCallbackQueryDto",
"175": "seed-ui-texts.ts",
"176": "seed-wiki.ts",
"177": "update-blog.dto.ts",
@ -209,7 +211,10 @@
"209": "sync_honest_manifest.js",
"210": "sync_manifest.js",
"211": "@types/multer",
"212": "bcryptjs",
"213": "@testing-library/jest-dom",
"214": "helmet",
"215": "js-yaml",
"216": "FormField.tsx",
"217": "Input.tsx",
"218": "Textarea.tsx",
@ -226,11 +231,16 @@
"229": "eslint-plugin-react-refresh",
"230": "@tailwindcss/postcss",
"231": "typescript",
"232": "@nestjs/core",
"233": "@testing-library/react",
"234": "@types/react",
"235": "typescript",
"236": "vitest",
"237": "@nestjs/jwt",
"238": "@nestjs/swagger",
"239": "@nestjs/throttler",
"240": "ts-loader",
"241": "passport-jwt",
"242": "@types/bcrypt",
"243": "MetricsController",
"244": "blog.entity.ts",
@ -278,7 +288,21 @@
"286": "Shabnam Font Sample",
"287": "Production Docker Compose",
"288": "Staging Docker Compose",
"289": "@prisma/client",
"290": "swagger-ui-express",
"291": "NetworkBanner.tsx",
"292": "eslint-config-prettier",
"293": "@eslint/js",
"294": "jest",
"295": "@nestjs/schematics",
"296": "@nestjs/testing",
"297": "source-map-support",
"298": "ts-jest",
"299": "tsconfig-paths",
"300": "@types/bcryptjs",
"301": "typescript-eslint",
"302": "@eslint/eslintrc",
"303": "axios",
"304": "tailwindcss",
"312": "tailwindcss"
}

View File

@ -1,12 +1,12 @@
# Graph Report - canina (2026-08-18)
## Corpus Check
- 511 files · ~734,460 words
- 511 files · ~734,987 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 3633 nodes · 6163 edges · 282 communities (184 shown, 98 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 228 edges (avg confidence: 0.79)
- 3638 nodes · 6178 edges · 306 communities (192 shown, 114 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 230 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
@ -15,11 +15,11 @@
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- AdminService
- ApiOperation
- productService.ts
- CmsController
- app.module.ts
- CreateReviewDto
- reviews.controller.ts
- tickets.controller.ts
- UserDashboard.tsx
- MediaSelector.tsx
@ -34,7 +34,7 @@
- lib/services/api.ts
- CreateVideoDto
- src/services/api.ts
- B2BService
- pets/pets.controller.ts
- BE-001
- Roles
- FE-001
@ -44,13 +44,13 @@
- TEST-001
- DEVOPS-001
- DOC-001
- WholesaleApplyDto
- WholesaleService
- main.ts
- JwtAuthGuard
- ZibalService
- راهنمای تست سیستم (Software Testing)
- CategoriesController
- B2BController
- B2BService
- What You Must Do When Invoked
- userStore.ts
- UsersService
@ -62,9 +62,9 @@
- MediaController
- Pagination.tsx
- SmsService
- OrdersController
- PrescriptionsController
- SmartAdvisorController
- OrdersService
- PrescriptionsService
- SmartAdvisorService
- TestimonialsService
- Role & Core Objective
- ContactService
@ -78,8 +78,8 @@
- compilerOptions
- HomeClient.tsx
- BlogsController
- AuthController
- prescriptions.controller.ts
- SettingsService
- BannersService
- Required Review Group Closures
- Coupons.tsx
- Operational Rules & Boundaries
@ -113,27 +113,28 @@
- Operational Rules & Boundaries
- exclude
- jest
- OrdersService
- AdminController
- Comprehensive Change Log
- Operational Rules & Boundaries
- CreateOrderDto
- @types/passport-jwt
- @types/supertest
- auth.service.ts
- AdminService
- devDependencies
- ProductDto
- auth.controller.ts
- 1. Summary of Integrity Repairs Performed
- typescript
- BlogsService
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- AppService
- eslint-plugin-prettier
- SmsLogQueryDto
- WholesaleApplyDto
- Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries
- compilerOptions
- compilerOptions
- backend/README.md
- devDependencies
- eslint
- Repository Map
- validate_integrity.js
- admin-panel/package.json
@ -151,8 +152,8 @@
- ErrorBoundary
- application/package.json
- generate-openapi.js
- payment.module.ts
- payment.controller.ts
- AdminTransactionFilterDto
- InitiatePaymentDto
- System Discovery
- Product Requirement Document (PRD)
- WikiController
@ -188,6 +189,7 @@
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- @types/node
- ZibalCallbackQueryDto
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -225,7 +227,10 @@
- sync_honest_manifest.js
- sync_manifest.js
- @types/multer
- bcryptjs
- @testing-library/jest-dom
- helmet
- js-yaml
- FormField.tsx
- Input.tsx
- Textarea.tsx
@ -242,11 +247,16 @@
- eslint-plugin-react-refresh
- @tailwindcss/postcss
- typescript
- @nestjs/core
- @testing-library/react
- @types/react
- typescript
- vitest
- @nestjs/jwt
- @nestjs/swagger
- @nestjs/throttler
- ts-loader
- passport-jwt
- @types/bcrypt
- MetricsController
- blog.entity.ts
@ -281,17 +291,29 @@
- Shabnam Font Sample
- Production Docker Compose
- Staging Docker Compose
- @prisma/client
- swagger-ui-express
- NetworkBanner.tsx
- eslint-config-prettier
- @eslint/js
- jest
- @nestjs/schematics
- @nestjs/testing
- source-map-support
- ts-jest
- tsconfig-paths
- @types/bcryptjs
- typescript-eslint
- @eslint/eslintrc
- tailwindcss
## God Nodes (most connected - your core abstractions)
1. `PrismaService` - 81 edges
2. `Roles()` - 74 edges
2. `Roles()` - 75 edges
3. `useSettingsStore` - 47 edges
4. `SmsService` - 41 edges
4. `SmsService` - 42 edges
5. `PaginationDto` - 39 edges
6. `api` - 37 edges
6. `api` - 38 edges
7. `AdminService` - 34 edges
8. `AdminController` - 33 edges
9. `JwtAuthGuard` - 32 edges
@ -300,14 +322,14 @@
## Surprising Connections (you probably didn't know these)
- `User Profile Photo` --conceptually_related_to--> `User Roles and Capabilities` [INFERRED]
backend/uploads/1781288429353-508765350.jpg → docs/02-user-guide.md
- `WikiController` --references--> `ApiResponse` [EXTRACTED]
backend/src/wiki/wiki.controller.ts → frontend/admin-panel/src/types/admin.ts
- `ProductsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/products/products.controller.ts → frontend/admin-panel/src/types/admin.ts
- `AuthController` --references--> `ApiResponse` [EXTRACTED]
backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts
- `BlogsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts
- `HomeController` --references--> `ApiResponse` [EXTRACTED]
backend/src/home/home.controller.ts → frontend/admin-panel/src/types/admin.ts
- `OrdersController` --references--> `ApiResponse` [EXTRACTED]
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
@ -318,11 +340,11 @@
- **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 (282 total, 98 thin omitted)
## Communities (306 total, 114 thin omitted)
### Community 0 - "AdminService"
Cohesion: 0.09
Nodes (14): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Param (+6 more)
### Community 0 - "ApiOperation"
Cohesion: 0.16
Nodes (3): ApiOperation, Body, Put
### Community 1 - "productService.ts"
Cohesion: 0.06
@ -334,15 +356,15 @@ Nodes (24): CmsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controlle
### Community 3 - "app.module.ts"
Cohesion: 0.08
Nodes (29): BannersModule, Module, CmsModule, Module, SmsModule, Global, Module, ContactModule (+21 more)
Nodes (32): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+24 more)
### Community 4 - "CreateReviewDto"
### Community 4 - "reviews.controller.ts"
Cohesion: 0.07
Nodes (29): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+21 more)
Nodes (31): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+23 more)
### Community 5 - "tickets.controller.ts"
Cohesion: 0.09
Nodes (31): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+23 more)
Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+21 more)
### Community 6 - "UserDashboard.tsx"
Cohesion: 0.09
@ -354,15 +376,15 @@ Nodes (25): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelect
### Community 8 - "admin.module.ts"
Cohesion: 0.06
Nodes (19): AdminModule, Module, BlogsService, Injectable, ReportsController, ApiBearerAuth, ApiOperation, ApiTags (+11 more)
Nodes (21): AdminModule, Module, PetQuery, PetsService, Injectable, ReportsController, ApiBearerAuth, ApiOperation (+13 more)
### Community 9 - "PetProfile.tsx"
Cohesion: 0.14
Nodes (12): FeaturedProducts(), OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps, mockProducts, HealthLog (+4 more)
### Community 10 - "DoctorsService"
Cohesion: 0.13
Nodes (15): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
Cohesion: 0.12
Nodes (16): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 11 - "useSettingsStore"
Cohesion: 0.14
@ -374,7 +396,7 @@ Nodes (14): App(), ContactInfoItem, ContactSubmission, CategoryDist, DashboardDa
### Community 13 - "PrismaService"
Cohesion: 0.08
Nodes (18): BlogQuery, WikiQuery, BannersService, Injectable, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig (+10 more)
Nodes (17): AdminLoginInput, LoginInput, RegisterInput, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto (+9 more)
### Community 14 - "BlogsController"
Cohesion: 0.21
@ -389,24 +411,24 @@ Cohesion: 0.06
Nodes (18): metadata, ContactFormClient(), ContactInfoItem, Testimonial, TestimonialsSection(), api, ApiErrorPayload, BASE_DOMAIN (+10 more)
### Community 17 - "CreateVideoDto"
Cohesion: 0.09
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
Cohesion: 0.07
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
### Community 18 - "src/services/api.ts"
Cohesion: 0.10
Nodes (23): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SmartAdvisorManager, SystemSettingsPage (+15 more)
### Community 19 - "B2BService"
Cohesion: 0.33
Nodes (5): B2BModule, Module, B2BService, B2BWholesaleOrderItem, Injectable
### Community 19 - "pets/pets.controller.ts"
Cohesion: 0.12
Nodes (15): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+7 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.05
Nodes (38): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+30 more)
Cohesion: 0.21
Nodes (15): Roles(), SettingsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete (+7 more)
### Community 22 - "FE-001"
Cohesion: 0.06
@ -436,17 +458,17 @@ Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternati
Cohesion: 0.06
Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more)
### Community 29 - "WholesaleApplyDto"
Cohesion: 0.10
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
### Community 29 - "WholesaleService"
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)
Cohesion: 0.14
Nodes (9): CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable, ApiErrorResponse, ErrorDetailField (+1 more)
### Community 31 - "JwtAuthGuard"
Cohesion: 0.19
Nodes (6): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable
Cohesion: 0.20
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 32 - "ZibalService"
Cohesion: 0.14
@ -460,9 +482,9 @@ Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای
Cohesion: 0.09
Nodes (17): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
### Community 35 - "B2BController"
Cohesion: 0.14
Nodes (12): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+4 more)
### Community 35 - "B2BService"
Cohesion: 0.13
Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+7 more)
### Community 36 - "What You Must Do When Invoked"
Cohesion: 0.07
@ -474,7 +496,7 @@ Nodes (32): ClientLayout(), ArchiveProductCard(), AuthModal(), AuthModalProps, e
### Community 38 - "UsersService"
Cohesion: 0.06
Nodes (42): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+34 more)
Nodes (41): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+33 more)
### Community 39 - "What You Must Do When Invoked"
Cohesion: 0.07
@ -493,8 +515,8 @@ Cohesion: 0.13
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 43 - "RedisService"
Cohesion: 0.10
Nodes (5): AuthService, Injectable, normalizeMobile(), RedisService, Injectable
Cohesion: 0.09
Nodes (7): AppModule, Module, AuthService, Injectable, normalizeMobile(), RedisService, Injectable
### Community 44 - "MediaController"
Cohesion: 0.11
@ -504,17 +526,17 @@ Nodes (16): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Control
Cohesion: 0.13
Nodes (11): Pagination(), PaginationProps, Pet, GatewayHealth, Stats, Transaction, ProductItem, WikiTerm (+3 more)
### Community 47 - "OrdersController"
Cohesion: 0.13
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
### Community 47 - "OrdersService"
Cohesion: 0.07
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
### Community 48 - "PrescriptionsController"
Cohesion: 0.15
Nodes (12): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+4 more)
### Community 49 - "SmartAdvisorController"
### Community 48 - "PrescriptionsService"
Cohesion: 0.14
Nodes (12): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more)
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
### Community 49 - "SmartAdvisorService"
Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 50 - "TestimonialsService"
Cohesion: 0.13
@ -545,16 +567,16 @@ Cohesion: 0.08
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
### Community 57 - "PetsController"
Cohesion: 0.10
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
Cohesion: 0.15
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### Community 58 - "PaginationDto"
Cohesion: 0.07
Nodes (24): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+16 more)
Cohesion: 0.08
Nodes (19): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+11 more)
### Community 59 - "dependencies"
Cohesion: 0.05
Nodes (41): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, helmet, ioredis, js-yaml (+33 more)
Cohesion: 0.10
Nodes (21): dependencies, bcrypt, class-transformer, class-validator, ioredis, @nestjs/common, @nestjs/passport, @nestjs/platform-express (+13 more)
### Community 60 - "compilerOptions"
Cohesion: 0.10
@ -568,13 +590,13 @@ Nodes (20): HomeClient(), HomeClientProps, getHomeData(), Home(), metadata, meta
Cohesion: 0.13
Nodes (15): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+7 more)
### Community 63 - "AuthController"
Cohesion: 0.27
Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more)
### Community 63 - "SettingsService"
Cohesion: 0.09
Nodes (4): SmsLogQuery, ApiOkResponse, SettingsService, Injectable
### Community 64 - "prescriptions.controller.ts"
Cohesion: 0.31
Nodes (5): UserReqPayload, PrescriptionsModule, Module, PrescriptionsService, Injectable
### Community 64 - "BannersService"
Cohesion: 0.13
Nodes (15): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
### Community 65 - "Required Review Group Closures"
Cohesion: 0.10
@ -597,20 +619,20 @@ Cohesion: 0.13
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 70 - "AdminQueryDto"
Cohesion: 0.18
Cohesion: 0.16
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 71 - "PetsController"
Cohesion: 0.05
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
Cohesion: 0.08
Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 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.13
Nodes (20): CouponTargetInput, PaginationQuery, ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional (+12 more)
Cohesion: 0.20
Nodes (13): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+5 more)
### Community 74 - "🏢 AI Software Agency — Master Orchestration Protocol v3"
Cohesion: 0.11
@ -649,7 +671,7 @@ Cohesion: 0.29
Nodes (6): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, api
### Community 83 - "Orders.tsx"
Cohesion: 0.13
Cohesion: 0.14
Nodes (13): Skeleton(), getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits() (+5 more)
### Community 84 - "devDependencies"
@ -708,6 +730,10 @@ 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.17
Nodes (7): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, UseGuards
### Community 99 - "Comprehensive Change Log"
Cohesion: 0.15
Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TASK-SEC-003`, 4. `TASK-FIN-001`, 5. `TASK-BUILD-001`, 6. `TASK-AUTH-001`, 7. `TASK-FE-001` (+4 more)
@ -716,18 +742,30 @@ Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TAS
Cohesion: 0.17
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
### Community 101 - "CreateOrderDto"
### Community 101 - "AdminService"
Cohesion: 0.22
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
Nodes (3): Post, AdminService, Injectable
### Community 104 - "auth.service.ts"
### Community 102 - "devDependencies"
Cohesion: 0.22
Nodes (9): devDependencies, eslint-plugin-prettier, @types/passport-jwt, @types/supertest, typescript, typescript, eslint-plugin-prettier, @types/passport-jwt (+1 more)
### Community 103 - "ProductDto"
Cohesion: 0.22
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 104 - "auth.controller.ts"
Cohesion: 0.06
Nodes (33): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+25 more)
Nodes (42): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+34 more)
### Community 105 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
Nodes (11): 1.1 Authoritative Source File Inventory Rebuilt, 1.2 Raw Finding Dispositions Reconciled, 1.3 Finding Identifier Normalization, 1.4 Rejected Finding Cleanup, 1. Summary of Integrity Repairs Performed, 2. Final Verified Finding Metrics, 3. Reference and Compiler Integrity Results, 4. Quality Gate Conclusion (+3 more)
### Community 106 - "BlogsService"
Cohesion: 0.22
Nodes (3): BlogQuery, BlogsService, Injectable
### Community 107 - "Operational Rules & Boundaries"
Cohesion: 0.18
Nodes (10): 1. Detect Tech Stack First (Universal), 2. Explicit Scoring Methodology (Universal), 3. Code Coverage Ratio Rule, 4. Deep Directory Scanning, 5. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries, Required Output Artifacts (What files to write/update) (+2 more)
@ -744,6 +782,14 @@ 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 112 - "WholesaleApplyDto"
Cohesion: 0.29
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
### Community 113 - "Vazirmatn Changelog"
Cohesion: 0.18
Nodes (10): 32.0.0, 32.1, 32.101, 32.102, 33.000, 33.001, 33.002, 33.003 (+2 more)
@ -768,10 +814,6 @@ Nodes (9): compilerOptions, esModuleInterop, module, moduleResolution, skipLibCh
Cohesion: 0.20
Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more)
### Community 119 - "devDependencies"
Cohesion: 0.09
Nodes (23): devDependencies, eslint, eslint-config-prettier, @eslint/js, jest, @nestjs/schematics, @nestjs/testing, source-map-support (+15 more)
### Community 120 - "Repository Map"
Cohesion: 0.20
Nodes (9): 1. Active Customer Storefront: React 19 + Vite Application, 2. Active Backend Service: NestJS Application, 3. Excluded Placeholder / Non-Auditable Directories, Active Applications & Non-Auditable Scopes, Documentation Governance, Important Configuration & Infrastructure Files, Mandatory Global Audit Exclusions, Repository Map (+1 more)
@ -836,13 +878,13 @@ 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 137 - "payment.module.ts"
Cohesion: 0.15
Nodes (10): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, PaymentModule (+2 more)
### Community 137 - "AdminTransactionFilterDto"
Cohesion: 0.22
Nodes (7): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 138 - "payment.controller.ts"
Cohesion: 0.23
Nodes (11): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+3 more)
### Community 138 - "InitiatePaymentDto"
Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 139 - "System Discovery"
Cohesion: 0.25
@ -956,6 +998,10 @@ 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 - "ZibalCallbackQueryDto"
Cohesion: 0.40
Nodes (4): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto
### 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
@ -1005,24 +1051,24 @@ Cohesion: 0.29
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
## Knowledge Gaps
- **1240 isolated node(s):** `OrderItem`, `PaymentTx`, `Order`, `ORDER_STATUS_MAP`, `BlogPost` (+1235 more)
- **1240 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1235 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **98 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **114 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 `prescriptions.controller.ts`, `CmsController`, `B2BController`, `CreateReviewDto`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `payment.controller.ts`, `ProductsService`, `PrescriptionsController`, `SmartAdvisorController`, `TestimonialsService`, `B2BService`, `ContactService`, `PaymentController`, `WholesaleApplyDto`, `JwtAuthGuard`?**
_High betweenness centrality (0.061) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `UsersService`, `PetsController`, `WikiController`, `BlogsController`, `HomeController`, `OrdersController`, `ProductsService`, `AuthController`?**
_High betweenness centrality (0.055) - this node is a cross-community bridge._
- **Why does `PrismaService` connect `PrismaService` to `CmsController`, `app.module.ts`, `CreateReviewDto`, `tickets.controller.ts`, `admin.module.ts`, `payment.module.ts`, `DoctorsService`, `WikiController`, `ProductsService`, `CreateVideoDto`, `B2BService`, `Roles`, `WholesaleApplyDto`, `JwtAuthGuard`, `ZibalService`, `CategoriesController`, `UsersService`, `IngredientsService`, `RedisService`, `MediaController`, `SmsService`, `TestimonialsService`, `ContactService`, `PetsController`, `PaginationDto`, `prescriptions.controller.ts`, `PetsController`, `seo.module.ts`, `admin.service.ts`, `HomeController`, `zibal.service.ts`, `OrdersService`, `auth.service.ts`, `MetricsController`?**
_High betweenness centrality (0.042) - this node is a cross-community bridge._
- **What connects `OrderItem`, `PaymentTx`, `Order` to the rest of the system?**
- **Why does `Roles()` connect `Roles` to `BannersService`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `WholesaleService`, `JwtAuthGuard`?**
_High betweenness centrality (0.051) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `UsersService`, `PetsController`, `auth.controller.ts`, `WikiController`, `BlogsController`, `OrdersService`, `HomeController`, `ProductsService`?**
_High betweenness centrality (0.038) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CmsController`, `reviews.controller.ts`, `tickets.controller.ts`, `UsersService`, `admin.module.ts`, `admin.service.ts`, `BlogsService`, `auth.controller.ts`, `DoctorsService`, `CreateVideoDto`, `pets/pets.controller.ts`, `PaginationDto`?**
_High betweenness centrality (0.024) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1240 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `AdminService` be split into smaller, more focused modules?**
_Cohesion score 0.08821548821548822 - nodes in this community are weakly interconnected._
- **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.05888376856118792 - 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._
_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.0797872340425532 - 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,40 +1,40 @@
# Graph Report - canina (2026-08-18)
## Corpus Check
- 511 files · ~734,987 words
- 513 files · ~735,468 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 3638 nodes · 6178 edges · 306 communities (192 shown, 114 thin omitted)
- 3649 nodes · 6191 edges · 315 communities (197 shown, 118 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 230 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `16c1ecdf`
- Built from commit: `f430c493`
- 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)
- ApiOperation
- OrdersService
- productService.ts
- CmsController
- app.module.ts
- reviews.controller.ts
- tickets.controller.ts
- UserDashboard.tsx
- MediaSelector.tsx
- Spinner.tsx
- admin.module.ts
- PetProfile.tsx
- DoctorsService
- useSettingsStore
- adminRoutes.tsx
- PrismaService
- BlogsController
- .findAll
- ProductsService
- lib/services/api.ts
- CreateVideoDto
- src/services/api.ts
- pets/pets.controller.ts
- auth.service.ts
- BE-001
- Roles
- FE-001
@ -58,13 +58,13 @@
- SslController
- PodcastPlayerModal.tsx
- IngredientsService
- RedisService
- AuthService
- MediaController
- Pagination.tsx
- Transactions.tsx
- SmsService
- OrdersService
- PrescriptionsService
- SmartAdvisorService
- OrdersController
- PrescriptionsController
- SmartAdvisorController
- TestimonialsService
- Role & Core Objective
- ContactService
@ -73,7 +73,7 @@
- Media.tsx
- compilerOptions
- PetsController
- PaginationDto
- BlogsController
- dependencies
- compilerOptions
- HomeClient.tsx
@ -85,7 +85,7 @@
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- WikiController
- AdminQueryDto
- ApiOperation
- PetsController
- seo.module.ts
- admin.service.ts
@ -113,15 +113,15 @@
- Operational Rules & Boundaries
- exclude
- jest
- AdminController
- AdminService
- Comprehensive Change Log
- Operational Rules & Boundaries
- AdminService
- Body
- devDependencies
- ProductDto
- auth.controller.ts
- .adminLogin
- 1. Summary of Integrity Repairs Performed
- BlogsService
- PaginationDto
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- Operational Rules & Boundaries
@ -156,11 +156,11 @@
- InitiatePaymentDto
- System Discovery
- Product Requirement Document (PRD)
- WikiController
- pagination.dto.ts
- globals
- @nestjs/cli
- Baseline Command Plan & Reconciled Command History
- Spinner.tsx
- SmsSettingsPage.tsx
- ErrorPages.tsx
- with-vpn.sh
- Architecture Specification
@ -189,7 +189,7 @@
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- @types/node
- ZibalCallbackQueryDto
- .handleZibalCallback
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -247,7 +247,7 @@
- eslint-plugin-react-refresh
- @tailwindcss/postcss
- typescript
- @nestjs/core
- RegisterDto
- @testing-library/react
- @types/react
- typescript
@ -258,7 +258,7 @@
- ts-loader
- passport-jwt
- @types/bcrypt
- MetricsController
- RedisService
- blog.entity.ts
- home.entity.ts
- wiki.entity.ts
@ -305,7 +305,16 @@
- @types/bcryptjs
- typescript-eslint
- @eslint/eslintrc
- RouteErrorBoundary
- .findAll
- AdminLoginDto
- VerifyOtpDto
- .deleteScientificTerm
- PetsService
- AuthController
- tailwindcss
- ValidateCouponDto
- reflect-metadata
## God Nodes (most connected - your core abstractions)
1. `PrismaService` - 81 edges
@ -340,11 +349,11 @@
- **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 (306 total, 114 thin omitted)
## Communities (315 total, 118 thin omitted)
### Community 0 - "ApiOperation"
Cohesion: 0.16
Nodes (3): ApiOperation, Body, Put
### Community 0 - "OrdersService"
Cohesion: 0.12
Nodes (15): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+7 more)
### Community 1 - "productService.ts"
Cohesion: 0.06
@ -356,7 +365,7 @@ Nodes (24): CmsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controlle
### Community 3 - "app.module.ts"
Cohesion: 0.08
Nodes (32): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+24 more)
Nodes (31): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+23 more)
### Community 4 - "reviews.controller.ts"
Cohesion: 0.07
@ -364,43 +373,43 @@ Nodes (31): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsStrin
### Community 5 - "tickets.controller.ts"
Cohesion: 0.09
Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+21 more)
Nodes (31): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+23 more)
### Community 6 - "UserDashboard.tsx"
Cohesion: 0.09
Nodes (28): VerifyContent(), AddressModal(), AddressModalProps, BackButton(), BackButtonProps, DeleteConfirmModal(), DeleteConfirmModalProps, HeaderButton() (+20 more)
### Community 7 - "MediaSelector.tsx"
Cohesion: 0.08
Nodes (25): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, BlogPost, Category (+17 more)
### Community 7 - "Spinner.tsx"
Cohesion: 0.11
Nodes (22): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, Pagination(), PaginationProps (+14 more)
### Community 8 - "admin.module.ts"
Cohesion: 0.06
Nodes (21): AdminModule, Module, PetQuery, PetsService, Injectable, ReportsController, ApiBearerAuth, ApiOperation (+13 more)
Cohesion: 0.07
Nodes (17): AdminModule, Module, BlogQuery, BlogsService, Injectable, ReportsController, ApiBearerAuth, ApiOperation (+9 more)
### Community 9 - "PetProfile.tsx"
Cohesion: 0.14
Nodes (12): FeaturedProducts(), OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps, mockProducts, HealthLog (+4 more)
### Community 10 - "DoctorsService"
Cohesion: 0.12
Nodes (16): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
Cohesion: 0.13
Nodes (15): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
### Community 11 - "useSettingsStore"
Cohesion: 0.14
Nodes (14): metadata, BrandLogo(), BrandLogoProps, EnamadBadge(), Footer(), Hero(), StatCounter(), MaintenancePage() (+6 more)
### Community 12 - "adminRoutes.tsx"
Cohesion: 0.10
Nodes (14): App(), ContactInfoItem, ContactSubmission, CategoryDist, DashboardData, Ticket, TicketMessage, WholesaleRequest (+6 more)
Cohesion: 0.06
Nodes (25): App(), ContactInfoItem, ContactSubmission, CategoryDist, DashboardData, SslStatus, Ticket, TicketMessage (+17 more)
### Community 13 - "PrismaService"
Cohesion: 0.08
Nodes (17): AdminLoginInput, LoginInput, RegisterInput, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto (+9 more)
Cohesion: 0.07
Nodes (20): PetQuery, WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto (+12 more)
### Community 14 - "BlogsController"
Cohesion: 0.21
Nodes (9): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param (+1 more)
### Community 14 - ".findAll"
Cohesion: 0.32
Nodes (6): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Get, Param, Query
### Community 15 - "ProductsService"
Cohesion: 0.09
@ -412,23 +421,23 @@ Nodes (18): metadata, ContactFormClient(), ContactInfoItem, Testimonial, Testimo
### Community 17 - "CreateVideoDto"
Cohesion: 0.07
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
Nodes (32): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+24 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.08
Nodes (28): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SeoSettingsPage, SmartAdvisorManager (+20 more)
### Community 19 - "pets/pets.controller.ts"
Cohesion: 0.12
Nodes (15): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+7 more)
### Community 19 - "auth.service.ts"
Cohesion: 0.14
Nodes (13): AdminLoginInput, LoginInput, RegisterInput, LoginDto, ApiProperty, IsNotEmpty, IsString, MinLength (+5 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.21
Nodes (15): Roles(), SettingsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete (+7 more)
Cohesion: 0.20
Nodes (15): Roles(), SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+7 more)
### Community 22 - "FE-001"
Cohesion: 0.06
@ -463,11 +472,11 @@ Cohesion: 0.14
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
### Community 30 - "main.ts"
Cohesion: 0.14
Nodes (9): CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable, ApiErrorResponse, ErrorDetailField (+1 more)
Cohesion: 0.11
Nodes (11): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable (+3 more)
### Community 31 - "JwtAuthGuard"
Cohesion: 0.20
Cohesion: 0.19
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 32 - "ZibalService"
@ -483,8 +492,8 @@ Cohesion: 0.09
Nodes (17): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
### Community 35 - "B2BService"
Cohesion: 0.13
Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+7 more)
Cohesion: 0.14
Nodes (14): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
### Community 36 - "What You Must Do When Invoked"
Cohesion: 0.07
@ -511,32 +520,28 @@ Cohesion: 0.40
Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps
### Community 42 - "IngredientsService"
Cohesion: 0.13
Cohesion: 0.12
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 43 - "RedisService"
Cohesion: 0.09
Nodes (7): AppModule, Module, AuthService, Injectable, normalizeMobile(), RedisService, Injectable
### Community 44 - "MediaController"
Cohesion: 0.11
Nodes (16): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 45 - "Pagination.tsx"
### Community 45 - "Transactions.tsx"
Cohesion: 0.33
Nodes (4): GatewayHealth, Stats, Transaction, Transactions
### Community 47 - "OrdersController"
Cohesion: 0.13
Nodes (11): Pagination(), PaginationProps, Pet, GatewayHealth, Stats, Transaction, ProductItem, WikiTerm (+3 more)
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
### Community 47 - "OrdersService"
Cohesion: 0.07
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
### Community 48 - "PrescriptionsController"
Cohesion: 0.16
Nodes (12): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+4 more)
### Community 48 - "PrescriptionsService"
### Community 49 - "SmartAdvisorController"
Cohesion: 0.14
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
### Community 49 - "SmartAdvisorService"
Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
Nodes (12): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more)
### Community 50 - "TestimonialsService"
Cohesion: 0.13
@ -551,8 +556,8 @@ Cohesion: 0.13
Nodes (11): ContactController, Body, Controller, Get, Param, Post, Put, Query (+3 more)
### Community 53 - "PaymentController"
Cohesion: 0.20
Nodes (17): PaymentController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+9 more)
Cohesion: 0.25
Nodes (13): PaymentController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+5 more)
### Community 54 - "compilerOptions"
Cohesion: 0.06
@ -570,13 +575,13 @@ Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx
Cohesion: 0.15
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### Community 58 - "PaginationDto"
Cohesion: 0.08
Nodes (19): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+11 more)
### Community 58 - "BlogsController"
Cohesion: 0.20
Nodes (7): BlogsController, ApiTags, Controller, BlogsModule, Module, BlogsService, Injectable
### Community 59 - "dependencies"
Cohesion: 0.10
Nodes (21): dependencies, bcrypt, class-transformer, class-validator, ioredis, @nestjs/common, @nestjs/passport, @nestjs/platform-express (+13 more)
Nodes (21): dependencies, bcrypt, class-transformer, class-validator, ioredis, @nestjs/common, @nestjs/core, @nestjs/passport (+13 more)
### Community 60 - "compilerOptions"
Cohesion: 0.10
@ -591,11 +596,11 @@ Cohesion: 0.13
Nodes (15): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+7 more)
### Community 63 - "SettingsService"
Cohesion: 0.09
Nodes (4): SmsLogQuery, ApiOkResponse, SettingsService, Injectable
Cohesion: 0.11
Nodes (3): SmsLogQuery, SettingsService, Injectable
### Community 64 - "BannersService"
Cohesion: 0.13
Cohesion: 0.12
Nodes (15): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
### Community 65 - "Required Review Group Closures"
@ -603,8 +608,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.12
Nodes (14): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+6 more)
Cohesion: 0.13
Nodes (12): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+4 more)
### Community 67 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -618,21 +623,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 - "AdminQueryDto"
Cohesion: 0.16
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 70 - "ApiOperation"
Cohesion: 0.13
Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 71 - "PetsController"
Cohesion: 0.08
Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 more)
Cohesion: 0.05
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 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.20
Nodes (13): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+5 more)
Cohesion: 0.17
Nodes (14): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+6 more)
### Community 74 - "🏢 AI Software Agency — Master Orchestration Protocol v3"
Cohesion: 0.11
@ -667,8 +672,8 @@ Cohesion: 0.13
Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more)
### Community 82 - "api"
Cohesion: 0.29
Nodes (6): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, api
Cohesion: 0.12
Nodes (13): Layout(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, HeroBanner, VetTestimonial, ProductReview (+5 more)
### Community 83 - "Orders.tsx"
Cohesion: 0.14
@ -730,9 +735,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.17
Nodes (7): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, UseGuards
### Community 98 - "AdminService"
Cohesion: 0.12
Nodes (10): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, Put, UseGuards (+2 more)
### Community 99 - "Comprehensive Change Log"
Cohesion: 0.15
@ -742,10 +747,6 @@ Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TAS
Cohesion: 0.17
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
### Community 101 - "AdminService"
Cohesion: 0.22
Nodes (3): Post, AdminService, Injectable
### Community 102 - "devDependencies"
Cohesion: 0.22
Nodes (9): devDependencies, eslint-plugin-prettier, @types/passport-jwt, @types/supertest, typescript, typescript, eslint-plugin-prettier, @types/passport-jwt (+1 more)
@ -754,17 +755,17 @@ Nodes (9): devDependencies, eslint-plugin-prettier, @types/passport-jwt, @types/
Cohesion: 0.22
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 104 - "auth.controller.ts"
Cohesion: 0.06
Nodes (42): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+34 more)
### Community 104 - ".adminLogin"
Cohesion: 0.34
Nodes (9): ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, Body, Post, Req, UseGuards (+1 more)
### Community 105 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
Nodes (11): 1.1 Authoritative Source File Inventory Rebuilt, 1.2 Raw Finding Dispositions Reconciled, 1.3 Finding Identifier Normalization, 1.4 Rejected Finding Cleanup, 1. Summary of Integrity Repairs Performed, 2. Final Verified Finding Metrics, 3. Reference and Compiler Integrity Results, 4. Quality Gate Conclusion (+3 more)
### Community 106 - "BlogsService"
Cohesion: 0.22
Nodes (3): BlogQuery, BlogsService, Injectable
### Community 106 - "PaginationDto"
Cohesion: 0.20
Nodes (8): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type
### Community 107 - "Operational Rules & Boundaries"
Cohesion: 0.18
@ -879,7 +880,7 @@ Cohesion: 0.25
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 137 - "AdminTransactionFilterDto"
Cohesion: 0.22
Cohesion: 0.25
Nodes (7): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 138 - "InitiatePaymentDto"
@ -894,17 +895,17 @@ 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.13
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
### Community 141 - "pagination.dto.ts"
Cohesion: 0.17
Nodes (8): SortOrder, ApiTags, Controller, WikiController, Module, WikiModule, Injectable, WikiService
### 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 - "Spinner.tsx"
Cohesion: 0.10
Nodes (15): Spinner(), ProductReview, Reviews(), toPersianDigits(), PatternItem, SmsConfigState, SmsLogItem, SmsLogStats (+7 more)
### Community 145 - "SmsSettingsPage.tsx"
Cohesion: 0.29
Nodes (5): PatternItem, SmsConfigState, SmsLogItem, SmsLogStats, SmsSettingsPage
### Community 147 - "with-vpn.sh"
Cohesion: 0.62
@ -998,9 +999,9 @@ 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 - "ZibalCallbackQueryDto"
Cohesion: 0.40
Nodes (4): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto
### Community 174 - ".handleZibalCallback"
Cohesion: 0.24
Nodes (8): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, Query, Res, Headers, Ip
### Community 180 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
@ -1046,29 +1047,57 @@ Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Managem
Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 243 - "MetricsController"
### Community 232 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 243 - "RedisService"
Cohesion: 0.10
Nodes (10): ApiExcludeController, MetricsController, Controller, Get, Res, RedisModule, Global, Module (+2 more)
### Community 305 - "RouteErrorBoundary"
Cohesion: 0.22
Nodes (3): Props, RouteErrorBoundary, State
### Community 306 - ".findAll"
Cohesion: 0.32
Nodes (6): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Get, Param, Query
### Community 307 - "AdminLoginDto"
Cohesion: 0.29
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
Nodes (6): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength
### Community 308 - "VerifyOtpDto"
Cohesion: 0.33
Nodes (6): ApiProperty, IsNotEmpty, IsString, Matches, VerifyOtpDto, Length
### Community 311 - "AuthController"
Cohesion: 0.40
Nodes (3): AuthController, ApiTags, Controller
### Community 313 - "ValidateCouponDto"
Cohesion: 0.50
Nodes (4): IsNotEmpty, IsNumber, IsString, ValidateCouponDto
## Knowledge Gaps
- **1240 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1235 more)
- **1242 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1237 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **114 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **118 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`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `WholesaleService`, `JwtAuthGuard`?**
- **Why does `Roles()` connect `Roles` to `BannersService`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsController`, `SmartAdvisorController`, `TestimonialsService`, `ContactService`, `PaymentController`, `.deleteScientificTerm`, `WholesaleService`, `JwtAuthGuard`?**
_High betweenness centrality (0.051) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `UsersService`, `PetsController`, `auth.controller.ts`, `WikiController`, `BlogsController`, `OrdersService`, `HomeController`, `ProductsService`?**
_High betweenness centrality (0.038) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CmsController`, `reviews.controller.ts`, `tickets.controller.ts`, `UsersService`, `admin.module.ts`, `admin.service.ts`, `BlogsService`, `auth.controller.ts`, `DoctorsService`, `CreateVideoDto`, `pets/pets.controller.ts`, `PaginationDto`?**
- **Why does `ApiResponse` connect `src/services/api.ts` to `UsersService`, `PetsController`, `pagination.dto.ts`, `OrdersController`, `HomeController`, `ProductsService`, `AuthController`, `BlogsController`?**
_High betweenness centrality (0.039) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `OrdersService`, `CategoriesController`, `CmsController`, `app.module.ts`, `reviews.controller.ts`, `tickets.controller.ts`, `PetsController`, `admin.module.ts`, `admin.service.ts`, `UsersService`, `MediaController`, `ProductsService`, `CreateVideoDto`, `auth.service.ts`?**
_High betweenness centrality (0.024) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1240 weakly-connected nodes found - possible documentation gaps or missing edges._
_1242 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `OrdersService` be split into smaller, more focused modules?**
_Cohesion score 0.12307692307692308 - nodes in this community are weakly interconnected._
- **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.05888376856118792 - 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.0797872340425532 - nodes in this community are weakly interconnected._
_Cohesion score 0.0899854862119013 - nodes in this community are weakly interconnected._

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