feat(financial): add enable/disable toggle for shelter animal charity and round-up donation
Some checks failed
E2E Playwright Tests / Run Full E2E & Security Suites (push) Waiting to run
Deploy Canina / deploy (push) Has been cancelled

This commit is contained in:
parsa aghaei 2026-09-13 09:41:56 +03:30
parent e7ded849f6
commit 204350eff8
18 changed files with 11235 additions and 11034 deletions

View File

@ -20,6 +20,7 @@ export const DEFAULT_UI_TEXTS: Record<string, string> = {
CATALOG_SHOW_ORDERS: 'false', CATALOG_SHOW_ORDERS: 'false',
CATALOG_SHOW_WALLET: 'false', CATALOG_SHOW_WALLET: 'false',
CATALOG_SHOW_CHARITY: 'false', CATALOG_SHOW_CHARITY: 'false',
CHARITY_DONATION_ENABLED: 'true',
PRESCRIPTION_UPLOAD_ENABLED: 'true', PRESCRIPTION_UPLOAD_ENABLED: 'true',
ORDER_DISABLED_TITLE: 'امکان ثبت سفارش آنلاین موقتاً غیرفعال است', ORDER_DISABLED_TITLE: 'امکان ثبت سفارش آنلاین موقتاً غیرفعال است',
ORDER_DISABLED_MESSAGE: ORDER_DISABLED_MESSAGE:

View File

@ -100,6 +100,10 @@ export const CANONICAL_ALIASES: Record<string, string[]> = {
charity_round_step: ['CHARITY_ROUND_STEP', 'charityRoundStep'], charity_round_step: ['CHARITY_ROUND_STEP', 'charityRoundStep'],
charityRoundStep: ['CHARITY_ROUND_STEP', 'charity_round_step'], charityRoundStep: ['CHARITY_ROUND_STEP', 'charity_round_step'],
CHARITY_DONATION_ENABLED: ['charity_donation_enabled', 'charityDonationEnabled'],
charity_donation_enabled: ['CHARITY_DONATION_ENABLED', 'charityDonationEnabled'],
charityDonationEnabled: ['CHARITY_DONATION_ENABLED', 'charity_donation_enabled'],
// Zibal Gateway & Tokens // Zibal Gateway & Tokens
ZIBAL_EBANK_TOKEN: [ ZIBAL_EBANK_TOKEN: [
'zibal_ebank_token', 'zibal_ebank_token',
@ -344,6 +348,10 @@ export class SettingsService implements OnModuleInit {
map.get('charityRoundStep') || map.get('charityRoundStep') ||
'10000', '10000',
); );
const charityDonationEnabled =
map.get('CHARITY_DONATION_ENABLED') !== 'false' &&
map.get('charity_donation_enabled') !== 'false' &&
map.get('charityDonationEnabled') !== 'false';
const walletWithdrawalEnabled = const walletWithdrawalEnabled =
map.get('walletWithdrawalEnabled') === 'true'; map.get('walletWithdrawalEnabled') === 'true';
@ -354,6 +362,7 @@ export class SettingsService implements OnModuleInit {
taxPercentage, taxPercentage,
b2bDiscountPercent, b2bDiscountPercent,
charityRoundStep, charityRoundStep,
charityDonationEnabled,
charityDonationOptions: [10000, 20000, 50000], charityDonationOptions: [10000, 20000, 50000],
walletWithdrawalEnabled, walletWithdrawalEnabled,
}; };
@ -397,6 +406,12 @@ export class SettingsService implements OnModuleInit {
updates['charity_round_step'] = String(data.charityRoundStep); updates['charity_round_step'] = String(data.charityRoundStep);
updates['charityRoundStep'] = String(data.charityRoundStep); updates['charityRoundStep'] = String(data.charityRoundStep);
} }
if (data.charityDonationEnabled !== undefined) {
const boolStr = String(data.charityDonationEnabled);
updates['CHARITY_DONATION_ENABLED'] = boolStr;
updates['charity_donation_enabled'] = boolStr;
updates['charityDonationEnabled'] = boolStr;
}
if (data.walletWithdrawalEnabled !== undefined) { if (data.walletWithdrawalEnabled !== undefined) {
updates['walletWithdrawalEnabled'] = String(data.walletWithdrawalEnabled); updates['walletWithdrawalEnabled'] = String(data.walletWithdrawalEnabled);
} }

View File

@ -18,6 +18,7 @@ export default function FinancialSettingsPage() {
walletWithdrawalEnabled: false, walletWithdrawalEnabled: false,
}); });
const [charityStep, setCharityStep] = useState('10000'); const [charityStep, setCharityStep] = useState('10000');
const [charityEnabled, setCharityEnabled] = useState(true);
const [refillEnabled, setRefillEnabled] = useState(false); const [refillEnabled, setRefillEnabled] = useState(false);
const [refillPercent, setRefillPercent] = useState('5'); const [refillPercent, setRefillPercent] = useState('5');
@ -53,11 +54,18 @@ export default function FinancialSettingsPage() {
charityDonationOptions: Array.isArray(data.charityDonationOptions) charityDonationOptions: Array.isArray(data.charityDonationOptions)
? data.charityDonationOptions.map(Number) ? data.charityDonationOptions.map(Number)
: [10000, 20000, 50000], : [10000, 20000, 50000],
charityDonationEnabled: Boolean(data.charityDonationEnabled ?? true),
walletWithdrawalEnabled: Boolean(data.walletWithdrawalEnabled ?? false), walletWithdrawalEnabled: Boolean(data.walletWithdrawalEnabled ?? false),
}); });
if (data.charityDonationEnabled !== undefined) {
setCharityEnabled(Boolean(data.charityDonationEnabled));
}
} }
if (resAdmin.data?.success) { if (resAdmin.data?.success) {
setCharityStep(resAdmin.data.data.CHARITY_ROUND_STEP || '10000'); setCharityStep(resAdmin.data.data.CHARITY_ROUND_STEP || '10000');
if (resAdmin.data.data.CHARITY_DONATION_ENABLED !== undefined) {
setCharityEnabled(resAdmin.data.data.CHARITY_DONATION_ENABLED !== 'false');
}
setRefillEnabled(resAdmin.data.data.REFILL_SUBSCRIPTION_ENABLED === 'true'); setRefillEnabled(resAdmin.data.data.REFILL_SUBSCRIPTION_ENABLED === 'true');
setRefillPercent(resAdmin.data.data.REFILL_REWARD_PERCENT || '5'); setRefillPercent(resAdmin.data.data.REFILL_REWARD_PERCENT || '5');
} }
@ -87,10 +95,14 @@ export default function FinancialSettingsPage() {
try { try {
setIsSaving(true); setIsSaving(true);
const [, , resPricing] = await Promise.all([ const [, , resPricing] = await Promise.all([
api.patch('/settings/financial', financial), api.patch('/settings/financial', {
...financial,
charityDonationEnabled: charityEnabled,
}),
api.put('/admin/settings', { api.put('/admin/settings', {
TAX_PERCENTAGE: String(financial.taxPercentage), TAX_PERCENTAGE: String(financial.taxPercentage),
CHARITY_ROUND_STEP: charityStep, CHARITY_ROUND_STEP: charityStep,
CHARITY_DONATION_ENABLED: charityEnabled ? 'true' : 'false',
REFILL_SUBSCRIPTION_ENABLED: refillEnabled ? 'true' : 'false', REFILL_SUBSCRIPTION_ENABLED: refillEnabled ? 'true' : 'false',
REFILL_REWARD_PERCENT: refillPercent, REFILL_REWARD_PERCENT: refillPercent,
}), }),
@ -168,63 +180,91 @@ export default function FinancialSettingsPage() {
<p className="text-xs text-gray-500 mt-1">درصد قانونی محاسبه مالیات بر ارزش افزوده در فاکتور نهایی سفارشات.</p> <p className="text-xs text-gray-500 mt-1">درصد قانونی محاسبه مالیات بر ارزش افزوده در فاکتور نهایی سفارشات.</p>
</div> </div>
{/* Charity Round Step */} {/* Charity Donation Toggle & Step */}
<div> <div className="md:col-span-2 p-5 bg-rose-50/50 rounded-2xl border border-rose-100 space-y-4">
<label className="block text-sm font-bold text-gray-700 mb-1.5 flex items-center gap-1.5"> <label className="flex items-center justify-between cursor-pointer">
<Heart className="w-4 h-4 text-rose-500" /> <div className="flex items-start gap-3">
<span>پله رند کردن کمک به خیریه ردپای مهربانی (تومان)</span> <input
type="checkbox"
checked={charityEnabled}
onChange={(e) => setCharityEnabled(e.target.checked)}
className="w-5 h-5 mt-0.5 rounded-lg text-rose-600 focus:ring-rose-500 border-gray-300 cursor-pointer"
/>
<div>
<span className="text-sm font-black text-gray-900 block flex items-center gap-2">
<Heart className="w-4 h-4 text-rose-500 fill-rose-500" />
فعالسازی طرح ردپای مهربانی (کمک داوطلبانه به پناهگاه حیوانات)
</span>
<span className="text-xs text-gray-500 font-medium block mt-1">
در صورت غیرفعال بودن، بخش رند کردن فاکتور، مشارکت در خیریه و ردپای مهربانی به طور کامل از تسویهحساب و بخشهای مختلف سایت مخفی میشود.
</span>
</div>
</div>
</label> </label>
<PriceInput
value={charityStep} {charityEnabled && (
onChange={(val) => setCharityStep(val)} <div className="pt-4 border-t border-rose-100/80 grid grid-cols-1 md:grid-cols-2 gap-4">
placeholder="10000" <div>
className="px-4 py-3 rounded-xl border border-gray-200 focus:border-emerald-500 text-sm" <label className="block text-sm font-bold text-gray-700 mb-1.5 flex items-center gap-1.5">
/> <Heart className="w-4 h-4 text-rose-500" />
<p className="text-xs text-gray-500 mt-1">مبلغ فاکتور به نزدیکترین ضریب این عدد (مثلاً ۱۰,۰۰۰ یا ۵۰,۰۰۰ تومان) رند میگردد.</p> <span>پله رند کردن کمک به خیریه ردپای مهربانی (تومان)</span>
</label>
<PriceInput
value={charityStep}
onChange={(val) => setCharityStep(val)}
placeholder="10000"
className="px-4 py-3 rounded-xl border border-gray-200 focus:border-rose-500 text-sm bg-white"
/>
<p className="text-xs text-gray-500 mt-1">مبلغ فاکتور به نزدیکترین ضریب این عدد (مثلاً ۱۰,۰۰۰ یا ۵۰,۰۰۰ تومان) رند میگردد.</p>
</div>
</div>
)}
</div> </div>
{/* Charity Donation Options */} {/* Charity Donation Options */}
<div className="md:col-span-2 space-y-2 pt-3 border-t border-gray-100"> {charityEnabled && (
<label className="block text-sm font-bold text-gray-700 mb-1 flex items-center gap-1.5"> <div className="md:col-span-2 space-y-2 pt-3 border-t border-gray-100">
<Heart className="w-4 h-4 text-rose-500" /> <label className="block text-sm font-bold text-gray-700 mb-1 flex items-center gap-1.5">
<span>گزینههای دلخواه کمک مستقیم به خیریه (charityDonationOptions)</span> <Heart className="w-4 h-4 text-rose-500" />
</label> <span>گزینههای دلخواه کمک مستقیم به خیریه (charityDonationOptions)</span>
<div className="flex gap-2 max-w-md"> </label>
<PriceInput <div className="flex gap-2 max-w-md">
placeholder="مبلغ جدید (مثال: ۱۰۰,۰۰۰)" <PriceInput
value={donationInput} placeholder="مبلغ جدید (مثال: ۱۰۰,۰۰۰)"
onChange={(val) => setDonationInput(val)} value={donationInput}
className="px-4 py-2 rounded-xl border border-gray-200 text-xs" onChange={(val) => setDonationInput(val)}
/> className="px-4 py-2 rounded-xl border border-gray-200 text-xs"
<Button />
type="button" <Button
variant="primary" type="button"
size="xs" variant="primary"
startIcon={Plus} size="xs"
onClick={addDonationOption} startIcon={Plus}
> onClick={addDonationOption}
افزودن
</Button>
</div>
<div className="flex flex-wrap gap-2 pt-2">
{financial.charityDonationOptions.map((amount) => (
<span
key={amount}
className="inline-flex items-center gap-1.5 px-3 py-1.5 bg-rose-50 text-rose-700 text-xs font-bold rounded-xl border border-rose-200"
> >
{amount.toLocaleString('fa-IR')} تومان افزودن
<button </Button>
type="button" </div>
onClick={() => removeDonationOption(amount)}
className="hover:text-red-500 cursor-pointer" <div className="flex flex-wrap gap-2 pt-2">
{financial.charityDonationOptions.map((amount) => (
<span
key={amount}
className="inline-flex items-center gap-1.5 px-3 py-1.5 bg-rose-50 text-rose-700 text-xs font-bold rounded-xl border border-rose-200"
> >
<X className="w-3.5 h-3.5" /> {amount.toLocaleString('fa-IR')} تومان
</button> <button
</span> type="button"
))} onClick={() => removeDonationOption(amount)}
className="hover:text-red-500 cursor-pointer"
>
<X className="w-3.5 h-3.5" />
</button>
</span>
))}
</div>
</div> </div>
</div> )}
{/* Refill Subscription and Reward Cashback */} {/* Refill Subscription and Reward Cashback */}
<div className="md:col-span-2 pt-4 border-t border-gray-100 space-y-4"> <div className="md:col-span-2 pt-4 border-t border-gray-100 space-y-4">

View File

@ -198,6 +198,7 @@ export interface FinancialSettings {
freeShippingThreshold: number; freeShippingThreshold: number;
standardShippingFee: number; standardShippingFee: number;
charityDonationOptions: number[]; charityDonationOptions: number[];
charityDonationEnabled?: boolean;
walletWithdrawalEnabled?: boolean; walletWithdrawalEnabled?: boolean;
} }

View File

@ -34,6 +34,7 @@ import api from "../lib/services/api";
export default function CheckoutPage() { export default function CheckoutPage() {
const router = useRouter(); const router = useRouter();
const { showPrices } = useCatalogMode();
const { items, getTotal, getSubtotal, isSubscribed, charityDonation, setCharityDonation, addOrder, clearCart } = useCartStore(); const { items, getTotal, getSubtotal, isSubscribed, charityDonation, setCharityDonation, addOrder, clearCart } = useCartStore();
const { pets, activePetId, getActivePet, updatePet } = usePetStore(); const { pets, activePetId, getActivePet, updatePet } = usePetStore();
const { profile, isLoggedIn } = useUserStore(); const { profile, isLoggedIn } = useUserStore();
@ -90,6 +91,12 @@ export default function CheckoutPage() {
}); });
}, [isLoggedIn, profile]); }, [isLoggedIn, profile]);
const isCharityEnabled = useSettingsStore((state) =>
state.getBoolean('CHARITY_DONATION_ENABLED', true) &&
state.getBoolean('charity_donation_enabled', true) &&
state.getBoolean('charityDonationEnabled', true)
);
const roundStep = Number(useSettingsStore((state) => state.getText('CHARITY_ROUND_STEP', '10000'))) || 10000; const roundStep = Number(useSettingsStore((state) => state.getText('CHARITY_ROUND_STEP', '10000'))) || 10000;
const shippingFeeSetting = useSettingsStore((state) => state.getText('shipping_fee', '0')); const shippingFeeSetting = useSettingsStore((state) => state.getText('shipping_fee', '0'));
const baseShippingFee = Number(shippingFeeSetting) || 0; const baseShippingFee = Number(shippingFeeSetting) || 0;
@ -106,7 +113,10 @@ export default function CheckoutPage() {
const remainder = subtotal % roundStep; const remainder = subtotal % roundStep;
const roundUpDiff = remainder === 0 ? roundStep : roundStep - remainder; const roundUpDiff = remainder === 0 ? roundStep : roundStep - remainder;
const effectiveCharityDonation = isCharityEnabled ? charityDonation : 0;
const handleCharityToggle = () => { const handleCharityToggle = () => {
if (!isCharityEnabled) return;
if (!useRoundUp) { if (!useRoundUp) {
setCharityDonation(roundUpDiff); setCharityDonation(roundUpDiff);
setUseRoundUp(true); setUseRoundUp(true);
@ -218,7 +228,7 @@ export default function CheckoutPage() {
const orderId = await addOrder({ const orderId = await addOrder({
items: [...items], items: [...items],
total: totalAmount, total: totalAmount,
charityDonation: charityDonation, charityDonation: effectiveCharityDonation,
paymentMethod: paymentMethod, paymentMethod: paymentMethod,
isRefill: isSubscribed, isRefill: isSubscribed,
petId: selectedPetId || undefined, petId: selectedPetId || undefined,
@ -732,27 +742,29 @@ export default function CheckoutPage() {
</section> </section>
{/* Charity Donation Banner (Compact) */} {/* Charity Donation Banner (Compact) */}
<section className="bg-pink-50/70 border border-pink-200/80 rounded-2xl p-3.5 flex items-center justify-between gap-3"> {showPrices && isCharityEnabled && (
<div className="flex items-center gap-2.5"> <section className="bg-pink-50/70 border border-pink-200/80 rounded-2xl p-3.5 flex items-center justify-between gap-3">
<div className="w-8 h-8 bg-pink-500 text-white rounded-xl flex items-center justify-center shrink-0"> <div className="flex items-center gap-2.5">
<Heart className="w-4 h-4 fill-white" /> <div className="w-8 h-8 bg-pink-500 text-white rounded-xl flex items-center justify-center shrink-0">
<Heart className="w-4 h-4 fill-white" />
</div>
<div>
<h4 className="text-xs font-bold text-medical-gray-900">کمک به حیوانات پناهگاه (ردپای مهربانی)</h4>
<p className="text-[10px] text-medical-gray-500">رند کردن مبلغ فاکتور تا {toPersian(roundStep.toLocaleString())} تومان بعدی</p>
</div>
</div> </div>
<div> <button
<h4 className="text-xs font-bold text-medical-gray-900">کمک به حیوانات پناهگاه (ردپای مهربانی)</h4> type="button"
<p className="text-[10px] text-medical-gray-500">رند کردن مبلغ فاکتور تا {toPersian(roundStep.toLocaleString())} تومان بعدی</p> onClick={handleCharityToggle}
</div> className={cn(
</div> "px-3 py-1.5 rounded-xl text-xs font-bold transition-all shrink-0 cursor-pointer",
<button useRoundUp ? "bg-pink-500 text-white shadow-xs" : "bg-white text-pink-600 border border-pink-200 hover:bg-pink-50"
type="button" )}
onClick={handleCharityToggle} >
className={cn( {useRoundUp ? `اهدای ${toPersian(charityDonation.toLocaleString())} ت` : 'مشارکت در خیریه'}
"px-3 py-1.5 rounded-xl text-xs font-bold transition-all shrink-0 cursor-pointer", </button>
useRoundUp ? "bg-pink-500 text-white shadow-xs" : "bg-white text-pink-600 border border-pink-200 hover:bg-pink-50" </section>
)} )}
>
{useRoundUp ? `اهدای ${toPersian(charityDonation.toLocaleString())} ت` : 'مشارکت در خیریه'}
</button>
</section>
</div> </div>
{/* Sticky Order Summary Sidebar (4 cols) */} {/* Sticky Order Summary Sidebar (4 cols) */}
@ -792,7 +804,7 @@ export default function CheckoutPage() {
</div> </div>
)} )}
{charityDonation > 0 && ( {isCharityEnabled && charityDonation > 0 && (
<div className="flex justify-between text-pink-400 font-bold"> <div className="flex justify-between text-pink-400 font-bold">
<span>ردپای مهربانی</span> <span>ردپای مهربانی</span>
<span className="font-vazir">{toPersian(charityDonation.toLocaleString())} تومان+</span> <span className="font-vazir">{toPersian(charityDonation.toLocaleString())} تومان+</span>

View File

@ -30,6 +30,7 @@ import {
} from "lucide-react"; } from "lucide-react";
import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog } from "../lib/store/usePetStore"; import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog } from "../lib/store/usePetStore";
import { useCartStore } from "../lib/store/cartStore"; import { useCartStore } from "../lib/store/cartStore";
import { useSettingsStore } from "../lib/store/settingsStore";
import SmartAdvisor from "./SmartAdvisor"; import SmartAdvisor from "./SmartAdvisor";
import OrderDetailsModal from "./OrderDetailsModal"; import OrderDetailsModal from "./OrderDetailsModal";
import { toast } from "sonner"; import { toast } from "sonner";
@ -47,6 +48,12 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const { pets, addPet, removePet, setActivePet, getActivePet, updatePet, addReminder, toggleReminder, addHealthLog } = usePetStore(); const { pets, addPet, removePet, setActivePet, getActivePet, updatePet, addReminder, toggleReminder, addHealthLog } = usePetStore();
const { orders } = useCartStore(); const { orders } = useCartStore();
const isCharityEnabled = useSettingsStore(
(state) =>
state.getBoolean("CHARITY_DONATION_ENABLED", true) &&
state.getBoolean("charity_donation_enabled", true) &&
state.getBoolean("charityDonationEnabled", true)
);
const activePet = getActivePet(); const activePet = getActivePet();
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
const [products, setProducts] = useState<Product[]>([]); const [products, setProducts] = useState<Product[]>([]);
@ -855,7 +862,7 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
</div> </div>
{/* Profile Card */} {/* Profile Card */}
<section className="grid lg:grid-cols-3 gap-8"> <section className={cn("grid gap-8", isCharityEnabled ? "lg:grid-cols-3" : "lg:grid-cols-3")}>
<div className="lg:col-span-2 bg-white rounded-[3.5rem] p-10 border border-medical-gray-200 shadow-xl flex flex-col md:flex-row gap-10 items-center relative overflow-hidden"> <div className="lg:col-span-2 bg-white rounded-[3.5rem] p-10 border border-medical-gray-200 shadow-xl flex flex-col md:flex-row gap-10 items-center relative overflow-hidden">
<div className="absolute top-0 left-0 w-32 h-32 bg-canina-blue/5 rounded-full blur-[60px] -translate-x-1/2 -translate-y-1/2" /> <div className="absolute top-0 left-0 w-32 h-32 bg-canina-blue/5 rounded-full blur-[60px] -translate-x-1/2 -translate-y-1/2" />
@ -899,7 +906,7 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
</div> </div>
</div> </div>
<div className="bg-canina-blue rounded-[3.5rem] p-10 text-white flex flex-col justify-between relative overflow-hidden shadow-2xl group"> <div className={cn("bg-canina-blue rounded-[3.5rem] p-10 text-white flex flex-col justify-between relative overflow-hidden shadow-2xl group", !isCharityEnabled && "lg:col-span-1")}>
<div className="absolute top-0 right-0 p-8 opacity-20 group-hover:rotate-12 transition-transform duration-700"> <div className="absolute top-0 right-0 p-8 opacity-20 group-hover:rotate-12 transition-transform duration-700">
<Activity className="w-16 h-16 text-white" /> <Activity className="w-16 h-16 text-white" />
</div> </div>
@ -921,43 +928,45 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
</div> </div>
{/* Kindness Footprint Widget for Pet */} {/* Kindness Footprint Widget for Pet */}
<div className="bg-pink-50 rounded-[3.5rem] p-10 border border-pink-100 relative overflow-hidden flex flex-col justify-between"> {isCharityEnabled && (
<div className="absolute -bottom-8 -left-8 opacity-5"> <div className="bg-pink-50 rounded-[3.5rem] p-10 border border-pink-100 relative overflow-hidden flex flex-col justify-between">
<Heart className="w-48 h-48 fill-pink-500" /> <div className="absolute -bottom-8 -left-8 opacity-5">
</div> <Heart className="w-48 h-48 fill-pink-500" />
<div className="flex items-center gap-4 mb-6">
<div className="w-12 h-12 bg-pink-500 rounded-2xl flex items-center justify-center text-white shadow-lg shadow-pink-100">
<Heart className="w-6 h-6 fill-white" />
</div> </div>
<div> <div className="flex items-center gap-4 mb-6">
<h3 className="text-xl font-black text-medical-gray-900 italic">ردپای مهربانی {activePet.name}</h3> <div className="w-12 h-12 bg-pink-500 rounded-2xl flex items-center justify-center text-white shadow-lg shadow-pink-100">
<p className="text-[10px] font-black text-pink-500 uppercase tracking-widest mt-1">سفیر مهربانی: {activePet.name}</p> <Heart className="w-6 h-6 fill-white" />
</div> </div>
</div> <div>
<div className="space-y-4 relative z-10"> <h3 className="text-xl font-black text-medical-gray-900 italic">ردپای مهربانی {activePet.name}</h3>
<div className="bg-white/90 backdrop-blur-sm rounded-2xl p-4 border border-pink-100 space-y-2.5"> <p className="text-[10px] font-black text-pink-500 uppercase tracking-widest mt-1">سفیر مهربانی: {activePet.name}</p>
<div className="flex items-center justify-between">
<span className="text-xs font-bold text-medical-gray-500">کمک اهدایی با نام {activePet.name}:</span>
<span className="text-sm font-black text-pink-600 font-mono">
{toPersian(petCharityTotal.toLocaleString())} <span className="text-[10px] font-normal">تومان</span>
</span>
</div> </div>
{allCharityTotal > 0 && (
<div className="flex items-center justify-between text-[11px] font-bold text-medical-gray-400 pt-2 border-t border-pink-50">
<span>مجموع مهربانی کل حساب:</span>
<span>{toPersian(allCharityTotal.toLocaleString())} تومان</span>
</div>
)}
</div> </div>
<p className="text-xs text-medical-gray-600 font-medium leading-relaxed"> <div className="space-y-4 relative z-10">
{petCharityTotal > 0 ? ( <div className="bg-white/90 backdrop-blur-sm rounded-2xl p-4 border border-pink-100 space-y-2.5">
<>«{activePet.name}» با خریدهای مکمل خود تا کنون <strong className="text-pink-600">{toPersian(petCharityTotal.toLocaleString())} تومان</strong> به درمان و تغذیه حیوانات نیازمند پناهگاهی کمک کرده است.</> <div className="flex items-center justify-between">
) : ( <span className="text-xs font-bold text-medical-gray-500">کمک اهدایی با نام {activePet.name}:</span>
<>با هر خرید برای «{activePet.name}» میتوانید با انتخاب گزینه ردپای مهربانی، مبلغی را به نام او به پناهگاههای حیوانات اختصاص دهید.</> <span className="text-sm font-black text-pink-600 font-mono">
)} {toPersian(petCharityTotal.toLocaleString())} <span className="text-[10px] font-normal">تومان</span>
</p> </span>
</div>
{allCharityTotal > 0 && (
<div className="flex items-center justify-between text-[11px] font-bold text-medical-gray-400 pt-2 border-t border-pink-50">
<span>مجموع مهربانی کل حساب:</span>
<span>{toPersian(allCharityTotal.toLocaleString())} تومان</span>
</div>
)}
</div>
<p className="text-xs text-medical-gray-600 font-medium leading-relaxed">
{petCharityTotal > 0 ? (
<>«{activePet.name}» با خریدهای مکمل خود تا کنون <strong className="text-pink-600">{toPersian(petCharityTotal.toLocaleString())} تومان</strong> به درمان و تغذیه حیوانات نیازمند پناهگاهی کمک کرده است.</>
) : (
<>با هر خرید برای «{activePet.name}» میتوانید با انتخاب گزینه ردپای مهربانی، مبلغی را به نام او به پناهگاههای حیوانات اختصاص دهید.</>
)}
</p>
</div>
</div> </div>
</div> )}
</section> </section>
{/* Refill & Stock Tracking */} {/* Refill & Stock Tracking */}

View File

@ -32,9 +32,16 @@ export function useCatalogMode() {
? getBoolean("CATALOG_SHOW_WALLET", false) || getBoolean("catalog_show_wallet", false) ? getBoolean("CATALOG_SHOW_WALLET", false) || getBoolean("catalog_show_wallet", false)
: true; : true;
const showCharity = isCatalogOnly const isCharityGlobalEnabled =
? getBoolean("CATALOG_SHOW_CHARITY", false) || getBoolean("catalog_show_charity", false) getBoolean("CHARITY_DONATION_ENABLED", true) &&
: true; getBoolean("charity_donation_enabled", true) &&
getBoolean("charityDonationEnabled", true);
const showCharity = isCharityGlobalEnabled && (
isCatalogOnly
? getBoolean("CATALOG_SHOW_CHARITY", false) || getBoolean("catalog_show_charity", false)
: true
);
const orderDisabledTitle = getText( const orderDisabledTitle = getText(
"ORDER_DISABLED_TITLE", "ORDER_DISABLED_TITLE",

View File

@ -1,13 +1,13 @@
{ {
"0": "Roles", "0": "Roles",
"1": "app.module.ts", "1": "app.module.ts",
"2": "ApiKeysService", "2": "ApiResponse",
"3": "productService.ts", "3": "productService.ts",
"4": "HomeClient.tsx", "4": "HomeClient.tsx",
"5": "CmsController", "5": "CmsController",
"6": "tickets.controller.ts", "6": "tickets.controller.ts",
"7": "SmsSettingsPage.tsx", "7": "SmsSettingsPage.tsx",
"8": "SettingsService", "8": "SmsService",
"9": "devDependencies", "9": "devDependencies",
"10": "CreateReviewDto", "10": "CreateReviewDto",
"11": "UsersService", "11": "UsersService",
@ -18,7 +18,7 @@
"16": "DoctorQueryDto", "16": "DoctorQueryDto",
"17": "schema.ts", "17": "schema.ts",
"18": "JwtAuthGuard", "18": "JwtAuthGuard",
"19": "BulkPriceAdjustmentDto", "19": "admin.service.ts",
"20": "CreateVideoDto", "20": "CreateVideoDto",
"21": "useSettingsStore", "21": "useSettingsStore",
"22": "AdminService", "22": "AdminService",
@ -32,7 +32,7 @@
"30": "DEVOPS-001", "30": "DEVOPS-001",
"31": "DOC-001", "31": "DOC-001",
"32": "adminRoutes.tsx", "32": "adminRoutes.tsx",
"33": "WholesaleApplyDto", "33": "WholesaleService",
"34": "B2BService", "34": "B2BService",
"35": "ContactService", "35": "ContactService",
"36": "FaqService", "36": "FaqService",
@ -45,7 +45,7 @@
"43": "BannersService", "43": "BannersService",
"44": "TestimonialsService", "44": "TestimonialsService",
"45": "What You Must Do When Invoked", "45": "What You Must Do When Invoked",
"46": "sms.service.ts", "46": "HomeController",
"47": "IngredientsService", "47": "IngredientsService",
"48": "Button.tsx", "48": "Button.tsx",
"49": "devDependencies", "49": "devDependencies",
@ -55,18 +55,18 @@
"53": "SmartAdvisorService", "53": "SmartAdvisorService",
"54": "Modal.tsx", "54": "Modal.tsx",
"55": "UITexts.tsx", "55": "UITexts.tsx",
"56": "Orders.tsx", "56": "PrescriptionsManager.tsx",
"57": "Role & Core Objective", "57": "Role & Core Objective",
"58": "ConfirmModal.tsx", "58": "Orders.tsx",
"59": "compilerOptions", "59": "compilerOptions",
"60": "admin.controller.ts", "60": "admin.controller.ts",
"61": "ProductPage.tsx", "61": "ProductPage.tsx",
"62": "admin.module.ts", "62": "admin.module.ts",
"63": "dependencies", "63": "dependencies",
"64": "compilerOptions", "64": "compilerOptions",
"65": "admin.service.ts", "65": "CreateApiKeyDto",
"66": "AdminController", "66": "AdminController",
"67": "SmsService", "67": "ApiKeysService",
"68": "components/Skeleton.tsx", "68": "components/Skeleton.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",
@ -87,7 +87,7 @@
"85": "app.e2e-spec.js", "85": "app.e2e-spec.js",
"86": "zibal.service.ts", "86": "zibal.service.ts",
"87": "dependencies", "87": "dependencies",
"88": "payment.controller.ts", "88": "CreateEBankCheckoutDto",
"89": "seed-products.ts", "89": "seed-products.ts",
"90": "20260526145407_init/migration.sql", "90": "20260526145407_init/migration.sql",
"91": "Reconciled Audit Roles & Assignments", "91": "Reconciled Audit Roles & Assignments",
@ -105,16 +105,16 @@
"103": "Comprehensive Change Log", "103": "Comprehensive Change Log",
"104": "Products.tsx", "104": "Products.tsx",
"105": "Operational Rules & Boundaries", "105": "Operational Rules & Boundaries",
"106": "PaymentService", "106": "InitiatePaymentDto",
"107": "BlogsService", "107": "PaginationDto",
"108": "PrismaService", "108": "PrismaService",
"109": "1. Summary of Integrity Repairs Performed", "109": "1. Summary of Integrity Repairs Performed",
"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": "lib/services/api.ts", "113": "settingsStore.ts",
"114": "AppService", "114": "AppService",
"115": "Media.tsx", "115": "MediaSelector.tsx",
"116": "Vazirmatn Changelog", "116": "Vazirmatn Changelog",
"117": "Vazirmatn Font فونت وزیرمتن", "117": "Vazirmatn Font فونت وزیرمتن",
"118": "Operational Rules & Boundaries", "118": "Operational Rules & Boundaries",
@ -127,7 +127,7 @@
"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": "auth.module.ts", "128": "MetricsController",
"129": "WikiController", "129": "WikiController",
"130": "Sahel-Font", "130": "Sahel-Font",
"131": "Role & Core Objective", "131": "Role & Core Objective",
@ -144,13 +144,13 @@
"142": "start-dev.js", "142": "start-dev.js",
"143": "generate-openapi.js", "143": "generate-openapi.js",
"144": "SafeImage.tsx", "144": "SafeImage.tsx",
"145": "PaginationDto", "145": "WholesaleApplyDto",
"146": "System Discovery", "146": "System Discovery",
"147": "torob.controller.ts", "147": "torob.controller.ts",
"148": "ProductDto", "148": "ProductDto",
"149": "PetsController", "149": "class-transformer",
"150": "Product Requirement Document (PRD)", "150": "Product Requirement Document (PRD)",
"151": "SmsLogQueryDto", "151": "helmet",
"152": "@eslint/js", "152": "@eslint/js",
"153": "exclude", "153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History", "154": "Baseline Command Plan & Reconciled Command History",
@ -203,7 +203,7 @@
"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": "RevalidationService", "204": "reviews.service.ts",
"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": "AdminQueryDto", "220": "js-yaml",
"221": "Textarea.tsx", "221": "Textarea.tsx",
"222": "admin-panel/tsconfig.json", "222": "admin-panel/tsconfig.json",
"223": "tailwindcss", "223": "tailwindcss",
@ -231,8 +231,8 @@
"229": ".agents/workflows/graphify.md", "229": ".agents/workflows/graphify.md",
"230": "instructions.md", "230": "instructions.md",
"231": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql", "231": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
"232": "@types/node", "232": "@nestjs/core",
"233": "typescript", "233": "@nestjs/jwt",
"234": "source-map-support", "234": "source-map-support",
"235": "ts-loader", "235": "ts-loader",
"236": "ts-node", "236": "ts-node",
@ -264,10 +264,11 @@
"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": "tailwindcss", "265": "@nestjs/swagger",
"266": "@types/express", "266": "@types/express",
"267": "@types/jest", "267": "@types/jest",
"268": "@types/multer", "268": "@types/multer",
"269": "@nestjs/throttler",
"270": "app-audit-verification.e2e-spec.d.ts", "270": "app-audit-verification.e2e-spec.d.ts",
"271": "app.e2e-spec.d.ts", "271": "app.e2e-spec.d.ts",
"272": "Canina Pharma GmbH", "272": "Canina Pharma GmbH",
@ -293,22 +294,36 @@
"292": "Production Docker Compose", "292": "Production Docker Compose",
"293": "Staging Docker Compose", "293": "Staging Docker Compose",
"294": "ZibalService", "294": "ZibalService",
"295": "passport",
"296": "reflect-metadata",
"297": "ZibalEBankService", "297": "ZibalEBankService",
"298": ".initiateOrderPayment", "298": ".initiateOrderPayment",
"299": "@tailwindcss/postcss", "299": "@tailwindcss/postcss",
"300": "typescript", "300": "typescript",
"301": "swagger-ui-express",
"302": "typescript-eslint", "302": "typescript-eslint",
"303": "@nestjs/schematics", "303": "@nestjs/schematics",
"304": "@eslint/eslintrc",
"305": "eslint-plugin-prettier",
"306": "eslint-plugin-react-hooks", "306": "eslint-plugin-react-hooks",
"307": "globals",
"308": "@nestjs/cli",
"309": "axios", "309": "axios",
"310": "tailwindcss", "310": "tailwindcss",
"311": "jest", "311": "jest",
"312": "@types/passport-jwt", "312": "@types/passport-jwt",
"313": "@nestjs/testing",
"314": "prettier",
"315": "typescript", "315": "typescript",
"316": "ts-jest",
"317": "revalidate/route.ts", "317": "revalidate/route.ts",
"318": "MaskableField.tsx", "318": "MaskableField.tsx",
"319": "@types/js-yaml",
"320": "@types/supertest",
"321": "orders/page.tsx", "321": "orders/page.tsx",
"322": "pets/page.tsx", "322": "pets/page.tsx",
"323": "typescript-eslint",
"324": "@tailwindcss/postcss",
"325": "@types/react-dom", "325": "@types/react-dom",
"327": "eslint-plugin-react-refresh" "327": "eslint-plugin-react-refresh"
} }

File diff suppressed because one or more lines are too long

View File

@ -7,7 +7,7 @@
"5": "CmsController", "5": "CmsController",
"6": "tickets.controller.ts", "6": "tickets.controller.ts",
"7": "SmsSettingsPage.tsx", "7": "SmsSettingsPage.tsx",
"8": "SmsService", "8": "SettingsService",
"9": "devDependencies", "9": "devDependencies",
"10": "CreateReviewDto", "10": "CreateReviewDto",
"11": "UsersService", "11": "UsersService",
@ -32,7 +32,7 @@
"30": "DEVOPS-001", "30": "DEVOPS-001",
"31": "DOC-001", "31": "DOC-001",
"32": "adminRoutes.tsx", "32": "adminRoutes.tsx",
"33": "WholesaleService", "33": "WholesaleApplyDto",
"34": "B2BService", "34": "B2BService",
"35": "ContactService", "35": "ContactService",
"36": "FaqService", "36": "FaqService",
@ -45,7 +45,7 @@
"43": "BannersService", "43": "BannersService",
"44": "TestimonialsService", "44": "TestimonialsService",
"45": "What You Must Do When Invoked", "45": "What You Must Do When Invoked",
"46": "WholesaleApplyDto", "46": "sms.service.ts",
"47": "IngredientsService", "47": "IngredientsService",
"48": "Button.tsx", "48": "Button.tsx",
"49": "devDependencies", "49": "devDependencies",
@ -55,9 +55,9 @@
"53": "SmartAdvisorService", "53": "SmartAdvisorService",
"54": "Modal.tsx", "54": "Modal.tsx",
"55": "UITexts.tsx", "55": "UITexts.tsx",
"56": "PrescriptionsManager.tsx", "56": "Orders.tsx",
"57": "Role & Core Objective", "57": "Role & Core Objective",
"58": "MetricsController", "58": "ConfirmModal.tsx",
"59": "compilerOptions", "59": "compilerOptions",
"60": "admin.controller.ts", "60": "admin.controller.ts",
"61": "ProductPage.tsx", "61": "ProductPage.tsx",
@ -66,7 +66,7 @@
"64": "compilerOptions", "64": "compilerOptions",
"65": "admin.service.ts", "65": "admin.service.ts",
"66": "AdminController", "66": "AdminController",
"67": "OrdersController", "67": "SmsService",
"68": "components/Skeleton.tsx", "68": "components/Skeleton.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": "RevalidationService", "76": "ProductsService",
"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",
@ -87,11 +87,11 @@
"85": "app.e2e-spec.js", "85": "app.e2e-spec.js",
"86": "zibal.service.ts", "86": "zibal.service.ts",
"87": "dependencies", "87": "dependencies",
"88": "CreateEBankCheckoutDto", "88": "payment.controller.ts",
"89": "seed-products.ts", "89": "seed-products.ts",
"90": "20260526145407_init/migration.sql", "90": "20260526145407_init/migration.sql",
"91": "Reconciled Audit Roles & Assignments", "91": "Reconciled Audit Roles & Assignments",
"92": ".retryPayment", "92": "OrdersService",
"93": "auth.controller.ts", "93": "auth.controller.ts",
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique", "94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
"95": "wiki/[slug]/page.tsx", "95": "wiki/[slug]/page.tsx",
@ -105,8 +105,8 @@
"103": "Comprehensive Change Log", "103": "Comprehensive Change Log",
"104": "Products.tsx", "104": "Products.tsx",
"105": "Operational Rules & Boundaries", "105": "Operational Rules & Boundaries",
"106": "InitiatePaymentDto", "106": "PaymentService",
"107": "PaginationDto", "107": "BlogsService",
"108": "PrismaService", "108": "PrismaService",
"109": "1. Summary of Integrity Repairs Performed", "109": "1. Summary of Integrity Repairs Performed",
"110": "Operational Rules & Boundaries", "110": "Operational Rules & Boundaries",
@ -114,7 +114,7 @@
"112": "Operational Rules & Boundaries", "112": "Operational Rules & Boundaries",
"113": "lib/services/api.ts", "113": "lib/services/api.ts",
"114": "AppService", "114": "AppService",
"115": "MediaSelector.tsx", "115": "Media.tsx",
"116": "Vazirmatn Changelog", "116": "Vazirmatn Changelog",
"117": "Vazirmatn Font فونت وزیرمتن", "117": "Vazirmatn Font فونت وزیرمتن",
"118": "Operational Rules & Boundaries", "118": "Operational Rules & Boundaries",
@ -127,7 +127,7 @@
"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": "HomeController", "128": "auth.module.ts",
"129": "WikiController", "129": "WikiController",
"130": "Sahel-Font", "130": "Sahel-Font",
"131": "Role & Core Objective", "131": "Role & Core Objective",
@ -144,13 +144,13 @@
"142": "start-dev.js", "142": "start-dev.js",
"143": "generate-openapi.js", "143": "generate-openapi.js",
"144": "SafeImage.tsx", "144": "SafeImage.tsx",
"145": "Orders.tsx", "145": "PaginationDto",
"146": "System Discovery", "146": "System Discovery",
"147": "torob.controller.ts", "147": "torob.controller.ts",
"148": "ProductDto", "148": "ProductDto",
"149": "CreateOrderDto", "149": "PetsController",
"150": "Product Requirement Document (PRD)", "150": "Product Requirement Document (PRD)",
"151": "OrdersService", "151": "SmsLogQueryDto",
"152": "@eslint/js", "152": "@eslint/js",
"153": "exclude", "153": "exclude",
"154": "Baseline Command Plan & Reconciled Command History", "154": "Baseline Command Plan & Reconciled Command History",
@ -178,7 +178,7 @@
"176": "uploads/[...path]/route.ts", "176": "uploads/[...path]/route.ts",
"177": "eslint-config-prettier", "177": "eslint-config-prettier",
"178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina", "178": "نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina",
"179": "CreateApiKeyDto", "179": "eslint-config-next",
"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)",
@ -203,7 +203,7 @@
"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": "reviews.service.ts", "204": "RevalidationService",
"205": "prisma/scientificTerms.ts", "205": "prisma/scientificTerms.ts",
"206": "seed-blogs.ts", "206": "seed-blogs.ts",
"207": "seed-custom.ts", "207": "seed-custom.ts",
@ -307,7 +307,6 @@
"315": "typescript", "315": "typescript",
"317": "revalidate/route.ts", "317": "revalidate/route.ts",
"318": "MaskableField.tsx", "318": "MaskableField.tsx",
"319": "@tailwindcss/postcss",
"321": "orders/page.tsx", "321": "orders/page.tsx",
"322": "pets/page.tsx", "322": "pets/page.tsx",
"325": "@types/react-dom", "325": "@types/react-dom",

View File

@ -1,16 +1,16 @@
# Graph Report - canina (2026-09-13) # Graph Report - canina (2026-09-13)
## Corpus Check ## Corpus Check
- 609 files · ~1,125,316 words - 609 files · ~1,125,530 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## Summary
- 4304 nodes · 7945 edges · 313 communities (217 shown, 96 thin omitted) - 4304 nodes · 7950 edges · 312 communities (215 shown, 97 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 303 edges (avg confidence: 0.79) - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 303 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `8e4ee984` - Built from commit: `ef0731ff`
- 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).
@ -23,7 +23,7 @@
- CmsController - CmsController
- tickets.controller.ts - tickets.controller.ts
- SmsSettingsPage.tsx - SmsSettingsPage.tsx
- SmsService - SettingsService
- devDependencies - devDependencies
- CreateReviewDto - CreateReviewDto
- UsersService - UsersService
@ -48,7 +48,7 @@
- DEVOPS-001 - DEVOPS-001
- DOC-001 - DOC-001
- adminRoutes.tsx - adminRoutes.tsx
- WholesaleService - WholesaleApplyDto
- B2BService - B2BService
- ContactService - ContactService
- FaqService - FaqService
@ -61,7 +61,7 @@
- BannersService - BannersService
- TestimonialsService - TestimonialsService
- What You Must Do When Invoked - What You Must Do When Invoked
- WholesaleApplyDto - sms.service.ts
- IngredientsService - IngredientsService
- Button.tsx - Button.tsx
- devDependencies - devDependencies
@ -71,9 +71,9 @@
- SmartAdvisorService - SmartAdvisorService
- Modal.tsx - Modal.tsx
- UITexts.tsx - UITexts.tsx
- PrescriptionsManager.tsx - Orders.tsx
- Role & Core Objective - Role & Core Objective
- MetricsController - ConfirmModal.tsx
- compilerOptions - compilerOptions
- admin.controller.ts - admin.controller.ts
- ProductPage.tsx - ProductPage.tsx
@ -82,7 +82,7 @@
- compilerOptions - compilerOptions
- admin.service.ts - admin.service.ts
- AdminController - AdminController
- OrdersController - SmsService
- components/Skeleton.tsx - components/Skeleton.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
- RevalidationService - ProductsService
- 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
@ -103,11 +103,11 @@
- app.e2e-spec.js - app.e2e-spec.js
- zibal.service.ts - zibal.service.ts
- dependencies - dependencies
- CreateEBankCheckoutDto - payment.controller.ts
- seed-products.ts - seed-products.ts
- 20260526145407_init/migration.sql - 20260526145407_init/migration.sql
- Reconciled Audit Roles & Assignments - Reconciled Audit Roles & Assignments
- .retryPayment - OrdersService
- auth.controller.ts - auth.controller.ts
- Phase 3.1 — Human Review Preparation and Master Backlog Critique - Phase 3.1 — Human Review Preparation and Master Backlog Critique
- wiki/[slug]/page.tsx - wiki/[slug]/page.tsx
@ -121,8 +121,8 @@
- Comprehensive Change Log - Comprehensive Change Log
- Products.tsx - Products.tsx
- Operational Rules & Boundaries - Operational Rules & Boundaries
- InitiatePaymentDto - PaymentService
- PaginationDto - BlogsService
- PrismaService - PrismaService
- 1. Summary of Integrity Repairs Performed - 1. Summary of Integrity Repairs Performed
- Operational Rules & Boundaries - Operational Rules & Boundaries
@ -130,7 +130,7 @@
- Operational Rules & Boundaries - Operational Rules & Boundaries
- lib/services/api.ts - lib/services/api.ts
- AppService - AppService
- MediaSelector.tsx - Media.tsx
- Vazirmatn Changelog - Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن - Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries - Operational Rules & Boundaries
@ -143,7 +143,7 @@
- validate_integrity.js - validate_integrity.js
- admin-panel/package.json - admin-panel/package.json
- Sahel-Font - Sahel-Font
- HomeController - auth.module.ts
- WikiController - WikiController
- Sahel-Font - Sahel-Font
- Role & Core Objective - Role & Core Objective
@ -160,13 +160,13 @@
- start-dev.js - start-dev.js
- generate-openapi.js - generate-openapi.js
- SafeImage.tsx - SafeImage.tsx
- Orders.tsx - PaginationDto
- System Discovery - System Discovery
- torob.controller.ts - torob.controller.ts
- ProductDto - ProductDto
- CreateOrderDto - PetsController
- Product Requirement Document (PRD) - Product Requirement Document (PRD)
- OrdersService - SmsLogQueryDto
- @eslint/js - @eslint/js
- exclude - exclude
- Baseline Command Plan & Reconciled Command History - Baseline Command Plan & Reconciled Command History
@ -193,7 +193,7 @@
- uploads/[...path]/route.ts - uploads/[...path]/route.ts
- eslint-config-prettier - eslint-config-prettier
- نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina - نقشه جامع پوشش تست‌های سرتاسری (E2E Test Coverage Map) — پروژه Canina
- CreateApiKeyDto - eslint-config-next
- 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)
@ -218,7 +218,7 @@
- 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)
- reviews.service.ts - RevalidationService
- prisma/scientificTerms.ts - prisma/scientificTerms.ts
- seed-blogs.ts - seed-blogs.ts
- seed-custom.ts - seed-custom.ts
@ -305,7 +305,6 @@
- typescript - typescript
- revalidate/route.ts - revalidate/route.ts
- MaskableField.tsx - MaskableField.tsx
- @tailwindcss/postcss
- @types/react-dom - @types/react-dom
- eslint-plugin-react-refresh - eslint-plugin-react-refresh
@ -328,29 +327,29 @@
backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts
- `BlogsController` --references--> `ApiResponse` [EXTRACTED] - `BlogsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts
- `HomeController` --references--> `ApiResponse` [EXTRACTED]
backend/src/home/home.controller.ts → frontend/admin-panel/src/types/admin.ts
- `OrdersController` --references--> `ApiResponse` [EXTRACTED] - `OrdersController` --references--> `ApiResponse` [EXTRACTED]
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
- `PetsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/pets/pets.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 (313 total, 96 thin omitted) ## Communities (312 total, 97 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 (38): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+30 more) Nodes (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more)
### Community 2 - "ApiKeysService" ### Community 2 - "ApiKeysService"
Cohesion: 0.09 Cohesion: 0.05
Nodes (16): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more) Nodes (33): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+25 more)
### Community 3 - "productService.ts" ### Community 3 - "productService.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -372,21 +371,21 @@ Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty,
Cohesion: 0.20 Cohesion: 0.20
Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more) Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more)
### Community 8 - "SmsService" ### Community 8 - "SettingsService"
Cohesion: 0.05 Cohesion: 0.09
Nodes (28): SmsEventDefinition, SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber (+20 more) Nodes (17): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+9 more)
### Community 9 - "devDependencies" ### Community 9 - "devDependencies"
Cohesion: 0.08 Cohesion: 0.08
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more) Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
### Community 10 - "CreateReviewDto" ### Community 10 - "CreateReviewDto"
Cohesion: 0.08 Cohesion: 0.07
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more) Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more)
### Community 11 - "UsersService" ### Community 11 - "UsersService"
Cohesion: 0.06 Cohesion: 0.08
Nodes (38): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), JwtPayload, JwtStrategy, Injectable, AddressDto, ApiProperty (+30 more) Nodes (31): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+23 more)
### Community 12 - "index.ts" ### Community 12 - "index.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -402,7 +401,7 @@ Nodes (35): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), Address
### Community 15 - "src/services/api.ts" ### Community 15 - "src/services/api.ts"
Cohesion: 0.08 Cohesion: 0.08
Nodes (32): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+24 more) Nodes (30): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+22 more)
### Community 16 - "DoctorQueryDto" ### Community 16 - "DoctorQueryDto"
Cohesion: 0.09 Cohesion: 0.09
@ -413,8 +412,8 @@ 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 - "JwtAuthGuard"
Cohesion: 0.20 Cohesion: 0.16
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, SortOrder, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 19 - "BulkPriceAdjustmentDto" ### Community 19 - "BulkPriceAdjustmentDto"
Cohesion: 0.30 Cohesion: 0.30
@ -425,8 +424,8 @@ Cohesion: 0.07
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more) Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
### Community 21 - "useSettingsStore" ### Community 21 - "useSettingsStore"
Cohesion: 0.08 Cohesion: 0.09
Nodes (29): ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps, Footer() (+21 more) Nodes (26): CartDrawer, ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps (+18 more)
### Community 23 - "MenuService" ### Community 23 - "MenuService"
Cohesion: 0.12 Cohesion: 0.12
@ -465,12 +464,12 @@ Cohesion: 0.06
Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more) Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more)
### Community 32 - "adminRoutes.tsx" ### Community 32 - "adminRoutes.tsx"
Cohesion: 0.07 Cohesion: 0.11
Nodes (17): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, BestSellerItem, CategoryDistItem (+9 more) Nodes (10): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, AdminRouteConfig, Dashboard (+2 more)
### Community 33 - "WholesaleService" ### Community 33 - "WholesaleApplyDto"
Cohesion: 0.14 Cohesion: 0.10
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more) Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
### Community 34 - "B2BService" ### Community 34 - "B2BService"
Cohesion: 0.12 Cohesion: 0.12
@ -489,8 +488,8 @@ Cohesion: 0.07
Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more) Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more)
### Community 38 - "Button" ### Community 38 - "Button"
Cohesion: 0.16 Cohesion: 0.10
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more) Nodes (20): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Badge(), BadgeProps, BadgeVariant, variantStyles, Button() (+12 more)
### Community 39 - "CategoriesController" ### Community 39 - "CategoriesController"
Cohesion: 0.10 Cohesion: 0.10
@ -505,8 +504,8 @@ Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more) Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 42 - "SslController" ### Community 42 - "SslController"
Cohesion: 0.13 Cohesion: 0.11
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more) Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more)
### Community 43 - "BannersService" ### Community 43 - "BannersService"
Cohesion: 0.13 Cohesion: 0.13
@ -520,17 +519,17 @@ Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
Cohesion: 0.07 Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more) Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 46 - "WholesaleApplyDto" ### Community 46 - "sms.service.ts"
Cohesion: 0.29 Cohesion: 0.09
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto Nodes (16): DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventDefinition, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+8 more)
### Community 47 - "IngredientsService" ### Community 47 - "IngredientsService"
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 - "Button.tsx" ### Community 48 - "Button.tsx"
Cohesion: 0.10 Cohesion: 0.09
Nodes (15): ButtonProps, ButtonSize, ButtonVariant, Spinner(), FAQ, SslStatus, BannersManager, FAQManager (+7 more) Nodes (17): ButtonProps, ButtonSize, ButtonVariant, Spinner(), BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps (+9 more)
### Community 49 - "devDependencies" ### Community 49 - "devDependencies"
Cohesion: 0.11 Cohesion: 0.11
@ -538,7 +537,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
@ -553,24 +552,24 @@ Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more) Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 54 - "Modal.tsx" ### Community 54 - "Modal.tsx"
Cohesion: 0.07 Cohesion: 0.09
Nodes (21): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, MENU_TABS, MenuItem, MenuType (+13 more) Nodes (17): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, FAQ, BlogCommentItem, ProductReview (+9 more)
### Community 55 - "UITexts.tsx" ### Community 55 - "UITexts.tsx"
Cohesion: 0.14 Cohesion: 0.05
Nodes (12): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ToggleSwitch(), ToggleSwitchProps, AppSitePage, PageSection, SectionField (+4 more) Nodes (35): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector() (+27 more)
### Community 56 - "PrescriptionsManager.tsx" ### Community 56 - "Orders.tsx"
Cohesion: 0.12 Cohesion: 0.11
Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, ProductItem, UserRecord (+6 more) Nodes (15): Skeleton(), MonitoringStats, getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx (+7 more)
### Community 57 - "Role & Core Objective" ### Community 57 - "Role & Core Objective"
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 - "MetricsController" ### Community 58 - "ConfirmModal.tsx"
Cohesion: 0.29 Cohesion: 0.09
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res Nodes (15): ConfirmModal(), ConfirmModalProps, HeroBanner, VetTestimonial, Doctor, MENU_TABS, MenuItem, MenuType (+7 more)
### Community 59 - "compilerOptions" ### Community 59 - "compilerOptions"
Cohesion: 0.06 Cohesion: 0.06
@ -582,11 +581,11 @@ Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty
### Community 61 - "ProductPage.tsx" ### Community 61 - "ProductPage.tsx"
Cohesion: 0.11 Cohesion: 0.11
Nodes (39): ArchiveProductCard(), ArchiveProductListItem(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), Header(), MobileBottomNav() (+31 more) Nodes (40): ArchiveProductCard(), ArchiveProductListItem(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), Header(), MobileBottomNav() (+32 more)
### Community 62 - "admin.module.ts" ### Community 62 - "admin.module.ts"
Cohesion: 0.04 Cohesion: 0.08
Nodes (34): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+26 more) Nodes (17): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+9 more)
### Community 63 - "dependencies" ### Community 63 - "dependencies"
Cohesion: 0.05 Cohesion: 0.05
@ -604,9 +603,9 @@ Nodes (7): CouponTargetInput, PaginationQuery, applyRounding(), calculateSelling
Cohesion: 0.10 Cohesion: 0.10
Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+4 more) Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+4 more)
### Community 67 - "OrdersController" ### Community 67 - "SmsService"
Cohesion: 0.15 Cohesion: 0.20
Nodes (11): OrdersController, ApiBearerAuth, ApiTags, Controller, IsNotEmpty, IsNumber, IsString, UseGuards (+3 more) Nodes (3): SmsService, Injectable, Optional
### Community 68 - "components/Skeleton.tsx" ### Community 68 - "components/Skeleton.tsx"
Cohesion: 0.21 Cohesion: 0.21
@ -640,9 +639,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
Cohesion: 0.05 Cohesion: 0.05
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more) Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
### Community 76 - "RevalidationService" ### Community 76 - "ProductsService"
Cohesion: 0.07 Cohesion: 0.11
Nodes (25): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional (+17 more) Nodes (14): ProductsController, ApiOperation, ApiTags, Body, Controller, Get, Param, Patch (+6 more)
### Community 77 - "seo.module.ts" ### Community 77 - "seo.module.ts"
Cohesion: 0.16 Cohesion: 0.16
@ -688,9 +687,9 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
Cohesion: 0.11 Cohesion: 0.11
Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more) Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more)
### Community 88 - "CreateEBankCheckoutDto" ### Community 88 - "payment.controller.ts"
Cohesion: 0.22 Cohesion: 0.12
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min Nodes (19): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min (+11 more)
### Community 89 - "seed-products.ts" ### Community 89 - "seed-products.ts"
Cohesion: 0.17 Cohesion: 0.17
@ -704,9 +703,9 @@ Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_cond
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 - ".retryPayment" ### Community 92 - "OrdersService"
Cohesion: 0.19 Cohesion: 0.06
Nodes (11): ApiBadRequestResponse, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Get, Param (+3 more) Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more)
### Community 93 - "auth.controller.ts" ### Community 93 - "auth.controller.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -753,24 +752,20 @@ Cohesion: 0.15
Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TASK-SEC-003`, 4. `TASK-FIN-001`, 5. `TASK-BUILD-001`, 6. `TASK-AUTH-001`, 7. `TASK-FE-001` (+4 more) Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TASK-SEC-003`, 4. `TASK-FIN-001`, 5. `TASK-BUILD-001`, 6. `TASK-AUTH-001`, 7. `TASK-FE-001` (+4 more)
### Community 104 - "Products.tsx" ### Community 104 - "Products.tsx"
Cohesion: 0.10 Cohesion: 0.09
Nodes (24): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+16 more) Nodes (25): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+17 more)
### Community 105 - "Operational Rules & Boundaries" ### Community 105 - "Operational Rules & Boundaries"
Cohesion: 0.17 Cohesion: 0.17
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more) Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
### Community 106 - "InitiatePaymentDto" ### Community 107 - "BlogsService"
Cohesion: 0.43 Cohesion: 0.13
Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable
### Community 107 - "PaginationDto"
Cohesion: 0.07
Nodes (18): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+10 more)
### Community 108 - "PrismaService" ### Community 108 - "PrismaService"
Cohesion: 0.06 Cohesion: 0.06
Nodes (25): CategoryQuery, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+17 more) Nodes (23): ApiExcludeController, CategoryQuery, PetQuery, PetsService, Injectable, MetricsController, Controller, Get (+15 more)
### Community 109 - "1. Summary of Integrity Repairs Performed" ### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17 Cohesion: 0.17
@ -789,16 +784,16 @@ 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 - "lib/services/api.ts" ### Community 113 - "lib/services/api.ts"
Cohesion: 0.08 Cohesion: 0.06
Nodes (22): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+14 more) Nodes (26): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+18 more)
### Community 114 - "AppService" ### Community 114 - "AppService"
Cohesion: 0.29 Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 115 - "MediaSelector.tsx" ### Community 115 - "Media.tsx"
Cohesion: 0.05 Cohesion: 0.10
Nodes (45): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+37 more) Nodes (17): Pagination(), PaginationProps, Category, getFileType(), Media, MediaManager(), Pet, DoctorOption (+9 more)
### Community 116 - "Vazirmatn Changelog" ### Community 116 - "Vazirmatn Changelog"
Cohesion: 0.18 Cohesion: 0.18
@ -829,8 +824,8 @@ Cohesion: 0.17
Nodes (3): Body, Post, CouponInput Nodes (3): Body, Post, CouponInput
### Community 123 - "auth.service.ts" ### Community 123 - "auth.service.ts"
Cohesion: 0.07 Cohesion: 0.08
Nodes (13): AppModule, Module, AuthModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput (+5 more) Nodes (9): AppModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, RedisService (+1 more)
### Community 124 - "Repository Map" ### Community 124 - "Repository Map"
Cohesion: 0.20 Cohesion: 0.20
@ -848,13 +843,13 @@ 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 - "HomeController" ### Community 128 - "auth.module.ts"
Cohesion: 0.16 Cohesion: 0.15
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more) Nodes (12): AdminModule, Module, DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload (+4 more)
### Community 129 - "WikiController" ### Community 129 - "WikiController"
Cohesion: 0.21 Cohesion: 0.13
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more) Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
### Community 130 - "Sahel-Font" ### Community 130 - "Sahel-Font"
Cohesion: 0.20 Cohesion: 0.20
@ -913,12 +908,12 @@ 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.09 Cohesion: 0.10
Nodes (25): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+17 more) Nodes (24): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+16 more)
### Community 145 - "Orders.tsx" ### Community 145 - "PaginationDto"
Cohesion: 0.22 Cohesion: 0.15
Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders Nodes (13): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+5 more)
### Community 146 - "System Discovery" ### Community 146 - "System Discovery"
Cohesion: 0.25 Cohesion: 0.25
@ -932,14 +927,18 @@ Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, A
Cohesion: 0.16 Cohesion: 0.16
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 149 - "CreateOrderDto" ### Community 149 - "PetsController"
Cohesion: 0.22 Cohesion: 0.15
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more) Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### 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 151 - "SmsLogQueryDto"
Cohesion: 0.25
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 153 - "exclude" ### Community 153 - "exclude"
Cohesion: 0.22 Cohesion: 0.22
Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./tsconfig.json Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./tsconfig.json
@ -1032,10 +1031,6 @@ Nodes (5): dynamic, GET(), getCandidateUrls(), getMimeType(), HEAD()
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 - "CreateApiKeyDto"
Cohesion: 0.27
Nodes (7): CreateApiKeyDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsOptional, IsString
### 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
@ -1053,8 +1048,8 @@ 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 185 - "CartDrawer.tsx" ### Community 185 - "CartDrawer.tsx"
Cohesion: 0.32 Cohesion: 0.36
Nodes (5): CartDrawer, CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, mockProduct Nodes (4): CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, mockProduct
### Community 191 - "graphify reference: add a URL and watch a folder" ### Community 191 - "graphify reference: add a URL and watch a folder"
Cohesion: 0.50 Cohesion: 0.50
@ -1096,9 +1091,9 @@ 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 - "reviews.service.ts" ### Community 204 - "RevalidationService"
Cohesion: 0.33 Cohesion: 0.16
Nodes (5): ApiProperty, IsIn, IsOptional, IsString, UpdateReviewDto Nodes (6): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable
### Community 211 - "Master Task Backlog (Phase 3.3)" ### Community 211 - "Master Task Backlog (Phase 3.3)"
Cohesion: 0.67 Cohesion: 0.67
@ -1116,13 +1111,9 @@ Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
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
### Community 294 - "ZibalService"
Cohesion: 0.09
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
### Community 298 - ".initiateOrderPayment" ### Community 298 - ".initiateOrderPayment"
Cohesion: 0.20 Cohesion: 0.32
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more) Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
### Community 317 - "revalidate/route.ts" ### Community 317 - "revalidate/route.ts"
Cohesion: 0.83 Cohesion: 0.83
@ -1131,22 +1122,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps ## Knowledge Gaps
- **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more) - **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more)
These have ≤1 connection - possible missing edges or undocumented components. These have ≤1 connection - possible missing edges or undocumented components.
- **96 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - **97 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 `ApiResponse` connect `ApiKeysService` to `HomeController`, `WikiController`, `OrdersController`, `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `src/services/api.ts`, `auth.controller.ts`?** - **Why does `ApiResponse` connect `ApiKeysService` to `WikiController`, `BlogsController`, `PetsController`, `ProductsService`, `UsersService`, `src/services/api.ts`, `OrdersService`, `auth.controller.ts`?**
_High betweenness centrality (0.076) - this node is a cross-community bridge._ _High betweenness centrality (0.076) - this node is a cross-community bridge._
- **Why does `Roles()` connect `Roles` to `WholesaleService`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersService`, `RevalidationService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`?** - **Why does `Roles()` connect `Roles` to `CmsController`, `tickets.controller.ts`, `SettingsService`, `CreateReviewDto`, `PaginationDto`, `JwtAuthGuard`, `MenuService`, `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `SslController`, `BannersService`, `TestimonialsService`, `IngredientsService`, `PrescriptionsService`, `SmartAdvisorService`, `ProductsService`, `payment.controller.ts`?**
_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 `PrismaService` connect `PrismaService` to `HomeController`, `app.module.ts`, `ApiKeysService`, `CmsController`, `tickets.controller.ts`, `SmsService`, `UsersService`, `DoctorQueryDto`, `torob.controller.ts`, `CreateVideoDto`, `MenuService`, `OrdersService`, `WholesaleService`, `B2BService`, `ContactService`, `FaqService`, `ZibalService`, `CategoriesController`, `MediaController`, `ZibalEBankService`, `BannersService`, `TestimonialsService`, `IngredientsService`, `CreateApiKeyDto`, `PrescriptionsService`, `SmartAdvisorService`, `MetricsController`, `admin.module.ts`, `admin.service.ts`, `OrdersController`, `PetsController`, `RevalidationService`, `reviews.service.ts`, `seo.module.ts`, `zibal.service.ts`, `PaginationDto`, `auth.service.ts`?** - **Why does `PrismaService` connect `PrismaService` to `app.module.ts`, `ApiKeysService`, `WikiController`, `CmsController`, `tickets.controller.ts`, `SettingsService`, `DoctorQueryDto`, `torob.controller.ts`, `CreateVideoDto`, `MenuService`, `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `ZibalService`, `CategoriesController`, `MediaController`, `ZibalEBankService`, `BannersService`, `TestimonialsService`, `sms.service.ts`, `IngredientsService`, `PrescriptionsService`, `SmartAdvisorService`, `admin.module.ts`, `admin.service.ts`, `SmsService`, `PetsController`, `RevalidationService`, `ProductsService`, `seo.module.ts`, `zibal.service.ts`, `OrdersService`, `PaymentService`, `BlogsService`, `auth.service.ts`?**
_High betweenness centrality (0.031) - this node is a cross-community bridge._ _High betweenness centrality (0.031) - 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?**
_1356 weakly-connected nodes found - possible documentation gaps or missing edges._ _1356 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.06516290726817042 - nodes in this community are weakly interconnected._ _Cohesion score 0.06265664160401002 - nodes in this community are weakly interconnected._
- **Should `ApiKeysService` be split into smaller, more focused modules?** - **Should `ApiKeysService` be split into smaller, more focused modules?**
_Cohesion score 0.09195402298850575 - nodes in this community are weakly interconnected._ _Cohesion score 0.05012531328320802 - 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.06187202538339503 - nodes in this community are weakly interconnected._ _Cohesion score 0.06187202538339503 - 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,29 +1,29 @@
# Graph Report - canina (2026-09-13) # Graph Report - canina (2026-09-13)
## Corpus Check ## Corpus Check
- 609 files · ~1,125,530 words - 609 files · ~1,125,811 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## Summary
- 4304 nodes · 7950 edges · 312 communities (215 shown, 97 thin omitted) - 4304 nodes · 7953 edges · 327 communities (215 shown, 112 thin omitted)
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 303 edges (avg confidence: 0.79) - Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 303 edges (avg confidence: 0.79)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `ef0731ff` - Built from commit: `e7ded849`
- 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
- ApiKeysService - ApiResponse
- productService.ts - productService.ts
- HomeClient.tsx - HomeClient.tsx
- CmsController - CmsController
- tickets.controller.ts - tickets.controller.ts
- SmsSettingsPage.tsx - SmsSettingsPage.tsx
- SettingsService - SmsService
- devDependencies - devDependencies
- CreateReviewDto - CreateReviewDto
- UsersService - UsersService
@ -34,7 +34,7 @@
- DoctorQueryDto - DoctorQueryDto
- schema.ts - schema.ts
- JwtAuthGuard - JwtAuthGuard
- BulkPriceAdjustmentDto - admin.service.ts
- CreateVideoDto - CreateVideoDto
- useSettingsStore - useSettingsStore
- AdminService - AdminService
@ -48,7 +48,7 @@
- DEVOPS-001 - DEVOPS-001
- DOC-001 - DOC-001
- adminRoutes.tsx - adminRoutes.tsx
- WholesaleApplyDto - WholesaleService
- B2BService - B2BService
- ContactService - ContactService
- FaqService - FaqService
@ -61,7 +61,7 @@
- BannersService - BannersService
- TestimonialsService - TestimonialsService
- What You Must Do When Invoked - What You Must Do When Invoked
- sms.service.ts - HomeController
- IngredientsService - IngredientsService
- Button.tsx - Button.tsx
- devDependencies - devDependencies
@ -71,18 +71,18 @@
- SmartAdvisorService - SmartAdvisorService
- Modal.tsx - Modal.tsx
- UITexts.tsx - UITexts.tsx
- Orders.tsx - PrescriptionsManager.tsx
- Role & Core Objective - Role & Core Objective
- ConfirmModal.tsx - Orders.tsx
- compilerOptions - compilerOptions
- admin.controller.ts - admin.controller.ts
- ProductPage.tsx - ProductPage.tsx
- admin.module.ts - admin.module.ts
- dependencies - dependencies
- compilerOptions - compilerOptions
- admin.service.ts - CreateApiKeyDto
- AdminController - AdminController
- SmsService - ApiKeysService
- components/Skeleton.tsx - components/Skeleton.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
@ -103,7 +103,7 @@
- app.e2e-spec.js - app.e2e-spec.js
- zibal.service.ts - zibal.service.ts
- dependencies - dependencies
- payment.controller.ts - CreateEBankCheckoutDto
- seed-products.ts - seed-products.ts
- 20260526145407_init/migration.sql - 20260526145407_init/migration.sql
- Reconciled Audit Roles & Assignments - Reconciled Audit Roles & Assignments
@ -121,16 +121,16 @@
- Comprehensive Change Log - Comprehensive Change Log
- Products.tsx - Products.tsx
- Operational Rules & Boundaries - Operational Rules & Boundaries
- PaymentService - InitiatePaymentDto
- BlogsService - PaginationDto
- PrismaService - PrismaService
- 1. Summary of Integrity Repairs Performed - 1. Summary of Integrity Repairs Performed
- Operational Rules & Boundaries - Operational Rules & Boundaries
- Operational Rules & Boundaries - Operational Rules & Boundaries
- Operational Rules & Boundaries - Operational Rules & Boundaries
- lib/services/api.ts - settingsStore.ts
- AppService - AppService
- Media.tsx - MediaSelector.tsx
- Vazirmatn Changelog - Vazirmatn Changelog
- Vazirmatn Font فونت وزیرمتن - Vazirmatn Font فونت وزیرمتن
- Operational Rules & Boundaries - Operational Rules & Boundaries
@ -143,7 +143,7 @@
- validate_integrity.js - validate_integrity.js
- admin-panel/package.json - admin-panel/package.json
- Sahel-Font - Sahel-Font
- auth.module.ts - MetricsController
- WikiController - WikiController
- Sahel-Font - Sahel-Font
- Role & Core Objective - Role & Core Objective
@ -160,13 +160,13 @@
- start-dev.js - start-dev.js
- generate-openapi.js - generate-openapi.js
- SafeImage.tsx - SafeImage.tsx
- PaginationDto - WholesaleApplyDto
- System Discovery - System Discovery
- torob.controller.ts - torob.controller.ts
- ProductDto - ProductDto
- PetsController - class-transformer
- Product Requirement Document (PRD) - Product Requirement Document (PRD)
- SmsLogQueryDto - helmet
- @eslint/js - @eslint/js
- exclude - exclude
- Baseline Command Plan & Reconciled Command History - Baseline Command Plan & Reconciled Command History
@ -218,7 +218,7 @@
- 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)
- RevalidationService - reviews.service.ts
- 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
- AdminQueryDto - js-yaml
- Textarea.tsx - Textarea.tsx
- admin-panel/tsconfig.json - admin-panel/tsconfig.json
- tailwindcss - tailwindcss
@ -246,8 +246,8 @@
- .agents/workflows/graphify.md - .agents/workflows/graphify.md
- instructions.md - instructions.md
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql - 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
- @types/node - @nestjs/core
- typescript - @nestjs/jwt
- source-map-support - source-map-support
- ts-loader - ts-loader
- ts-node - ts-node
@ -275,10 +275,11 @@
- User Login API - User Login API
- User Logout API - User Logout API
- @types/compression - @types/compression
- tailwindcss - @nestjs/swagger
- @types/express - @types/express
- @types/jest - @types/jest
- @types/multer - @types/multer
- @nestjs/throttler
- Canina Pharma GmbH - Canina Pharma GmbH
- Pets Table - Pets Table
- Canina Iran Project Introduction - Canina Iran Project Introduction
@ -293,25 +294,39 @@
- Production Docker Compose - Production Docker Compose
- Staging Docker Compose - Staging Docker Compose
- ZibalService - ZibalService
- passport
- reflect-metadata
- ZibalEBankService - ZibalEBankService
- .initiateOrderPayment - .initiateOrderPayment
- @tailwindcss/postcss - @tailwindcss/postcss
- typescript - typescript
- swagger-ui-express
- typescript-eslint - typescript-eslint
- @nestjs/schematics - @nestjs/schematics
- @eslint/eslintrc
- eslint-plugin-prettier
- eslint-plugin-react-hooks - eslint-plugin-react-hooks
- globals
- @nestjs/cli
- jest - jest
- @types/passport-jwt - @types/passport-jwt
- @nestjs/testing
- prettier
- typescript - typescript
- ts-jest
- revalidate/route.ts - revalidate/route.ts
- MaskableField.tsx - MaskableField.tsx
- @types/js-yaml
- @types/supertest
- typescript-eslint
- @tailwindcss/postcss
- @types/react-dom - @types/react-dom
- eslint-plugin-react-refresh - eslint-plugin-react-refresh
## God Nodes (most connected - your core abstractions) ## God Nodes (most connected - your core abstractions)
1. `Roles()` - 108 edges 1. `Roles()` - 108 edges
2. `PrismaService` - 91 edges 2. `PrismaService` - 91 edges
3. `useSettingsStore` - 65 edges 3. `useSettingsStore` - 67 edges
4. `SmsService` - 51 edges 4. `SmsService` - 51 edges
5. `api` - 45 edges 5. `api` - 45 edges
6. `PaginationDto` - 41 edges 6. `PaginationDto` - 41 edges
@ -327,29 +342,29 @@
backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts
- `BlogsController` --references--> `ApiResponse` [EXTRACTED] - `BlogsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts
- `HomeController` --references--> `ApiResponse` [EXTRACTED]
backend/src/home/home.controller.ts → frontend/admin-panel/src/types/admin.ts
- `OrdersController` --references--> `ApiResponse` [EXTRACTED] - `OrdersController` --references--> `ApiResponse` [EXTRACTED]
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
- `PetsController` --references--> `ApiResponse` [EXTRACTED]
backend/src/pets/pets.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/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/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` - 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 (312 total, 97 thin omitted) ## Communities (327 total, 112 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 (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more) Nodes (38): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+30 more)
### Community 2 - "ApiKeysService" ### Community 2 - "ApiResponse"
Cohesion: 0.05 Cohesion: 0.13
Nodes (33): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+25 more) Nodes (13): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+5 more)
### Community 3 - "productService.ts" ### Community 3 - "productService.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -371,21 +386,21 @@ Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty,
Cohesion: 0.20 Cohesion: 0.20
Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more) Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more)
### Community 8 - "SettingsService" ### Community 8 - "SmsService"
Cohesion: 0.09 Cohesion: 0.05
Nodes (17): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+9 more) Nodes (28): SmsEventDefinition, SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber (+20 more)
### Community 9 - "devDependencies" ### Community 9 - "devDependencies"
Cohesion: 0.08 Cohesion: 0.22
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more) Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more)
### Community 10 - "CreateReviewDto" ### Community 10 - "CreateReviewDto"
Cohesion: 0.07 Cohesion: 0.08
Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more) Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
### Community 11 - "UsersService" ### Community 11 - "UsersService"
Cohesion: 0.08 Cohesion: 0.06
Nodes (31): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+23 more) Nodes (38): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), JwtPayload, JwtStrategy, Injectable, AddressDto, ApiProperty (+30 more)
### Community 12 - "index.ts" ### Community 12 - "index.ts"
Cohesion: 0.06 Cohesion: 0.06
@ -396,12 +411,12 @@ 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 - "toPersian" ### Community 14 - "toPersian"
Cohesion: 0.09 Cohesion: 0.08
Nodes (35): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), ArchivePage() (+27 more) Nodes (39): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), ArchivePage() (+31 more)
### Community 15 - "src/services/api.ts" ### Community 15 - "src/services/api.ts"
Cohesion: 0.08 Cohesion: 0.08
Nodes (30): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+22 more) Nodes (32): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+24 more)
### Community 16 - "DoctorQueryDto" ### Community 16 - "DoctorQueryDto"
Cohesion: 0.09 Cohesion: 0.09
@ -412,12 +427,12 @@ 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 - "JwtAuthGuard"
Cohesion: 0.16 Cohesion: 0.20
Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, SortOrder, RequestWithUser, RolesGuard, Injectable, UserReqPayload Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
### Community 19 - "BulkPriceAdjustmentDto" ### Community 19 - "admin.service.ts"
Cohesion: 0.30 Cohesion: 0.16
Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean, IsIn, IsNumber (+4 more) Nodes (19): CouponTargetInput, PaginationQuery, ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean (+11 more)
### Community 20 - "CreateVideoDto" ### Community 20 - "CreateVideoDto"
Cohesion: 0.07 Cohesion: 0.07
@ -427,6 +442,10 @@ Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEm
Cohesion: 0.09 Cohesion: 0.09
Nodes (26): CartDrawer, ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps (+18 more) Nodes (26): CartDrawer, ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps (+18 more)
### Community 22 - "AdminService"
Cohesion: 0.12
Nodes (4): Delete, Param, AdminService, Injectable
### Community 23 - "MenuService" ### Community 23 - "MenuService"
Cohesion: 0.12 Cohesion: 0.12
Nodes (16): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more) Nodes (16): MenuController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
@ -464,12 +483,12 @@ Cohesion: 0.06
Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more) Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more)
### Community 32 - "adminRoutes.tsx" ### Community 32 - "adminRoutes.tsx"
Cohesion: 0.11 Cohesion: 0.07
Nodes (10): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, AdminRouteConfig, Dashboard (+2 more) Nodes (17): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, BestSellerItem, CategoryDistItem (+9 more)
### Community 33 - "WholesaleApplyDto" ### Community 33 - "WholesaleService"
Cohesion: 0.10 Cohesion: 0.14
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more) Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
### Community 34 - "B2BService" ### Community 34 - "B2BService"
Cohesion: 0.12 Cohesion: 0.12
@ -488,8 +507,8 @@ Cohesion: 0.07
Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more) Nodes (25): اجرای بک‌اند, اجرای فرانت‌اند, اجرای پروژه در سرور با PM2, برای راه‌اندازی بک‌اند:, برای راه‌اندازی فرانت‌اند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسه‌ها تا پس از ری‌استارت سرور قطع نشوند:, راه‌اندازی و انتشار سیستم (Setup & Deployment) (+17 more)
### Community 38 - "Button" ### Community 38 - "Button"
Cohesion: 0.10 Cohesion: 0.16
Nodes (20): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Badge(), BadgeProps, BadgeVariant, variantStyles, Button() (+12 more) Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
### Community 39 - "CategoriesController" ### Community 39 - "CategoriesController"
Cohesion: 0.10 Cohesion: 0.10
@ -504,8 +523,8 @@ Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more) Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 42 - "SslController" ### Community 42 - "SslController"
Cohesion: 0.11 Cohesion: 0.13
Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more) Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
### Community 43 - "BannersService" ### Community 43 - "BannersService"
Cohesion: 0.13 Cohesion: 0.13
@ -519,17 +538,17 @@ Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
Cohesion: 0.07 Cohesion: 0.07
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more) Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
### Community 46 - "sms.service.ts" ### Community 46 - "HomeController"
Cohesion: 0.09 Cohesion: 0.16
Nodes (16): DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventDefinition, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+8 more) Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
### Community 47 - "IngredientsService" ### Community 47 - "IngredientsService"
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 - "Button.tsx" ### Community 48 - "Button.tsx"
Cohesion: 0.09 Cohesion: 0.10
Nodes (17): ButtonProps, ButtonSize, ButtonVariant, Spinner(), BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps (+9 more) Nodes (15): ButtonProps, ButtonSize, ButtonVariant, Spinner(), FAQ, SslStatus, BannersManager, FAQManager (+7 more)
### Community 49 - "devDependencies" ### Community 49 - "devDependencies"
Cohesion: 0.11 Cohesion: 0.11
@ -537,7 +556,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/postcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more) Nodes (17): devDependencies, eslint, jsdom, tailwindcss, @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
@ -552,31 +571,31 @@ Cohesion: 0.13
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more) Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
### Community 54 - "Modal.tsx" ### Community 54 - "Modal.tsx"
Cohesion: 0.09 Cohesion: 0.07
Nodes (17): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, FAQ, BlogCommentItem, ProductReview (+9 more) Nodes (21): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, MENU_TABS, MenuItem, MenuType (+13 more)
### Community 55 - "UITexts.tsx" ### Community 55 - "UITexts.tsx"
Cohesion: 0.05 Cohesion: 0.14
Nodes (35): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector() (+27 more) Nodes (12): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ToggleSwitch(), ToggleSwitchProps, AppSitePage, PageSection, SectionField (+4 more)
### Community 56 - "Orders.tsx" ### Community 56 - "PrescriptionsManager.tsx"
Cohesion: 0.11 Cohesion: 0.12
Nodes (15): Skeleton(), MonitoringStats, getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx (+7 more) Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, ProductItem, UserRecord (+6 more)
### Community 57 - "Role & Core Objective" ### Community 57 - "Role & Core Objective"
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 - "ConfirmModal.tsx" ### Community 58 - "Orders.tsx"
Cohesion: 0.09 Cohesion: 0.22
Nodes (15): ConfirmModal(), ConfirmModalProps, HeroBanner, VetTestimonial, Doctor, MENU_TABS, MenuItem, MenuType (+7 more) Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders
### 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 - "admin.controller.ts" ### Community 60 - "admin.controller.ts"
Cohesion: 0.18 Cohesion: 0.19
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"
@ -584,28 +603,28 @@ Cohesion: 0.11
Nodes (40): ArchiveProductCard(), ArchiveProductListItem(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), Header(), MobileBottomNav() (+32 more) Nodes (40): ArchiveProductCard(), ArchiveProductListItem(), CATEGORY_MAP, ICON_MAP, FeaturedProducts(), ProductCard(), Header(), MobileBottomNav() (+32 more)
### Community 62 - "admin.module.ts" ### Community 62 - "admin.module.ts"
Cohesion: 0.08 Cohesion: 0.04
Nodes (17): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+9 more) Nodes (34): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+26 more)
### Community 63 - "dependencies" ### Community 63 - "dependencies"
Cohesion: 0.05 Cohesion: 0.09
Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 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 - "CreateApiKeyDto"
Cohesion: 0.31 Cohesion: 0.27
Nodes (7): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode Nodes (7): CreateApiKeyDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsOptional, IsString
### Community 66 - "AdminController" ### Community 66 - "AdminController"
Cohesion: 0.10 Cohesion: 0.16
Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+4 more) Nodes (14): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+6 more)
### Community 67 - "SmsService" ### Community 67 - "ApiKeysService"
Cohesion: 0.20 Cohesion: 0.24
Nodes (3): SmsService, Injectable, Optional Nodes (3): ApiKeysService, Injectable, Inject
### Community 68 - "components/Skeleton.tsx" ### Community 68 - "components/Skeleton.tsx"
Cohesion: 0.21 Cohesion: 0.21
@ -639,9 +658,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
Cohesion: 0.05 Cohesion: 0.05
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more) Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
### Community 76 - "ProductsService" ### Community 76 - "RevalidationService"
Cohesion: 0.11 Cohesion: 0.07
Nodes (14): ProductsController, ApiOperation, ApiTags, Body, Controller, Get, Param, Patch (+6 more) Nodes (25): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional (+17 more)
### Community 77 - "seo.module.ts" ### Community 77 - "seo.module.ts"
Cohesion: 0.16 Cohesion: 0.16
@ -687,9 +706,9 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
Cohesion: 0.11 Cohesion: 0.11
Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more) Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more)
### Community 88 - "payment.controller.ts" ### Community 88 - "CreateEBankCheckoutDto"
Cohesion: 0.12 Cohesion: 0.22
Nodes (19): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min (+11 more) Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
### Community 89 - "seed-products.ts" ### Community 89 - "seed-products.ts"
Cohesion: 0.17 Cohesion: 0.17
@ -752,20 +771,24 @@ Cohesion: 0.15
Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TASK-SEC-003`, 4. `TASK-FIN-001`, 5. `TASK-BUILD-001`, 6. `TASK-AUTH-001`, 7. `TASK-FE-001` (+4 more) Nodes (12): 10. `TASK-VERIFY-001`, 1. `TASK-SEC-001`, 2. `TASK-SEC-002`, 3. `TASK-SEC-003`, 4. `TASK-FIN-001`, 5. `TASK-BUILD-001`, 6. `TASK-AUTH-001`, 7. `TASK-FE-001` (+4 more)
### Community 104 - "Products.tsx" ### Community 104 - "Products.tsx"
Cohesion: 0.09 Cohesion: 0.10
Nodes (25): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+17 more) Nodes (24): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+16 more)
### Community 105 - "Operational Rules & Boundaries" ### Community 105 - "Operational Rules & Boundaries"
Cohesion: 0.17 Cohesion: 0.17
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more) Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
### Community 107 - "BlogsService" ### Community 106 - "InitiatePaymentDto"
Cohesion: 0.13 Cohesion: 0.43
Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable Nodes (7): InitiatePaymentDto, InitiateWalletTopupDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
### Community 107 - "PaginationDto"
Cohesion: 0.07
Nodes (18): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+10 more)
### Community 108 - "PrismaService" ### Community 108 - "PrismaService"
Cohesion: 0.06 Cohesion: 0.06
Nodes (23): ApiExcludeController, CategoryQuery, PetQuery, PetsService, Injectable, MetricsController, Controller, Get (+15 more) Nodes (25): CategoryQuery, DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+17 more)
### Community 109 - "1. Summary of Integrity Repairs Performed" ### Community 109 - "1. Summary of Integrity Repairs Performed"
Cohesion: 0.17 Cohesion: 0.17
@ -783,17 +806,17 @@ 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 - "lib/services/api.ts" ### Community 113 - "settingsStore.ts"
Cohesion: 0.06 Cohesion: 0.07
Nodes (26): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+18 more) Nodes (22): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, Testimonial, Tooltip(), TooltipProps, SCIENTIFIC_TERMS (+14 more)
### Community 114 - "AppService" ### Community 114 - "AppService"
Cohesion: 0.29 Cohesion: 0.29
Nodes (5): AppController, Controller, Get, AppService, Injectable Nodes (5): AppController, Controller, Get, AppService, Injectable
### Community 115 - "Media.tsx" ### Community 115 - "MediaSelector.tsx"
Cohesion: 0.10 Cohesion: 0.05
Nodes (17): Pagination(), PaginationProps, Category, getFileType(), Media, MediaManager(), Pet, DoctorOption (+9 more) Nodes (45): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+37 more)
### Community 116 - "Vazirmatn Changelog" ### Community 116 - "Vazirmatn Changelog"
Cohesion: 0.18 Cohesion: 0.18
@ -820,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 - "Body" ### Community 122 - "Body"
Cohesion: 0.17 Cohesion: 0.11
Nodes (3): Body, Post, CouponInput Nodes (4): Body, Post, Put, CouponInput
### Community 123 - "auth.service.ts" ### Community 123 - "auth.service.ts"
Cohesion: 0.08 Cohesion: 0.07
Nodes (9): AppModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, RedisService (+1 more) Nodes (13): AppModule, Module, AuthModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput (+5 more)
### Community 124 - "Repository Map" ### Community 124 - "Repository Map"
Cohesion: 0.20 Cohesion: 0.20
@ -843,13 +866,13 @@ 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 - "auth.module.ts" ### Community 128 - "MetricsController"
Cohesion: 0.15 Cohesion: 0.29
Nodes (12): AdminModule, Module, DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload (+4 more) Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
### Community 129 - "WikiController" ### Community 129 - "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 130 - "Sahel-Font" ### Community 130 - "Sahel-Font"
Cohesion: 0.20 Cohesion: 0.20
@ -911,9 +934,9 @@ Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
Cohesion: 0.10 Cohesion: 0.10
Nodes (24): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+16 more) Nodes (24): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+16 more)
### Community 145 - "PaginationDto" ### Community 145 - "WholesaleApplyDto"
Cohesion: 0.15 Cohesion: 0.29
Nodes (13): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+5 more) Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
### Community 146 - "System Discovery" ### Community 146 - "System Discovery"
Cohesion: 0.25 Cohesion: 0.25
@ -927,18 +950,10 @@ Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, A
Cohesion: 0.16 Cohesion: 0.16
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
### Community 149 - "PetsController"
Cohesion: 0.15
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
### 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 151 - "SmsLogQueryDto"
Cohesion: 0.25
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
### Community 153 - "exclude" ### Community 153 - "exclude"
Cohesion: 0.22 Cohesion: 0.22
Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./tsconfig.json Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./tsconfig.json
@ -1091,18 +1106,14 @@ 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 - "RevalidationService" ### Community 204 - "reviews.service.ts"
Cohesion: 0.16 Cohesion: 0.33
Nodes (6): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable Nodes (5): ApiProperty, IsIn, IsOptional, IsString, UpdateReviewDto
### 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 - "AdminQueryDto"
Cohesion: 0.40
Nodes (5): AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
### Community 224 - "wiki/page.tsx" ### Community 224 - "wiki/page.tsx"
Cohesion: 0.40 Cohesion: 0.40
Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki() Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
@ -1111,9 +1122,13 @@ Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
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
### Community 294 - "ZibalService"
Cohesion: 0.09
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
### Community 298 - ".initiateOrderPayment" ### Community 298 - ".initiateOrderPayment"
Cohesion: 0.32 Cohesion: 0.20
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
### Community 317 - "revalidate/route.ts" ### Community 317 - "revalidate/route.ts"
Cohesion: 0.83 Cohesion: 0.83
@ -1122,22 +1137,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
## Knowledge Gaps ## Knowledge Gaps
- **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more) - **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more)
These have ≤1 connection - possible missing edges or undocumented components. These have ≤1 connection - possible missing edges or undocumented components.
- **97 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - **112 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 `ApiResponse` connect `ApiKeysService` to `WikiController`, `BlogsController`, `PetsController`, `ProductsService`, `UsersService`, `src/services/api.ts`, `OrdersService`, `auth.controller.ts`?** - **Why does `ApiResponse` connect `ApiResponse` to `WikiController`, `BlogsController`, `PetsController`, `RevalidationService`, `UsersService`, `HomeController`, `src/services/api.ts`, `OrdersService`, `auth.controller.ts`?**
_High betweenness centrality (0.076) - this node is a cross-community bridge._ _High betweenness centrality (0.076) - this node is a cross-community bridge._
- **Why does `Roles()` connect `Roles` to `CmsController`, `tickets.controller.ts`, `SettingsService`, `CreateReviewDto`, `PaginationDto`, `JwtAuthGuard`, `MenuService`, `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `SslController`, `BannersService`, `TestimonialsService`, `IngredientsService`, `PrescriptionsService`, `SmartAdvisorService`, `ProductsService`, `payment.controller.ts`?** - **Why does `Roles()` connect `Roles` to `WholesaleService`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SmsService`, `SslController`, `BannersService`, `RevalidationService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `PrescriptionsService`, `SmartAdvisorService`, `MenuService`?**
_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 `PrismaService` connect `PrismaService` to `app.module.ts`, `ApiKeysService`, `WikiController`, `CmsController`, `tickets.controller.ts`, `SettingsService`, `DoctorQueryDto`, `torob.controller.ts`, `CreateVideoDto`, `MenuService`, `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `ZibalService`, `CategoriesController`, `MediaController`, `ZibalEBankService`, `BannersService`, `TestimonialsService`, `sms.service.ts`, `IngredientsService`, `PrescriptionsService`, `SmartAdvisorService`, `admin.module.ts`, `admin.service.ts`, `SmsService`, `PetsController`, `RevalidationService`, `ProductsService`, `seo.module.ts`, `zibal.service.ts`, `OrdersService`, `PaymentService`, `BlogsService`, `auth.service.ts`?** - **Why does `PrismaService` connect `PrismaService` to `MetricsController`, `app.module.ts`, `CmsController`, `tickets.controller.ts`, `SmsService`, `UsersService`, `DoctorQueryDto`, `admin.service.ts`, `torob.controller.ts`, `CreateVideoDto`, `MenuService`, `WholesaleService`, `B2BService`, `ContactService`, `FaqService`, `ZibalService`, `CategoriesController`, `MediaController`, `ZibalEBankService`, `BannersService`, `TestimonialsService`, `HomeController`, `IngredientsService`, `PrescriptionsService`, `SmartAdvisorService`, `admin.module.ts`, `CreateApiKeyDto`, `ApiKeysService`, `PetsController`, `RevalidationService`, `reviews.service.ts`, `seo.module.ts`, `zibal.service.ts`, `OrdersService`, `PaginationDto`, `auth.service.ts`?**
_High betweenness centrality (0.031) - this node is a cross-community bridge._ _High betweenness centrality (0.031) - 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?**
_1356 weakly-connected nodes found - possible documentation gaps or missing edges._ _1356 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.06265664160401002 - nodes in this community are weakly interconnected._ _Cohesion score 0.06516290726817042 - nodes in this community are weakly interconnected._
- **Should `ApiKeysService` be split into smaller, more focused modules?** - **Should `ApiResponse` be split into smaller, more focused modules?**
_Cohesion score 0.05012531328320802 - nodes in this community are weakly interconnected._ _Cohesion score 0.12631578947368421 - 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.06187202538339503 - nodes in this community are weakly interconnected._ _Cohesion score 0.06187202538339503 - 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