fix(catalog): luxury brochure redesign, dynamic admin logo, whitespace-nowrap badges, fixed spread dimensions
Some checks failed
Deploy Canina / deploy (push) Successful in 1m36s
E2E Playwright Tests / Run Full E2E & Security Suites (push) Failing after 6s

This commit is contained in:
parsa aghaei 2026-08-26 13:23:56 +03:30
parent c825268b34
commit 229e50f973
13 changed files with 9631 additions and 9470 deletions

View File

@ -3,6 +3,7 @@ import React from "react";
import Image from "next/image";
import { Sparkles } from "lucide-react";
import { cn } from "../lib/utils";
import { useSettingsStore } from "../lib/store/settingsStore";
interface SafeImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> {
src?: string;
@ -31,6 +32,7 @@ export default function SafeImage({
}: SafeImageProps) {
const [error, setError] = React.useState(false);
const [loading, setLoading] = React.useState(!priority);
const logoUrl = useSettingsStore(state => state.getText('site_logo', ''));
// Check if external domain is in allowed remote patterns or relative path
const isExternal = typeof src === 'string' && (src.startsWith('http://') || src.startsWith('https://'));
@ -53,16 +55,27 @@ export default function SafeImage({
if (!src || error) {
return (
<div className={cn(
"flex flex-col items-center justify-center bg-medical-gray-50 border border-medical-gray-200/80 p-3 text-center w-full h-full rounded-2xl relative overflow-hidden select-none aspect-square",
"flex flex-col items-center justify-center bg-medical-gray-50 border border-medical-gray-200/80 p-2 text-center w-full h-full rounded-2xl relative overflow-hidden select-none aspect-square",
className
)}>
<div className="w-12 h-12 sm:w-14 sm:h-14 rounded-2xl bg-canina-blue/10 border border-canina-blue/20 text-canina-blue flex items-center justify-center font-black text-lg font-mono shadow-xs mb-2">
CP
</div>
<span className="text-[11px] font-black text-medical-gray-800 font-vazir leading-tight">
{logoUrl ? (
<Image
src={logoUrl}
alt={alt || "Canina"}
width={80}
height={80}
className="w-12 h-12 object-contain opacity-70 mb-1"
unoptimized={typeof logoUrl === 'string' && (logoUrl.startsWith('blob:') || logoUrl.startsWith('data:'))}
/>
) : (
<div className="w-10 h-10 rounded-2xl bg-canina-blue/10 border border-canina-blue/20 text-canina-blue flex items-center justify-center font-black text-sm font-mono shadow-xs mb-1">
CANINA
</div>
)}
<span className="text-[10px] font-black text-medical-gray-800 font-vazir leading-tight">
Canina Pharma
</span>
<span className="text-[8px] font-bold text-canina-blue font-vazir leading-tight mt-1 bg-white border border-medical-gray-200 px-2 py-0.5 rounded-full shadow-2xs">
<span className="text-[8px] font-bold text-canina-blue font-vazir leading-tight mt-0.5 bg-white border border-medical-gray-200 px-2 py-0.5 rounded-full shadow-2xs">
{fallbackText}
</span>
</div>

View File

@ -1,8 +1,9 @@
"use client";
import React from "react";
import Image from "next/image";
import SafeImage from "../SafeImage";
import { Product } from "../../lib/data/products";
import { useSettingsStore } from "../../lib/store/settingsStore";
import {
Sparkles,
ChevronLeft,
@ -73,6 +74,7 @@ export default function CatalogPageSpread({
onJumpToPage,
categoriesList = [],
}: CatalogPageSpreadProps) {
const logoUrl = useSettingsStore(state => state.getText('site_logo', ''));
// ==========================================
// 1. LUXURY FRONT COVER (طراحی لوکس جلد)
@ -90,57 +92,79 @@ export default function CatalogPageSpread({
<div className="absolute inset-4 border border-white/5 rounded-xl pointer-events-none" />
{/* Top Header */}
<div className="relative z-10 flex items-center justify-between border-b border-white/10 pb-4">
<div className="relative z-10 flex items-center justify-between border-b border-white/10 pb-3">
<div className="flex items-center gap-3">
<div className="w-10 h-10 rounded-xl bg-gradient-to-br from-amber-400 to-amber-500 text-slate-950 flex items-center justify-center font-black text-lg shadow-lg font-mono">
CP
</div>
{logoUrl ? (
<Image
src={logoUrl}
alt="Canina Pharma"
width={120}
height={40}
className="h-9 w-auto object-contain shrink-0"
unoptimized={typeof logoUrl === 'string' && (logoUrl.startsWith('blob:') || logoUrl.startsWith('data:'))}
/>
) : (
<div className="w-9 h-9 rounded-xl bg-gradient-to-br from-amber-400 to-amber-500 text-slate-950 flex items-center justify-center font-black text-base shadow-lg font-mono">
CANINA
</div>
)}
<div>
<span className="text-lg font-black font-lalezar tracking-wide text-white block">
<span className="text-base sm:text-lg font-black font-lalezar tracking-wide text-white block">
Canina Pharma Germany
</span>
<span className="text-[9px] text-amber-300 font-bold uppercase tracking-widest block font-mono">
<span className="text-[8px] sm:text-[9px] text-amber-300 font-bold uppercase tracking-widest block font-mono">
🇩🇪 100% Made in Germany Est. 1984
</span>
</div>
</div>
<div className="px-3 py-1 bg-white/10 rounded-full text-[10px] font-bold text-amber-300 border border-amber-400/30 flex items-center gap-1.5">
<Award className="w-3 h-3 text-amber-400" />
<div className="px-2.5 py-1 bg-white/10 rounded-full text-[9px] sm:text-[10px] font-bold text-amber-300 border border-amber-400/30 flex items-center gap-1.5 whitespace-nowrap">
<Award className="w-3 h-3 text-amber-400 shrink-0" />
<span>نسخه رسمی ۲۰۲۶</span>
</div>
</div>
{/* Center Hero Title & Visual */}
<div className="relative z-10 my-auto text-center space-y-4 py-2">
<div className="relative z-10 my-auto text-center space-y-3 py-1">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-amber-400/10 border border-amber-400/30 text-amber-300 text-[10px] font-black">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-amber-400/10 border border-amber-400/30 text-amber-300 text-[9px] sm:text-[10px] font-black whitespace-nowrap">
<Sparkles className="w-3.5 h-3.5" />
<span>OFFICIAL VETERINARY & CLINICAL CATALOG</span>
</div>
<div className="space-y-2">
<h1 className="text-2xl sm:text-3xl md:text-4xl font-black font-lalezar leading-tight text-transparent bg-clip-text bg-gradient-to-r from-amber-100 via-white to-amber-300">
<div className="space-y-1.5">
<h1 className="text-xl sm:text-2xl md:text-3xl font-black font-lalezar leading-tight text-transparent bg-clip-text bg-gradient-to-r from-amber-100 via-white to-amber-300">
کاتالوگ تخصصی و راهنمای بالینی مکملهای دارویی کنینا
</h1>
<p className="text-[11px] md:text-xs text-slate-300 font-medium max-w-md mx-auto leading-relaxed">
<p className="text-[10px] sm:text-[11px] text-slate-300 font-medium max-w-md mx-auto leading-relaxed">
مرجع رسمی مکملهای درمانی حیوانات خانگی با استانداردهای داروسازی آلمان (GMP) و تاییدیههای ارتوپدی و پوست
</p>
</div>
{/* Hero Render Frame: Brand Identity */}
<div className="pt-2 flex justify-center">
<div className="w-40 h-40 md:w-48 md:h-48 rounded-2xl bg-gradient-to-b from-white/10 to-white/5 border border-white/15 backdrop-blur-md p-4 flex flex-col items-center justify-center shadow-2xl relative">
<div className="w-16 h-16 rounded-2xl bg-gradient-to-br from-amber-400 to-amber-500 text-slate-950 flex items-center justify-center font-black text-3xl font-mono shadow-xl mb-2">
CP
</div>
<span className="text-xl font-black font-lalezar text-white tracking-wide">
{/* Hero Render Frame: Brand Identity with dynamic logo */}
<div className="pt-1 flex justify-center">
<div className="w-36 h-36 md:w-44 md:h-44 rounded-2xl bg-gradient-to-b from-white/10 to-white/5 border border-white/15 backdrop-blur-md p-4 flex flex-col items-center justify-center shadow-2xl relative">
{logoUrl ? (
<Image
src={logoUrl}
alt="Canina Pharma"
width={140}
height={140}
className="max-h-16 w-auto object-contain mb-2 drop-shadow-xl"
unoptimized={typeof logoUrl === 'string' && (logoUrl.startsWith('blob:') || logoUrl.startsWith('data:'))}
/>
) : (
<div className="w-14 h-14 rounded-2xl bg-gradient-to-br from-amber-400 to-amber-500 text-slate-950 flex items-center justify-center font-black text-2xl font-mono shadow-xl mb-2">
CANINA
</div>
)}
<span className="text-base sm:text-lg font-black font-lalezar text-white tracking-wide">
Canina Pharma
</span>
<span className="text-[9px] text-amber-300 font-bold uppercase tracking-widest font-mono mt-0.5">
<span className="text-[8px] sm:text-[9px] text-amber-300 font-bold uppercase tracking-widest font-mono mt-0.5">
Germany Est. 1984
</span>
<div className="absolute -bottom-2.5 bg-gradient-to-r from-amber-400 to-amber-500 text-slate-950 font-black text-[9px] px-3 py-0.5 rounded-full shadow-md">
<div className="absolute -bottom-2.5 bg-gradient-to-r from-amber-400 to-amber-500 text-slate-950 font-black text-[8px] sm:text-[9px] px-3 py-0.5 rounded-full shadow-md whitespace-nowrap">
Pharma Grade Certified
</div>
</div>
@ -332,64 +356,73 @@ export default function CatalogPageSpread({
const themeColor = categoryMeta?.color || "#0284C7";
return (
<div className="w-full h-full bg-white text-slate-800 p-4 sm:p-5 md:p-6 flex flex-col justify-between select-none box-border overflow-hidden" dir="rtl">
<div className="w-full h-full bg-gradient-to-b from-slate-50 via-white to-slate-50 text-slate-800 p-4 sm:p-5 md:p-6 flex flex-col justify-between select-none box-border overflow-hidden relative" dir="rtl">
{/* Decorative luxury gradient tint border on top edge */}
<div
className="absolute top-0 right-0 left-0 h-1.5 opacity-80"
style={{ backgroundColor: themeColor }}
/>
{/* 1. Header Bar: Category, Species, Form, ArtNo */}
<div className="border-b border-slate-100 pb-2.5 flex items-center justify-between gap-2 shrink-0">
<div className="border-b border-slate-200/80 pb-2 flex items-center justify-between gap-2 shrink-0 pt-0.5">
{/* Category Pill */}
<div className="flex items-center gap-1.5">
<div className="flex items-center gap-1.5 min-w-0">
<span
className="w-2.5 h-2.5 rounded-full shrink-0"
className="w-2.5 h-2.5 rounded-full shrink-0 shadow-2xs"
style={{ backgroundColor: themeColor }}
/>
<span className="text-[10px] font-black uppercase tracking-wider text-slate-700 font-vazir">
<span className="text-[10px] sm:text-[11px] font-black uppercase tracking-wider text-slate-800 font-vazir truncate whitespace-nowrap">
{product.category}
</span>
</div>
{/* Product Badges */}
<div className="flex items-center gap-1.5 text-[9px] font-bold">
<span className="bg-slate-100 text-slate-700 px-2 py-0.5 rounded-md flex items-center gap-1 border border-slate-200/60">
<SpeciesIcon className="w-3 h-3 text-slate-500" />
<span>{speciesBadge.label}</span>
{/* Product Badges (Strictly whitespace-nowrap) */}
<div className="flex items-center gap-1 sm:gap-1.5 text-[9px] font-bold shrink-0">
<span className="bg-white text-slate-700 px-2 py-0.5 rounded-md flex items-center gap-1 border border-slate-200 shadow-3xs whitespace-nowrap">
<SpeciesIcon className="w-3 h-3 text-slate-500 shrink-0" />
<span className="whitespace-nowrap">{speciesBadge.label}</span>
</span>
<span className="bg-slate-100 text-slate-700 px-2 py-0.5 rounded-md flex items-center gap-1 border border-slate-200/60">
<FormIcon className="w-3 h-3 text-slate-500" />
<span>{formBadge.label}</span>
<span className="bg-white text-slate-700 px-2 py-0.5 rounded-md flex items-center gap-1 border border-slate-200 shadow-3xs whitespace-nowrap">
<FormIcon className="w-3 h-3 text-slate-500 shrink-0" />
<span className="whitespace-nowrap">{formBadge.label}</span>
</span>
<span className="bg-blue-50 text-canina-blue font-mono px-2 py-0.5 rounded-md border border-blue-100">
<span className="bg-blue-50/90 text-canina-blue font-mono px-2 py-0.5 rounded-md border border-blue-100/90 whitespace-nowrap font-bold">
Art-Nr: {product.artNo}
</span>
</div>
</div>
{/* 2. Main Body Content (Strictly fitted with flex-1 & min-h-0) */}
<div className="flex-1 min-h-0 flex flex-col justify-between py-2 space-y-2">
{/* 2. Main Body Content (Luxury grid fitted strictly without overflow) */}
<div className="flex-1 min-h-0 flex flex-col justify-between py-1.5 space-y-1.5">
{/* Top Product Hero Showcase (Image + Titles + Special Badge) */}
<div className="flex items-center gap-3 bg-gradient-to-l from-slate-50 via-white to-slate-50 border border-slate-200/80 rounded-2xl p-2.5 shrink-0">
<div className="flex items-center gap-3 bg-white border border-slate-200/90 rounded-2xl p-2.5 shrink-0 shadow-2xs relative overflow-hidden">
<div
className="absolute -top-8 -right-8 w-24 h-24 rounded-full opacity-10 blur-xl pointer-events-none"
style={{ backgroundColor: themeColor }}
/>
{/* Studio Image Box */}
<div className="w-24 h-24 sm:w-28 sm:h-28 bg-white rounded-xl border border-slate-100 p-2 flex items-center justify-center shrink-0 relative shadow-2xs">
<div className="w-20 h-20 sm:w-24 sm:h-24 bg-slate-50/80 rounded-xl border border-slate-200/70 p-1.5 flex items-center justify-center shrink-0 relative shadow-inner">
<SafeImage
src={product.image}
alt={product.name}
className="w-full h-full"
imgClassName="object-contain max-h-20 sm:max-h-24 filter drop-shadow-md"
imgClassName="object-contain max-h-16 sm:max-h-20 filter drop-shadow-md"
/>
{product.unit && (
<span className="absolute bottom-1 right-1 bg-slate-900/90 text-white font-mono text-[8px] font-bold px-1.5 py-0.5 rounded">
<span className="absolute bottom-1 right-1 bg-slate-900/90 text-white font-mono text-[7px] sm:text-[8px] font-bold px-1.5 py-0.2 rounded shadow-2xs whitespace-nowrap">
{product.unit}
</span>
)}
</div>
{/* Title & Scientific Tagline */}
<div className="min-w-0 space-y-1">
<div className="min-w-0 flex-1 space-y-0.5">
{product.specialBadge && (
<span
className="text-[9px] font-black px-2 py-0.5 rounded-full text-white inline-block shadow-2xs"
className="text-[8px] font-black px-2 py-0.5 rounded-full text-white inline-block shadow-2xs whitespace-nowrap mb-0.5"
style={{ backgroundColor: themeColor }}
>
{product.specialBadge}
@ -399,11 +432,11 @@ export default function CatalogPageSpread({
{product.name}
</h2>
{product.scientificTagline && (
<p className="text-[10px] text-slate-600 font-bold italic line-clamp-1">
<p className="text-[9px] sm:text-[10px] text-slate-600 font-bold italic truncate">
{product.scientificTagline}
</p>
)}
<p className="text-[10px] text-slate-500 font-medium line-clamp-2 leading-relaxed">
<p className="text-[9px] text-slate-500 font-medium line-clamp-2 leading-relaxed text-justify">
{product.shortDescription || product.description}
</p>
</div>
@ -412,14 +445,14 @@ export default function CatalogPageSpread({
{/* Clinical Indications & Symptoms */}
{product.symptoms && product.symptoms.length > 0 && (
<div className="space-y-1 shrink-0">
<span className="text-[9px] font-black text-slate-400 uppercase tracking-widest block">
<span className="text-[8px] font-black text-slate-400 uppercase tracking-widest block whitespace-nowrap">
موارد مصرف و نشانههای بالینی:
</span>
<div className="flex flex-wrap gap-1">
{product.symptoms.slice(0, 4).map((symptom, i) => (
<span
key={i}
className="bg-red-50/70 text-red-800 border border-red-200/60 rounded-md px-2 py-0.5 text-[9px] font-bold"
className="bg-red-50 text-red-900 border border-red-200/80 rounded-md px-1.5 py-0.5 text-[8.5px] font-bold whitespace-nowrap shadow-3xs"
>
{symptom}
</span>
@ -430,16 +463,16 @@ export default function CatalogPageSpread({
{/* Active Ingredients & Composition Table */}
{product.main_ingredients && product.main_ingredients.length > 0 && (
<div className="bg-slate-50 border border-slate-200/80 rounded-xl p-2 space-y-1 shrink-0">
<div className="flex items-center gap-1 text-[9px] font-black text-canina-blue uppercase">
<Layers className="w-3 h-3" />
<div className="bg-slate-50/90 border border-slate-200/80 rounded-xl p-2 space-y-1 shrink-0">
<div className="flex items-center gap-1 text-[8.5px] font-black text-canina-blue uppercase whitespace-nowrap">
<Layers className="w-3 h-3 shrink-0" />
<span>ترکیبات موثره و فرمولاسیون دارویی:</span>
</div>
<div className="flex flex-wrap gap-1">
{product.main_ingredients.slice(0, 5).map((ing, idx) => (
{product.main_ingredients.slice(0, 4).map((ing, idx) => (
<span
key={idx}
className="bg-white text-slate-800 border border-slate-200 rounded px-1.5 py-0.5 text-[9px] font-bold shadow-3xs"
className="bg-white text-slate-800 border border-slate-200 rounded px-1.5 py-0.5 text-[8.5px] font-bold shadow-3xs whitespace-nowrap"
>
{ing}
</span>
@ -450,12 +483,12 @@ export default function CatalogPageSpread({
{/* Clinical Dosage Protocol */}
{product.dosage_logic && (
<div className="bg-amber-50/70 border border-amber-200/70 rounded-xl p-2 space-y-0.5 shrink-0">
<div className="flex items-center gap-1 text-amber-900 font-black text-[9px]">
<ShieldCheck className="w-3 h-3 text-amber-600" />
<div className="bg-amber-50/80 border border-amber-200/80 rounded-xl p-2 space-y-0.5 shrink-0">
<div className="flex items-center gap-1 text-amber-900 font-black text-[8.5px] whitespace-nowrap">
<ShieldCheck className="w-3 h-3 text-amber-600 shrink-0" />
<span>پروتکل بالینی تجویز و دوز مصرف:</span>
</div>
<p className="text-[9px] text-amber-950 font-bold leading-relaxed line-clamp-2">
<p className="text-[8.5px] text-amber-950 font-bold leading-relaxed line-clamp-2">
{product.dosage_logic}
</p>
</div>
@ -463,20 +496,16 @@ export default function CatalogPageSpread({
{/* Specialist Endorsement */}
{product.specialist && (
<div className="bg-slate-50/80 border border-slate-200/60 rounded-xl p-2 flex items-center gap-2.5 shrink-0">
<SafeImage
src={product.specialist.image}
alt={product.specialist.name}
className="w-8 h-8 rounded-full border border-white shadow-xs shrink-0"
imgClassName="object-cover"
/>
<div className="min-w-0">
<div className="flex items-center gap-1">
<Stethoscope className="w-3 h-3 text-canina-blue" />
<span className="text-[9px] font-black text-slate-900 truncate">{product.specialist.name}</span>
<span className="text-[8px] text-slate-500 truncate font-medium">({product.specialist.title})</span>
<div className="bg-white border border-slate-200/80 rounded-xl p-2 flex items-center gap-2 shrink-0 shadow-3xs">
<div className="w-7 h-7 rounded-full bg-canina-blue/10 border border-canina-blue/20 text-canina-blue flex items-center justify-center font-black text-xs font-mono shadow-3xs shrink-0">
<Stethoscope className="w-3.5 h-3.5" />
</div>
<div className="min-w-0 flex-1">
<div className="flex items-center gap-1 truncate">
<span className="text-[8.5px] font-black text-slate-900 truncate">{product.specialist.name}</span>
<span className="text-[7.5px] text-slate-500 truncate font-medium">({product.specialist.title})</span>
</div>
<p className="text-[8px] text-slate-600 italic truncate mt-0.5">
<p className="text-[8px] text-slate-600 italic truncate mt-0.2">
«{product.specialist.message}»
</p>
</div>
@ -486,12 +515,12 @@ export default function CatalogPageSpread({
</div>
{/* 3. Page Footer */}
<div className="border-t border-slate-100 pt-2 flex items-center justify-between text-[9px] text-slate-400 font-bold shrink-0">
<div className="flex items-center gap-1.5">
<CheckCircle2 className="w-3 h-3 text-emerald-600" />
<span>گرید دارویی GMP آلمان</span>
<div className="border-t border-slate-200/80 pt-1.5 flex items-center justify-between text-[8.5px] text-slate-400 font-bold shrink-0">
<div className="flex items-center gap-1.5 whitespace-nowrap">
<Award className="w-3 h-3 text-amber-500 shrink-0" />
<span>Canina Pharma Germany استانداردهای بالینی GMP</span>
</div>
<span className="font-mono">
<span className="font-mono text-slate-600 bg-slate-100 px-2 py-0.2 rounded-md whitespace-nowrap font-bold">
صفحه {pageNumber < 10 ? `۰${pageNumber}` : pageNumber} از {totalPages}
</span>
</div>

View File

@ -1,8 +1,10 @@
"use client";
import React, { useState, useEffect, useRef, useMemo } from "react";
import Image from "next/image";
import CatalogPageSpread, { CategoryMeta } from "./CatalogPageSpread";
import { Product } from "../../lib/data/products";
import { useSettingsStore } from "../../lib/store/settingsStore";
import {
ChevronRight,
ChevronLeft,
@ -518,9 +520,20 @@ export default function FlipbookCatalog({ products }: FlipbookCatalogProps) {
<span>EST. 1984</span>
</div>
<div className="text-center space-y-3 max-w-xs mx-auto">
<div className="w-12 h-12 mx-auto rounded-2xl bg-amber-400/10 border border-amber-400/30 text-amber-400 flex items-center justify-center font-black text-lg font-mono shadow-inner">
CP
</div>
{useSettingsStore.getState().getText('site_logo', '') ? (
<Image
src={useSettingsStore.getState().getText('site_logo', '')}
alt="Canina Logo"
width={80}
height={80}
className="w-14 h-14 mx-auto object-contain drop-shadow-md"
unoptimized={useSettingsStore.getState().getText('site_logo', '').startsWith('blob:') || useSettingsStore.getState().getText('site_logo', '').startsWith('data:')}
/>
) : (
<div className="w-12 h-12 mx-auto rounded-2xl bg-amber-400/10 border border-amber-400/30 text-amber-400 flex items-center justify-center font-black text-sm font-mono shadow-inner">
CANINA
</div>
)}
<h3 className="text-base font-black font-lalezar text-white">
کاتالوگ تخصصی کنینا آلمان
</h3>

View File

@ -1,9 +1,9 @@
{
"0": "Roles",
"1": "app.module.ts",
"2": "SettingsController",
"2": "SmsService",
"3": "ProductService",
"4": "SafeImage.tsx",
"4": "ProductPage.tsx",
"5": "CmsController",
"6": "tickets.controller.ts",
"7": "Button.tsx",
@ -13,15 +13,15 @@
"11": "MediaSelector.tsx",
"12": "index.ts",
"13": "app-audit-verification.e2e-spec.js",
"14": "UserDashboard.tsx",
"14": "toPersian",
"15": "src/services/api.ts",
"16": "DoctorQueryDto",
"17": "schema.ts",
"18": "JwtAuthGuard",
"19": "ProductsService",
"19": "RevalidationService",
"20": "CreateVideoDto",
"21": "ProductPage.tsx",
"22": "PetProfile.tsx",
"21": "userStore.ts",
"22": "useCartStore",
"23": "MenuService",
"24": "BE-001",
"25": "FE-001",
@ -34,7 +34,7 @@
"32": "adminRoutes.tsx",
"33": "WholesaleService",
"34": "B2BService",
"35": "AuthController",
"35": "auth.service.ts",
"36": "FaqService",
"37": "راهنمای تست سیستم (Software Testing)",
"38": "Button",
@ -59,15 +59,15 @@
"57": "Role & Core Objective",
"58": "ContactService",
"59": "compilerOptions",
"60": "AuthService",
"61": "payment.controller.ts",
"60": "PaymentService",
"61": "payment.service.ts",
"62": "ProductDto",
"63": "dependencies",
"64": "compilerOptions",
"65": "app.e2e-spec.js",
"66": "AdminQueryDto",
"67": "admin.module.ts",
"68": "OrdersService",
"68": "CheckoutPage.tsx",
"69": "Required Review Group Closures",
"70": "compilerOptions",
"71": "getPageMetadata",
@ -87,16 +87,16 @@
"85": "HomeClient.tsx",
"86": "zibal.service.ts",
"87": "dependencies",
"88": "MetricsController",
"88": "CreateEBankCheckoutDto",
"89": "seed-products.ts",
"90": "useSettingsStore",
"91": "Reconciled Audit Roles & Assignments",
"92": "OrdersController",
"92": "OrdersService",
"93": "@nestjs/schematics",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "wiki/[slug]/page.tsx",
"95": "blog/[slug]/page.tsx",
"96": "compilerOptions",
"97": "AdminLoginDto",
"97": "InitiatePaymentDto",
"98": "scripts",
"99": "BlogsController",
"100": "Deep Audit Summary Report",
@ -112,9 +112,9 @@
"110": "Operational Rules & Boundaries",
"111": "Operational Rules & Boundaries",
"112": "Operational Rules & Boundaries",
"113": "SmsService",
"113": "videos/page.tsx",
"114": "AppService",
"115": "LoginDto",
"115": "@nestjs/swagger",
"116": "Vazirmatn Changelog",
"117": "Vazirmatn Font فونت وزیرمتن",
"118": "Operational Rules & Boundaries",
@ -128,7 +128,7 @@
"126": "admin-panel/package.json",
"127": "Sahel-Font",
"128": "AdminController",
"129": "bcrypt",
"129": "globals",
"130": "Sahel-Font",
"131": "Role & Core Objective",
"132": "orchestrate.py",
@ -150,7 +150,7 @@
"148": "class-transformer",
"149": "SmsSettingsPage.tsx",
"150": "Product Requirement Document (PRD)",
"151": "auth.service.ts",
"151": "@types/react-dom",
"152": "lib/services/api.ts",
"153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History",
@ -175,8 +175,6 @@
"173": "Phase 3 Audit Traceability Matrix",
"174": "rebuild_honest_ledger.js",
"175": "validate_evidence_grade.js",
"176": "CreateOrderDto",
"177": "SmsLogQueryDto",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "PaginationDto",
"180": "API Contract Specification",
@ -198,7 +196,6 @@
"196": "Select.tsx",
"197": "wiki/page.tsx",
"198": "@nestjs/core",
"199": "RegisterDto",
"200": "application/README.md",
"201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)",
@ -294,7 +291,6 @@
"292": "Production Docker Compose",
"293": "Staging Docker Compose",
"294": "ZibalService",
"295": "eslint-plugin-react-refresh",
"296": "eslint-plugin-prettier",
"297": "ZibalEBankService",
"298": ".initiateOrderPayment",
@ -321,6 +317,5 @@
"319": "ts-jest",
"320": "@types/js-yaml",
"321": "@types/supertest",
"322": "typescript-eslint",
"323": "eslint-config-next"
"322": "typescript-eslint"
}

File diff suppressed because one or more lines are too long

View File

@ -7,21 +7,21 @@
"5": "CmsController",
"6": "tickets.controller.ts",
"7": "Button.tsx",
"8": "admin.module.ts",
"8": "ReportsController",
"9": "devDependencies",
"10": "CreateReviewDto",
"10": "ReviewsService",
"11": "MediaSelector.tsx",
"12": "index.ts",
"13": "app-audit-verification.e2e-spec.js",
"14": "CheckoutPage.tsx",
"14": "UserDashboard.tsx",
"15": "src/services/api.ts",
"16": "DoctorQueryDto",
"17": "schema.ts",
"18": "JwtAuthGuard",
"19": "RevalidationService",
"19": "ProductsService",
"20": "CreateVideoDto",
"21": "ProductPage.tsx",
"22": "toPersian",
"22": "PetProfile.tsx",
"23": "MenuService",
"24": "BE-001",
"25": "FE-001",
@ -32,7 +32,7 @@
"30": "DEVOPS-001",
"31": "DOC-001",
"32": "adminRoutes.tsx",
"33": "WholesaleApplyDto",
"33": "WholesaleService",
"34": "B2BService",
"35": "AuthController",
"36": "FaqService",
@ -53,21 +53,21 @@
"51": "BlogsController",
"52": "PrescriptionsService",
"53": "SmartAdvisorService",
"54": "UsersController",
"54": "CreateReviewDto",
"55": "UITexts.tsx",
"56": "Orders.tsx",
"57": "Role & Core Objective",
"58": "ContactService",
"59": "compilerOptions",
"60": "users.controller.ts",
"61": "payment.service.ts",
"60": "AuthService",
"61": "payment.controller.ts",
"62": "ProductDto",
"63": "dependencies",
"64": "compilerOptions",
"65": "app.e2e-spec.js",
"66": "AdminQueryDto",
"67": "PetsController",
"68": "PaymentService",
"67": "admin.module.ts",
"68": "OrdersService",
"69": "Required Review Group Closures",
"70": "compilerOptions",
"71": "getPageMetadata",
@ -84,19 +84,19 @@
"82": "scripts",
"83": "dependencies",
"84": "Role & Core Objective",
"85": "ArchivePage.tsx",
"85": "HomeClient.tsx",
"86": "zibal.service.ts",
"87": "dependencies",
"88": "NetworkBanner.tsx",
"88": "MetricsController",
"89": "seed-products.ts",
"90": "useSettingsStore",
"91": "Reconciled Audit Roles & Assignments",
"92": "OrdersService",
"92": "OrdersController",
"93": "@nestjs/schematics",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "blog/[slug]/page.tsx",
"95": "wiki/[slug]/page.tsx",
"96": "compilerOptions",
"97": "SettingsService",
"97": "AdminLoginDto",
"98": "scripts",
"99": "BlogsController",
"100": "Deep Audit Summary Report",
@ -106,7 +106,7 @@
"104": "Coupons.tsx",
"105": "Operational Rules & Boundaries",
"106": "Media.tsx",
"107": "WikiController",
"107": "WholesaleApplyDto",
"108": "PrismaService",
"109": "1. Summary of Integrity Repairs Performed",
"110": "Operational Rules & Boundaries",
@ -114,7 +114,7 @@
"112": "Operational Rules & Boundaries",
"113": "SmsService",
"114": "AppService",
"115": "AuthService",
"115": "LoginDto",
"116": "Vazirmatn Changelog",
"117": "Vazirmatn Font فونت وزیرمتن",
"118": "Operational Rules & Boundaries",
@ -122,13 +122,13 @@
"120": "compilerOptions",
"121": "backend/README.md",
"122": "AdminService",
"123": "CreateEBankCheckoutDto",
"123": "app/page.tsx",
"124": "Repository Map",
"125": "validate_integrity.js",
"126": "admin-panel/package.json",
"127": "Sahel-Font",
"128": "AdminController",
"129": "InitiatePaymentDto",
"129": "bcrypt",
"130": "Sahel-Font",
"131": "Role & Core Objective",
"132": "orchestrate.py",
@ -146,18 +146,18 @@
"144": "@testing-library/react",
"145": "admin.service.ts",
"146": "System Discovery",
"147": "UserDashboard.tsx",
"148": "wiki/[slug]/page.tsx",
"147": "components/Skeleton.tsx",
"148": "class-transformer",
"149": "SmsSettingsPage.tsx",
"150": "Product Requirement Document (PRD)",
"151": "auth.service.ts",
"152": "cartStore.ts",
"152": "lib/services/api.ts",
"153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History",
"155": "seo-backfill.ts",
"156": "manual-test-scenarios.md",
"157": "ErrorPages.tsx",
"158": "@types/react-dom",
"158": "helmet",
"159": "with-vpn.sh",
"160": "Architecture Specification",
"161": "Project Health Audit Report",
@ -184,7 +184,7 @@
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
"184": "RedisService",
"185": "trust-seals/page.tsx",
"185": "js-yaml",
"186": "seed-ui-texts.ts",
"187": "seed-wiki.ts",
"188": "update-blog.dto.ts",
@ -197,8 +197,8 @@
"195": "React + TypeScript + Vite",
"196": "Select.tsx",
"197": "wiki/page.tsx",
"198": "catalog/page.tsx",
"199": "auth.controller.ts",
"198": "@nestjs/core",
"199": "RegisterDto",
"200": "application/README.md",
"201": "deploy.sh",
"202": "🔒 Security & Performance Review (09_devops_security)",
@ -222,7 +222,7 @@
"220": "Input.tsx",
"221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json",
"223": "@types/node",
"223": "@nestjs/jwt",
"224": "jest",
"225": "next.config.ts",
"226": "Shabnam Font README",
@ -230,9 +230,13 @@
"228": "rules/graphify.md",
"229": ".agents/workflows/graphify.md",
"230": "instructions.md",
"231": "typescript",
"231": "@nestjs/throttler",
"232": "@eslint/js",
"233": "tailwindcss",
"234": "passport",
"235": "reflect-metadata",
"236": "swagger-ui-express",
"237": "@eslint/eslintrc",
"238": "prisma",
"239": "source-map-support",
"240": "supertest",
@ -291,6 +295,7 @@
"293": "Staging Docker Compose",
"294": "ZibalService",
"295": "eslint-plugin-react-refresh",
"296": "eslint-plugin-prettier",
"297": "ZibalEBankService",
"298": ".initiateOrderPayment",
"299": "@tailwindcss/postcss",
@ -300,13 +305,22 @@
"303": "@types/express",
"304": "@types/jest",
"305": "@types/react",
"306": "globals",
"307": "@nestjs/cli",
"308": "vitest",
"309": "axios",
"310": "tailwindcss",
"311": "@types/multer",
"312": "@types/passport-jwt",
"313": "Modal.tsx",
"314": "@nestjs/testing",
"315": "typescript",
"316": "prettier",
"317": "revalidate/route.ts",
"318": "MaskableField.tsx"
"318": "MaskableField.tsx",
"319": "ts-jest",
"320": "@types/js-yaml",
"321": "@types/supertest",
"322": "typescript-eslint",
"323": "eslint-config-next"
}

View File

@ -1,16 +1,16 @@
# Graph Report - canina (2026-08-26)
## Corpus Check
- 586 files · ~1,330,915 words
- 586 files · ~1,330,935 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4104 nodes · 7379 edges · 310 communities (210 shown, 100 thin omitted)
- 4104 nodes · 7380 edges · 324 communities (210 shown, 114 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 281 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `0b52f9e9`
- Built from commit: `9daaa226`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@ -23,21 +23,21 @@
- CmsController
- tickets.controller.ts
- Button.tsx
- admin.module.ts
- ReportsController
- devDependencies
- CreateReviewDto
- ReviewsService
- MediaSelector.tsx
- index.ts
- app-audit-verification.e2e-spec.js
- CheckoutPage.tsx
- UserDashboard.tsx
- src/services/api.ts
- DoctorQueryDto
- schema.ts
- JwtAuthGuard
- RevalidationService
- ProductsService
- CreateVideoDto
- ProductPage.tsx
- toPersian
- PetProfile.tsx
- MenuService
- BE-001
- FE-001
@ -48,7 +48,7 @@
- DEVOPS-001
- DOC-001
- adminRoutes.tsx
- WholesaleApplyDto
- WholesaleService
- B2BService
- AuthController
- FaqService
@ -69,21 +69,21 @@
- BlogsController
- PrescriptionsService
- SmartAdvisorService
- UsersController
- CreateReviewDto
- UITexts.tsx
- Orders.tsx
- Role & Core Objective
- ContactService
- compilerOptions
- users.controller.ts
- payment.service.ts
- AuthService
- payment.controller.ts
- ProductDto
- dependencies
- compilerOptions
- app.e2e-spec.js
- AdminQueryDto
- PetsController
- PaymentService
- admin.module.ts
- OrdersService
- Required Review Group Closures
- compilerOptions
- getPageMetadata
@ -99,19 +99,19 @@
- scripts
- dependencies
- Role & Core Objective
- ArchivePage.tsx
- HomeClient.tsx
- zibal.service.ts
- dependencies
- NetworkBanner.tsx
- MetricsController
- seed-products.ts
- useSettingsStore
- Reconciled Audit Roles & Assignments
- OrdersService
- OrdersController
- @nestjs/schematics
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
- blog/[slug]/page.tsx
- wiki/[slug]/page.tsx
- compilerOptions
- SettingsService
- AdminLoginDto
- scripts
- BlogsController
- Deep Audit Summary Report
@ -121,7 +121,7 @@
- Coupons.tsx
- Operational Rules & Boundaries
- Media.tsx
- WikiController
- WholesaleApplyDto
- PrismaService
- 1. Summary of Integrity Repairs Performed
- Operational Rules & Boundaries
@ -129,7 +129,7 @@
- Operational Rules & Boundaries
- SmsService
- AppService
- AuthService
- LoginDto
- Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries
@ -137,13 +137,13 @@
- compilerOptions
- backend/README.md
- AdminService
- CreateEBankCheckoutDto
- app/page.tsx
- Repository Map
- validate_integrity.js
- admin-panel/package.json
- Sahel-Font
- AdminController
- InitiatePaymentDto
- bcrypt
- Sahel-Font
- Role & Core Objective
- orchestrate.py
@ -161,17 +161,17 @@
- @testing-library/react
- admin.service.ts
- System Discovery
- UserDashboard.tsx
- wiki/[slug]/page.tsx
- components/Skeleton.tsx
- class-transformer
- SmsSettingsPage.tsx
- Product Requirement Document (PRD)
- auth.service.ts
- cartStore.ts
- lib/services/api.ts
- exclude
- Baseline Command Plan & Reconciled Command History
- seo-backfill.ts
- ErrorPages.tsx
- @types/react-dom
- helmet
- with-vpn.sh
- Architecture Specification
- Project Health Audit Report
@ -198,7 +198,7 @@
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
- 🚀 SEO & Content Strategy Review (12_seo_content)
- RedisService
- trust-seals/page.tsx
- js-yaml
- seed-ui-texts.ts
- seed-wiki.ts
- update-blog.dto.ts
@ -211,8 +211,8 @@
- React + TypeScript + Vite
- Select.tsx
- wiki/page.tsx
- catalog/page.tsx
- auth.controller.ts
- @nestjs/core
- RegisterDto
- application/README.md
- deploy.sh
- 🔒 Security & Performance Review (09_devops_security)
@ -236,7 +236,7 @@
- Input.tsx
- Textarea.tsx
- admin-panel/tsconfig.json
- @types/node
- @nestjs/jwt
- jest
- next.config.ts
- Shabnam Font README
@ -244,9 +244,13 @@
- rules/graphify.md
- .agents/workflows/graphify.md
- instructions.md
- typescript
- @nestjs/throttler
- @eslint/js
- tailwindcss
- passport
- reflect-metadata
- swagger-ui-express
- @eslint/eslintrc
- prisma
- source-map-support
- supertest
@ -290,6 +294,7 @@
- Staging Docker Compose
- ZibalService
- eslint-plugin-react-refresh
- eslint-plugin-prettier
- ZibalEBankService
- .initiateOrderPayment
- @tailwindcss/postcss
@ -299,18 +304,27 @@
- @types/express
- @types/jest
- @types/react
- globals
- @nestjs/cli
- vitest
- @types/multer
- @types/passport-jwt
- Modal.tsx
- @nestjs/testing
- typescript
- prettier
- revalidate/route.ts
- MaskableField.tsx
- ts-jest
- @types/js-yaml
- @types/supertest
- typescript-eslint
- eslint-config-next
## God Nodes (most connected - your core abstractions)
1. `Roles()` - 106 edges
2. `PrismaService` - 87 edges
3. `useSettingsStore` - 55 edges
3. `useSettingsStore` - 56 edges
4. `api` - 44 edges
5. `SmsService` - 43 edges
6. `PaginationDto` - 41 edges
@ -336,7 +350,7 @@
- 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 (310 total, 100 thin omitted)
## Communities (324 total, 114 thin omitted)
### Community 0 - "Roles"
Cohesion: 0.24
@ -344,19 +358,19 @@ Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Bo
### Community 1 - "app.module.ts"
Cohesion: 0.07
Nodes (36): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+28 more)
Nodes (37): B2BModule, Module, BannersModule, Module, CmsModule, Module, RevalidationModule, Global (+29 more)
### Community 2 - "SettingsController"
Cohesion: 0.17
Nodes (15): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+7 more)
Cohesion: 0.10
Nodes (18): SmsLogQuery, SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+10 more)
### Community 3 - "ProductService"
Cohesion: 0.06
Nodes (35): dynamic, revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory (+27 more)
Cohesion: 0.07
Nodes (30): dynamic, revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory (+22 more)
### Community 4 - "SafeImage.tsx"
Cohesion: 0.09
Nodes (18): OrderDetailsModalProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps, VideoModalPlayer (+10 more)
Cohesion: 0.08
Nodes (21): BackButton(), BackButtonProps, ProductDetailModalProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal() (+13 more)
### Community 5 - "CmsController"
Cohesion: 0.09
@ -370,17 +384,17 @@ Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty,
Cohesion: 0.11
Nodes (14): ButtonProps, ButtonSize, ButtonVariant, Spinner(), Doctor, FAQ, ProductReview, Reviews() (+6 more)
### Community 8 - "admin.module.ts"
Cohesion: 0.08
Nodes (17): AdminModule, Module, ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+9 more)
### Community 8 - "ReportsController"
Cohesion: 0.14
Nodes (11): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+3 more)
### Community 9 - "devDependencies"
Cohesion: 0.08
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @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 - "CreateReviewDto"
Cohesion: 0.08
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
### Community 10 - "ReviewsService"
Cohesion: 0.12
Nodes (17): ReviewsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+9 more)
### Community 11 - "MediaSelector.tsx"
Cohesion: 0.07
@ -391,12 +405,12 @@ Cohesion: 0.06
Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/*.ts, authFile, test, compilerOptions (+16 more)
### Community 13 - "app-audit-verification.e2e-spec.js"
Cohesion: 0.07
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
Cohesion: 0.06
Nodes (28): AppModule, Module, EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter (+20 more)
### Community 14 - "CheckoutPage.tsx"
Cohesion: 0.19
Nodes (15): AddressModal(), AddressModalProps, BackButton(), BackButtonProps, HeaderButton(), HeaderButtonProps, SearchableSelect(), SearchableSelectProps (+7 more)
### Community 14 - "UserDashboard.tsx"
Cohesion: 0.08
Nodes (38): B2BPortal, VerifyContent(), AddressModal(), AddressModalProps, AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal() (+30 more)
### Community 15 - "src/services/api.ts"
Cohesion: 0.08
@ -411,28 +425,28 @@ Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
### Community 18 - "JwtAuthGuard"
Cohesion: 0.20
Cohesion: 0.19
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 19 - "RevalidationService"
Cohesion: 0.06
Nodes (29): RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional, IsEnum (+21 more)
### Community 19 - "ProductsService"
Cohesion: 0.09
Nodes (19): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+11 more)
### Community 20 - "CreateVideoDto"
Cohesion: 0.07
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
### Community 21 - "ProductPage.tsx"
Cohesion: 0.17
Nodes (12): CalculatorState, ICON_MAP, ProductPage(), ProductReviews, useCalculatorStore, ProductReviews(), ProductReviewsProps, ReviewItem (+4 more)
Cohesion: 0.14
Nodes (13): revalidate, CalculatorState, ICON_MAP, ProductPage(), ProductReviews, useCalculatorStore, ProductReviews(), ProductReviewsProps (+5 more)
### Community 22 - "toPersian"
Cohesion: 0.10
Nodes (37): AuthModal, B2BPortal, CartDrawer, ClientLayout(), LoginModal, VerifyContent(), ArchiveProductCard(), AuthModal() (+29 more)
### Community 22 - "PetProfile.tsx"
Cohesion: 0.11
Nodes (23): ClientLayout(), FeaturedProducts(), ProductCard(), Header(), OrderSuccess(), PrescriptionUploadModal(), PrescriptionUploadModalProps, SearchResultsPage() (+15 more)
### Community 23 - "MenuService"
Cohesion: 0.12
Nodes (16): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
Cohesion: 0.11
Nodes (18): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+10 more)
### Community 24 - "BE-001"
Cohesion: 0.06
@ -470,9 +484,9 @@ Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternati
Cohesion: 0.06
Nodes (23): App(), Props, RouteErrorBoundary, State, HeroBanner, VetTestimonial, CategoryDist, DashboardData (+15 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.12
@ -531,8 +545,8 @@ Cohesion: 0.13
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 48 - "UsersService"
Cohesion: 0.10
Nodes (12): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+4 more)
Cohesion: 0.06
Nodes (41): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+33 more)
### Community 49 - "devDependencies"
Cohesion: 0.11
@ -540,7 +554,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
### Community 50 - "devDependencies"
Cohesion: 0.13
Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more)
Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more)
### Community 51 - "BlogsController"
Cohesion: 0.07
@ -554,9 +568,9 @@ Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 54 - "UsersController"
Cohesion: 0.19
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
### Community 54 - "CreateReviewDto"
Cohesion: 0.14
Nodes (13): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+5 more)
### Community 55 - "UITexts.tsx"
Cohesion: 0.09
@ -578,21 +592,21 @@ Nodes (12): ContactController, Body, Controller, Get, Param, Post, Put, Query (+
Cohesion: 0.06
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
### Community 60 - "users.controller.ts"
Cohesion: 0.14
Nodes (13): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+5 more)
### Community 60 - "AuthService"
Cohesion: 0.21
Nodes (3): AuthService, Injectable, normalizeMobile()
### Community 61 - "payment.service.ts"
Cohesion: 0.20
Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata
### Community 61 - "payment.controller.ts"
Cohesion: 0.07
Nodes (31): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, CreateEBankCheckoutDto (+23 more)
### Community 62 - "ProductDto"
Cohesion: 0.18
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### 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
@ -606,9 +620,9 @@ Nodes (3): app_module_1, supertest_1, testing_1
Cohesion: 0.17
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "PetsController"
Cohesion: 0.10
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
### Community 67 - "admin.module.ts"
Cohesion: 0.06
Nodes (20): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+12 more)
### Community 69 - "Required Review Group Closures"
Cohesion: 0.10
@ -620,7 +634,7 @@ Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx
### Community 71 - "getPageMetadata"
Cohesion: 0.09
Nodes (16): generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home(), generateMetadata(), generateMetadata() (+8 more)
Nodes (15): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata() (+7 more)
### Community 72 - "Operational Rules & Boundaries"
Cohesion: 0.11
@ -670,9 +684,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 - "ArchivePage.tsx"
Cohesion: 0.15
Nodes (13): CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, PetType, B2BInquiry, Banner, DosageConfig (+5 more)
### Community 85 - "HomeClient.tsx"
Cohesion: 0.11
Nodes (20): HomeClient(), HomeClientProps, ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps (+12 more)
### Community 86 - "zibal.service.ts"
Cohesion: 0.16
@ -682,45 +696,49 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
Cohesion: 0.12
Nodes (17): dependencies, axios, lucide-react, motion, next, react, react-dom, sonner (+9 more)
### Community 88 - "MetricsController"
Cohesion: 0.29
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
### Community 89 - "seed-products.ts"
Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "useSettingsStore"
Cohesion: 0.09
Nodes (29): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps, ContactInfoItem (+21 more)
Cohesion: 0.14
Nodes (18): AuthModal, CartDrawer, B2BLandingClient(), BrandLogo(), BrandLogoProps, EnamadBadge(), Footer(), MENU_ICONS (+10 more)
### Community 91 - "Reconciled Audit Roles & Assignments"
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)
### Community 92 - "OrdersService"
Cohesion: 0.10
Nodes (18): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+10 more)
### Community 92 - "OrdersController"
Cohesion: 0.14
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
### 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 - "blog/[slug]/page.tsx"
Cohesion: 0.23
Nodes (12): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), revalidate (+4 more)
### Community 95 - "wiki/[slug]/page.tsx"
Cohesion: 0.20
Nodes (16): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), generateMetadata() (+8 more)
### Community 96 - "compilerOptions"
Cohesion: 0.06
Nodes (32): compilerOptions, allowJs, esModuleInterop, incremental, isolatedModules, jsx, lib, module (+24 more)
### Community 97 - "SettingsService"
Cohesion: 0.09
Nodes (3): SmsLogQuery, SettingsService, Injectable
### Community 97 - "AdminLoginDto"
Cohesion: 0.29
Nodes (6): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength
### 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.15
Nodes (15): BlogsController, ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+7 more)
Cohesion: 0.08
Nodes (19): BlogsController, ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+11 more)
### Community 100 - "Deep Audit Summary Report"
Cohesion: 0.14
@ -750,13 +768,13 @@ Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (
Cohesion: 0.19
Nodes (9): ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaManager(), ProductItem, Media, PrescriptionsManager (+1 more)
### Community 107 - "WikiController"
Cohesion: 0.13
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
### Community 107 - "WholesaleApplyDto"
Cohesion: 0.29
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
### Community 108 - "PrismaService"
Cohesion: 0.08
Nodes (19): CategoryQuery, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto, UpdateContactInfoItemDto, MenuType (+11 more)
Cohesion: 0.07
Nodes (17): CategoryQuery, RevalidationService, Injectable, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto (+9 more)
### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -778,9 +796,9 @@ Nodes (10): 1. Pre-Deployment Checklist, 2. Build Verification, 3. Deployment St
Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 115 - "AuthService"
Cohesion: 0.14
Nodes (4): ApiErr, AuthResponse, AuthService, User
### Community 115 - "LoginDto"
Cohesion: 0.33
Nodes (5): LoginDto, ApiProperty, IsNotEmpty, IsString, MinLength
### Community 116 - "Vazirmatn Changelog"
Cohesion: 0.18
@ -810,9 +828,9 @@ Nodes (9): Compile and run the project, Deployment, Description, License, Projec
Cohesion: 0.16
Nodes (4): Delete, Param, AdminService, Injectable
### Community 123 - "CreateEBankCheckoutDto"
Cohesion: 0.22
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
### Community 123 - "app/page.tsx"
Cohesion: 0.67
Nodes (3): generateMetadata(), getHomeData(), Home()
### Community 124 - "Repository Map"
Cohesion: 0.20
@ -834,10 +852,6 @@ Nodes (9): Arch Linux, Contributors, Install, Known problems for variable versio
Cohesion: 0.11
Nodes (9): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Post, Put (+1 more)
### Community 129 - "InitiatePaymentDto"
Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 130 - "Sahel-Font"
Cohesion: 0.20
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
@ -902,13 +916,9 @@ Nodes (13): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiP
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 - "UserDashboard.tsx"
Cohesion: 0.10
Nodes (17): DeleteConfirmModal(), DeleteConfirmModalProps, OrderDetailsModal(), OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps (+9 more)
### Community 148 - "wiki/[slug]/page.tsx"
Cohesion: 0.60
Nodes (5): generateMetadata(), getRelatedProducts(), getWikiTerm(), WikiTermPage(), generateMedicalWebPageSchema()
### Community 147 - "components/Skeleton.tsx"
Cohesion: 0.21
Nodes (5): OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps
### Community 149 - "SmsSettingsPage.tsx"
Cohesion: 0.29
@ -919,12 +929,12 @@ 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 151 - "auth.service.ts"
Cohesion: 0.09
Nodes (17): AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, SendOtpDto, ApiProperty, IsNotEmpty (+9 more)
### Community 152 - "cartStore.ts"
Cohesion: 0.15
Nodes (8): ApiErr, Order, OrderItem, OrderService, CartItem, CartStore, Order, mockProduct
Nodes (14): AdminLoginInput, LoginInput, RegisterInput, SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches (+6 more)
### Community 152 - "lib/services/api.ts"
Cohesion: 0.06
Nodes (25): LoginModal, ContactInfoItem, LoginModal(), LoginModalProps, Testimonial, api, ApiErrorPayload, BASE_DOMAIN (+17 more)
### Community 153 - "exclude"
Cohesion: 0.22
@ -1020,7 +1030,7 @@ Nodes (5): نقشه جامع پوشش تست‌های سرتاسری (E2E Test C
### Community 179 - "PaginationDto"
Cohesion: 0.07
Nodes (20): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+12 more)
Nodes (29): BlogFilterDto, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString (+21 more)
### Community 180 - "API Contract Specification"
Cohesion: 0.50
@ -1039,8 +1049,8 @@ Cohesion: 0.50
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content)
### Community 184 - "RedisService"
Cohesion: 0.08
Nodes (12): ApiExcludeController, AppModule, Module, MetricsController, Controller, Get, Res, RedisModule (+4 more)
Cohesion: 0.16
Nodes (5): RedisModule, Global, Module, RedisService, Injectable
### Community 191 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
@ -1070,9 +1080,9 @@ Nodes (3): Select, SelectOption, SelectProps
Cohesion: 0.40
Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
### Community 199 - "auth.controller.ts"
Cohesion: 0.10
Nodes (19): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+11 more)
### Community 199 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 200 - "application/README.md"
Cohesion: 0.50
@ -1090,9 +1100,13 @@ Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Managem
Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 294 - "ZibalService"
Cohesion: 0.09
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
### Community 298 - ".initiateOrderPayment"
Cohesion: 0.20
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
Cohesion: 0.32
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
### Community 313 - "Modal.tsx"
Cohesion: 0.08
@ -1105,22 +1119,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps
- **1335 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1330 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **100 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **114 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `AuthController`, `PetsController`, `WikiController`, `HomeController`, `RevalidationService`, `UsersController`, `OrdersService`?**
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `AuthController`, `PetsController`, `HomeController`, `UsersService`, `ProductsService`, `PaginationDto`, `OrdersController`?**
_High betweenness centrality (0.086) - this node is a cross-community bridge._
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `SettingsController`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `RevalidationService`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`, `ContactService`?**
- **Why does `Roles()` connect `Roles` to `WholesaleService`, `B2BService`, `SettingsController`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ReviewsService`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`, `ContactService`, `payment.controller.ts`?**
_High betweenness centrality (0.067) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `PetsController`, `CmsController`, `tickets.controller.ts`, `auth.controller.ts`, `admin.module.ts`, `PetsController`, `DoctorQueryDto`, `admin.service.ts`, `PaginationDto`, `RevalidationService`, `CreateVideoDto`, `users.controller.ts`?**
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `admin.module.ts`, `CmsController`, `tickets.controller.ts`, `ReportsController`, `PetsController`, `DoctorQueryDto`, `admin.service.ts`, `UsersService`, `PaginationDto`, `CreateVideoDto`, `auth.service.ts`, `payment.controller.ts`?**
_High betweenness centrality (0.034) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1335 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06988120195667366 - nodes in this community are weakly interconnected._
_Cohesion score 0.06801346801346801 - nodes in this community are weakly interconnected._
- **Should `SettingsController` be split into smaller, more focused modules?**
_Cohesion score 0.09523809523809523 - nodes in this community are weakly interconnected._
- **Should `ProductService` be split into smaller, more focused modules?**
_Cohesion score 0.060515873015873016 - nodes in this community are weakly interconnected._
- **Should `SafeImage.tsx` be split into smaller, more focused modules?**
_Cohesion score 0.09462365591397849 - nodes in this community are weakly interconnected._
_Cohesion score 0.0707070707070707 - nodes in this community are weakly interconnected._

File diff suppressed because it is too large Load Diff

View File

@ -1,25 +1,25 @@
# Graph Report - canina (2026-08-26)
## Corpus Check
- 586 files · ~1,330,935 words
- 586 files · ~1,331,190 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 4104 nodes · 7380 edges · 324 communities (210 shown, 114 thin omitted)
- 4104 nodes · 7388 edges · 319 communities (205 shown, 114 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 281 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `9daaa226`
- Built from commit: `c825268b`
- 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
- SettingsController
- SmsService
- ProductService
- SafeImage.tsx
- ProductPage.tsx
- CmsController
- tickets.controller.ts
- Button.tsx
@ -29,15 +29,15 @@
- MediaSelector.tsx
- index.ts
- app-audit-verification.e2e-spec.js
- UserDashboard.tsx
- toPersian
- src/services/api.ts
- DoctorQueryDto
- schema.ts
- JwtAuthGuard
- ProductsService
- RevalidationService
- CreateVideoDto
- ProductPage.tsx
- PetProfile.tsx
- userStore.ts
- useCartStore
- MenuService
- BE-001
- FE-001
@ -50,7 +50,7 @@
- adminRoutes.tsx
- WholesaleService
- B2BService
- AuthController
- auth.service.ts
- FaqService
- راهنمای تست سیستم (Software Testing)
- Button
@ -75,15 +75,15 @@
- Role & Core Objective
- ContactService
- compilerOptions
- AuthService
- payment.controller.ts
- PaymentService
- payment.service.ts
- ProductDto
- dependencies
- compilerOptions
- app.e2e-spec.js
- AdminQueryDto
- admin.module.ts
- OrdersService
- CheckoutPage.tsx
- Required Review Group Closures
- compilerOptions
- getPageMetadata
@ -102,16 +102,16 @@
- HomeClient.tsx
- zibal.service.ts
- dependencies
- MetricsController
- CreateEBankCheckoutDto
- seed-products.ts
- useSettingsStore
- Reconciled Audit Roles & Assignments
- OrdersController
- OrdersService
- @nestjs/schematics
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
- wiki/[slug]/page.tsx
- blog/[slug]/page.tsx
- compilerOptions
- AdminLoginDto
- InitiatePaymentDto
- scripts
- BlogsController
- Deep Audit Summary Report
@ -127,9 +127,9 @@
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- Operational Rules & Boundaries
- SmsService
- videos/page.tsx
- AppService
- LoginDto
- @nestjs/swagger
- Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries
@ -143,7 +143,7 @@
- admin-panel/package.json
- Sahel-Font
- AdminController
- bcrypt
- globals
- Sahel-Font
- Role & Core Objective
- orchestrate.py
@ -165,7 +165,7 @@
- class-transformer
- SmsSettingsPage.tsx
- Product Requirement Document (PRD)
- auth.service.ts
- @types/react-dom
- lib/services/api.ts
- exclude
- Baseline Command Plan & Reconciled Command History
@ -189,8 +189,6 @@
- Phase 3 Audit Traceability Matrix
- rebuild_honest_ledger.js
- validate_evidence_grade.js
- CreateOrderDto
- SmsLogQueryDto
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- PaginationDto
- API Contract Specification
@ -212,7 +210,6 @@
- Select.tsx
- wiki/page.tsx
- @nestjs/core
- RegisterDto
- application/README.md
- deploy.sh
- 🔒 Security & Performance Review (09_devops_security)
@ -293,7 +290,6 @@
- Production Docker Compose
- Staging Docker Compose
- ZibalService
- eslint-plugin-react-refresh
- eslint-plugin-prettier
- ZibalEBankService
- .initiateOrderPayment
@ -319,12 +315,11 @@
- @types/js-yaml
- @types/supertest
- typescript-eslint
- eslint-config-next
## God Nodes (most connected - your core abstractions)
1. `Roles()` - 106 edges
2. `PrismaService` - 87 edges
3. `useSettingsStore` - 56 edges
3. `useSettingsStore` - 61 edges
4. `api` - 44 edges
5. `SmsService` - 43 edges
6. `PaginationDto` - 41 edges
@ -346,31 +341,31 @@
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
## Import Cycles
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
- 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 (324 total, 114 thin omitted)
## Communities (319 total, 114 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 (37): B2BModule, Module, BannersModule, Module, CmsModule, Module, RevalidationModule, Global (+29 more)
Cohesion: 0.08
Nodes (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more)
### Community 2 - "SettingsController"
Cohesion: 0.10
Nodes (18): SmsLogQuery, SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+10 more)
### Community 2 - "SmsService"
Cohesion: 0.05
Nodes (27): SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional (+19 more)
### Community 3 - "ProductService"
Cohesion: 0.07
Nodes (30): dynamic, revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory (+22 more)
Nodes (31): dynamic, revalidate, DEFAULT_CATEGORIES, dynamic, revalidate, dynamic, revalidate, BlogCategory (+23 more)
### Community 4 - "SafeImage.tsx"
Cohesion: 0.08
Nodes (21): BackButton(), BackButtonProps, ProductDetailModalProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal() (+13 more)
### Community 4 - "ProductPage.tsx"
Cohesion: 0.07
Nodes (29): revalidate, BackButton(), BackButtonProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal() (+21 more)
### Community 5 - "CmsController"
Cohesion: 0.09
@ -408,9 +403,9 @@ Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/
Cohesion: 0.06
Nodes (28): AppModule, Module, EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter (+20 more)
### Community 14 - "UserDashboard.tsx"
Cohesion: 0.08
Nodes (38): B2BPortal, VerifyContent(), AddressModal(), AddressModalProps, AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal() (+30 more)
### Community 14 - "toPersian"
Cohesion: 0.11
Nodes (19): CartDrawer, AuthModal(), AuthModalProps, extractOtpFromText(), BlogPost, BlogPreviewSection(), CartDrawer(), HeaderButton() (+11 more)
### Community 15 - "src/services/api.ts"
Cohesion: 0.08
@ -421,28 +416,28 @@ Cohesion: 0.09
Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more)
### Community 17 - "schema.ts"
Cohesion: 0.14
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
Cohesion: 0.15
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getRelatedProducts(), getWikiTerm(), WikiTermPage() (+10 more)
### Community 18 - "JwtAuthGuard"
Cohesion: 0.19
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 19 - "ProductsService"
Cohesion: 0.09
Nodes (19): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+11 more)
### Community 19 - "RevalidationService"
Cohesion: 0.07
Nodes (24): RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional, IsEnum (+16 more)
### Community 20 - "CreateVideoDto"
Cohesion: 0.07
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
### Community 21 - "ProductPage.tsx"
Cohesion: 0.14
Nodes (13): revalidate, CalculatorState, ICON_MAP, ProductPage(), ProductReviews, useCalculatorStore, ProductReviews(), ProductReviewsProps (+5 more)
### Community 22 - "PetProfile.tsx"
### Community 21 - "userStore.ts"
Cohesion: 0.11
Nodes (23): ClientLayout(), FeaturedProducts(), ProductCard(), Header(), OrderSuccess(), PrescriptionUploadModal(), PrescriptionUploadModalProps, SearchResultsPage() (+15 more)
Nodes (11): LoginModal, LoginModal(), LoginModalProps, ApiErr, AuthResponse, AuthService, User, Transaction (+3 more)
### Community 22 - "useCartStore"
Cohesion: 0.10
Nodes (27): ClientLayout(), VerifyContent(), FeaturedProducts(), ProductCard(), Header(), OrderSuccess(), OrderTracking(), PetProfile() (+19 more)
### Community 23 - "MenuService"
Cohesion: 0.11
@ -492,9 +487,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param,
Cohesion: 0.12
Nodes (16): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+8 more)
### Community 35 - "AuthController"
Cohesion: 0.25
Nodes (13): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+5 more)
### Community 35 - "auth.service.ts"
Cohesion: 0.06
Nodes (46): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+38 more)
### Community 36 - "FaqService"
Cohesion: 0.12
@ -550,11 +545,11 @@ Nodes (41): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), Auth
### Community 49 - "devDependencies"
Cohesion: 0.11
Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, globals, postcss, @types/node (+11 more)
Nodes (19): autoprefixer, eslint-plugin-react-refresh, devDependencies, autoprefixer, eslint, @eslint/js, eslint-plugin-react-refresh, postcss (+11 more)
### Community 50 - "devDependencies"
Cohesion: 0.13
Nodes (15): devDependencies, eslint, jsdom, tailwindcss, @tailwindcss/postcss, @types/node, @types/react-dom, @vitejs/plugin-react (+7 more)
Nodes (15): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, tailwindcss, @tailwindcss/postcss, @types/node (+7 more)
### Community 51 - "BlogsController"
Cohesion: 0.07
@ -592,13 +587,9 @@ Nodes (12): ContactController, Body, Controller, Get, Param, Post, Put, Query (+
Cohesion: 0.06
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
### Community 60 - "AuthService"
Cohesion: 0.21
Nodes (3): AuthService, Injectable, normalizeMobile()
### Community 61 - "payment.controller.ts"
Cohesion: 0.07
Nodes (31): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, CreateEBankCheckoutDto (+23 more)
### Community 61 - "payment.service.ts"
Cohesion: 0.20
Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata
### Community 62 - "ProductDto"
Cohesion: 0.18
@ -606,7 +597,7 @@ Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOpti
### Community 63 - "dependencies"
Cohesion: 0.09
Nodes (23): dependencies, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport, @nestjs/platform-express (+15 more)
Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more)
### Community 64 - "compilerOptions"
Cohesion: 0.10
@ -621,8 +612,12 @@ Cohesion: 0.17
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 67 - "admin.module.ts"
Cohesion: 0.06
Nodes (20): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+12 more)
Cohesion: 0.07
Nodes (19): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+11 more)
### Community 68 - "CheckoutPage.tsx"
Cohesion: 0.25
Nodes (12): AddressModal(), AddressModalProps, CheckoutPage(), SearchableSelect(), SearchableSelectProps, PRESET_AMOUNTS, TopUpModal(), TopUpModalProps (+4 more)
### Community 69 - "Required Review Group Closures"
Cohesion: 0.10
@ -686,7 +681,7 @@ Nodes (16): 1. Active Secret Scanning (All Modified Files), 2. Docker Container
### Community 85 - "HomeClient.tsx"
Cohesion: 0.11
Nodes (20): HomeClient(), HomeClientProps, ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps (+12 more)
Nodes (21): HomeClient(), HomeClientProps, ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps (+13 more)
### Community 86 - "zibal.service.ts"
Cohesion: 0.16
@ -696,49 +691,49 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
Cohesion: 0.12
Nodes (17): dependencies, axios, lucide-react, motion, next, react, react-dom, sonner (+9 more)
### Community 88 - "MetricsController"
Cohesion: 0.29
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
### Community 88 - "CreateEBankCheckoutDto"
Cohesion: 0.22
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
### Community 89 - "seed-products.ts"
Cohesion: 0.17
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
### Community 90 - "useSettingsStore"
Cohesion: 0.14
Nodes (18): AuthModal, CartDrawer, B2BLandingClient(), BrandLogo(), BrandLogoProps, EnamadBadge(), Footer(), MENU_ICONS (+10 more)
Cohesion: 0.15
Nodes (17): AuthModal, B2BPortal, B2BLandingClient(), B2BPortal(), BrandLogo(), BrandLogoProps, EnamadBadge(), Footer() (+9 more)
### Community 91 - "Reconciled Audit Roles & Assignments"
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)
### Community 92 - "OrdersController"
Cohesion: 0.14
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
### Community 92 - "OrdersService"
Cohesion: 0.06
Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more)
### 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"
Cohesion: 0.20
Nodes (16): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), generateMetadata() (+8 more)
### Community 95 - "blog/[slug]/page.tsx"
Cohesion: 0.28
Nodes (11): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), BlogPostClient() (+3 more)
### Community 96 - "compilerOptions"
Cohesion: 0.06
Nodes (32): compilerOptions, allowJs, esModuleInterop, incremental, isolatedModules, jsx, lib, module (+24 more)
### Community 97 - "AdminLoginDto"
Cohesion: 0.29
Nodes (6): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength
### Community 97 - "InitiatePaymentDto"
Cohesion: 0.43
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### 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.08
Nodes (19): BlogsController, ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+11 more)
Cohesion: 0.15
Nodes (15): BlogsController, ApiBearerAuth, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+7 more)
### Community 100 - "Deep Audit Summary Report"
Cohesion: 0.14
@ -774,7 +769,7 @@ Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, W
### Community 108 - "PrismaService"
Cohesion: 0.07
Nodes (17): CategoryQuery, RevalidationService, Injectable, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto (+9 more)
Nodes (20): CategoryQuery, WikiQuery, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, CreateContactSubmissionDto, UpdateContactInfoItemDto (+12 more)
### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17
@ -792,14 +787,14 @@ 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 - "videos/page.tsx"
Cohesion: 0.47
Nodes (5): generateMetadata(), getInitialVideos(), Videos(), VideosPage(), generateVideoObjectSchema()
### Community 114 - "AppService"
Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 115 - "LoginDto"
Cohesion: 0.33
Nodes (5): LoginDto, ApiProperty, IsNotEmpty, IsString, MinLength
### Community 116 - "Vazirmatn Changelog"
Cohesion: 0.18
Nodes (10): 32.0.0, 32.1, 32.101, 32.102, 33.000, 33.001, 33.002, 33.003 (+2 more)
@ -928,13 +923,9 @@ Nodes (7): PatternItem, SmsConfigState, SmsLogItem, SmsLogStats, SmsSettingsPage
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 151 - "auth.service.ts"
Cohesion: 0.15
Nodes (14): AdminLoginInput, LoginInput, RegisterInput, SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches (+6 more)
### Community 152 - "lib/services/api.ts"
Cohesion: 0.06
Nodes (25): LoginModal, ContactInfoItem, LoginModal(), LoginModalProps, Testimonial, api, ApiErrorPayload, BASE_DOMAIN (+17 more)
Cohesion: 0.08
Nodes (21): ContactInfoItem, DeleteConfirmModal(), DeleteConfirmModalProps, Testimonial, TestimonialsSection(), api, ApiErrorPayload, BASE_DOMAIN (+13 more)
### Community 153 - "exclude"
Cohesion: 0.22
@ -1016,21 +1007,13 @@ Nodes (4): evidenceList, ledger, mandatoryMap, mandatoryScope
Cohesion: 0.40
Nodes (4): activeFiles, errors, validationOutput, warnings
### Community 176 - "CreateOrderDto"
Cohesion: 0.22
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
### Community 177 - "SmsLogQueryDto"
Cohesion: 0.25
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### 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)
### Community 179 - "PaginationDto"
Cohesion: 0.07
Nodes (29): BlogFilterDto, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString (+21 more)
Cohesion: 0.06
Nodes (27): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+19 more)
### Community 180 - "API Contract Specification"
Cohesion: 0.50
@ -1049,8 +1032,8 @@ Cohesion: 0.50
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content)
### Community 184 - "RedisService"
Cohesion: 0.16
Nodes (5): RedisModule, Global, Module, RedisService, Injectable
Cohesion: 0.07
Nodes (13): ApiExcludeController, AuthService, Injectable, MetricsController, Controller, Get, Res, normalizeMobile() (+5 more)
### Community 191 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50
@ -1080,10 +1063,6 @@ Nodes (3): Select, SelectOption, SelectProps
Cohesion: 0.40
Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
### Community 199 - "RegisterDto"
Cohesion: 0.22
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
### Community 200 - "application/README.md"
Cohesion: 0.50
Nodes (3): Deploy on Vercel, Getting Started, Learn More
@ -1100,13 +1079,9 @@ Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Managem
Cohesion: 0.67
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
### Community 294 - "ZibalService"
Cohesion: 0.09
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
### Community 298 - ".initiateOrderPayment"
Cohesion: 0.32
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
Cohesion: 0.18
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
### Community 313 - "Modal.tsx"
Cohesion: 0.08
@ -1124,17 +1099,17 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `AuthController`, `PetsController`, `HomeController`, `UsersService`, `ProductsService`, `PaginationDto`, `OrdersController`?**
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `auth.service.ts`, `PetsController`, `HomeController`, `UsersService`, `RevalidationService`, `PaginationDto`, `OrdersService`?**
_High betweenness centrality (0.086) - this node is a cross-community bridge._
- **Why does `Roles()` connect `Roles` to `WholesaleService`, `B2BService`, `SettingsController`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ReviewsService`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`, `ContactService`, `payment.controller.ts`?**
- **Why does `Roles()` connect `Roles` to `WholesaleService`, `B2BService`, `SmsService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ReviewsService`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `RevalidationService`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`, `ContactService`, `PaymentService`?**
_High betweenness centrality (0.067) - this node is a cross-community bridge._
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `admin.module.ts`, `CmsController`, `tickets.controller.ts`, `ReportsController`, `PetsController`, `DoctorQueryDto`, `admin.service.ts`, `UsersService`, `PaginationDto`, `CreateVideoDto`, `auth.service.ts`, `payment.controller.ts`?**
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `admin.module.ts`, `auth.service.ts`, `CmsController`, `tickets.controller.ts`, `PetsController`, `DoctorQueryDto`, `admin.service.ts`, `UsersService`, `PaginationDto`, `RevalidationService`, `CreateVideoDto`, `OrdersService`?**
_High betweenness centrality (0.034) - this node is a cross-community bridge._
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
_1335 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `app.module.ts` be split into smaller, more focused modules?**
_Cohesion score 0.06801346801346801 - nodes in this community are weakly interconnected._
- **Should `SettingsController` be split into smaller, more focused modules?**
_Cohesion score 0.09523809523809523 - nodes in this community are weakly interconnected._
_Cohesion score 0.07529411764705882 - nodes in this community are weakly interconnected._
- **Should `SmsService` be split into smaller, more focused modules?**
_Cohesion score 0.05287128712871287 - nodes in this community are weakly interconnected._
- **Should `ProductService` be split into smaller, more focused modules?**
_Cohesion score 0.0707070707070707 - nodes in this community are weakly interconnected._
_Cohesion score 0.06654567453115548 - 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