Merge branch 'develop'
Some checks failed
Deploy Canina / deploy (push) Successful in 2m6s
E2E Playwright Tests / Run Full E2E & Security Suites (push) Failing after 0s

This commit is contained in:
parsa aghaei 2026-09-05 19:43:42 +03:30
commit 6091bfa328
15 changed files with 9682 additions and 9548 deletions

View File

@ -1,4 +1,14 @@
import type { Metadata } from 'next';
import OrderSuccess from "../../../../components/OrderSuccess";
import { getPageMetadata } from "../../../../lib/seo";
export async function generateMetadata(): Promise<Metadata> {
return getPageMetadata('checkout_success', {
fallbackTitle: 'سفارش با موفقیت ثبت شد',
fallbackDesc: 'رسید پرداخت و جزئیات ثبت سفارش در کنینا ایران.',
noIndex: true,
});
}
export default async function SuccessPage({ params }: { params: Promise<{ id: string }> }) {
const { id } = await params;

View File

@ -21,8 +21,9 @@ export async function generateMetadata(
const nameFa = product.nameFa || product.name;
const nameEn = product.nameEn ? ` (${product.nameEn})` : '';
const rawTitle = `${nameFa}${nameEn}`;
const title = product.metaTitle || formatPageTitle(rawTitle, config.brandNameFa, config.titleSeparator, config.titlePosition, false);
const rawTitle = product.metaTitle || `${nameFa}${nameEn}`;
const title = formatPageTitle(rawTitle, config.brandNameFa, config.titleSeparator, config.titlePosition, false);
const ogTitle = `${title} ${config.titleSeparator} ${config.brandNameFa}`;
const description = product.metaDescription || (product.shortDescription || product.description || '').substring(0, 155).trim() || config.defaultMetaDescription;
const rawKeywords = product.keywords;
@ -71,7 +72,7 @@ export async function generateMetadata(
},
},
openGraph: {
title,
title: ogTitle,
description,
images: galleryImages,
url: canonicalUrl,

View File

@ -14,10 +14,10 @@ export async function generateMetadata({
const canonicalPath = category ? `/shop?category=${encodeURIComponent(category)}` : '/shop';
const categoryTitles: Record<string, string> = {
'joints': 'مکمل‌های مفاصل و استخوان سگ و گربه | کنینا ایران',
'immune': 'مکمل‌های تقویت سیستم ایمنی و گوارش پت | کنینا ایران',
'energy': 'ویتامین‌ها و انرژی‌بخش‌های درمانی سگ و گربه | کنینا ایران',
'special-care': 'محصولات مراقبت ویژه پوست، مو و دندان پت | کنینا ایران',
'joints': 'مکمل‌های مفاصل و استخوان سگ و گربه',
'immune': 'مکمل‌های تقویت سیستم ایمنی و گوارش پت',
'energy': 'ویتامین‌ها و انرژی‌بخش‌های درمانی سگ و گربه',
'special-care': 'محصولات مراقبت ویژه پوست، مو و دندان پت',
};
const fallbackTitle = category && categoryTitles[category]

View File

@ -172,11 +172,50 @@ export async function getSeoConfig(): Promise<SeoConfig> {
/**
* Uniform Page Title Formatter according to Store Brand Configuration
*/
/**
* Clean and strip any repeated brand affixes from a title.
* Removes occurrences of brand names (Fa / En) and separators so the template or title can format cleanly.
*/
export function cleanPageTitle(rawTitle: string, brandName = 'کنینا ایران'): string {
if (!rawTitle || !rawTitle.trim()) {
return '';
}
let clean = rawTitle.trim();
// Known brand aliases to strip to avoid repetitive keyword stuffing
const brandKeywords = [
brandName,
'کنینا ایران',
'فروشگاه کنینا ایران',
'فروشگاه کنینا',
'کنینا',
'Canina Iran',
'Canina',
];
for (const b of brandKeywords) {
if (!b) continue;
const escaped = b.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const regex = new RegExp(`(\\s*[-|•/]\\s*${escaped}|${escaped}\\s*[-|•/]\\s*)`, 'gi');
clean = clean.replace(regex, ' ').trim();
}
// Remove dangling separators at beginning or end
clean = clean.replace(/^[-|•/\s]+|[-|•/\s]+$/g, '').trim();
return clean;
}
/**
* Uniform Page Title Formatter according to Store Brand Configuration
* For Next.js subpages, returns a clean title so layout.tsx template can affix brand name cleanly without repetition.
*/
export function formatPageTitle(
rawTitle: string,
brandName = 'کنینا ایران',
separator = '|',
position: 'suffix' | 'prefix' | 'none' = 'suffix',
_separator = '|',
_position: 'suffix' | 'prefix' | 'none' = 'suffix',
isHomePage = false
): string {
if (!rawTitle || !rawTitle.trim()) {
@ -185,28 +224,17 @@ export function formatPageTitle(
const clean = rawTitle.trim();
// If this is the home page and has a custom full title configured, return it directly
// If this is the home page, return the full configured home title as-is
if (isHomePage) {
return clean;
}
// Check if the title already explicitly contains the brand name
const escapedBrand = brandName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const brandRegex = new RegExp(`(\\s*[-|•]\\s*${escapedBrand}|${escapedBrand}\\s*[-|•]\\s*)`, 'gi');
// Clean any brand suffixes/prefixes already embedded in rawTitle
const baseTitle = cleanPageTitle(clean, brandName);
// Strip existing repeated brand affix if present so we can format cleanly
const baseTitle = clean.replace(brandRegex, '').trim();
if (position === 'none') {
return baseTitle || clean;
}
if (position === 'prefix') {
return `${brandName} ${separator} ${baseTitle || clean}`;
}
// Default: 'suffix' -> "{PageTitle} {separator} {BrandName}"
return `${baseTitle || clean} ${separator} ${brandName}`;
// Return baseTitle directly so layout.tsx's `title.template` handles affixing brand name exactly once!
// If baseTitle becomes empty (e.g. rawTitle was just "کنینا ایران"), fallback to rawTitle or brandName
return baseTitle || clean || brandName;
}
export interface PageMetadataOptions {
@ -264,15 +292,19 @@ export async function getPageMetadata(
process.env.NEXT_PUBLIC_SITE_URL.includes('test') ||
process.env.NEXT_PUBLIC_SITE_URL.includes('dev')));
const ogTitle = isHome
? title
: (titlePosition === 'prefix' ? `${brandNameFa} ${titleSeparator} ${title}` : `${title} ${titleSeparator} ${brandNameFa}`);
return {
title,
title: isHome ? { absolute: title } : title,
description,
keywords,
alternates: {
canonical: canonicalUrl,
},
openGraph: {
title,
title: ogTitle,
description,
url: canonicalUrl,
siteName: brandNameFa,
@ -283,13 +315,13 @@ export async function getPageMetadata(
url: image,
width: 1200,
height: 630,
alt: title,
alt: ogTitle,
},
],
},
twitter: {
card: 'summary_large_image',
title,
title: ogTitle,
description,
images: [image],
},

View File

@ -1,7 +1,7 @@
{
"0": "Roles",
"1": "app.module.ts",
"2": "orders.service.ts",
"2": "WikiController",
"3": "productService.ts",
"4": "ClientLayout.tsx",
"5": "CmsController",
@ -9,7 +9,7 @@
"7": "SmsSettingsPage.tsx",
"8": "SmsService",
"9": "devDependencies",
"10": "reviews.controller.ts",
"10": "CreateReviewDto",
"11": "UsersService",
"12": "index.ts",
"13": "app-audit-verification.e2e-spec.js",
@ -20,7 +20,7 @@
"18": "JwtAuthGuard",
"19": "admin.controller.ts",
"20": "CreateVideoDto",
"21": "orderService.ts",
"21": "OrderService",
"22": "ProductDto",
"23": "MenuService",
"24": "BE-001",
@ -32,12 +32,12 @@
"30": "DEVOPS-001",
"31": "DOC-001",
"32": "adminRoutes.tsx",
"33": "WholesaleApplyDto",
"33": "WholesaleService",
"34": "B2BService",
"35": "ContactService",
"36": "FaqController",
"36": "FaqService",
"37": "راهنمای تست سیستم (Software Testing)",
"38": "Button",
"38": "Button.tsx",
"39": "CategoriesController",
"40": "MediaController",
"41": "What You Must Do When Invoked",
@ -53,11 +53,11 @@
"51": "BlogsController",
"52": "prescriptions.controller.ts",
"53": "SmartAdvisorService",
"54": "Button.tsx",
"54": "MenuManager.tsx",
"55": "UITexts.tsx",
"56": "Orders.tsx",
"56": "PrescriptionsManager.tsx",
"57": "Role & Core Objective",
"58": "AuthService",
"58": "RevalidationService",
"59": "compilerOptions",
"60": "CreateUserDto",
"61": "ProductPage.tsx",
@ -75,7 +75,7 @@
"73": "Operational Rules & Boundaries",
"74": "WikiController",
"75": "PetsController",
"76": "RevalidationService",
"76": "ProductsService",
"77": "seo.module.ts",
"78": "rss.xml/route.ts",
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
@ -84,17 +84,17 @@
"82": "scripts",
"83": "dependencies",
"84": "Role & Core Objective",
"85": ".sendOtp",
"85": "auth.controller.ts",
"86": "zibal.service.ts",
"87": "dependencies",
"88": "CreateEBankCheckoutDto",
"89": "seed-products.ts",
"90": "toPersian",
"90": "PetProfile.tsx",
"91": "Reconciled Audit Roles & Assignments",
"92": "OrdersService",
"93": "components/Skeleton.tsx",
"93": "Orders.tsx",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "wiki/[slug]/page.tsx",
"95": "getSeoConfig",
"96": "compilerOptions",
"97": "PaymentService",
"98": "scripts",
@ -112,7 +112,7 @@
"110": "Operational Rules & Boundaries",
"111": "Operational Rules & Boundaries",
"112": "Operational Rules & Boundaries",
"113": "auth.controller.ts",
"113": "AdminTransactionFilterDto",
"114": "AppService",
"115": "Spinner.tsx",
"116": "Vazirmatn Changelog",
@ -127,8 +127,8 @@
"125": "validate_integrity.js",
"126": "admin-panel/package.json",
"127": "Sahel-Font",
"128": "torob.controller.ts",
"129": "Reports.tsx",
"128": "WholesaleApplyDto",
"129": "MetricsController",
"130": "Sahel-Font",
"131": "Role & Core Objective",
"132": "orchestrate.py",
@ -144,14 +144,14 @@
"142": "start-dev.js",
"143": "generate-openapi.js",
"144": "SafeImage.tsx",
"145": "auth.service.ts",
"145": "wiki/[slug]/page.tsx",
"146": "System Discovery",
"147": "HomeController",
"147": "catalog/page.tsx",
"148": "RouteErrorBoundary",
"149": "RegisterDto",
"149": "search/page.tsx",
"150": "Product Requirement Document (PRD)",
"151": "@eslint/js",
"152": "RedisService",
"152": "auth.service.ts",
"153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History",
"155": "seo-backfill.ts",
@ -176,14 +176,14 @@
"174": "rebuild_honest_ledger.js",
"175": "validate_evidence_grade.js",
"176": "uploads/[...path]/route.ts",
"177": "@types/node",
"177": "bcrypt",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "typescript",
"179": "class-transformer",
"180": "API Contract Specification",
"181": "⚙️ Backend Technical Review (05_dev_backend)",
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "eslint-config-next",
"184": "helmet",
"185": "Reviews.tsx",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
@ -196,13 +196,14 @@
"194": "Raw Finding Verification & Disposition Report",
"195": "React + TypeScript + Vite",
"196": "Select.tsx",
"197": "AuthModal.tsx",
"197": "toPersian",
"198": "js-yaml",
"199": "prisma",
"200": "application/README.md",
"201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)",
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
"204": "VerifyOtpDto",
"204": "@nestjs/core",
"205": "prisma/scientificTerms.ts",
"206": "seed-blogs.ts",
"207": "seed-custom.ts",
@ -218,16 +219,20 @@
"217": "sync_honest_manifest.js",
"218": "sync_manifest.js",
"219": "FormField.tsx",
"220": "AuthController",
"220": "@nestjs/jwt",
"221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json",
"223": "tailwindcss",
"224": "@nestjs/throttler",
"225": "next.config.ts",
"226": "Shabnam Font README",
"227": "AGENTS.md",
"228": "rules/graphify.md",
"229": ".agents/workflows/graphify.md",
"230": "instructions.md",
"231": "passport",
"232": "reflect-metadata",
"233": "swagger-ui-express",
"234": "source-map-support",
"235": "ts-loader",
"236": "ts-node",
@ -259,6 +264,7 @@
"262": "User Logout API",
"263": "generate-openapi.d.ts",
"264": "@types/compression",
"265": "@eslint/eslintrc",
"266": "@types/express",
"267": "@types/jest",
"268": "@types/multer",
@ -288,25 +294,34 @@
"292": "Production Docker Compose",
"293": "Staging Docker Compose",
"294": "ZibalService",
"295": "eslint-plugin-prettier",
"296": "globals",
"297": "ZibalEBankService",
"298": ".initiateOrderPayment",
"299": "@tailwindcss/postcss",
"300": "typescript",
"301": "@nestjs/cli",
"302": "typescript-eslint",
"304": "track/page.tsx",
"303": "@nestjs/schematics",
"304": "@nestjs/testing",
"305": "eslint-config-prettier",
"306": "prettier",
"307": "ts-jest",
"308": "jest",
"309": "axios",
"310": "tailwindcss",
"311": "@types/js-yaml",
"312": "@types/passport-jwt",
"313": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
"314": "@types/supertest",
"315": "typescript",
"316": "typescript-eslint",
"317": "revalidate/route.ts",
"318": "MaskableField.tsx",
"319": "@tailwindcss/postcss",
"321": "orders/page.tsx",
"322": "pets/page.tsx",
"325": "@types/react-dom",
"327": "eslint-plugin-react-refresh",
"328": "eslint",
"330": "tailwindcss"
}

File diff suppressed because one or more lines are too long

View File

@ -1,9 +1,9 @@
{
"0": "Roles",
"1": "app.module.ts",
"2": "BlogsService",
"2": "orders.service.ts",
"3": "productService.ts",
"4": "useSettingsStore",
"4": "ClientLayout.tsx",
"5": "CmsController",
"6": "tickets.controller.ts",
"7": "SmsSettingsPage.tsx",
@ -17,10 +17,10 @@
"15": "src/services/api.ts",
"16": "DoctorQueryDto",
"17": "schema.ts",
"18": "admin.module.ts",
"18": "JwtAuthGuard",
"19": "admin.controller.ts",
"20": "CreateVideoDto",
"21": "pets/pets.controller.ts",
"21": "orderService.ts",
"22": "ProductDto",
"23": "MenuService",
"24": "BE-001",
@ -47,7 +47,7 @@
"45": "What You Must Do When Invoked",
"46": "20260526145407_init/migration.sql",
"47": "IngredientsService",
"48": "WikiController",
"48": "app.e2e-spec.js",
"49": "devDependencies",
"50": "devDependencies",
"51": "BlogsController",
@ -61,13 +61,13 @@
"59": "compilerOptions",
"60": "CreateUserDto",
"61": "ProductPage.tsx",
"62": "ReportsController",
"62": "admin.module.ts",
"63": "dependencies",
"64": "compilerOptions",
"65": "admin.service.ts",
"66": "AdminQueryDto",
"67": "PetsController",
"68": "HomeClient.tsx",
"68": "useSettingsStore",
"69": "Required Review Group Closures",
"70": "compilerOptions",
"71": "getPageMetadata",
@ -89,7 +89,7 @@
"87": "dependencies",
"88": "CreateEBankCheckoutDto",
"89": "seed-products.ts",
"90": "lib/services/api.ts",
"90": "toPersian",
"91": "Reconciled Audit Roles & Assignments",
"92": "OrdersService",
"93": "components/Skeleton.tsx",
@ -150,7 +150,7 @@
"148": "RouteErrorBoundary",
"149": "RegisterDto",
"150": "Product Requirement Document (PRD)",
"151": "@nestjs/swagger",
"151": "@eslint/js",
"152": "RedisService",
"153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History",
@ -176,14 +176,14 @@
"174": "rebuild_honest_ledger.js",
"175": "validate_evidence_grade.js",
"176": "uploads/[...path]/route.ts",
"177": "app/page.tsx",
"177": "@types/node",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "WikiService",
"179": "typescript",
"180": "API Contract Specification",
"181": "⚙️ Backend Technical Review (05_dev_backend)",
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "FaqService",
"184": "eslint-config-next",
"185": "Reviews.tsx",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
@ -197,7 +197,6 @@
"195": "React + TypeScript + Vite",
"196": "Select.tsx",
"197": "AuthModal.tsx",
"198": "@tailwindcss/postcss",
"199": "prisma",
"200": "application/README.md",
"201": "deploy.sh",
@ -223,16 +222,12 @@
"221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json",
"223": "tailwindcss",
"224": "helmet",
"225": "next.config.ts",
"226": "Shabnam Font README",
"227": "AGENTS.md",
"228": "rules/graphify.md",
"229": ".agents/workflows/graphify.md",
"230": "instructions.md",
"231": "@nestjs/schematics",
"232": "js-yaml",
"233": "@nestjs/core",
"234": "source-map-support",
"235": "ts-loader",
"236": "ts-node",
@ -264,7 +259,6 @@
"262": "User Logout API",
"263": "generate-openapi.d.ts",
"264": "@types/compression",
"265": "@nestjs/jwt",
"266": "@types/express",
"267": "@types/jest",
"268": "@types/multer",
@ -294,40 +288,25 @@
"292": "Production Docker Compose",
"293": "Staging Docker Compose",
"294": "ZibalService",
"295": "@nestjs/throttler",
"296": "passport",
"297": "ZibalEBankService",
"298": ".initiateOrderPayment",
"299": "@tailwindcss/postcss",
"300": "typescript",
"301": "reflect-metadata",
"302": "typescript-eslint",
"303": "swagger-ui-express",
"304": "track/page.tsx",
"305": "eslint-config-prettier",
"306": "class-transformer",
"307": "@eslint/eslintrc",
"308": "jest",
"309": "axios",
"310": "tailwindcss",
"311": "@nestjs/cli",
"312": "@types/passport-jwt",
"313": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
"314": "eslint-plugin-prettier",
"315": "typescript",
"316": "globals",
"317": "revalidate/route.ts",
"318": "MaskableField.tsx",
"319": "@nestjs/testing",
"320": "prettier",
"321": "orders/page.tsx",
"322": "pets/page.tsx",
"323": "ts-jest",
"324": "@types/js-yaml",
"325": "@types/react-dom",
"326": "@types/supertest",
"327": "eslint-plugin-react-refresh",
"328": "eslint",
"329": "typescript-eslint",
"330": "tailwindcss"
}

View File

@ -1,25 +1,25 @@
# Graph Report - canina (2026-09-05)
## Corpus Check
- 603 files · ~1,115,875 words
- 603 files · ~1,116,279 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4249 nodes · 7780 edges · 331 communities (216 shown, 115 thin omitted)
- 4249 nodes · 7783 edges · 310 communities (214 shown, 96 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 298 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `1d2d1415`
- Built from commit: `1fd9a92d`
- 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)
- Roles
- app.module.ts
- BlogsService
- orders.service.ts
- productService.ts
- useSettingsStore
- ClientLayout.tsx
- CmsController
- tickets.controller.ts
- SmsSettingsPage.tsx
@ -33,10 +33,10 @@
- src/services/api.ts
- DoctorQueryDto
- schema.ts
- admin.module.ts
- JwtAuthGuard
- admin.controller.ts
- CreateVideoDto
- pets/pets.controller.ts
- orderService.ts
- ProductDto
- MenuService
- BE-001
@ -63,7 +63,7 @@
- What You Must Do When Invoked
- 20260526145407_init/migration.sql
- IngredientsService
- WikiController
- app.e2e-spec.js
- devDependencies
- devDependencies
- BlogsController
@ -77,13 +77,13 @@
- compilerOptions
- CreateUserDto
- ProductPage.tsx
- ReportsController
- admin.module.ts
- dependencies
- compilerOptions
- admin.service.ts
- AdminQueryDto
- PetsController
- HomeClient.tsx
- useSettingsStore
- Required Review Group Closures
- compilerOptions
- getPageMetadata
@ -105,7 +105,7 @@
- dependencies
- CreateEBankCheckoutDto
- seed-products.ts
- lib/services/api.ts
- toPersian
- Reconciled Audit Roles & Assignments
- OrdersService
- components/Skeleton.tsx
@ -166,7 +166,7 @@
- RouteErrorBoundary
- RegisterDto
- Product Requirement Document (PRD)
- @nestjs/swagger
- @eslint/js
- RedisService
- exclude
- Baseline Command Plan & Reconciled Command History
@ -191,14 +191,14 @@
- rebuild_honest_ledger.js
- validate_evidence_grade.js
- uploads/[...path]/route.ts
- app/page.tsx
- @types/node
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- WikiService
- typescript
- API Contract Specification
- ⚙️ Backend Technical Review (05_dev_backend)
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- FaqService
- eslint-config-next
- Reviews.tsx
- seed-ui-texts.ts
- seed-wiki.ts
@ -212,7 +212,6 @@
- React + TypeScript + Vite
- Select.tsx
- AuthModal.tsx
- @tailwindcss/postcss
- prisma
- application/README.md
- deploy.sh
@ -238,16 +237,12 @@
- Textarea.tsx
- admin-panel/tsconfig.json
- tailwindcss
- helmet
- next.config.ts
- Shabnam Font README
- AGENTS.md
- rules/graphify.md
- .agents/workflows/graphify.md
- instructions.md
- @nestjs/schematics
- js-yaml
- @nestjs/core
- source-map-support
- ts-loader
- ts-node
@ -275,7 +270,6 @@
- User Login API
- User Logout API
- @types/compression
- @nestjs/jwt
- @types/express
- @types/jest
- @types/multer
@ -294,37 +288,22 @@
- Production Docker Compose
- Staging Docker Compose
- ZibalService
- @nestjs/throttler
- passport
- ZibalEBankService
- .initiateOrderPayment
- @tailwindcss/postcss
- typescript
- reflect-metadata
- typescript-eslint
- swagger-ui-express
- track/page.tsx
- eslint-config-prettier
- class-transformer
- @eslint/eslintrc
- jest
- @nestjs/cli
- @types/passport-jwt
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
- eslint-plugin-prettier
- typescript
- globals
- revalidate/route.ts
- MaskableField.tsx
- @nestjs/testing
- prettier
- ts-jest
- @types/js-yaml
- @types/react-dom
- @types/supertest
- eslint-plugin-react-refresh
- eslint
- typescript-eslint
- tailwindcss
## God Nodes (most connected - your core abstractions)
@ -356,27 +335,27 @@
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
## Communities (331 total, 115 thin omitted)
## Communities (310 total, 96 thin omitted)
### Community 0 - "Roles"
Cohesion: 0.24
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
### Community 1 - "app.module.ts"
Cohesion: 0.06
Nodes (39): AdminModule, Module, B2BModule, Module, BannersModule, Module, CmsModule, Module (+31 more)
Cohesion: 0.07
Nodes (36): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+28 more)
### Community 2 - "BlogsService"
Cohesion: 0.13
Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable
### Community 2 - "orders.service.ts"
Cohesion: 0.24
Nodes (6): IsNotEmpty, IsNumber, IsString, ValidateCouponDto, OrdersModule, Module
### Community 3 - "productService.ts"
Cohesion: 0.06
Nodes (35): revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory, BlogPostItem (+27 more)
Nodes (36): dynamic, GET(), revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate (+28 more)
### Community 4 - "useSettingsStore"
Cohesion: 0.07
Nodes (31): AuthModal, B2BPortal, CartDrawer, ClientLayout(), metadata, ArchivePage(), B2BLandingClient(), BrandLogo() (+23 more)
### Community 4 - "ClientLayout.tsx"
Cohesion: 0.08
Nodes (23): B2BPortal, CartDrawer, ClientLayout(), metadata, Footer(), NavigationProgressBar(), NetworkBanner(), CURRENT_SYMPTOMS (+15 more)
### Community 5 - "CmsController"
Cohesion: 0.09
@ -395,8 +374,8 @@ Cohesion: 0.05
Nodes (27): SmsEventDefinition, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional (+19 more)
### Community 9 - "devDependencies"
Cohesion: 0.22
Nodes (9): devDependencies, @eslint/js, @types/bcryptjs, @types/node, typescript, @eslint/js, @types/node, typescript (+1 more)
Cohesion: 0.08
Nodes (25): devDependencies, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/schematics, @nestjs/testing, prettier (+17 more)
### Community 10 - "reviews.controller.ts"
Cohesion: 0.07
@ -415,8 +394,8 @@ Cohesion: 0.07
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
### Community 14 - "UserDashboard.tsx"
Cohesion: 0.09
Nodes (32): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, BlogPreviewSection() (+24 more)
Cohesion: 0.13
Nodes (25): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, CheckoutPage() (+17 more)
### Community 15 - "src/services/api.ts"
Cohesion: 0.06
@ -430,9 +409,9 @@ Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Contr
Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
### Community 18 - "admin.module.ts"
Cohesion: 0.10
Nodes (12): MediaService, Injectable, SslCertInfo, JwtAuthGuard, Injectable, B2BWholesaleOrderItem, ROLES_KEY, SortOrder (+4 more)
### Community 18 - "JwtAuthGuard"
Cohesion: 0.17
Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, FaqService, Injectable
### Community 19 - "admin.controller.ts"
Cohesion: 0.29
@ -442,9 +421,9 @@ Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPrope
Cohesion: 0.09
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
### Community 21 - "pets/pets.controller.ts"
Cohesion: 0.13
Nodes (15): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+7 more)
### Community 21 - "orderService.ts"
Cohesion: 0.20
Nodes (4): ApiErr, Order, OrderItem, OrderService
### Community 22 - "ProductDto"
Cohesion: 0.16
@ -550,9 +529,9 @@ Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_cond
Cohesion: 0.13
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 48 - "WikiController"
Cohesion: 0.21
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
### Community 48 - "app.e2e-spec.js"
Cohesion: 0.50
Nodes (3): app_module_1, supertest_1, testing_1
### Community 49 - "devDependencies"
Cohesion: 0.11
@ -560,7 +539,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies"
Cohesion: 0.12
Nodes (17): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, @testing-library/jest-dom, @testing-library/react, @types/node (+9 more)
Nodes (17): devDependencies, eslint, jsdom, @tailwindcss/postcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
### Community 51 - "BlogsController"
Cohesion: 0.07
@ -599,16 +578,16 @@ Cohesion: 0.18
Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
### Community 61 - "ProductPage.tsx"
Cohesion: 0.12
Nodes (30): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), OrderSuccess(), PetProfile(), ProductImageZoomModalProps (+22 more)
Cohesion: 0.10
Nodes (30): revalidate, ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), ProductImageZoomModalProps, CalculatorState (+22 more)
### Community 62 - "ReportsController"
Cohesion: 0.14
Nodes (11): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+3 more)
### Community 62 - "admin.module.ts"
Cohesion: 0.05
Nodes (23): AdminModule, Module, CategoryQuery, MediaService, Injectable, PetQuery, PetsService, Injectable (+15 more)
### Community 63 - "dependencies"
Cohesion: 0.09
Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more)
Cohesion: 0.05
Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 more)
### Community 64 - "compilerOptions"
Cohesion: 0.10
@ -623,12 +602,12 @@ Cohesion: 0.18
Nodes (8): ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "PetsController"
Cohesion: 0.11
Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more)
Cohesion: 0.17
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### Community 68 - "HomeClient.tsx"
Cohesion: 0.14
Nodes (17): HomeClient(), HomeClientProps, BannerPlacement(), BannerPlacementProps, Hero(), StatCounter(), B2BInquiry, Banner (+9 more)
### Community 68 - "useSettingsStore"
Cohesion: 0.07
Nodes (31): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPostClientProps, BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps (+23 more)
### Community 69 - "Required Review Group Closures"
Cohesion: 0.10
@ -639,8 +618,8 @@ Cohesion: 0.08
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
### Community 71 - "getPageMetadata"
Cohesion: 0.09
Nodes (15): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata() (+7 more)
Cohesion: 0.08
Nodes (19): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home() (+11 more)
### Community 72 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -655,8 +634,8 @@ Cohesion: 0.13
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 75 - "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 76 - "RevalidationService"
Cohesion: 0.07
@ -714,9 +693,9 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "lib/services/api.ts"
Cohesion: 0.09
Nodes (26): VerifyContent(), B2BPortal(), ContactInfoItem, Header(), MENU_ICONS, PrescriptionUploadModal(), PrescriptionUploadModalProps, UserDashboard() (+18 more)
### Community 90 - "toPersian"
Cohesion: 0.12
Nodes (27): VerifyContent(), AuthModal(), B2BPortal(), CartDrawer(), Header(), MENU_ICONS, OrderSuccess(), PetProfile() (+19 more)
### Community 91 - "Reconciled Audit Roles & Assignments"
Cohesion: 0.12
@ -783,12 +762,12 @@ Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 107 - "PaginationDto"
Cohesion: 0.07
Nodes (23): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+15 more)
Cohesion: 0.05
Nodes (32): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+24 more)
### Community 108 - "PrismaService"
Cohesion: 0.06
Nodes (25): CategoryQuery, PetQuery, WikiQuery, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern (+17 more)
Nodes (24): B2BWholesaleOrderItem, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+16 more)
### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -931,8 +910,8 @@ Cohesion: 0.25
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 144 - "SafeImage.tsx"
Cohesion: 0.06
Nodes (34): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+26 more)
Cohesion: 0.08
Nodes (28): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BannerPlacement(), BannerPlacementProps, PLAYBACK_RATES (+20 more)
### Community 145 - "auth.service.ts"
Cohesion: 0.22
@ -1050,10 +1029,6 @@ Nodes (4): activeFiles, errors, validationOutput, warnings
Cohesion: 0.53
Nodes (5): dynamic, GET(), getCandidateUrls(), getMimeType(), HEAD()
### Community 177 - "app/page.tsx"
Cohesion: 0.67
Nodes (3): generateMetadata(), getHomeData(), Home()
### Community 178 - "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina"
Cohesion: 0.33
Nodes (5): نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina, ۱. معماری و نقش‌های کاربری (User Roles), ۲. ماتریس جریان‌ها و قابلیت‌های کاربرمحور (Feature & Flow Matrix), ۳. وضعیت پوشش نهایی سوئیت ۱۱گانه (Final 11 Test Suites Status), ۴. راهنمای نگهداری و افزودن فیچرهای جدید بدون شکستن تست‌ها (Developer Maintenance Guide)
@ -1074,10 +1049,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 184 - "FaqService"
Cohesion: 0.36
Nodes (4): FaqModule, Module, FaqService, Injectable
### Community 185 - "Reviews.tsx"
Cohesion: 0.40
Nodes (5): BlogCommentItem, ProductReview, Reviews(), toPersianDigits(), Reviews
@ -1107,8 +1078,8 @@ Cohesion: 0.50
Nodes (3): Select, SelectOption, SelectProps
### Community 197 - "AuthModal.tsx"
Cohesion: 0.09
Nodes (16): LoginModal, AuthModal(), AuthModalProps, extractOtpFromText(), otpCooldownExpiries, NOTE: We intentionally do NOT use navigator.credentials.get (WebOTP API) here, IMPORTANT: only depend on isOpen here — NOT subView. If we depend on subView,, LoginModal() (+8 more)
Cohesion: 0.10
Nodes (16): AuthModal, LoginModal, AuthModalProps, extractOtpFromText(), otpCooldownExpiries, IMPORTANT: only depend on isOpen here — NOT subView. If we depend on subView,, extractOtpFromText(), LoginModal() (+8 more)
### Community 200 - "application/README.md"
Cohesion: 0.50
@ -1145,22 +1116,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps
- **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **115 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **96 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 `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqController`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersService`, `RevalidationService`, `reviews.controller.ts`, `TestimonialsService`, `IngredientsService`, `admin.module.ts`, `prescriptions.controller.ts`, `SmartAdvisorService`, `MenuService`, `FaqService`?**
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqController`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersService`, `RevalidationService`, `reviews.controller.ts`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `MenuService`?**
_High betweenness centrality (0.093) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `OrdersService`, `WikiController`, `HomeController`, `AuthController`?**
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `PaginationDto`, `OrdersService`, `HomeController`, `AuthController`?**
_High betweenness centrality (0.066) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `admin.module.ts` to `CmsController`, `tickets.controller.ts`, `reviews.controller.ts`, `PaginationDto`, `RevalidationService`, `UsersService`, `DoctorQueryDto`, `auth.controller.ts`, `admin.controller.ts`, `prescriptions.controller.ts`, `pets/pets.controller.ts`, `FaqService`?**
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `orders.service.ts`, `CmsController`, `tickets.controller.ts`, `reviews.controller.ts`, `PaginationDto`, `PetsController`, `RevalidationService`, `UsersService`, `DoctorQueryDto`, `auth.controller.ts`, `admin.controller.ts`, `prescriptions.controller.ts`, `admin.module.ts`?**
_High betweenness centrality (0.030) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1355 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06140350877192982 - nodes in this community are weakly interconnected._
- **Should `BlogsService` be split into smaller, more focused modules?**
_Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected._
_Cohesion score 0.06821480406386067 - nodes in this community are weakly interconnected._
- **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.05961538461538462 - nodes in this community are weakly interconnected._
_Cohesion score 0.06041986687147977 - nodes in this community are weakly interconnected._
- **Should `ClientLayout.tsx` be split into smaller, more focused modules?**
_Cohesion score 0.08067226890756303 - 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,23 +1,23 @@
# Graph Report - canina (2026-09-05)
## Corpus Check
- 603 files · ~1,116,279 words
- 603 files · ~1,116,468 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4249 nodes · 7783 edges · 310 communities (214 shown, 96 thin omitted)
- 4251 nodes · 7789 edges · 325 communities (209 shown, 116 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 298 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `1fd9a92d`
- Built from commit: `c57f775c`
- 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)
- Roles
- app.module.ts
- orders.service.ts
- WikiController
- productService.ts
- ClientLayout.tsx
- CmsController
@ -25,7 +25,7 @@
- SmsSettingsPage.tsx
- SmsService
- devDependencies
- reviews.controller.ts
- CreateReviewDto
- UsersService
- index.ts
- app-audit-verification.e2e-spec.js
@ -36,7 +36,7 @@
- JwtAuthGuard
- admin.controller.ts
- CreateVideoDto
- orderService.ts
- OrderService
- ProductDto
- MenuService
- BE-001
@ -48,12 +48,12 @@
- DEVOPS-001
- DOC-001
- adminRoutes.tsx
- WholesaleApplyDto
- WholesaleService
- B2BService
- ContactService
- FaqController
- FaqService
- راهنمای تست سیستم (Software Testing)
- Button
- Button.tsx
- CategoriesController
- MediaController
- What You Must Do When Invoked
@ -69,11 +69,11 @@
- BlogsController
- prescriptions.controller.ts
- SmartAdvisorService
- Button.tsx
- MenuManager.tsx
- UITexts.tsx
- Orders.tsx
- PrescriptionsManager.tsx
- Role & Core Objective
- AuthService
- RevalidationService
- compilerOptions
- CreateUserDto
- ProductPage.tsx
@ -91,7 +91,7 @@
- Operational Rules & Boundaries
- WikiController
- PetsController
- RevalidationService
- ProductsService
- seo.module.ts
- rss.xml/route.ts
- 🏢 AI Software Agency — Master Orchestration Protocol v3
@ -100,17 +100,17 @@
- scripts
- dependencies
- Role & Core Objective
- .sendOtp
- auth.controller.ts
- zibal.service.ts
- dependencies
- CreateEBankCheckoutDto
- seed-products.ts
- toPersian
- PetProfile.tsx
- Reconciled Audit Roles & Assignments
- OrdersService
- components/Skeleton.tsx
- Orders.tsx
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
- wiki/[slug]/page.tsx
- getSeoConfig
- compilerOptions
- PaymentService
- scripts
@ -128,7 +128,7 @@
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- auth.controller.ts
- AdminTransactionFilterDto
- AppService
- Spinner.tsx
- Vazirmatn Changelog
@ -143,8 +143,8 @@
- validate_integrity.js
- admin-panel/package.json
- Sahel-Font
- torob.controller.ts
- Reports.tsx
- WholesaleApplyDto
- MetricsController
- Sahel-Font
- Role & Core Objective
- orchestrate.py
@ -160,14 +160,14 @@
- start-dev.js
- generate-openapi.js
- SafeImage.tsx
- auth.service.ts
- wiki/[slug]/page.tsx
- System Discovery
- HomeController
- catalog/page.tsx
- RouteErrorBoundary
- RegisterDto
- search/page.tsx
- Product Requirement Document (PRD)
- @eslint/js
- RedisService
- auth.service.ts
- exclude
- Baseline Command Plan & Reconciled Command History
- seo-backfill.ts
@ -191,14 +191,14 @@
- rebuild_honest_ledger.js
- validate_evidence_grade.js
- uploads/[...path]/route.ts
- @types/node
- bcrypt
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- typescript
- class-transformer
- API Contract Specification
- ⚙️ Backend Technical Review (05_dev_backend)
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- eslint-config-next
- helmet
- Reviews.tsx
- seed-ui-texts.ts
- seed-wiki.ts
@ -211,13 +211,14 @@
- Raw Finding Verification & Disposition Report
- React + TypeScript + Vite
- Select.tsx
- AuthModal.tsx
- toPersian
- js-yaml
- prisma
- application/README.md
- deploy.sh
- 🔒 Security & Performance Review (09_devops_security)
- 👁️ UX & Persona Interface Review (08_visual_qa)
- VerifyOtpDto
- @nestjs/core
- prisma/scientificTerms.ts
- seed-blogs.ts
- seed-custom.ts
@ -233,16 +234,20 @@
- sync_honest_manifest.js
- sync_manifest.js
- FormField.tsx
- AuthController
- @nestjs/jwt
- Textarea.tsx
- admin-panel/tsconfig.json
- tailwindcss
- @nestjs/throttler
- next.config.ts
- Shabnam Font README
- AGENTS.md
- rules/graphify.md
- .agents/workflows/graphify.md
- instructions.md
- passport
- reflect-metadata
- swagger-ui-express
- source-map-support
- ts-loader
- ts-node
@ -270,6 +275,7 @@
- User Login API
- User Logout API
- @types/compression
- @eslint/eslintrc
- @types/express
- @types/jest
- @types/multer
@ -288,22 +294,31 @@
- Production Docker Compose
- Staging Docker Compose
- ZibalService
- eslint-plugin-prettier
- globals
- ZibalEBankService
- .initiateOrderPayment
- @tailwindcss/postcss
- typescript
- @nestjs/cli
- typescript-eslint
- track/page.tsx
- @nestjs/schematics
- @nestjs/testing
- eslint-config-prettier
- prettier
- ts-jest
- jest
- @types/js-yaml
- @types/passport-jwt
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
- @types/supertest
- typescript
- typescript-eslint
- revalidate/route.ts
- MaskableField.tsx
- @tailwindcss/postcss
- @types/react-dom
- eslint-plugin-react-refresh
- eslint
- tailwindcss
## God Nodes (most connected - your core abstractions)
@ -323,39 +338,39 @@
docs/02-user-guide.md → backend/uploads/1781288429353-508765350.jpg
- `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
- `PetsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/pets/pets.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
## 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`
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
- 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`
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
## Communities (310 total, 96 thin omitted)
## Communities (325 total, 116 thin omitted)
### Community 0 - "Roles"
Cohesion: 0.24
Cohesion: 0.23
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
### Community 1 - "app.module.ts"
Cohesion: 0.07
Nodes (36): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+28 more)
### Community 2 - "orders.service.ts"
Cohesion: 0.24
Nodes (6): IsNotEmpty, IsNumber, IsString, ValidateCouponDto, OrdersModule, Module
### Community 2 - "WikiController"
Cohesion: 0.13
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
### Community 3 - "productService.ts"
Cohesion: 0.06
Nodes (36): dynamic, GET(), revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate (+28 more)
Nodes (35): DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory, BlogPostItem, CatalogPageSpread() (+27 more)
### Community 4 - "ClientLayout.tsx"
Cohesion: 0.08
Nodes (23): B2BPortal, CartDrawer, ClientLayout(), metadata, Footer(), NavigationProgressBar(), NetworkBanner(), CURRENT_SYMPTOMS (+15 more)
Nodes (23): ClientLayout(), LoginModal, BannerPlacement(), BannerPlacementProps, BrandLogo(), BrandLogoProps, Footer(), MaintenancePage() (+15 more)
### Community 5 - "CmsController"
Cohesion: 0.09
@ -371,19 +386,19 @@ Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, S
### Community 8 - "SmsService"
Cohesion: 0.05
Nodes (27): SmsEventDefinition, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional (+19 more)
Nodes (28): SmsEventDefinition, SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber (+20 more)
### Community 9 - "devDependencies"
Cohesion: 0.08
Nodes (25): devDependencies, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/schematics, @nestjs/testing, prettier (+17 more)
Cohesion: 0.22
Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more)
### Community 10 - "reviews.controller.ts"
### Community 10 - "CreateReviewDto"
Cohesion: 0.07
Nodes (32): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+24 more)
Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more)
### Community 11 - "UsersService"
Cohesion: 0.05
Nodes (43): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+35 more)
Nodes (42): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+34 more)
### Community 12 - "index.ts"
Cohesion: 0.06
@ -394,12 +409,12 @@ Cohesion: 0.07
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
### Community 14 - "UserDashboard.tsx"
Cohesion: 0.13
Nodes (25): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, CheckoutPage() (+17 more)
Cohesion: 0.11
Nodes (22): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), CheckoutPage(), DeleteConfirmModal(), DeleteConfirmModalProps (+14 more)
### Community 15 - "src/services/api.ts"
Cohesion: 0.06
Nodes (36): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+28 more)
Cohesion: 0.07
Nodes (34): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+26 more)
### Community 16 - "DoctorQueryDto"
Cohesion: 0.09
@ -410,8 +425,8 @@ Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
### Community 18 - "JwtAuthGuard"
Cohesion: 0.17
Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, FaqService, Injectable
Cohesion: 0.21
Nodes (6): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable
### Community 19 - "admin.controller.ts"
Cohesion: 0.29
@ -421,12 +436,8 @@ Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPrope
Cohesion: 0.09
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
### Community 21 - "orderService.ts"
Cohesion: 0.20
Nodes (4): ApiErr, Order, OrderItem, OrderService
### Community 22 - "ProductDto"
Cohesion: 0.16
Cohesion: 0.20
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 23 - "MenuService"
@ -466,32 +477,32 @@ Cohesion: 0.06
Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more)
### Community 32 - "adminRoutes.tsx"
Cohesion: 0.07
Nodes (21): App(), ContactInfoItem, ContactSubmission, CategoryDist, DashboardData, SslStatus, Ticket, TicketMessage (+13 more)
Cohesion: 0.06
Nodes (22): App(), CategoryDist, DashboardData, SslStatus, WholesaleRequest, AdminRouteConfig, BannersManager, Categories (+14 more)
### Community 33 - "WholesaleApplyDto"
Cohesion: 0.10
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
### Community 33 - "WholesaleService"
Cohesion: 0.14
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
### Community 34 - "B2BService"
Cohesion: 0.13
Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+7 more)
Cohesion: 0.12
Nodes (16): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+8 more)
### Community 35 - "ContactService"
Cohesion: 0.13
Nodes (12): ContactController, Body, Controller, Get, Param, Post, Put, Query (+4 more)
### Community 36 - "FaqController"
Cohesion: 0.14
Nodes (12): FaqController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more)
### Community 36 - "FaqService"
Cohesion: 0.12
Nodes (16): FaqController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 37 - "راهنمای تست سیستم (Software Testing)"
Cohesion: 0.07
Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more)
### Community 38 - "Button"
Cohesion: 0.16
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
### Community 38 - "Button.tsx"
Cohesion: 0.06
Nodes (32): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ButtonProps, ButtonSize, ButtonVariant, ThSort() (+24 more)
### Community 39 - "CategoriesController"
Cohesion: 0.10
@ -499,7 +510,7 @@ Nodes (16): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags
### Community 40 - "MediaController"
Cohesion: 0.11
Nodes (14): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
Nodes (16): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
### Community 41 - "What You Must Do When Invoked"
Cohesion: 0.07
@ -539,7 +550,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies"
Cohesion: 0.12
Nodes (17): devDependencies, eslint, jsdom, @tailwindcss/postcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
Nodes (17): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, @testing-library/jest-dom, @testing-library/react, @types/node (+9 more)
### Community 51 - "BlogsController"
Cohesion: 0.07
@ -553,61 +564,65 @@ Nodes (17): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 54 - "Button.tsx"
Cohesion: 0.10
Nodes (16): ButtonProps, ButtonSize, ButtonVariant, ConfirmModal(), ConfirmModalProps, HeroBanner, VetTestimonial, FAQ (+8 more)
### Community 54 - "MenuManager.tsx"
Cohesion: 0.33
Nodes (4): MENU_TABS, MenuItem, MenuType, MenuManager
### Community 55 - "UITexts.tsx"
Cohesion: 0.08
Nodes (23): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+15 more)
Cohesion: 0.10
Nodes (17): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps (+9 more)
### Community 56 - "Orders.tsx"
Cohesion: 0.11
Nodes (15): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, getPaymentMethodLabel(), Order (+7 more)
### Community 56 - "PrescriptionsManager.tsx"
Cohesion: 0.12
Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, ProductItem, UserRecord (+6 more)
### Community 57 - "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 58 - "RevalidationService"
Cohesion: 0.23
Nodes (3): Optional, RevalidationService, Injectable
### Community 59 - "compilerOptions"
Cohesion: 0.06
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
### Community 60 - "CreateUserDto"
Cohesion: 0.18
Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
Cohesion: 0.24
Nodes (10): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+2 more)
### Community 61 - "ProductPage.tsx"
Cohesion: 0.10
Nodes (30): revalidate, ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), ProductImageZoomModalProps, CalculatorState (+22 more)
Cohesion: 0.11
Nodes (24): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, ProductCard(), ProductImageZoomModalProps, CalculatorState, GalleryMediaItem, ICON_MAP (+16 more)
### Community 62 - "admin.module.ts"
Cohesion: 0.05
Nodes (23): AdminModule, Module, CategoryQuery, MediaService, Injectable, PetQuery, PetsService, Injectable (+15 more)
Cohesion: 0.07
Nodes (20): AdminModule, Module, ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+12 more)
### Community 63 - "dependencies"
Cohesion: 0.05
Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 more)
Cohesion: 0.09
Nodes (23): dependencies, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport, @nestjs/platform-express (+15 more)
### Community 64 - "compilerOptions"
Cohesion: 0.10
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
### Community 65 - "admin.service.ts"
Cohesion: 0.22
Nodes (8): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode, CANONICAL_ALIASES
Cohesion: 0.39
Nodes (7): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode
### Community 66 - "AdminQueryDto"
Cohesion: 0.18
Nodes (8): ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
Nodes (7): ApiQuery, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "PetsController"
Cohesion: 0.17
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
Cohesion: 0.10
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
### Community 68 - "useSettingsStore"
Cohesion: 0.07
Nodes (31): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPostClientProps, BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps (+23 more)
Nodes (35): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPostClientProps, BlogPost, BlogPreviewSection(), ContactInfoItem, EnamadBadge() (+27 more)
### Community 69 - "Required Review Group Closures"
Cohesion: 0.10
@ -619,7 +634,7 @@ Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx
### Community 71 - "getPageMetadata"
Cohesion: 0.08
Nodes (19): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home() (+11 more)
Nodes (18): generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home(), generateMetadata() (+10 more)
### Community 72 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -637,9 +652,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
Cohesion: 0.05
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
### Community 76 - "RevalidationService"
Cohesion: 0.07
Nodes (24): RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional, IsEnum (+16 more)
### Community 76 - "ProductsService"
Cohesion: 0.06
Nodes (30): RevalidationModule, Global, Module, GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString (+22 more)
### Community 77 - "seo.module.ts"
Cohesion: 0.16
@ -673,9 +688,9 @@ Nodes (21): dependencies, axios, lucide-react, react, react-dom, react-hot-toast
Cohesion: 0.12
Nodes (16): 1. Active Secret Scanning (All Modified Files), 2. Docker Container Verification (if Dockerfile exists), 3. CI/CD Basic Check (if `.github/workflows/` exists), 4. Failure Routing Protocol, 5. Forbidden Actions, ENFORCE MODE — Normal Operation, Expected JSON Output Schema, Operational Rules & Boundaries (+8 more)
### Community 85 - ".sendOtp"
Cohesion: 0.32
Nodes (10): ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, Body, Post, Req, Throttle (+2 more)
### Community 85 - "auth.controller.ts"
Cohesion: 0.06
Nodes (43): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+35 more)
### Community 86 - "zibal.service.ts"
Cohesion: 0.16
@ -693,9 +708,9 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "toPersian"
Cohesion: 0.12
Nodes (27): VerifyContent(), AuthModal(), B2BPortal(), CartDrawer(), Header(), MENU_ICONS, OrderSuccess(), PetProfile() (+19 more)
### Community 90 - "PetProfile.tsx"
Cohesion: 0.10
Nodes (30): B2BPortal, VerifyContent(), metadata, B2BPortal(), Header(), MENU_ICONS, OrderSuccess(), OrderTracking() (+22 more)
### Community 91 - "Reconciled Audit Roles & Assignments"
Cohesion: 0.12
@ -705,33 +720,29 @@ Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. Rea
Cohesion: 0.07
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
### Community 93 - "components/Skeleton.tsx"
Cohesion: 0.24
Nodes (4): OrderRowSkeleton(), PetProfileSkeleton(), Skeleton(), SkeletonProps
### Community 93 - "Orders.tsx"
Cohesion: 0.22
Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders
### Community 94 - "Phase 3.1 — Human Review Preparation and Master Backlog Critique"
Cohesion: 0.13
Nodes (14): 10. Dependency & Wave Adjustments, 11. Acceptance Criteria Refinements, 12. Business and Product Decision Classification, 13. Final Recommended Backlog Summary, 1. Executive Assessment, 2. Findings That Require No Change, 3. Findings Requiring Task Refinements, 4. Tasks Requiring Splitting (+6 more)
### Community 95 - "wiki/[slug]/page.tsx"
### Community 95 - "getSeoConfig"
Cohesion: 0.24
Nodes (15): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), generateMetadata() (+7 more)
Nodes (12): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), revalidate (+4 more)
### Community 96 - "compilerOptions"
Cohesion: 0.06
Nodes (32): compilerOptions, allowJs, esModuleInterop, incremental, isolatedModules, jsx, lib, module (+24 more)
### Community 97 - "PaymentService"
Cohesion: 0.10
Nodes (9): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, PaymentService (+1 more)
### Community 98 - "scripts"
Cohesion: 0.13
Nodes (15): scripts, build, build:nest, docs:generate, lint, seo:backfill, start, start:debug (+7 more)
### Community 99 - "BlogsController"
Cohesion: 0.18
Nodes (12): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Get (+4 more)
Cohesion: 0.08
Nodes (23): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Get (+15 more)
### Community 100 - "Deep Audit Summary Report"
Cohesion: 0.14
@ -750,8 +761,8 @@ 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)
### Community 104 - "Products.tsx"
Cohesion: 0.10
Nodes (24): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+16 more)
Cohesion: 0.09
Nodes (25): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+17 more)
### Community 105 - "Operational Rules & Boundaries"
Cohesion: 0.17
@ -762,12 +773,12 @@ Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 107 - "PaginationDto"
Cohesion: 0.05
Nodes (32): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+24 more)
Cohesion: 0.06
Nodes (25): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+17 more)
### Community 108 - "PrismaService"
Cohesion: 0.06
Nodes (24): B2BWholesaleOrderItem, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+16 more)
Cohesion: 0.07
Nodes (25): CategoryQuery, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+17 more)
### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -785,17 +796,17 @@ Nodes (10): 1. Mark Active Task as Complete, 2. Documentation Updates, 3. Dynami
Cohesion: 0.18
Nodes (10): 1. Pre-Deployment Checklist, 2. Build Verification, 3. Deployment Strategy (Based on Target), 4. Post-Deployment Health Check, 5. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries, Required Output Artifacts (What files to write/update) (+2 more)
### Community 113 - "auth.controller.ts"
Cohesion: 0.16
Nodes (11): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+3 more)
### Community 113 - "AdminTransactionFilterDto"
Cohesion: 0.22
Nodes (7): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 114 - "AppService"
Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 115 - "Spinner.tsx"
Cohesion: 0.07
Nodes (36): ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, maxWidthClasses, Modal() (+28 more)
Cohesion: 0.08
Nodes (34): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+26 more)
### Community 116 - "Vazirmatn Changelog"
Cohesion: 0.18
@ -822,11 +833,11 @@ Cohesion: 0.20
Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more)
### Community 122 - "AdminService"
Cohesion: 0.10
Nodes (11): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Delete, Param, Put (+3 more)
Cohesion: 0.09
Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Delete, Get, Param (+4 more)
### Community 123 - "Body"
Cohesion: 0.21
Cohesion: 0.20
Nodes (3): Body, Post, CouponInput
### Community 124 - "Repository Map"
@ -845,13 +856,13 @@ Nodes (9): name, private, scripts, build, dev, lint, preview, type (+1 more)
Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
### Community 128 - "torob.controller.ts"
Cohesion: 0.22
Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, ApiOperation, ApiTags, Controller, Get, Query
### Community 128 - "WholesaleApplyDto"
Cohesion: 0.29
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
### Community 129 - "Reports.tsx"
Cohesion: 0.20
Nodes (7): BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem, Reports
### Community 129 - "MetricsController"
Cohesion: 0.29
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
### Community 130 - "Sahel-Font"
Cohesion: 0.20
@ -911,35 +922,27 @@ Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 144 - "SafeImage.tsx"
Cohesion: 0.08
Nodes (28): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BannerPlacement(), BannerPlacementProps, PLAYBACK_RATES (+20 more)
Nodes (30): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+22 more)
### Community 145 - "auth.service.ts"
Cohesion: 0.22
Nodes (8): AdminLoginInput, LoginInput, RegisterInput, SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches
### Community 145 - "wiki/[slug]/page.tsx"
Cohesion: 0.60
Nodes (5): generateMetadata(), getRelatedProducts(), getWikiTerm(), WikiTermPage(), generateMedicalWebPageSchema()
### Community 146 - "System Discovery"
Cohesion: 0.25
Nodes (7): Active Core Applications, Current Architecture, Evidence-Based Status Matrix, Excluded / Non-Auditable Artifacts, Major Business Domains Discovered, System Discovery, Technical Architecture Summary
### Community 147 - "HomeController"
Cohesion: 0.16
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
### Community 148 - "RouteErrorBoundary"
Cohesion: 0.22
Nodes (3): Props, RouteErrorBoundary, State
### Community 149 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 150 - "Product Requirement Document (PRD)"
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 152 - "RedisService"
### Community 152 - "auth.service.ts"
Cohesion: 0.08
Nodes (13): ApiExcludeController, Optional, AppModule, Module, MetricsController, Controller, Get, Res (+5 more)
Nodes (10): AppModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, normalizeMobile() (+2 more)
### Community 153 - "exclude"
Cohesion: 0.22
@ -1077,9 +1080,9 @@ Nodes (3): Expanding the ESLint configuration, React Compiler, React + TypeScrip
Cohesion: 0.50
Nodes (3): Select, SelectOption, SelectProps
### Community 197 - "AuthModal.tsx"
Cohesion: 0.10
Nodes (16): AuthModal, LoginModal, AuthModalProps, extractOtpFromText(), otpCooldownExpiries, IMPORTANT: only depend on isOpen here — NOT subView. If we depend on subView,, extractOtpFromText(), LoginModal() (+8 more)
### Community 197 - "toPersian"
Cohesion: 0.09
Nodes (23): AuthModal, CartDrawer, AuthModal(), AuthModalProps, extractOtpFromText(), otpCooldownExpiries, IMPORTANT: only depend on isOpen here — NOT subView. If we depend on subView,, CartDrawer() (+15 more)
### Community 200 - "application/README.md"
Cohesion: 0.50
@ -1089,24 +1092,16 @@ Nodes (3): Deploy on Vercel, Getting Started, Learn More
Cohesion: 0.50
Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script
### Community 204 - "VerifyOtpDto"
Cohesion: 0.29
Nodes (6): ApiProperty, IsNotEmpty, IsString, Matches, VerifyOtpDto, Length
### Community 211 - "Master Task Backlog (Phase 3.3)"
Cohesion: 0.67
Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Management, Master Task Backlog (Phase 3.3), Phase 3 Master Execution Plan
### Community 220 - "AuthController"
Cohesion: 0.40
Nodes (3): AuthController, ApiTags, Controller
### Community 226 - "Shabnam Font README"
Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 298 - ".initiateOrderPayment"
Cohesion: 0.20
Cohesion: 0.18
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
### Community 317 - "revalidate/route.ts"
@ -1116,22 +1111,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps
- **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **96 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **116 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 `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqController`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersService`, `RevalidationService`, `reviews.controller.ts`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `MenuService`?**
- **Why does `Roles()` connect `Roles` to `PaymentService`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `WholesaleService`, `SmsService`, `SslController`, `BannersService`, `ProductsService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `MenuService`?**
_High betweenness centrality (0.093) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `PaginationDto`, `OrdersService`, `HomeController`, `AuthController`?**
- **Why does `ApiResponse` connect `BlogsController` to `WikiController`, `UsersService`, `PetsController`, `ProductsService`, `src/services/api.ts`, `auth.controller.ts`, `OrdersService`?**
_High betweenness centrality (0.066) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `orders.service.ts`, `CmsController`, `tickets.controller.ts`, `reviews.controller.ts`, `PaginationDto`, `PetsController`, `RevalidationService`, `UsersService`, `DoctorQueryDto`, `auth.controller.ts`, `admin.controller.ts`, `prescriptions.controller.ts`, `admin.module.ts`?**
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `PetsController`, `CmsController`, `tickets.controller.ts`, `PaginationDto`, `PetsController`, `ProductsService`, `UsersService`, `DoctorQueryDto`, `admin.controller.ts`, `prescriptions.controller.ts`, `auth.controller.ts`, `admin.module.ts`?**
_High betweenness centrality (0.030) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1355 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06821480406386067 - nodes in this community are weakly interconnected._
_Cohesion score 0.06848357791754019 - nodes in this community are weakly interconnected._
- **Should `WikiController` be split into smaller, more focused modules?**
_Cohesion score 0.12554112554112554 - nodes in this community are weakly interconnected._
- **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06041986687147977 - nodes in this community are weakly interconnected._
- **Should `ClientLayout.tsx` be split into smaller, more focused modules?**
_Cohesion score 0.08067226890756303 - nodes in this community are weakly interconnected._
_Cohesion score 0.06093189964157706 - 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