fix(otp): support WebOTP sms pattern with {0} and {1} and robust code extraction
Some checks failed
Deploy Canina / deploy (push) Successful in 3m53s
E2E Playwright Tests / Run Full E2E & Security Suites (push) Failing after 0s

This commit is contained in:
parsa aghaei 2026-09-05 19:36:49 +03:30
parent 1fd9a92dd0
commit c57f775cb4
15 changed files with 8628 additions and 8534 deletions

View File

@ -1287,7 +1287,7 @@ export class SmsService {
return this.sendPatternSms({ return this.sendPatternSms({
to: phone, to: phone,
bodyId: config.otpBodyId, bodyId: config.otpBodyId,
args: [otpCode], args: [otpCode, otpCode],
type: 'OTP', type: 'OTP',
}); });
} }

View File

@ -956,7 +956,7 @@ export default function SmsSettingsPage() {
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<label className="text-xs font-bold text-gray-900">کد پترن ورود / ثبتنام (OTP)</label> <label className="text-xs font-bold text-gray-900">کد پترن ورود / ثبتنام (OTP)</label>
<span className="text-[10px] text-gray-500 font-mono bg-white px-2 py-0.5 rounded border border-gray-200"> <span className="text-[10px] text-gray-500 font-mono bg-white px-2 py-0.5 rounded border border-gray-200">
متغیر: {'{0}'} متغیرها: {'{0}'} یا {'{0};{1}'} (WebOTP)
</span> </span>
</div> </div>
<input <input

View File

@ -216,9 +216,9 @@ export default function AuthModal({ isOpen, onClose }: AuthModalProps) {
signal: ac.signal, signal: ac.signal,
}).then((otp) => { }).then((otp) => {
if (!isMounted || !otp) return; if (!isMounted || !otp) return;
// OTPCredential.code is the extracted code, not the full SMS text. // OTPCredential.code is the extracted code, but fallback to any string property
// Still run toEnglishDigits in case it contains Persian numerals. const rawCode = (otp as { code?: string })?.code || (otp as { id?: string })?.id || "";
const digits = toEnglishDigits(otp.code ?? "").replace(/[^0-9]/g, "").slice(0, 5); const digits = extractOtpFromText(rawCode);
if (digits.length === 5) { if (digits.length === 5) {
setOtpCode(digits); setOtpCode(digits);
// 400 ms delay so the user can see the filled boxes before verification // 400 ms delay so the user can see the filled boxes before verification

View File

@ -5,10 +5,18 @@ import { X, ShieldCheck, Phone, Key, LogIn, ArrowRight, RefreshCw } from "lucide
import { authService } from "../lib/services/authService"; import { authService } from "../lib/services/authService";
import { useUserStore } from "../lib/store/userStore"; import { useUserStore } from "../lib/store/userStore";
import { toast } from "sonner"; import { toast } from "sonner";
import { toPersian } from "../lib/utils"; import { toPersian, toEnglishDigits } from "../lib/utils";
import OtpInput5 from "./OtpInput5"; import OtpInput5 from "./OtpInput5";
function extractOtpFromText(text: string): string {
if (!text) return "";
const clean = toEnglishDigits(text);
const match = clean.match(/(\d{5})/);
if (match) return match[1];
return clean.replace(/[^0-9]/g, "").slice(0, 5);
}
interface LoginModalProps { interface LoginModalProps {
isOpen: boolean; isOpen: boolean;
onClose: () => void; onClose: () => void;
@ -115,7 +123,8 @@ export default function LoginModal({ isOpen, onClose, onLogin, petName, isAdviso
signal: ac.signal, signal: ac.signal,
}).then((otp) => { }).then((otp) => {
if (!isMounted || !otp) return; if (!isMounted || !otp) return;
const digits = otp.code?.replace(/[^0-9]/g, "").slice(0, 5) ?? ""; const rawCode = (otp as { code?: string })?.code || (otp as { id?: string })?.id || "";
const digits = extractOtpFromText(rawCode);
if (digits.length === 5) { if (digits.length === 5) {
setOtpCode(digits); setOtpCode(digits);
setTimeout(() => { setTimeout(() => {

View File

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

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{ {
"0": "Roles", "0": "Roles",
"1": "app.module.ts", "1": "app.module.ts",
"2": "VetGallery.tsx", "2": "BlogsService",
"3": "productService.ts", "3": "productService.ts",
"4": "useSettingsStore", "4": "useSettingsStore",
"5": "CmsController", "5": "CmsController",
@ -17,7 +17,7 @@
"15": "src/services/api.ts", "15": "src/services/api.ts",
"16": "DoctorQueryDto", "16": "DoctorQueryDto",
"17": "schema.ts", "17": "schema.ts",
"18": "JwtAuthGuard", "18": "admin.module.ts",
"19": "admin.controller.ts", "19": "admin.controller.ts",
"20": "CreateVideoDto", "20": "CreateVideoDto",
"21": "pets/pets.controller.ts", "21": "pets/pets.controller.ts",
@ -33,7 +33,7 @@
"31": "DOC-001", "31": "DOC-001",
"32": "adminRoutes.tsx", "32": "adminRoutes.tsx",
"33": "WholesaleApplyDto", "33": "WholesaleApplyDto",
"34": "B2BController", "34": "B2BService",
"35": "ContactService", "35": "ContactService",
"36": "FaqController", "36": "FaqController",
"37": "راهنمای تست سیستم (Software Testing)", "37": "راهنمای تست سیستم (Software Testing)",
@ -42,11 +42,11 @@
"40": "MediaController", "40": "MediaController",
"41": "What You Must Do When Invoked", "41": "What You Must Do When Invoked",
"42": "SslController", "42": "SslController",
"43": "BannersController", "43": "BannersService",
"44": "TestimonialsController", "44": "TestimonialsService",
"45": "What You Must Do When Invoked", "45": "What You Must Do When Invoked",
"46": "20260526145407_init/migration.sql", "46": "20260526145407_init/migration.sql",
"47": "IngredientsController", "47": "IngredientsService",
"48": "WikiController", "48": "WikiController",
"49": "devDependencies", "49": "devDependencies",
"50": "devDependencies", "50": "devDependencies",
@ -65,8 +65,8 @@
"63": "dependencies", "63": "dependencies",
"64": "compilerOptions", "64": "compilerOptions",
"65": "admin.service.ts", "65": "admin.service.ts",
"66": "ApiOperation", "66": "AdminQueryDto",
"67": "admin.module.ts", "67": "PetsController",
"68": "HomeClient.tsx", "68": "HomeClient.tsx",
"69": "Required Review Group Closures", "69": "Required Review Group Closures",
"70": "compilerOptions", "70": "compilerOptions",
@ -75,7 +75,7 @@
"73": "Operational Rules & Boundaries", "73": "Operational Rules & Boundaries",
"74": "WikiController", "74": "WikiController",
"75": "PetsController", "75": "PetsController",
"76": "ProductsService", "76": "RevalidationService",
"77": "seo.module.ts", "77": "seo.module.ts",
"78": "rss.xml/route.ts", "78": "rss.xml/route.ts",
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3", "79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
@ -84,17 +84,17 @@
"82": "scripts", "82": "scripts",
"83": "dependencies", "83": "dependencies",
"84": "Role & Core Objective", "84": "Role & Core Objective",
"85": "auth.service.ts", "85": ".sendOtp",
"86": "zibal.service.ts", "86": "zibal.service.ts",
"87": "dependencies", "87": "dependencies",
"88": "CreateEBankCheckoutDto", "88": "CreateEBankCheckoutDto",
"89": "seed-products.ts", "89": "seed-products.ts",
"90": "cartStore.ts", "90": "lib/services/api.ts",
"91": "Reconciled Audit Roles & Assignments", "91": "Reconciled Audit Roles & Assignments",
"92": "OrdersService", "92": "OrdersService",
"93": "components/Skeleton.tsx", "93": "components/Skeleton.tsx",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique", "94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "getSeoConfig", "95": "wiki/[slug]/page.tsx",
"96": "compilerOptions", "96": "compilerOptions",
"97": "PaymentService", "97": "PaymentService",
"98": "scripts", "98": "scripts",
@ -112,7 +112,7 @@
"110": "Operational Rules & Boundaries", "110": "Operational Rules & Boundaries",
"111": "Operational Rules & Boundaries", "111": "Operational Rules & Boundaries",
"112": "Operational Rules & Boundaries", "112": "Operational Rules & Boundaries",
"113": "MetricsController", "113": "auth.controller.ts",
"114": "AppService", "114": "AppService",
"115": "Spinner.tsx", "115": "Spinner.tsx",
"116": "Vazirmatn Changelog", "116": "Vazirmatn Changelog",
@ -122,12 +122,12 @@
"120": "compilerOptions", "120": "compilerOptions",
"121": "backend/README.md", "121": "backend/README.md",
"122": "AdminService", "122": "AdminService",
"123": "B2BService", "123": "Body",
"124": "Repository Map", "124": "Repository Map",
"125": "validate_integrity.js", "125": "validate_integrity.js",
"126": "admin-panel/package.json", "126": "admin-panel/package.json",
"127": "Sahel-Font", "127": "Sahel-Font",
"128": "zibal-ebank.service.ts", "128": "torob.controller.ts",
"129": "Reports.tsx", "129": "Reports.tsx",
"130": "Sahel-Font", "130": "Sahel-Font",
"131": "Role & Core Objective", "131": "Role & Core Objective",
@ -143,15 +143,15 @@
"141": "application/package.json", "141": "application/package.json",
"142": "start-dev.js", "142": "start-dev.js",
"143": "generate-openapi.js", "143": "generate-openapi.js",
"144": "lib/services/api.ts", "144": "SafeImage.tsx",
"145": "trust-seals/page.tsx", "145": "auth.service.ts",
"146": "System Discovery", "146": "System Discovery",
"147": "HomeController", "147": "HomeController",
"148": "RouteErrorBoundary", "148": "RouteErrorBoundary",
"149": "wiki/[slug]/page.tsx", "149": "RegisterDto",
"150": "Product Requirement Document (PRD)", "150": "Product Requirement Document (PRD)",
"151": "@nestjs/swagger", "151": "@nestjs/swagger",
"152": "RevalidationService", "152": "RedisService",
"153": "exclude", "153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History", "154": "Baseline Command Plan & Reconciled Command History",
"155": "seo-backfill.ts", "155": "seo-backfill.ts",
@ -178,7 +178,7 @@
"176": "uploads/[...path]/route.ts", "176": "uploads/[...path]/route.ts",
"177": "app/page.tsx", "177": "app/page.tsx",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina", "178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "app.e2e-spec.js", "179": "WikiService",
"180": "API Contract Specification", "180": "API Contract Specification",
"181": "⚙️ Backend Technical Review (05_dev_backend)", "181": "⚙️ Backend Technical Review (05_dev_backend)",
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)", "182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
@ -196,14 +196,14 @@
"194": "Raw Finding Verification & Disposition Report", "194": "Raw Finding Verification & Disposition Report",
"195": "React + TypeScript + Vite", "195": "React + TypeScript + Vite",
"196": "Select.tsx", "196": "Select.tsx",
"197": "toPersian", "197": "AuthModal.tsx",
"198": "@tailwindcss/postcss", "198": "@tailwindcss/postcss",
"199": "prisma", "199": "prisma",
"200": "application/README.md", "200": "application/README.md",
"201": "deploy.sh", "201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)", "202": "🔒 Security & Performance Review (09_devops_security)",
"203": "👁️ UX & Persona Interface Review (08_visual_qa)", "203": "👁️ UX & Persona Interface Review (08_visual_qa)",
"204": "bcrypt", "204": "VerifyOtpDto",
"205": "prisma/scientificTerms.ts", "205": "prisma/scientificTerms.ts",
"206": "seed-blogs.ts", "206": "seed-blogs.ts",
"207": "seed-custom.ts", "207": "seed-custom.ts",
@ -219,7 +219,7 @@
"217": "sync_honest_manifest.js", "217": "sync_honest_manifest.js",
"218": "sync_manifest.js", "218": "sync_manifest.js",
"219": "FormField.tsx", "219": "FormField.tsx",
"220": "eslint-config-next", "220": "AuthController",
"221": "Textarea.tsx", "221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json", "222": "admin-panel/tsconfig.json",
"223": "tailwindcss", "223": "tailwindcss",
@ -303,8 +303,9 @@
"301": "reflect-metadata", "301": "reflect-metadata",
"302": "typescript-eslint", "302": "typescript-eslint",
"303": "swagger-ui-express", "303": "swagger-ui-express",
"304": "track/page.tsx",
"305": "eslint-config-prettier", "305": "eslint-config-prettier",
"306": "@eslint/js", "306": "class-transformer",
"307": "@eslint/eslintrc", "307": "@eslint/eslintrc",
"308": "jest", "308": "jest",
"309": "axios", "309": "axios",
@ -326,5 +327,7 @@
"325": "@types/react-dom", "325": "@types/react-dom",
"326": "@types/supertest", "326": "@types/supertest",
"327": "eslint-plugin-react-refresh", "327": "eslint-plugin-react-refresh",
"329": "typescript-eslint" "328": "eslint",
"329": "typescript-eslint",
"330": "tailwindcss"
} }

View File

@ -1,23 +1,23 @@
# Graph Report - canina (2026-09-05) # Graph Report - canina (2026-09-05)
## Corpus Check ## Corpus Check
- 603 files · ~1,115,636 words - 603 files · ~1,115,875 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## Summary
- 4245 nodes · 7776 edges · 328 communities (215 shown, 113 thin omitted) - 4249 nodes · 7780 edges · 331 communities (216 shown, 115 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 298 edges (avg confidence: 0.79) - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 298 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `00cfd1a2` - Built from commit: `1d2d1415`
- Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost). - Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation) ## Community Hubs (Navigation)
- Roles - Roles
- app.module.ts - app.module.ts
- VetGallery.tsx - BlogsService
- productService.ts - productService.ts
- useSettingsStore - useSettingsStore
- CmsController - CmsController
@ -33,7 +33,7 @@
- src/services/api.ts - src/services/api.ts
- DoctorQueryDto - DoctorQueryDto
- schema.ts - schema.ts
- JwtAuthGuard - admin.module.ts
- admin.controller.ts - admin.controller.ts
- CreateVideoDto - CreateVideoDto
- pets/pets.controller.ts - pets/pets.controller.ts
@ -49,7 +49,7 @@
- DOC-001 - DOC-001
- adminRoutes.tsx - adminRoutes.tsx
- WholesaleApplyDto - WholesaleApplyDto
- B2BController - B2BService
- ContactService - ContactService
- FaqController - FaqController
- راهنمای تست سیستم (Software Testing) - راهنمای تست سیستم (Software Testing)
@ -58,11 +58,11 @@
- MediaController - MediaController
- What You Must Do When Invoked - What You Must Do When Invoked
- SslController - SslController
- BannersController - BannersService
- TestimonialsController - TestimonialsService
- What You Must Do When Invoked - What You Must Do When Invoked
- 20260526145407_init/migration.sql - 20260526145407_init/migration.sql
- IngredientsController - IngredientsService
- WikiController - WikiController
- devDependencies - devDependencies
- devDependencies - devDependencies
@ -81,8 +81,8 @@
- dependencies - dependencies
- compilerOptions - compilerOptions
- admin.service.ts - admin.service.ts
- ApiOperation - AdminQueryDto
- admin.module.ts - PetsController
- HomeClient.tsx - HomeClient.tsx
- Required Review Group Closures - Required Review Group Closures
- compilerOptions - compilerOptions
@ -91,7 +91,7 @@
- Operational Rules & Boundaries - Operational Rules & Boundaries
- WikiController - WikiController
- PetsController - PetsController
- ProductsService - RevalidationService
- seo.module.ts - seo.module.ts
- rss.xml/route.ts - rss.xml/route.ts
- 🏢 AI Software Agency — Master Orchestration Protocol v3 - 🏢 AI Software Agency — Master Orchestration Protocol v3
@ -100,17 +100,17 @@
- scripts - scripts
- dependencies - dependencies
- Role & Core Objective - Role & Core Objective
- auth.service.ts - .sendOtp
- zibal.service.ts - zibal.service.ts
- dependencies - dependencies
- CreateEBankCheckoutDto - CreateEBankCheckoutDto
- seed-products.ts - seed-products.ts
- cartStore.ts - lib/services/api.ts
- Reconciled Audit Roles & Assignments - Reconciled Audit Roles & Assignments
- OrdersService - OrdersService
- components/Skeleton.tsx - components/Skeleton.tsx
- Phase 3.1 — Human Review Preparation and Master Backlog Critique - Phase 3.1 — Human Review Preparation and Master Backlog Critique
- getSeoConfig - wiki/[slug]/page.tsx
- compilerOptions - compilerOptions
- PaymentService - PaymentService
- scripts - scripts
@ -128,7 +128,7 @@
- Operational Rules & Boundaries - Operational Rules & Boundaries
- Operational Rules & Boundaries - Operational Rules & Boundaries
- Operational Rules & Boundaries - Operational Rules & Boundaries
- MetricsController - auth.controller.ts
- AppService - AppService
- Spinner.tsx - Spinner.tsx
- Vazirmatn Changelog - Vazirmatn Changelog
@ -138,12 +138,12 @@
- compilerOptions - compilerOptions
- backend/README.md - backend/README.md
- AdminService - AdminService
- B2BService - Body
- Repository Map - Repository Map
- validate_integrity.js - validate_integrity.js
- admin-panel/package.json - admin-panel/package.json
- Sahel-Font - Sahel-Font
- zibal-ebank.service.ts - torob.controller.ts
- Reports.tsx - Reports.tsx
- Sahel-Font - Sahel-Font
- Role & Core Objective - Role & Core Objective
@ -159,15 +159,15 @@
- application/package.json - application/package.json
- start-dev.js - start-dev.js
- generate-openapi.js - generate-openapi.js
- lib/services/api.ts - SafeImage.tsx
- trust-seals/page.tsx - auth.service.ts
- System Discovery - System Discovery
- HomeController - HomeController
- RouteErrorBoundary - RouteErrorBoundary
- wiki/[slug]/page.tsx - RegisterDto
- Product Requirement Document (PRD) - Product Requirement Document (PRD)
- @nestjs/swagger - @nestjs/swagger
- RevalidationService - RedisService
- exclude - exclude
- Baseline Command Plan & Reconciled Command History - Baseline Command Plan & Reconciled Command History
- seo-backfill.ts - seo-backfill.ts
@ -193,7 +193,7 @@
- uploads/[...path]/route.ts - uploads/[...path]/route.ts
- app/page.tsx - app/page.tsx
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina - نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- app.e2e-spec.js - WikiService
- API Contract Specification - API Contract Specification
- ⚙️ Backend Technical Review (05_dev_backend) - ⚙️ Backend Technical Review (05_dev_backend)
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend) - 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
@ -211,14 +211,14 @@
- Raw Finding Verification & Disposition Report - Raw Finding Verification & Disposition Report
- React + TypeScript + Vite - React + TypeScript + Vite
- Select.tsx - Select.tsx
- toPersian - AuthModal.tsx
- @tailwindcss/postcss - @tailwindcss/postcss
- prisma - prisma
- application/README.md - application/README.md
- deploy.sh - deploy.sh
- 🔒 Security & Performance Review (09_devops_security) - 🔒 Security & Performance Review (09_devops_security)
- 👁️ UX & Persona Interface Review (08_visual_qa) - 👁️ UX & Persona Interface Review (08_visual_qa)
- bcrypt - VerifyOtpDto
- prisma/scientificTerms.ts - prisma/scientificTerms.ts
- seed-blogs.ts - seed-blogs.ts
- seed-custom.ts - seed-custom.ts
@ -234,7 +234,7 @@
- sync_honest_manifest.js - sync_honest_manifest.js
- sync_manifest.js - sync_manifest.js
- FormField.tsx - FormField.tsx
- eslint-config-next - AuthController
- Textarea.tsx - Textarea.tsx
- admin-panel/tsconfig.json - admin-panel/tsconfig.json
- tailwindcss - tailwindcss
@ -303,8 +303,9 @@
- reflect-metadata - reflect-metadata
- typescript-eslint - typescript-eslint
- swagger-ui-express - swagger-ui-express
- track/page.tsx
- eslint-config-prettier - eslint-config-prettier
- @eslint/js - class-transformer
- @eslint/eslintrc - @eslint/eslintrc
- jest - jest
- @nestjs/cli - @nestjs/cli
@ -322,7 +323,9 @@
- @types/react-dom - @types/react-dom
- @types/supertest - @types/supertest
- eslint-plugin-react-refresh - eslint-plugin-react-refresh
- eslint
- typescript-eslint - typescript-eslint
- tailwindcss
## God Nodes (most connected - your core abstractions) ## God Nodes (most connected - your core abstractions)
1. `Roles()` - 108 edges 1. `Roles()` - 108 edges
@ -349,31 +352,31 @@
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles ## Import Cycles
- 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` - 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`
- 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` - 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 (328 total, 113 thin omitted) ## Communities (331 total, 115 thin omitted)
### Community 0 - "Roles" ### Community 0 - "Roles"
Cohesion: 0.24 Cohesion: 0.24
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more) Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
### Community 1 - "app.module.ts" ### Community 1 - "app.module.ts"
Cohesion: 0.07 Cohesion: 0.06
Nodes (32): BannersModule, Module, CmsModule, Module, SmsModule, Global, Module, ContactModule (+24 more) Nodes (39): AdminModule, Module, B2BModule, Module, BannersModule, Module, CmsModule, Module (+31 more)
### Community 2 - "VetGallery.tsx" ### Community 2 - "BlogsService"
Cohesion: 0.15 Cohesion: 0.13
Nodes (13): BackButton(), BackButtonProps, VideoModalPlayer, DisplayVideoItem, FALLBACK_VIDEOS, TestimonialItem, VetGallery(), PLAYBACK_RATES (+5 more) Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable
### Community 3 - "productService.ts" ### Community 3 - "productService.ts"
Cohesion: 0.06 Cohesion: 0.06
Nodes (40): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+32 more) Nodes (35): revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory, BlogPostItem (+27 more)
### Community 4 - "useSettingsStore" ### Community 4 - "useSettingsStore"
Cohesion: 0.08 Cohesion: 0.07
Nodes (28): AuthModal, B2BPortal, CartDrawer, ClientLayout(), LoginModal, metadata, ArchivePage(), BrandLogo() (+20 more) Nodes (31): AuthModal, B2BPortal, CartDrawer, ClientLayout(), metadata, ArchivePage(), B2BLandingClient(), BrandLogo() (+23 more)
### Community 5 - "CmsController" ### Community 5 - "CmsController"
Cohesion: 0.09 Cohesion: 0.09
@ -393,7 +396,7 @@ Nodes (27): SmsEventDefinition, SmsService, Injectable, SmsLogQueryDto, ApiPrope
### Community 9 - "devDependencies" ### Community 9 - "devDependencies"
Cohesion: 0.22 Cohesion: 0.22
Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more) Nodes (9): devDependencies, @eslint/js, @types/bcryptjs, @types/node, typescript, @eslint/js, @types/node, typescript (+1 more)
### Community 10 - "reviews.controller.ts" ### Community 10 - "reviews.controller.ts"
Cohesion: 0.07 Cohesion: 0.07
@ -408,12 +411,12 @@ Cohesion: 0.06
Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/*.ts, authFile, test, compilerOptions (+16 more) Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/*.ts, authFile, test, compilerOptions (+16 more)
### Community 13 - "app-audit-verification.e2e-spec.js" ### Community 13 - "app-audit-verification.e2e-spec.js"
Cohesion: 0.06 Cohesion: 0.07
Nodes (28): AppModule, Module, EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter (+20 more) Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
### Community 14 - "UserDashboard.tsx" ### Community 14 - "UserDashboard.tsx"
Cohesion: 0.13 Cohesion: 0.09
Nodes (22): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), CheckoutPage(), DeleteConfirmModal(), DeleteConfirmModalProps (+14 more) Nodes (32): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, BlogPreviewSection() (+24 more)
### Community 15 - "src/services/api.ts" ### Community 15 - "src/services/api.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -427,12 +430,12 @@ Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Contr
Cohesion: 0.14 Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more) Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
### Community 18 - "JwtAuthGuard" ### Community 18 - "admin.module.ts"
Cohesion: 0.18 Cohesion: 0.10
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, ScientificTermData Nodes (12): MediaService, Injectable, SslCertInfo, JwtAuthGuard, Injectable, B2BWholesaleOrderItem, ROLES_KEY, SortOrder (+4 more)
### Community 19 - "admin.controller.ts" ### Community 19 - "admin.controller.ts"
Cohesion: 0.35 Cohesion: 0.29
Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean, IsIn, IsNumber (+4 more) Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean, IsIn, IsNumber (+4 more)
### Community 20 - "CreateVideoDto" ### Community 20 - "CreateVideoDto"
@ -491,9 +494,9 @@ Nodes (21): App(), ContactInfoItem, ContactSubmission, CategoryDist, DashboardDa
Cohesion: 0.10 Cohesion: 0.10
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more) Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
### Community 34 - "B2BController" ### Community 34 - "B2BService"
Cohesion: 0.14 Cohesion: 0.13
Nodes (13): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+5 more) Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+7 more)
### Community 35 - "ContactService" ### Community 35 - "ContactService"
Cohesion: 0.13 Cohesion: 0.13
@ -527,13 +530,13 @@ Nodes (26): For /graphify add and --watch, For /graphify query, For the commit h
Cohesion: 0.13 Cohesion: 0.13
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more) Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
### Community 43 - "BannersController" ### Community 43 - "BannersService"
Cohesion: 0.13 Cohesion: 0.13
Nodes (13): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+5 more) Nodes (15): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
### Community 44 - "TestimonialsController" ### Community 44 - "TestimonialsService"
Cohesion: 0.13 Cohesion: 0.13
Nodes (12): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more) Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 45 - "What You Must Do When Invoked" ### Community 45 - "What You Must Do When Invoked"
Cohesion: 0.07 Cohesion: 0.07
@ -543,13 +546,13 @@ Nodes (26): For /graphify add and --watch, For /graphify query, For the commit h
Cohesion: 0.27 Cohesion: 0.27
Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_conditions", "pets", "product_ingredients", "product_symptoms" (+6 more) Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_conditions", "pets", "product_ingredients", "product_symptoms" (+6 more)
### Community 47 - "IngredientsController" ### Community 47 - "IngredientsService"
Cohesion: 0.13 Cohesion: 0.13
Nodes (12): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more) Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 48 - "WikiController" ### Community 48 - "WikiController"
Cohesion: 0.13 Cohesion: 0.21
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more) Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
### Community 49 - "devDependencies" ### Community 49 - "devDependencies"
Cohesion: 0.11 Cohesion: 0.11
@ -557,7 +560,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies" ### Community 50 - "devDependencies"
Cohesion: 0.12 Cohesion: 0.12
Nodes (17): devDependencies, eslint, jsdom, tailwindcss, @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" ### Community 51 - "BlogsController"
Cohesion: 0.07 Cohesion: 0.07
@ -587,21 +590,17 @@ Nodes (15): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), Monito
Cohesion: 0.09 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) 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 - "AuthService"
Cohesion: 0.22
Nodes (3): AuthService, Injectable, normalizeMobile()
### Community 59 - "compilerOptions" ### Community 59 - "compilerOptions"
Cohesion: 0.06 Cohesion: 0.06
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more) Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
### Community 60 - "CreateUserDto" ### Community 60 - "CreateUserDto"
Cohesion: 0.21 Cohesion: 0.18
Nodes (10): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+2 more) Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
### Community 61 - "ProductPage.tsx" ### Community 61 - "ProductPage.tsx"
Cohesion: 0.11 Cohesion: 0.12
Nodes (32): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), Header(), OrderSuccess(), OrderTracking() (+24 more) Nodes (30): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), OrderSuccess(), PetProfile(), ProductImageZoomModalProps (+22 more)
### Community 62 - "ReportsController" ### Community 62 - "ReportsController"
Cohesion: 0.14 Cohesion: 0.14
@ -609,27 +608,27 @@ Nodes (11): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, C
### Community 63 - "dependencies" ### Community 63 - "dependencies"
Cohesion: 0.09 Cohesion: 0.09
Nodes (23): dependencies, bcryptjs, class-transformer, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more) Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more)
### Community 64 - "compilerOptions" ### Community 64 - "compilerOptions"
Cohesion: 0.10 Cohesion: 0.10
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more) Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
### Community 65 - "admin.service.ts" ### Community 65 - "admin.service.ts"
Cohesion: 0.21 Cohesion: 0.22
Nodes (8): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode, CANONICAL_ALIASES Nodes (8): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode, CANONICAL_ALIASES
### Community 66 - "ApiOperation" ### Community 66 - "AdminQueryDto"
Cohesion: 0.13 Cohesion: 0.18
Nodes (9): ApiOperation, ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional (+1 more) Nodes (8): ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "admin.module.ts" ### Community 67 - "PetsController"
Cohesion: 0.06 Cohesion: 0.11
Nodes (23): AdminModule, Module, MediaService, Injectable, PetsController, ApiBearerAuth, ApiOperation, ApiQuery (+15 more) Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more)
### Community 68 - "HomeClient.tsx" ### Community 68 - "HomeClient.tsx"
Cohesion: 0.11 Cohesion: 0.14
Nodes (19): HomeClient(), HomeClientProps, BannerPlacement(), BannerPlacementProps, BlogPreviewSection(), FAQSection(), Hero(), StatCounter() (+11 more) Nodes (17): HomeClient(), HomeClientProps, BannerPlacement(), BannerPlacementProps, Hero(), StatCounter(), B2BInquiry, Banner (+9 more)
### Community 69 - "Required Review Group Closures" ### Community 69 - "Required Review Group Closures"
Cohesion: 0.10 Cohesion: 0.10
@ -659,9 +658,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
Cohesion: 0.08 Cohesion: 0.08
Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 more) Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 more)
### Community 76 - "ProductsService" ### Community 76 - "RevalidationService"
Cohesion: 0.07 Cohesion: 0.07
Nodes (27): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+19 more) Nodes (24): RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional, IsEnum (+16 more)
### Community 77 - "seo.module.ts" ### Community 77 - "seo.module.ts"
Cohesion: 0.16 Cohesion: 0.16
@ -695,9 +694,9 @@ Nodes (21): dependencies, axios, lucide-react, react, react-dom, react-hot-toast
Cohesion: 0.12 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) 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 - "auth.service.ts" ### Community 85 - ".sendOtp"
Cohesion: 0.06 Cohesion: 0.32
Nodes (46): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+38 more) Nodes (10): ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, Body, Post, Req, Throttle (+2 more)
### Community 86 - "zibal.service.ts" ### Community 86 - "zibal.service.ts"
Cohesion: 0.16 Cohesion: 0.16
@ -715,17 +714,17 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
Cohesion: 0.17 Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more) Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "cartStore.ts" ### Community 90 - "lib/services/api.ts"
Cohesion: 0.15 Cohesion: 0.09
Nodes (8): ApiErr, Order, OrderItem, OrderService, CartItem, CartStore, Order, mockProduct Nodes (26): VerifyContent(), B2BPortal(), ContactInfoItem, Header(), MENU_ICONS, PrescriptionUploadModal(), PrescriptionUploadModalProps, UserDashboard() (+18 more)
### Community 91 - "Reconciled Audit Roles & Assignments" ### Community 91 - "Reconciled Audit Roles & Assignments"
Cohesion: 0.12 Cohesion: 0.12
Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more) Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more)
### Community 92 - "OrdersService" ### Community 92 - "OrdersService"
Cohesion: 0.06 Cohesion: 0.07
Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more) Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
### Community 93 - "components/Skeleton.tsx" ### Community 93 - "components/Skeleton.tsx"
Cohesion: 0.24 Cohesion: 0.24
@ -735,9 +734,9 @@ Nodes (4): OrderRowSkeleton(), PetProfileSkeleton(), Skeleton(), SkeletonProps
Cohesion: 0.13 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) 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 - "getSeoConfig" ### Community 95 - "wiki/[slug]/page.tsx"
Cohesion: 0.26 Cohesion: 0.24
Nodes (11): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), revalidate (+3 more) Nodes (15): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), generateMetadata() (+7 more)
### Community 96 - "compilerOptions" ### Community 96 - "compilerOptions"
Cohesion: 0.06 Cohesion: 0.06
@ -785,11 +784,11 @@ Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyO
### Community 107 - "PaginationDto" ### Community 107 - "PaginationDto"
Cohesion: 0.07 Cohesion: 0.07
Nodes (19): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+11 more) Nodes (23): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+15 more)
### Community 108 - "PrismaService" ### Community 108 - "PrismaService"
Cohesion: 0.06 Cohesion: 0.06
Nodes (27): CategoryQuery, PetQuery, WikiQuery, BannersService, Injectable, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable (+19 more) Nodes (25): CategoryQuery, PetQuery, WikiQuery, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern (+17 more)
### Community 109 - "1. Summary of Integrity Repairs Performed" ### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17 Cohesion: 0.17
@ -807,9 +806,9 @@ Nodes (10): 1. Mark Active Task as Complete, 2. Documentation Updates, 3. Dynami
Cohesion: 0.18 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) 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 - "MetricsController" ### Community 113 - "auth.controller.ts"
Cohesion: 0.20 Cohesion: 0.16
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res Nodes (11): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+3 more)
### Community 114 - "AppService" ### Community 114 - "AppService"
Cohesion: 0.29 Cohesion: 0.29
@ -844,12 +843,12 @@ Cohesion: 0.20
Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more) Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more)
### Community 122 - "AdminService" ### Community 122 - "AdminService"
Cohesion: 0.09 Cohesion: 0.10
Nodes (13): AdminController, ApiBearerAuth, ApiTags, Body, Controller, Delete, Param, Post (+5 more) Nodes (11): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Delete, Param, Put (+3 more)
### Community 123 - "B2BService" ### Community 123 - "Body"
Cohesion: 0.33 Cohesion: 0.21
Nodes (5): B2BModule, Module, B2BService, B2BWholesaleOrderItem, Injectable Nodes (3): Body, Post, CouponInput
### Community 124 - "Repository Map" ### Community 124 - "Repository Map"
Cohesion: 0.20 Cohesion: 0.20
@ -867,9 +866,9 @@ Nodes (9): name, private, scripts, build, dev, lint, preview, type (+1 more)
Cohesion: 0.20 Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more) Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
### Community 128 - "zibal-ebank.service.ts" ### Community 128 - "torob.controller.ts"
Cohesion: 0.40 Cohesion: 0.22
Nodes (4): EBankCheckoutListFilter, EBankCheckoutOptions, EBankIdentifiedPaymentFilter, EBankStatementFilter Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, ApiOperation, ApiTags, Controller, Get, Query
### Community 129 - "Reports.tsx" ### Community 129 - "Reports.tsx"
Cohesion: 0.20 Cohesion: 0.20
@ -931,9 +930,13 @@ Nodes (7): backend, distMainPath, fs, http, path, { spawn, execSync }, waitForBa
Cohesion: 0.25 Cohesion: 0.25
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 144 - "lib/services/api.ts" ### Community 144 - "SafeImage.tsx"
Cohesion: 0.09 Cohesion: 0.06
Nodes (21): B2BLandingClient(), BlogPostClientProps, BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, PLAYBACK_RATES, PodcastInlinePlayer() (+13 more) Nodes (34): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+26 more)
### Community 145 - "auth.service.ts"
Cohesion: 0.22
Nodes (8): AdminLoginInput, LoginInput, RegisterInput, SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches
### Community 146 - "System Discovery" ### Community 146 - "System Discovery"
Cohesion: 0.25 Cohesion: 0.25
@ -947,17 +950,17 @@ Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Ge
Cohesion: 0.22 Cohesion: 0.22
Nodes (3): Props, RouteErrorBoundary, State Nodes (3): Props, RouteErrorBoundary, State
### Community 149 - "wiki/[slug]/page.tsx" ### Community 149 - "RegisterDto"
Cohesion: 0.60 Cohesion: 0.22
Nodes (5): generateMetadata(), getRelatedProducts(), getWikiTerm(), WikiTermPage(), generateMedicalWebPageSchema() Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 150 - "Product Requirement Document (PRD)" ### Community 150 - "Product Requirement Document (PRD)"
Cohesion: 0.29 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) 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 - "RevalidationService" ### Community 152 - "RedisService"
Cohesion: 0.12 Cohesion: 0.08
Nodes (8): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable, RedisService, Injectable Nodes (13): ApiExcludeController, Optional, AppModule, Module, MetricsController, Controller, Get, Res (+5 more)
### Community 153 - "exclude" ### Community 153 - "exclude"
Cohesion: 0.22 Cohesion: 0.22
@ -1055,10 +1058,6 @@ Nodes (3): generateMetadata(), getHomeData(), Home()
Cohesion: 0.33 Cohesion: 0.33
Nodes (5): نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina, ۱. معماری و نقش‌های کاربری (User Roles), ۲. ماتریس جریان‌ها و قابلیت‌های کاربرمحور (Feature & Flow Matrix), ۳. وضعیت پوشش نهایی سوئیت ۱۱گانه (Final 11 Test Suites Status), ۴. راهنمای نگهداری و افزودن فیچرهای جدید بدون شکستن تست‌ها (Developer Maintenance Guide) Nodes (5): نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina, ۱. معماری و نقش‌های کاربری (User Roles), ۲. ماتریس جریان‌ها و قابلیت‌های کاربرمحور (Feature & Flow Matrix), ۳. وضعیت پوشش نهایی سوئیت ۱۱گانه (Final 11 Test Suites Status), ۴. راهنمای نگهداری و افزودن فیچرهای جدید بدون شکستن تست‌ها (Developer Maintenance Guide)
### Community 179 - "app.e2e-spec.js"
Cohesion: 0.50
Nodes (3): app_module_1, supertest_1, testing_1
### Community 180 - "API Contract Specification" ### Community 180 - "API Contract Specification"
Cohesion: 0.50 Cohesion: 0.50
Nodes (3): 1. OpenAPI 3.0 (Swagger) Specification, 2. Endpoint Definitions & Data Types, API Contract Specification Nodes (3): 1. OpenAPI 3.0 (Swagger) Specification, 2. Endpoint Definitions & Data Types, API Contract Specification
@ -1076,7 +1075,7 @@ Cohesion: 0.50
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content) Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content)
### Community 184 - "FaqService" ### Community 184 - "FaqService"
Cohesion: 0.33 Cohesion: 0.36
Nodes (4): FaqModule, Module, FaqService, Injectable Nodes (4): FaqModule, Module, FaqService, Injectable
### Community 185 - "Reviews.tsx" ### Community 185 - "Reviews.tsx"
@ -1107,9 +1106,9 @@ Nodes (3): Expanding the ESLint configuration, React Compiler, React + TypeScrip
Cohesion: 0.50 Cohesion: 0.50
Nodes (3): Select, SelectOption, SelectProps Nodes (3): Select, SelectOption, SelectProps
### Community 197 - "toPersian" ### Community 197 - "AuthModal.tsx"
Cohesion: 0.07 Cohesion: 0.09
Nodes (33): VerifyContent(), AuthModal(), AuthModalProps, extractOtpFromText(), otpCooldownExpiries, B2BPortal(), CartDrawer(), HeaderButton() (+25 more) 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)
### Community 200 - "application/README.md" ### Community 200 - "application/README.md"
Cohesion: 0.50 Cohesion: 0.50
@ -1119,10 +1118,18 @@ Nodes (3): Deploy on Vercel, Getting Started, Learn More
Cohesion: 0.50 Cohesion: 0.50
Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script 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)" ### Community 211 - "Master Task Backlog (Phase 3.3)"
Cohesion: 0.67 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 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" ### Community 226 - "Shabnam Font README"
Cohesion: 0.67 Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
@ -1138,22 +1145,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps ## Knowledge Gaps
- **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more) - **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more)
These have ≤1 connection - possible missing edges or undocumented components. These have ≤1 connection - possible missing edges or undocumented components.
- **113 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - **115 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions ## Suggested Questions
_Questions this graph is uniquely positioned to answer:_ _Questions this graph is uniquely positioned to answer:_
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BController`, `ContactService`, `FaqController`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersController`, `ProductsService`, `reviews.controller.ts`, `TestimonialsController`, `IngredientsController`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `MenuService`, `B2BService`?** - **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`?**
_High betweenness centrality (0.093) - this node is a cross-community bridge._ _High betweenness centrality (0.093) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `ProductsService`, `UsersService`, `WikiController`, `HomeController`, `auth.service.ts`, `OrdersService`?** - **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `OrdersService`, `WikiController`, `HomeController`, `AuthController`?**
_High betweenness centrality (0.066) - this node is a cross-community bridge._ _High betweenness centrality (0.066) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `app.module.ts`, `admin.module.ts`, `CmsController`, `tickets.controller.ts`, `reviews.controller.ts`, `PaginationDto`, `ProductsService`, `UsersService`, `admin.controller.ts`, `prescriptions.controller.ts`, `auth.service.ts`, `pets/pets.controller.ts`, `B2BService`, `OrdersService`?** - **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`?**
_High betweenness centrality (0.030) - this node is a cross-community bridge._ _High betweenness centrality (0.030) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?** - **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1355 weakly-connected nodes found - possible documentation gaps or missing edges._ _1355 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?** - **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.07137254901960784 - nodes in this community are weakly interconnected._ _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._
- **Should `productService.ts` be split into smaller, more focused modules?** - **Should `productService.ts` be split into smaller, more focused modules?**
_Cohesion score 0.05839727195225917 - nodes in this community are weakly interconnected._ _Cohesion score 0.05961538461538462 - nodes in this community are weakly interconnected._
- **Should `useSettingsStore` be split into smaller, more focused modules?**
_Cohesion score 0.0782608695652174 - 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,25 +1,25 @@
# Graph Report - canina (2026-09-05) # Graph Report - canina (2026-09-05)
## Corpus Check ## Corpus Check
- 603 files · ~1,115,875 words - 603 files · ~1,116,279 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## 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) - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 298 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## 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 `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost). - Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation) ## Community Hubs (Navigation)
- Roles - Roles
- app.module.ts - app.module.ts
- BlogsService - orders.service.ts
- productService.ts - productService.ts
- useSettingsStore - ClientLayout.tsx
- CmsController - CmsController
- tickets.controller.ts - tickets.controller.ts
- SmsSettingsPage.tsx - SmsSettingsPage.tsx
@ -33,10 +33,10 @@
- src/services/api.ts - src/services/api.ts
- DoctorQueryDto - DoctorQueryDto
- schema.ts - schema.ts
- admin.module.ts - JwtAuthGuard
- admin.controller.ts - admin.controller.ts
- CreateVideoDto - CreateVideoDto
- pets/pets.controller.ts - orderService.ts
- ProductDto - ProductDto
- MenuService - MenuService
- BE-001 - BE-001
@ -63,7 +63,7 @@
- What You Must Do When Invoked - What You Must Do When Invoked
- 20260526145407_init/migration.sql - 20260526145407_init/migration.sql
- IngredientsService - IngredientsService
- WikiController - app.e2e-spec.js
- devDependencies - devDependencies
- devDependencies - devDependencies
- BlogsController - BlogsController
@ -77,13 +77,13 @@
- compilerOptions - compilerOptions
- CreateUserDto - CreateUserDto
- ProductPage.tsx - ProductPage.tsx
- ReportsController - admin.module.ts
- dependencies - dependencies
- compilerOptions - compilerOptions
- admin.service.ts - admin.service.ts
- AdminQueryDto - AdminQueryDto
- PetsController - PetsController
- HomeClient.tsx - useSettingsStore
- Required Review Group Closures - Required Review Group Closures
- compilerOptions - compilerOptions
- getPageMetadata - getPageMetadata
@ -105,7 +105,7 @@
- dependencies - dependencies
- CreateEBankCheckoutDto - CreateEBankCheckoutDto
- seed-products.ts - seed-products.ts
- lib/services/api.ts - toPersian
- Reconciled Audit Roles & Assignments - Reconciled Audit Roles & Assignments
- OrdersService - OrdersService
- components/Skeleton.tsx - components/Skeleton.tsx
@ -166,7 +166,7 @@
- RouteErrorBoundary - RouteErrorBoundary
- RegisterDto - RegisterDto
- Product Requirement Document (PRD) - Product Requirement Document (PRD)
- @nestjs/swagger - @eslint/js
- RedisService - RedisService
- exclude - exclude
- Baseline Command Plan & Reconciled Command History - Baseline Command Plan & Reconciled Command History
@ -191,14 +191,14 @@
- rebuild_honest_ledger.js - rebuild_honest_ledger.js
- validate_evidence_grade.js - validate_evidence_grade.js
- uploads/[...path]/route.ts - uploads/[...path]/route.ts
- app/page.tsx - @types/node
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina - نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- WikiService - typescript
- API Contract Specification - API Contract Specification
- ⚙️ Backend Technical Review (05_dev_backend) - ⚙️ Backend Technical Review (05_dev_backend)
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend) - 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content) - 🚀 SEO & Content Strategy Review (12_seo_content)
- FaqService - eslint-config-next
- Reviews.tsx - Reviews.tsx
- seed-ui-texts.ts - seed-ui-texts.ts
- seed-wiki.ts - seed-wiki.ts
@ -212,7 +212,6 @@
- React + TypeScript + Vite - React + TypeScript + Vite
- Select.tsx - Select.tsx
- AuthModal.tsx - AuthModal.tsx
- @tailwindcss/postcss
- prisma - prisma
- application/README.md - application/README.md
- deploy.sh - deploy.sh
@ -238,16 +237,12 @@
- Textarea.tsx - Textarea.tsx
- admin-panel/tsconfig.json - admin-panel/tsconfig.json
- tailwindcss - tailwindcss
- helmet
- next.config.ts - next.config.ts
- Shabnam Font README - Shabnam Font README
- AGENTS.md - AGENTS.md
- rules/graphify.md - rules/graphify.md
- .agents/workflows/graphify.md - .agents/workflows/graphify.md
- instructions.md - instructions.md
- @nestjs/schematics
- js-yaml
- @nestjs/core
- source-map-support - source-map-support
- ts-loader - ts-loader
- ts-node - ts-node
@ -275,7 +270,6 @@
- User Login API - User Login API
- User Logout API - User Logout API
- @types/compression - @types/compression
- @nestjs/jwt
- @types/express - @types/express
- @types/jest - @types/jest
- @types/multer - @types/multer
@ -294,37 +288,22 @@
- Production Docker Compose - Production Docker Compose
- Staging Docker Compose - Staging Docker Compose
- ZibalService - ZibalService
- @nestjs/throttler
- passport
- ZibalEBankService - ZibalEBankService
- .initiateOrderPayment - .initiateOrderPayment
- @tailwindcss/postcss - @tailwindcss/postcss
- typescript - typescript
- reflect-metadata
- typescript-eslint - typescript-eslint
- swagger-ui-express
- track/page.tsx - track/page.tsx
- eslint-config-prettier - eslint-config-prettier
- class-transformer
- @eslint/eslintrc
- jest - jest
- @nestjs/cli
- @types/passport-jwt - @types/passport-jwt
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql - 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
- eslint-plugin-prettier
- typescript - typescript
- globals
- revalidate/route.ts - revalidate/route.ts
- MaskableField.tsx - MaskableField.tsx
- @nestjs/testing
- prettier
- ts-jest
- @types/js-yaml
- @types/react-dom - @types/react-dom
- @types/supertest
- eslint-plugin-react-refresh - eslint-plugin-react-refresh
- eslint - eslint
- typescript-eslint
- tailwindcss - tailwindcss
## God Nodes (most connected - your core abstractions) ## 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` - 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` - 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" ### Community 0 - "Roles"
Cohesion: 0.24 Cohesion: 0.24
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more) Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
### Community 1 - "app.module.ts" ### Community 1 - "app.module.ts"
Cohesion: 0.06 Cohesion: 0.07
Nodes (39): AdminModule, Module, B2BModule, Module, BannersModule, Module, CmsModule, Module (+31 more) Nodes (36): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+28 more)
### Community 2 - "BlogsService" ### Community 2 - "orders.service.ts"
Cohesion: 0.13 Cohesion: 0.24
Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable Nodes (6): IsNotEmpty, IsNumber, IsString, ValidateCouponDto, OrdersModule, Module
### Community 3 - "productService.ts" ### Community 3 - "productService.ts"
Cohesion: 0.06 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" ### Community 4 - "ClientLayout.tsx"
Cohesion: 0.07 Cohesion: 0.08
Nodes (31): AuthModal, B2BPortal, CartDrawer, ClientLayout(), metadata, ArchivePage(), B2BLandingClient(), BrandLogo() (+23 more) Nodes (23): B2BPortal, CartDrawer, ClientLayout(), metadata, Footer(), NavigationProgressBar(), NetworkBanner(), CURRENT_SYMPTOMS (+15 more)
### Community 5 - "CmsController" ### Community 5 - "CmsController"
Cohesion: 0.09 Cohesion: 0.09
@ -395,8 +374,8 @@ Cohesion: 0.05
Nodes (27): SmsEventDefinition, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional (+19 more) Nodes (27): SmsEventDefinition, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional (+19 more)
### Community 9 - "devDependencies" ### Community 9 - "devDependencies"
Cohesion: 0.22 Cohesion: 0.08
Nodes (9): devDependencies, @eslint/js, @types/bcryptjs, @types/node, typescript, @eslint/js, @types/node, typescript (+1 more) Nodes (25): devDependencies, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/schematics, @nestjs/testing, prettier (+17 more)
### Community 10 - "reviews.controller.ts" ### Community 10 - "reviews.controller.ts"
Cohesion: 0.07 Cohesion: 0.07
@ -415,8 +394,8 @@ Cohesion: 0.07
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more) Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
### Community 14 - "UserDashboard.tsx" ### Community 14 - "UserDashboard.tsx"
Cohesion: 0.09 Cohesion: 0.13
Nodes (32): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, BlogPreviewSection() (+24 more) Nodes (25): AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps, CheckoutPage() (+17 more)
### Community 15 - "src/services/api.ts" ### Community 15 - "src/services/api.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -430,9 +409,9 @@ Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Contr
Cohesion: 0.14 Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more) Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
### Community 18 - "admin.module.ts" ### Community 18 - "JwtAuthGuard"
Cohesion: 0.10 Cohesion: 0.17
Nodes (12): MediaService, Injectable, SslCertInfo, JwtAuthGuard, Injectable, B2BWholesaleOrderItem, ROLES_KEY, SortOrder (+4 more) Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, FaqService, Injectable
### Community 19 - "admin.controller.ts" ### Community 19 - "admin.controller.ts"
Cohesion: 0.29 Cohesion: 0.29
@ -442,9 +421,9 @@ Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPrope
Cohesion: 0.09 Cohesion: 0.09
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more) Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
### Community 21 - "pets/pets.controller.ts" ### Community 21 - "orderService.ts"
Cohesion: 0.13 Cohesion: 0.20
Nodes (15): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+7 more) Nodes (4): ApiErr, Order, OrderItem, OrderService
### Community 22 - "ProductDto" ### Community 22 - "ProductDto"
Cohesion: 0.16 Cohesion: 0.16
@ -550,9 +529,9 @@ Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_cond
Cohesion: 0.13 Cohesion: 0.13
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more) Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 48 - "WikiController" ### Community 48 - "app.e2e-spec.js"
Cohesion: 0.21 Cohesion: 0.50
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more) Nodes (3): app_module_1, supertest_1, testing_1
### Community 49 - "devDependencies" ### Community 49 - "devDependencies"
Cohesion: 0.11 Cohesion: 0.11
@ -560,7 +539,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies" ### Community 50 - "devDependencies"
Cohesion: 0.12 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" ### Community 51 - "BlogsController"
Cohesion: 0.07 Cohesion: 0.07
@ -599,16 +578,16 @@ Cohesion: 0.18
Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more) Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
### Community 61 - "ProductPage.tsx" ### Community 61 - "ProductPage.tsx"
Cohesion: 0.12 Cohesion: 0.10
Nodes (30): ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), OrderSuccess(), PetProfile(), ProductImageZoomModalProps (+22 more) Nodes (30): revalidate, ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), ProductImageZoomModalProps, CalculatorState (+22 more)
### Community 62 - "ReportsController" ### Community 62 - "admin.module.ts"
Cohesion: 0.14 Cohesion: 0.05
Nodes (11): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+3 more) Nodes (23): AdminModule, Module, CategoryQuery, MediaService, Injectable, PetQuery, PetsService, Injectable (+15 more)
### Community 63 - "dependencies" ### Community 63 - "dependencies"
Cohesion: 0.09 Cohesion: 0.05
Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more) Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 more)
### Community 64 - "compilerOptions" ### Community 64 - "compilerOptions"
Cohesion: 0.10 Cohesion: 0.10
@ -623,12 +602,12 @@ Cohesion: 0.18
Nodes (8): ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString Nodes (8): ApiQuery, Get, Query, AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "PetsController" ### Community 67 - "PetsController"
Cohesion: 0.11 Cohesion: 0.17
Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more) Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### Community 68 - "HomeClient.tsx" ### Community 68 - "useSettingsStore"
Cohesion: 0.14 Cohesion: 0.07
Nodes (17): HomeClient(), HomeClientProps, BannerPlacement(), BannerPlacementProps, Hero(), StatCounter(), B2BInquiry, Banner (+9 more) Nodes (31): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPostClientProps, BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps (+23 more)
### Community 69 - "Required Review Group Closures" ### Community 69 - "Required Review Group Closures"
Cohesion: 0.10 Cohesion: 0.10
@ -639,8 +618,8 @@ Cohesion: 0.08
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more) Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
### Community 71 - "getPageMetadata" ### Community 71 - "getPageMetadata"
Cohesion: 0.09 Cohesion: 0.08
Nodes (15): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata() (+7 more) Nodes (19): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home() (+11 more)
### Community 72 - "Operational Rules & Boundaries" ### Community 72 - "Operational Rules & Boundaries"
Cohesion: 0.11 Cohesion: 0.11
@ -655,8 +634,8 @@ Cohesion: 0.13
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more) Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 75 - "PetsController" ### Community 75 - "PetsController"
Cohesion: 0.08 Cohesion: 0.05
Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 more) Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
### Community 76 - "RevalidationService" ### Community 76 - "RevalidationService"
Cohesion: 0.07 Cohesion: 0.07
@ -714,9 +693,9 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
Cohesion: 0.17 Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more) Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "lib/services/api.ts" ### Community 90 - "toPersian"
Cohesion: 0.09 Cohesion: 0.12
Nodes (26): VerifyContent(), B2BPortal(), ContactInfoItem, Header(), MENU_ICONS, PrescriptionUploadModal(), PrescriptionUploadModalProps, UserDashboard() (+18 more) Nodes (27): VerifyContent(), AuthModal(), B2BPortal(), CartDrawer(), Header(), MENU_ICONS, OrderSuccess(), PetProfile() (+19 more)
### Community 91 - "Reconciled Audit Roles & Assignments" ### Community 91 - "Reconciled Audit Roles & Assignments"
Cohesion: 0.12 Cohesion: 0.12
@ -783,12 +762,12 @@ Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 107 - "PaginationDto" ### Community 107 - "PaginationDto"
Cohesion: 0.07 Cohesion: 0.05
Nodes (23): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+15 more) Nodes (32): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+24 more)
### Community 108 - "PrismaService" ### Community 108 - "PrismaService"
Cohesion: 0.06 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" ### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17 Cohesion: 0.17
@ -931,8 +910,8 @@ Cohesion: 0.25
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
### Community 144 - "SafeImage.tsx" ### Community 144 - "SafeImage.tsx"
Cohesion: 0.06 Cohesion: 0.08
Nodes (34): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+26 more) Nodes (28): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BannerPlacement(), BannerPlacementProps, PLAYBACK_RATES (+20 more)
### Community 145 - "auth.service.ts" ### Community 145 - "auth.service.ts"
Cohesion: 0.22 Cohesion: 0.22
@ -1050,10 +1029,6 @@ Nodes (4): activeFiles, errors, validationOutput, warnings
Cohesion: 0.53 Cohesion: 0.53
Nodes (5): dynamic, GET(), getCandidateUrls(), getMimeType(), HEAD() 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" ### Community 178 - "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina"
Cohesion: 0.33 Cohesion: 0.33
Nodes (5): نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina, ۱. معماری و نقش‌های کاربری (User Roles), ۲. ماتریس جریان‌ها و قابلیت‌های کاربرمحور (Feature & Flow Matrix), ۳. وضعیت پوشش نهایی سوئیت ۱۱گانه (Final 11 Test Suites Status), ۴. راهنمای نگهداری و افزودن فیچرهای جدید بدون شکستن تست‌ها (Developer Maintenance Guide) 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 Cohesion: 0.50
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content) 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" ### Community 185 - "Reviews.tsx"
Cohesion: 0.40 Cohesion: 0.40
Nodes (5): BlogCommentItem, ProductReview, Reviews(), toPersianDigits(), Reviews Nodes (5): BlogCommentItem, ProductReview, Reviews(), toPersianDigits(), Reviews
@ -1107,8 +1078,8 @@ Cohesion: 0.50
Nodes (3): Select, SelectOption, SelectProps Nodes (3): Select, SelectOption, SelectProps
### Community 197 - "AuthModal.tsx" ### Community 197 - "AuthModal.tsx"
Cohesion: 0.09 Cohesion: 0.10
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) 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" ### Community 200 - "application/README.md"
Cohesion: 0.50 Cohesion: 0.50
@ -1145,22 +1116,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps ## Knowledge Gaps
- **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more) - **1355 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1350 more)
These have ≤1 connection - possible missing edges or undocumented components. 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 ## Suggested Questions
_Questions this graph is uniquely positioned to answer:_ _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._ _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._ _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._ _High betweenness centrality (0.030) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?** - **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1355 weakly-connected nodes found - possible documentation gaps or missing edges._ _1355 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?** - **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06140350877192982 - nodes in this community are weakly interconnected._ _Cohesion score 0.06821480406386067 - 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._
- **Should `productService.ts` be split into smaller, more focused modules?** - **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 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