feat(financial): add enable/disable toggle for shelter animal charity and round-up donation
This commit is contained in:
parent
e7ded849f6
commit
204350eff8
@ -20,6 +20,7 @@ export const DEFAULT_UI_TEXTS: Record<string, string> = {
|
||||
CATALOG_SHOW_ORDERS: 'false',
|
||||
CATALOG_SHOW_WALLET: 'false',
|
||||
CATALOG_SHOW_CHARITY: 'false',
|
||||
CHARITY_DONATION_ENABLED: 'true',
|
||||
PRESCRIPTION_UPLOAD_ENABLED: 'true',
|
||||
ORDER_DISABLED_TITLE: 'امکان ثبت سفارش آنلاین موقتاً غیرفعال است',
|
||||
ORDER_DISABLED_MESSAGE:
|
||||
|
||||
@ -100,6 +100,10 @@ export const CANONICAL_ALIASES: Record<string, string[]> = {
|
||||
charity_round_step: ['CHARITY_ROUND_STEP', 'charityRoundStep'],
|
||||
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_EBANK_TOKEN: [
|
||||
'zibal_ebank_token',
|
||||
@ -344,6 +348,10 @@ export class SettingsService implements OnModuleInit {
|
||||
map.get('charityRoundStep') ||
|
||||
'10000',
|
||||
);
|
||||
const charityDonationEnabled =
|
||||
map.get('CHARITY_DONATION_ENABLED') !== 'false' &&
|
||||
map.get('charity_donation_enabled') !== 'false' &&
|
||||
map.get('charityDonationEnabled') !== 'false';
|
||||
const walletWithdrawalEnabled =
|
||||
map.get('walletWithdrawalEnabled') === 'true';
|
||||
|
||||
@ -354,6 +362,7 @@ export class SettingsService implements OnModuleInit {
|
||||
taxPercentage,
|
||||
b2bDiscountPercent,
|
||||
charityRoundStep,
|
||||
charityDonationEnabled,
|
||||
charityDonationOptions: [10000, 20000, 50000],
|
||||
walletWithdrawalEnabled,
|
||||
};
|
||||
@ -397,6 +406,12 @@ export class SettingsService implements OnModuleInit {
|
||||
updates['charity_round_step'] = 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) {
|
||||
updates['walletWithdrawalEnabled'] = String(data.walletWithdrawalEnabled);
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ export default function FinancialSettingsPage() {
|
||||
walletWithdrawalEnabled: false,
|
||||
});
|
||||
const [charityStep, setCharityStep] = useState('10000');
|
||||
const [charityEnabled, setCharityEnabled] = useState(true);
|
||||
const [refillEnabled, setRefillEnabled] = useState(false);
|
||||
const [refillPercent, setRefillPercent] = useState('5');
|
||||
|
||||
@ -53,11 +54,18 @@ export default function FinancialSettingsPage() {
|
||||
charityDonationOptions: Array.isArray(data.charityDonationOptions)
|
||||
? data.charityDonationOptions.map(Number)
|
||||
: [10000, 20000, 50000],
|
||||
charityDonationEnabled: Boolean(data.charityDonationEnabled ?? true),
|
||||
walletWithdrawalEnabled: Boolean(data.walletWithdrawalEnabled ?? false),
|
||||
});
|
||||
if (data.charityDonationEnabled !== undefined) {
|
||||
setCharityEnabled(Boolean(data.charityDonationEnabled));
|
||||
}
|
||||
}
|
||||
if (resAdmin.data?.success) {
|
||||
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');
|
||||
setRefillPercent(resAdmin.data.data.REFILL_REWARD_PERCENT || '5');
|
||||
}
|
||||
@ -87,10 +95,14 @@ export default function FinancialSettingsPage() {
|
||||
try {
|
||||
setIsSaving(true);
|
||||
const [, , resPricing] = await Promise.all([
|
||||
api.patch('/settings/financial', financial),
|
||||
api.patch('/settings/financial', {
|
||||
...financial,
|
||||
charityDonationEnabled: charityEnabled,
|
||||
}),
|
||||
api.put('/admin/settings', {
|
||||
TAX_PERCENTAGE: String(financial.taxPercentage),
|
||||
CHARITY_ROUND_STEP: charityStep,
|
||||
CHARITY_DONATION_ENABLED: charityEnabled ? 'true' : 'false',
|
||||
REFILL_SUBSCRIPTION_ENABLED: refillEnabled ? 'true' : 'false',
|
||||
REFILL_REWARD_PERCENT: refillPercent,
|
||||
}),
|
||||
@ -168,63 +180,91 @@ export default function FinancialSettingsPage() {
|
||||
<p className="text-xs text-gray-500 mt-1">درصد قانونی محاسبه مالیات بر ارزش افزوده در فاکتور نهایی سفارشات.</p>
|
||||
</div>
|
||||
|
||||
{/* Charity Round Step */}
|
||||
<div>
|
||||
<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" />
|
||||
<span>پله رند کردن کمک به خیریه ردپای مهربانی (تومان)</span>
|
||||
{/* Charity Donation Toggle & Step */}
|
||||
<div className="md:col-span-2 p-5 bg-rose-50/50 rounded-2xl border border-rose-100 space-y-4">
|
||||
<label className="flex items-center justify-between cursor-pointer">
|
||||
<div className="flex items-start gap-3">
|
||||
<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>
|
||||
<PriceInput
|
||||
value={charityStep}
|
||||
onChange={(val) => setCharityStep(val)}
|
||||
placeholder="10000"
|
||||
className="px-4 py-3 rounded-xl border border-gray-200 focus:border-emerald-500 text-sm"
|
||||
/>
|
||||
<p className="text-xs text-gray-500 mt-1">مبلغ فاکتور به نزدیکترین ضریب این عدد (مثلاً ۱۰,۰۰۰ یا ۵۰,۰۰۰ تومان) رند میگردد.</p>
|
||||
|
||||
{charityEnabled && (
|
||||
<div className="pt-4 border-t border-rose-100/80 grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div>
|
||||
<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" />
|
||||
<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>
|
||||
|
||||
{/* Charity Donation Options */}
|
||||
<div className="md:col-span-2 space-y-2 pt-3 border-t border-gray-100">
|
||||
<label className="block text-sm font-bold text-gray-700 mb-1 flex items-center gap-1.5">
|
||||
<Heart className="w-4 h-4 text-rose-500" />
|
||||
<span>گزینههای دلخواه کمک مستقیم به خیریه (charityDonationOptions)</span>
|
||||
</label>
|
||||
<div className="flex gap-2 max-w-md">
|
||||
<PriceInput
|
||||
placeholder="مبلغ جدید (مثال: ۱۰۰,۰۰۰)"
|
||||
value={donationInput}
|
||||
onChange={(val) => setDonationInput(val)}
|
||||
className="px-4 py-2 rounded-xl border border-gray-200 text-xs"
|
||||
/>
|
||||
<Button
|
||||
type="button"
|
||||
variant="primary"
|
||||
size="xs"
|
||||
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"
|
||||
{charityEnabled && (
|
||||
<div className="md:col-span-2 space-y-2 pt-3 border-t border-gray-100">
|
||||
<label className="block text-sm font-bold text-gray-700 mb-1 flex items-center gap-1.5">
|
||||
<Heart className="w-4 h-4 text-rose-500" />
|
||||
<span>گزینههای دلخواه کمک مستقیم به خیریه (charityDonationOptions)</span>
|
||||
</label>
|
||||
<div className="flex gap-2 max-w-md">
|
||||
<PriceInput
|
||||
placeholder="مبلغ جدید (مثال: ۱۰۰,۰۰۰)"
|
||||
value={donationInput}
|
||||
onChange={(val) => setDonationInput(val)}
|
||||
className="px-4 py-2 rounded-xl border border-gray-200 text-xs"
|
||||
/>
|
||||
<Button
|
||||
type="button"
|
||||
variant="primary"
|
||||
size="xs"
|
||||
startIcon={Plus}
|
||||
onClick={addDonationOption}
|
||||
>
|
||||
{amount.toLocaleString('fa-IR')} تومان
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => removeDonationOption(amount)}
|
||||
className="hover:text-red-500 cursor-pointer"
|
||||
افزودن
|
||||
</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"
|
||||
>
|
||||
<X className="w-3.5 h-3.5" />
|
||||
</button>
|
||||
</span>
|
||||
))}
|
||||
{amount.toLocaleString('fa-IR')} تومان
|
||||
<button
|
||||
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>
|
||||
)}
|
||||
|
||||
{/* Refill Subscription and Reward Cashback */}
|
||||
<div className="md:col-span-2 pt-4 border-t border-gray-100 space-y-4">
|
||||
|
||||
@ -198,6 +198,7 @@ export interface FinancialSettings {
|
||||
freeShippingThreshold: number;
|
||||
standardShippingFee: number;
|
||||
charityDonationOptions: number[];
|
||||
charityDonationEnabled?: boolean;
|
||||
walletWithdrawalEnabled?: boolean;
|
||||
}
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ import api from "../lib/services/api";
|
||||
|
||||
export default function CheckoutPage() {
|
||||
const router = useRouter();
|
||||
const { showPrices } = useCatalogMode();
|
||||
const { items, getTotal, getSubtotal, isSubscribed, charityDonation, setCharityDonation, addOrder, clearCart } = useCartStore();
|
||||
const { pets, activePetId, getActivePet, updatePet } = usePetStore();
|
||||
const { profile, isLoggedIn } = useUserStore();
|
||||
@ -90,6 +91,12 @@ export default function CheckoutPage() {
|
||||
});
|
||||
}, [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 shippingFeeSetting = useSettingsStore((state) => state.getText('shipping_fee', '0'));
|
||||
const baseShippingFee = Number(shippingFeeSetting) || 0;
|
||||
@ -106,7 +113,10 @@ export default function CheckoutPage() {
|
||||
const remainder = subtotal % roundStep;
|
||||
const roundUpDiff = remainder === 0 ? roundStep : roundStep - remainder;
|
||||
|
||||
const effectiveCharityDonation = isCharityEnabled ? charityDonation : 0;
|
||||
|
||||
const handleCharityToggle = () => {
|
||||
if (!isCharityEnabled) return;
|
||||
if (!useRoundUp) {
|
||||
setCharityDonation(roundUpDiff);
|
||||
setUseRoundUp(true);
|
||||
@ -218,7 +228,7 @@ export default function CheckoutPage() {
|
||||
const orderId = await addOrder({
|
||||
items: [...items],
|
||||
total: totalAmount,
|
||||
charityDonation: charityDonation,
|
||||
charityDonation: effectiveCharityDonation,
|
||||
paymentMethod: paymentMethod,
|
||||
isRefill: isSubscribed,
|
||||
petId: selectedPetId || undefined,
|
||||
@ -732,27 +742,29 @@ export default function CheckoutPage() {
|
||||
</section>
|
||||
|
||||
{/* 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">
|
||||
<div className="flex items-center gap-2.5">
|
||||
<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" />
|
||||
{showPrices && isCharityEnabled && (
|
||||
<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="flex items-center gap-2.5">
|
||||
<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>
|
||||
<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>
|
||||
<button
|
||||
type="button"
|
||||
onClick={handleCharityToggle}
|
||||
className={cn(
|
||||
"px-3 py-1.5 rounded-xl text-xs font-bold transition-all shrink-0 cursor-pointer",
|
||||
useRoundUp ? "bg-pink-500 text-white shadow-xs" : "bg-white text-pink-600 border border-pink-200 hover:bg-pink-50"
|
||||
)}
|
||||
>
|
||||
{useRoundUp ? `اهدای ${toPersian(charityDonation.toLocaleString())} ت` : 'مشارکت در خیریه'}
|
||||
</button>
|
||||
</section>
|
||||
<button
|
||||
type="button"
|
||||
onClick={handleCharityToggle}
|
||||
className={cn(
|
||||
"px-3 py-1.5 rounded-xl text-xs font-bold transition-all shrink-0 cursor-pointer",
|
||||
useRoundUp ? "bg-pink-500 text-white shadow-xs" : "bg-white text-pink-600 border border-pink-200 hover:bg-pink-50"
|
||||
)}
|
||||
>
|
||||
{useRoundUp ? `اهدای ${toPersian(charityDonation.toLocaleString())} ت` : 'مشارکت در خیریه'}
|
||||
</button>
|
||||
</section>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Sticky Order Summary Sidebar (4 cols) */}
|
||||
@ -792,7 +804,7 @@ export default function CheckoutPage() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{charityDonation > 0 && (
|
||||
{isCharityEnabled && charityDonation > 0 && (
|
||||
<div className="flex justify-between text-pink-400 font-bold">
|
||||
<span>ردپای مهربانی</span>
|
||||
<span className="font-vazir">{toPersian(charityDonation.toLocaleString())} تومان+</span>
|
||||
|
||||
@ -30,6 +30,7 @@ import {
|
||||
} from "lucide-react";
|
||||
import { usePetStore, PetProfile as GlobalPetProfile, Reminder, HealthLog } from "../lib/store/usePetStore";
|
||||
import { useCartStore } from "../lib/store/cartStore";
|
||||
import { useSettingsStore } from "../lib/store/settingsStore";
|
||||
import SmartAdvisor from "./SmartAdvisor";
|
||||
import OrderDetailsModal from "./OrderDetailsModal";
|
||||
import { toast } from "sonner";
|
||||
@ -47,6 +48,12 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
|
||||
const searchParams = useSearchParams();
|
||||
const { pets, addPet, removePet, setActivePet, getActivePet, updatePet, addReminder, toggleReminder, addHealthLog } = usePetStore();
|
||||
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 [isLoading, setIsLoading] = useState(true);
|
||||
const [products, setProducts] = useState<Product[]>([]);
|
||||
@ -855,7 +862,7 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
|
||||
</div>
|
||||
|
||||
{/* 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="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 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">
|
||||
<Activity className="w-16 h-16 text-white" />
|
||||
</div>
|
||||
@ -921,43 +928,45 @@ export default function PetProfile({ initialView, advisorNeed, embedded = false
|
||||
</div>
|
||||
|
||||
{/* 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">
|
||||
<div className="absolute -bottom-8 -left-8 opacity-5">
|
||||
<Heart className="w-48 h-48 fill-pink-500" />
|
||||
</div>
|
||||
<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" />
|
||||
{isCharityEnabled && (
|
||||
<div className="bg-pink-50 rounded-[3.5rem] p-10 border border-pink-100 relative overflow-hidden flex flex-col justify-between">
|
||||
<div className="absolute -bottom-8 -left-8 opacity-5">
|
||||
<Heart className="w-48 h-48 fill-pink-500" />
|
||||
</div>
|
||||
<div>
|
||||
<h3 className="text-xl font-black text-medical-gray-900 italic">ردپای مهربانی {activePet.name}</h3>
|
||||
<p className="text-[10px] font-black text-pink-500 uppercase tracking-widest mt-1">سفیر مهربانی: {activePet.name}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-4 relative z-10">
|
||||
<div className="bg-white/90 backdrop-blur-sm rounded-2xl p-4 border border-pink-100 space-y-2.5">
|
||||
<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 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>
|
||||
<h3 className="text-xl font-black text-medical-gray-900 italic">ردپای مهربانی {activePet.name}</h3>
|
||||
<p className="text-[10px] font-black text-pink-500 uppercase tracking-widest mt-1">سفیر مهربانی: {activePet.name}</p>
|
||||
</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 className="space-y-4 relative z-10">
|
||||
<div className="bg-white/90 backdrop-blur-sm rounded-2xl p-4 border border-pink-100 space-y-2.5">
|
||||
<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>
|
||||
{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>
|
||||
)}
|
||||
</section>
|
||||
|
||||
{/* Refill & Stock Tracking */}
|
||||
|
||||
@ -32,9 +32,16 @@ export function useCatalogMode() {
|
||||
? getBoolean("CATALOG_SHOW_WALLET", false) || getBoolean("catalog_show_wallet", false)
|
||||
: true;
|
||||
|
||||
const showCharity = isCatalogOnly
|
||||
? getBoolean("CATALOG_SHOW_CHARITY", false) || getBoolean("catalog_show_charity", false)
|
||||
: true;
|
||||
const isCharityGlobalEnabled =
|
||||
getBoolean("CHARITY_DONATION_ENABLED", 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(
|
||||
"ORDER_DISABLED_TITLE",
|
||||
|
||||
@ -1,13 +1,13 @@
|
||||
{
|
||||
"0": "Roles",
|
||||
"1": "app.module.ts",
|
||||
"2": "ApiKeysService",
|
||||
"2": "ApiResponse",
|
||||
"3": "productService.ts",
|
||||
"4": "HomeClient.tsx",
|
||||
"5": "CmsController",
|
||||
"6": "tickets.controller.ts",
|
||||
"7": "SmsSettingsPage.tsx",
|
||||
"8": "SettingsService",
|
||||
"8": "SmsService",
|
||||
"9": "devDependencies",
|
||||
"10": "CreateReviewDto",
|
||||
"11": "UsersService",
|
||||
@ -18,7 +18,7 @@
|
||||
"16": "DoctorQueryDto",
|
||||
"17": "schema.ts",
|
||||
"18": "JwtAuthGuard",
|
||||
"19": "BulkPriceAdjustmentDto",
|
||||
"19": "admin.service.ts",
|
||||
"20": "CreateVideoDto",
|
||||
"21": "useSettingsStore",
|
||||
"22": "AdminService",
|
||||
@ -32,7 +32,7 @@
|
||||
"30": "DEVOPS-001",
|
||||
"31": "DOC-001",
|
||||
"32": "adminRoutes.tsx",
|
||||
"33": "WholesaleApplyDto",
|
||||
"33": "WholesaleService",
|
||||
"34": "B2BService",
|
||||
"35": "ContactService",
|
||||
"36": "FaqService",
|
||||
@ -45,7 +45,7 @@
|
||||
"43": "BannersService",
|
||||
"44": "TestimonialsService",
|
||||
"45": "What You Must Do When Invoked",
|
||||
"46": "sms.service.ts",
|
||||
"46": "HomeController",
|
||||
"47": "IngredientsService",
|
||||
"48": "Button.tsx",
|
||||
"49": "devDependencies",
|
||||
@ -55,18 +55,18 @@
|
||||
"53": "SmartAdvisorService",
|
||||
"54": "Modal.tsx",
|
||||
"55": "UITexts.tsx",
|
||||
"56": "Orders.tsx",
|
||||
"56": "PrescriptionsManager.tsx",
|
||||
"57": "Role & Core Objective",
|
||||
"58": "ConfirmModal.tsx",
|
||||
"58": "Orders.tsx",
|
||||
"59": "compilerOptions",
|
||||
"60": "admin.controller.ts",
|
||||
"61": "ProductPage.tsx",
|
||||
"62": "admin.module.ts",
|
||||
"63": "dependencies",
|
||||
"64": "compilerOptions",
|
||||
"65": "admin.service.ts",
|
||||
"65": "CreateApiKeyDto",
|
||||
"66": "AdminController",
|
||||
"67": "SmsService",
|
||||
"67": "ApiKeysService",
|
||||
"68": "components/Skeleton.tsx",
|
||||
"69": "Required Review Group Closures",
|
||||
"70": "compilerOptions",
|
||||
@ -75,7 +75,7 @@
|
||||
"73": "Operational Rules & Boundaries",
|
||||
"74": "WikiController",
|
||||
"75": "PetsController",
|
||||
"76": "ProductsService",
|
||||
"76": "RevalidationService",
|
||||
"77": "seo.module.ts",
|
||||
"78": "rss.xml/route.ts",
|
||||
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
|
||||
@ -87,7 +87,7 @@
|
||||
"85": "app.e2e-spec.js",
|
||||
"86": "zibal.service.ts",
|
||||
"87": "dependencies",
|
||||
"88": "payment.controller.ts",
|
||||
"88": "CreateEBankCheckoutDto",
|
||||
"89": "seed-products.ts",
|
||||
"90": "20260526145407_init/migration.sql",
|
||||
"91": "Reconciled Audit Roles & Assignments",
|
||||
@ -105,16 +105,16 @@
|
||||
"103": "Comprehensive Change Log",
|
||||
"104": "Products.tsx",
|
||||
"105": "Operational Rules & Boundaries",
|
||||
"106": "PaymentService",
|
||||
"107": "BlogsService",
|
||||
"106": "InitiatePaymentDto",
|
||||
"107": "PaginationDto",
|
||||
"108": "PrismaService",
|
||||
"109": "1. Summary of Integrity Repairs Performed",
|
||||
"110": "Operational Rules & Boundaries",
|
||||
"111": "Operational Rules & Boundaries",
|
||||
"112": "Operational Rules & Boundaries",
|
||||
"113": "lib/services/api.ts",
|
||||
"113": "settingsStore.ts",
|
||||
"114": "AppService",
|
||||
"115": "Media.tsx",
|
||||
"115": "MediaSelector.tsx",
|
||||
"116": "Vazirmatn Changelog",
|
||||
"117": "Vazirmatn Font فونت وزیرمتن",
|
||||
"118": "Operational Rules & Boundaries",
|
||||
@ -127,7 +127,7 @@
|
||||
"125": "validate_integrity.js",
|
||||
"126": "admin-panel/package.json",
|
||||
"127": "Sahel-Font",
|
||||
"128": "auth.module.ts",
|
||||
"128": "MetricsController",
|
||||
"129": "WikiController",
|
||||
"130": "Sahel-Font",
|
||||
"131": "Role & Core Objective",
|
||||
@ -144,13 +144,13 @@
|
||||
"142": "start-dev.js",
|
||||
"143": "generate-openapi.js",
|
||||
"144": "SafeImage.tsx",
|
||||
"145": "PaginationDto",
|
||||
"145": "WholesaleApplyDto",
|
||||
"146": "System Discovery",
|
||||
"147": "torob.controller.ts",
|
||||
"148": "ProductDto",
|
||||
"149": "PetsController",
|
||||
"149": "class-transformer",
|
||||
"150": "Product Requirement Document (PRD)",
|
||||
"151": "SmsLogQueryDto",
|
||||
"151": "helmet",
|
||||
"152": "@eslint/js",
|
||||
"153": "exclude",
|
||||
"154": "Baseline Command Plan & Reconciled Command History",
|
||||
@ -203,7 +203,7 @@
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "RevalidationService",
|
||||
"204": "reviews.service.ts",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -219,7 +219,7 @@
|
||||
"217": "sync_honest_manifest.js",
|
||||
"218": "sync_manifest.js",
|
||||
"219": "FormField.tsx",
|
||||
"220": "AdminQueryDto",
|
||||
"220": "js-yaml",
|
||||
"221": "Textarea.tsx",
|
||||
"222": "admin-panel/tsconfig.json",
|
||||
"223": "tailwindcss",
|
||||
@ -231,8 +231,8 @@
|
||||
"229": ".agents/workflows/graphify.md",
|
||||
"230": "instructions.md",
|
||||
"231": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
|
||||
"232": "@types/node",
|
||||
"233": "typescript",
|
||||
"232": "@nestjs/core",
|
||||
"233": "@nestjs/jwt",
|
||||
"234": "source-map-support",
|
||||
"235": "ts-loader",
|
||||
"236": "ts-node",
|
||||
@ -264,10 +264,11 @@
|
||||
"262": "User Logout API",
|
||||
"263": "generate-openapi.d.ts",
|
||||
"264": "@types/compression",
|
||||
"265": "tailwindcss",
|
||||
"265": "@nestjs/swagger",
|
||||
"266": "@types/express",
|
||||
"267": "@types/jest",
|
||||
"268": "@types/multer",
|
||||
"269": "@nestjs/throttler",
|
||||
"270": "app-audit-verification.e2e-spec.d.ts",
|
||||
"271": "app.e2e-spec.d.ts",
|
||||
"272": "Canina Pharma GmbH",
|
||||
@ -293,22 +294,36 @@
|
||||
"292": "Production Docker Compose",
|
||||
"293": "Staging Docker Compose",
|
||||
"294": "ZibalService",
|
||||
"295": "passport",
|
||||
"296": "reflect-metadata",
|
||||
"297": "ZibalEBankService",
|
||||
"298": ".initiateOrderPayment",
|
||||
"299": "@tailwindcss/postcss",
|
||||
"300": "typescript",
|
||||
"301": "swagger-ui-express",
|
||||
"302": "typescript-eslint",
|
||||
"303": "@nestjs/schematics",
|
||||
"304": "@eslint/eslintrc",
|
||||
"305": "eslint-plugin-prettier",
|
||||
"306": "eslint-plugin-react-hooks",
|
||||
"307": "globals",
|
||||
"308": "@nestjs/cli",
|
||||
"309": "axios",
|
||||
"310": "tailwindcss",
|
||||
"311": "jest",
|
||||
"312": "@types/passport-jwt",
|
||||
"313": "@nestjs/testing",
|
||||
"314": "prettier",
|
||||
"315": "typescript",
|
||||
"316": "ts-jest",
|
||||
"317": "revalidate/route.ts",
|
||||
"318": "MaskableField.tsx",
|
||||
"319": "@types/js-yaml",
|
||||
"320": "@types/supertest",
|
||||
"321": "orders/page.tsx",
|
||||
"322": "pets/page.tsx",
|
||||
"323": "typescript-eslint",
|
||||
"324": "@tailwindcss/postcss",
|
||||
"325": "@types/react-dom",
|
||||
"327": "eslint-plugin-react-refresh"
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -7,7 +7,7 @@
|
||||
"5": "CmsController",
|
||||
"6": "tickets.controller.ts",
|
||||
"7": "SmsSettingsPage.tsx",
|
||||
"8": "SmsService",
|
||||
"8": "SettingsService",
|
||||
"9": "devDependencies",
|
||||
"10": "CreateReviewDto",
|
||||
"11": "UsersService",
|
||||
@ -32,7 +32,7 @@
|
||||
"30": "DEVOPS-001",
|
||||
"31": "DOC-001",
|
||||
"32": "adminRoutes.tsx",
|
||||
"33": "WholesaleService",
|
||||
"33": "WholesaleApplyDto",
|
||||
"34": "B2BService",
|
||||
"35": "ContactService",
|
||||
"36": "FaqService",
|
||||
@ -45,7 +45,7 @@
|
||||
"43": "BannersService",
|
||||
"44": "TestimonialsService",
|
||||
"45": "What You Must Do When Invoked",
|
||||
"46": "WholesaleApplyDto",
|
||||
"46": "sms.service.ts",
|
||||
"47": "IngredientsService",
|
||||
"48": "Button.tsx",
|
||||
"49": "devDependencies",
|
||||
@ -55,9 +55,9 @@
|
||||
"53": "SmartAdvisorService",
|
||||
"54": "Modal.tsx",
|
||||
"55": "UITexts.tsx",
|
||||
"56": "PrescriptionsManager.tsx",
|
||||
"56": "Orders.tsx",
|
||||
"57": "Role & Core Objective",
|
||||
"58": "MetricsController",
|
||||
"58": "ConfirmModal.tsx",
|
||||
"59": "compilerOptions",
|
||||
"60": "admin.controller.ts",
|
||||
"61": "ProductPage.tsx",
|
||||
@ -66,7 +66,7 @@
|
||||
"64": "compilerOptions",
|
||||
"65": "admin.service.ts",
|
||||
"66": "AdminController",
|
||||
"67": "OrdersController",
|
||||
"67": "SmsService",
|
||||
"68": "components/Skeleton.tsx",
|
||||
"69": "Required Review Group Closures",
|
||||
"70": "compilerOptions",
|
||||
@ -75,7 +75,7 @@
|
||||
"73": "Operational Rules & Boundaries",
|
||||
"74": "WikiController",
|
||||
"75": "PetsController",
|
||||
"76": "RevalidationService",
|
||||
"76": "ProductsService",
|
||||
"77": "seo.module.ts",
|
||||
"78": "rss.xml/route.ts",
|
||||
"79": "🏢 AI Software Agency — Master Orchestration Protocol v3",
|
||||
@ -87,11 +87,11 @@
|
||||
"85": "app.e2e-spec.js",
|
||||
"86": "zibal.service.ts",
|
||||
"87": "dependencies",
|
||||
"88": "CreateEBankCheckoutDto",
|
||||
"88": "payment.controller.ts",
|
||||
"89": "seed-products.ts",
|
||||
"90": "20260526145407_init/migration.sql",
|
||||
"91": "Reconciled Audit Roles & Assignments",
|
||||
"92": ".retryPayment",
|
||||
"92": "OrdersService",
|
||||
"93": "auth.controller.ts",
|
||||
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
|
||||
"95": "wiki/[slug]/page.tsx",
|
||||
@ -105,8 +105,8 @@
|
||||
"103": "Comprehensive Change Log",
|
||||
"104": "Products.tsx",
|
||||
"105": "Operational Rules & Boundaries",
|
||||
"106": "InitiatePaymentDto",
|
||||
"107": "PaginationDto",
|
||||
"106": "PaymentService",
|
||||
"107": "BlogsService",
|
||||
"108": "PrismaService",
|
||||
"109": "1. Summary of Integrity Repairs Performed",
|
||||
"110": "Operational Rules & Boundaries",
|
||||
@ -114,7 +114,7 @@
|
||||
"112": "Operational Rules & Boundaries",
|
||||
"113": "lib/services/api.ts",
|
||||
"114": "AppService",
|
||||
"115": "MediaSelector.tsx",
|
||||
"115": "Media.tsx",
|
||||
"116": "Vazirmatn Changelog",
|
||||
"117": "Vazirmatn Font فونت وزیرمتن",
|
||||
"118": "Operational Rules & Boundaries",
|
||||
@ -127,7 +127,7 @@
|
||||
"125": "validate_integrity.js",
|
||||
"126": "admin-panel/package.json",
|
||||
"127": "Sahel-Font",
|
||||
"128": "HomeController",
|
||||
"128": "auth.module.ts",
|
||||
"129": "WikiController",
|
||||
"130": "Sahel-Font",
|
||||
"131": "Role & Core Objective",
|
||||
@ -144,13 +144,13 @@
|
||||
"142": "start-dev.js",
|
||||
"143": "generate-openapi.js",
|
||||
"144": "SafeImage.tsx",
|
||||
"145": "Orders.tsx",
|
||||
"145": "PaginationDto",
|
||||
"146": "System Discovery",
|
||||
"147": "torob.controller.ts",
|
||||
"148": "ProductDto",
|
||||
"149": "CreateOrderDto",
|
||||
"149": "PetsController",
|
||||
"150": "Product Requirement Document (PRD)",
|
||||
"151": "OrdersService",
|
||||
"151": "SmsLogQueryDto",
|
||||
"152": "@eslint/js",
|
||||
"153": "exclude",
|
||||
"154": "Baseline Command Plan & Reconciled Command History",
|
||||
@ -178,7 +178,7 @@
|
||||
"176": "uploads/[...path]/route.ts",
|
||||
"177": "eslint-config-prettier",
|
||||
"178": "نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina",
|
||||
"179": "CreateApiKeyDto",
|
||||
"179": "eslint-config-next",
|
||||
"180": "API Contract Specification",
|
||||
"181": "⚙️ Backend Technical Review (05_dev_backend)",
|
||||
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
|
||||
@ -203,7 +203,7 @@
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "reviews.service.ts",
|
||||
"204": "RevalidationService",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -307,7 +307,6 @@
|
||||
"315": "typescript",
|
||||
"317": "revalidate/route.ts",
|
||||
"318": "MaskableField.tsx",
|
||||
"319": "@tailwindcss/postcss",
|
||||
"321": "orders/page.tsx",
|
||||
"322": "pets/page.tsx",
|
||||
"325": "@types/react-dom",
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
# Graph Report - canina (2026-09-13)
|
||||
|
||||
## Corpus Check
|
||||
- 609 files · ~1,125,316 words
|
||||
- 609 files · ~1,125,530 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## 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)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## 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 `graphify update .` after code changes (no API cost).
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
- CmsController
|
||||
- tickets.controller.ts
|
||||
- SmsSettingsPage.tsx
|
||||
- SmsService
|
||||
- SettingsService
|
||||
- devDependencies
|
||||
- CreateReviewDto
|
||||
- UsersService
|
||||
@ -48,7 +48,7 @@
|
||||
- DEVOPS-001
|
||||
- DOC-001
|
||||
- adminRoutes.tsx
|
||||
- WholesaleService
|
||||
- WholesaleApplyDto
|
||||
- B2BService
|
||||
- ContactService
|
||||
- FaqService
|
||||
@ -61,7 +61,7 @@
|
||||
- BannersService
|
||||
- TestimonialsService
|
||||
- What You Must Do When Invoked
|
||||
- WholesaleApplyDto
|
||||
- sms.service.ts
|
||||
- IngredientsService
|
||||
- Button.tsx
|
||||
- devDependencies
|
||||
@ -71,9 +71,9 @@
|
||||
- SmartAdvisorService
|
||||
- Modal.tsx
|
||||
- UITexts.tsx
|
||||
- PrescriptionsManager.tsx
|
||||
- Orders.tsx
|
||||
- Role & Core Objective
|
||||
- MetricsController
|
||||
- ConfirmModal.tsx
|
||||
- compilerOptions
|
||||
- admin.controller.ts
|
||||
- ProductPage.tsx
|
||||
@ -82,7 +82,7 @@
|
||||
- compilerOptions
|
||||
- admin.service.ts
|
||||
- AdminController
|
||||
- OrdersController
|
||||
- SmsService
|
||||
- components/Skeleton.tsx
|
||||
- Required Review Group Closures
|
||||
- compilerOptions
|
||||
@ -91,7 +91,7 @@
|
||||
- Operational Rules & Boundaries
|
||||
- WikiController
|
||||
- PetsController
|
||||
- RevalidationService
|
||||
- ProductsService
|
||||
- seo.module.ts
|
||||
- rss.xml/route.ts
|
||||
- 🏢 AI Software Agency — Master Orchestration Protocol v3
|
||||
@ -103,11 +103,11 @@
|
||||
- app.e2e-spec.js
|
||||
- zibal.service.ts
|
||||
- dependencies
|
||||
- CreateEBankCheckoutDto
|
||||
- payment.controller.ts
|
||||
- seed-products.ts
|
||||
- 20260526145407_init/migration.sql
|
||||
- Reconciled Audit Roles & Assignments
|
||||
- .retryPayment
|
||||
- OrdersService
|
||||
- auth.controller.ts
|
||||
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
|
||||
- wiki/[slug]/page.tsx
|
||||
@ -121,8 +121,8 @@
|
||||
- Comprehensive Change Log
|
||||
- Products.tsx
|
||||
- Operational Rules & Boundaries
|
||||
- InitiatePaymentDto
|
||||
- PaginationDto
|
||||
- PaymentService
|
||||
- BlogsService
|
||||
- PrismaService
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
- Operational Rules & Boundaries
|
||||
@ -130,7 +130,7 @@
|
||||
- Operational Rules & Boundaries
|
||||
- lib/services/api.ts
|
||||
- AppService
|
||||
- MediaSelector.tsx
|
||||
- Media.tsx
|
||||
- Vazirmatn Changelog
|
||||
- Vazirmatn Font فونت وزیرمتن
|
||||
- Operational Rules & Boundaries
|
||||
@ -143,7 +143,7 @@
|
||||
- validate_integrity.js
|
||||
- admin-panel/package.json
|
||||
- Sahel-Font
|
||||
- HomeController
|
||||
- auth.module.ts
|
||||
- WikiController
|
||||
- Sahel-Font
|
||||
- Role & Core Objective
|
||||
@ -160,13 +160,13 @@
|
||||
- start-dev.js
|
||||
- generate-openapi.js
|
||||
- SafeImage.tsx
|
||||
- Orders.tsx
|
||||
- PaginationDto
|
||||
- System Discovery
|
||||
- torob.controller.ts
|
||||
- ProductDto
|
||||
- CreateOrderDto
|
||||
- PetsController
|
||||
- Product Requirement Document (PRD)
|
||||
- OrdersService
|
||||
- SmsLogQueryDto
|
||||
- @eslint/js
|
||||
- exclude
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
@ -193,7 +193,7 @@
|
||||
- uploads/[...path]/route.ts
|
||||
- eslint-config-prettier
|
||||
- نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina
|
||||
- CreateApiKeyDto
|
||||
- eslint-config-next
|
||||
- API Contract Specification
|
||||
- ⚙️ Backend Technical Review (05_dev_backend)
|
||||
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
|
||||
@ -218,7 +218,7 @@
|
||||
- deploy.sh
|
||||
- 🔒 Security & Performance Review (09_devops_security)
|
||||
- 👁️ UX & Persona Interface Review (08_visual_qa)
|
||||
- reviews.service.ts
|
||||
- RevalidationService
|
||||
- prisma/scientificTerms.ts
|
||||
- seed-blogs.ts
|
||||
- seed-custom.ts
|
||||
@ -305,7 +305,6 @@
|
||||
- typescript
|
||||
- revalidate/route.ts
|
||||
- MaskableField.tsx
|
||||
- @tailwindcss/postcss
|
||||
- @types/react-dom
|
||||
- eslint-plugin-react-refresh
|
||||
|
||||
@ -328,29 +327,29 @@
|
||||
backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `BlogsController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `HomeController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/home/home.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `OrdersController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `PetsController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/pets/pets.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
|
||||
## 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/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
|
||||
|
||||
## Communities (313 total, 96 thin omitted)
|
||||
## Communities (312 total, 97 thin omitted)
|
||||
|
||||
### Community 0 - "Roles"
|
||||
Cohesion: 0.24
|
||||
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
|
||||
|
||||
### Community 1 - "app.module.ts"
|
||||
Cohesion: 0.07
|
||||
Nodes (38): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+30 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more)
|
||||
|
||||
### Community 2 - "ApiKeysService"
|
||||
Cohesion: 0.09
|
||||
Nodes (16): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (33): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+25 more)
|
||||
|
||||
### Community 3 - "productService.ts"
|
||||
Cohesion: 0.06
|
||||
@ -372,21 +371,21 @@ Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty,
|
||||
Cohesion: 0.20
|
||||
Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more)
|
||||
|
||||
### Community 8 - "SmsService"
|
||||
Cohesion: 0.05
|
||||
Nodes (28): SmsEventDefinition, SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber (+20 more)
|
||||
### Community 8 - "SettingsService"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+9 more)
|
||||
|
||||
### Community 9 - "devDependencies"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
|
||||
|
||||
### Community 10 - "CreateReviewDto"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more)
|
||||
|
||||
### Community 11 - "UsersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (38): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), JwtPayload, JwtStrategy, Injectable, AddressDto, ApiProperty (+30 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (31): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+23 more)
|
||||
|
||||
### Community 12 - "index.ts"
|
||||
Cohesion: 0.06
|
||||
@ -402,7 +401,7 @@ Nodes (35): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), Address
|
||||
|
||||
### Community 15 - "src/services/api.ts"
|
||||
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"
|
||||
Cohesion: 0.09
|
||||
@ -413,8 +412,8 @@ Cohesion: 0.14
|
||||
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
|
||||
|
||||
### Community 18 - "JwtAuthGuard"
|
||||
Cohesion: 0.20
|
||||
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
Cohesion: 0.16
|
||||
Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, SortOrder, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
|
||||
### Community 19 - "BulkPriceAdjustmentDto"
|
||||
Cohesion: 0.30
|
||||
@ -425,8 +424,8 @@ Cohesion: 0.07
|
||||
Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+23 more)
|
||||
|
||||
### Community 21 - "useSettingsStore"
|
||||
Cohesion: 0.08
|
||||
Nodes (29): ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps, Footer() (+21 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (26): CartDrawer, ClientLayout(), MobileBottomNav, PrescriptionUploadModal, metadata, B2BLandingClient(), BrandLogo(), BrandLogoProps (+18 more)
|
||||
|
||||
### Community 23 - "MenuService"
|
||||
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)
|
||||
|
||||
### Community 32 - "adminRoutes.tsx"
|
||||
Cohesion: 0.07
|
||||
Nodes (17): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, BestSellerItem, CategoryDistItem (+9 more)
|
||||
Cohesion: 0.11
|
||||
Nodes (10): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, AdminRouteConfig, Dashboard (+2 more)
|
||||
|
||||
### Community 33 - "WholesaleService"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
|
||||
### Community 33 - "WholesaleApplyDto"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
|
||||
|
||||
### Community 34 - "B2BService"
|
||||
Cohesion: 0.12
|
||||
@ -489,8 +488,8 @@ Cohesion: 0.07
|
||||
Nodes (25): اجرای بکاند, اجرای فرانتاند, اجرای پروژه در سرور با PM2, برای راهاندازی بکاند:, برای راهاندازی فرانتاند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسهها تا پس از ریاستارت سرور قطع نشوند:, راهاندازی و انتشار سیستم (Setup & Deployment) (+17 more)
|
||||
|
||||
### Community 38 - "Button"
|
||||
Cohesion: 0.16
|
||||
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (20): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Badge(), BadgeProps, BadgeVariant, variantStyles, Button() (+12 more)
|
||||
|
||||
### Community 39 - "CategoriesController"
|
||||
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)
|
||||
|
||||
### Community 42 - "SslController"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
|
||||
Cohesion: 0.11
|
||||
Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more)
|
||||
|
||||
### Community 43 - "BannersService"
|
||||
Cohesion: 0.13
|
||||
@ -520,17 +519,17 @@ Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
|
||||
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)
|
||||
|
||||
### Community 46 - "WholesaleApplyDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
|
||||
### Community 46 - "sms.service.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (16): DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventDefinition, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+8 more)
|
||||
|
||||
### Community 47 - "IngredientsService"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 48 - "Button.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (15): ButtonProps, ButtonSize, ButtonVariant, Spinner(), FAQ, SslStatus, BannersManager, FAQManager (+7 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (17): ButtonProps, ButtonSize, ButtonVariant, Spinner(), BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps (+9 more)
|
||||
|
||||
### Community 49 - "devDependencies"
|
||||
Cohesion: 0.11
|
||||
@ -538,7 +537,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
|
||||
|
||||
### Community 50 - "devDependencies"
|
||||
Cohesion: 0.12
|
||||
Nodes (17): eslint-config-next, devDependencies, eslint, eslint-config-next, jsdom, @testing-library/jest-dom, @testing-library/react, @types/node (+9 more)
|
||||
Nodes (17): devDependencies, eslint, jsdom, @tailwindcss/postcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
|
||||
|
||||
### Community 51 - "BlogsController"
|
||||
Cohesion: 0.07
|
||||
@ -553,24 +552,24 @@ Cohesion: 0.13
|
||||
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 54 - "Modal.tsx"
|
||||
Cohesion: 0.07
|
||||
Nodes (21): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, MENU_TABS, MenuItem, MenuType (+13 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (17): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, FAQ, BlogCommentItem, ProductReview (+9 more)
|
||||
|
||||
### Community 55 - "UITexts.tsx"
|
||||
Cohesion: 0.14
|
||||
Nodes (12): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ToggleSwitch(), ToggleSwitchProps, AppSitePage, PageSection, SectionField (+4 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (35): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector() (+27 more)
|
||||
|
||||
### Community 56 - "PrescriptionsManager.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, ProductItem, UserRecord (+6 more)
|
||||
### Community 56 - "Orders.tsx"
|
||||
Cohesion: 0.11
|
||||
Nodes (15): Skeleton(), MonitoringStats, getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx (+7 more)
|
||||
|
||||
### Community 57 - "Role & Core Objective"
|
||||
Cohesion: 0.09
|
||||
Nodes (22): CREATE MODE — Normal Operation, Expected JSON Output Schema, File Scope Boundary, Forbidden Actions, MODE 1: REVIEW (called during Review Phase), MODE 2: CONTENT CREATION (standalone task from backlog), Operating Modes, Operational Rules & Boundaries (+14 more)
|
||||
|
||||
### Community 58 - "MetricsController"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
|
||||
### Community 58 - "ConfirmModal.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (15): ConfirmModal(), ConfirmModalProps, HeroBanner, VetTestimonial, Doctor, MENU_TABS, MenuItem, MenuType (+7 more)
|
||||
|
||||
### Community 59 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
@ -582,11 +581,11 @@ Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty
|
||||
|
||||
### Community 61 - "ProductPage.tsx"
|
||||
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"
|
||||
Cohesion: 0.04
|
||||
Nodes (34): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+26 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (17): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+9 more)
|
||||
|
||||
### Community 63 - "dependencies"
|
||||
Cohesion: 0.05
|
||||
@ -604,9 +603,9 @@ Nodes (7): CouponTargetInput, PaginationQuery, applyRounding(), calculateSelling
|
||||
Cohesion: 0.10
|
||||
Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+4 more)
|
||||
|
||||
### Community 67 - "OrdersController"
|
||||
Cohesion: 0.15
|
||||
Nodes (11): OrdersController, ApiBearerAuth, ApiTags, Controller, IsNotEmpty, IsNumber, IsString, UseGuards (+3 more)
|
||||
### Community 67 - "SmsService"
|
||||
Cohesion: 0.20
|
||||
Nodes (3): SmsService, Injectable, Optional
|
||||
|
||||
### Community 68 - "components/Skeleton.tsx"
|
||||
Cohesion: 0.21
|
||||
@ -640,9 +639,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
|
||||
Cohesion: 0.05
|
||||
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
|
||||
|
||||
### Community 76 - "RevalidationService"
|
||||
Cohesion: 0.07
|
||||
Nodes (25): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional (+17 more)
|
||||
### Community 76 - "ProductsService"
|
||||
Cohesion: 0.11
|
||||
Nodes (14): ProductsController, ApiOperation, ApiTags, Body, Controller, Get, Param, Patch (+6 more)
|
||||
|
||||
### Community 77 - "seo.module.ts"
|
||||
Cohesion: 0.16
|
||||
@ -688,9 +687,9 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
|
||||
Cohesion: 0.11
|
||||
Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more)
|
||||
|
||||
### Community 88 - "CreateEBankCheckoutDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
|
||||
### Community 88 - "payment.controller.ts"
|
||||
Cohesion: 0.12
|
||||
Nodes (19): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min (+11 more)
|
||||
|
||||
### Community 89 - "seed-products.ts"
|
||||
Cohesion: 0.17
|
||||
@ -704,9 +703,9 @@ Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_cond
|
||||
Cohesion: 0.12
|
||||
Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more)
|
||||
|
||||
### Community 92 - ".retryPayment"
|
||||
Cohesion: 0.19
|
||||
Nodes (11): ApiBadRequestResponse, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Get, Param (+3 more)
|
||||
### Community 92 - "OrdersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more)
|
||||
|
||||
### Community 93 - "auth.controller.ts"
|
||||
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)
|
||||
|
||||
### Community 104 - "Products.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (24): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+16 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (25): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+17 more)
|
||||
|
||||
### Community 105 - "Operational Rules & Boundaries"
|
||||
Cohesion: 0.17
|
||||
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"
|
||||
Cohesion: 0.43
|
||||
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 107 - "BlogsService"
|
||||
Cohesion: 0.13
|
||||
Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable
|
||||
|
||||
### Community 108 - "PrismaService"
|
||||
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"
|
||||
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)
|
||||
|
||||
### Community 113 - "lib/services/api.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (22): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+14 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (26): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+18 more)
|
||||
|
||||
### Community 114 - "AppService"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): AppController, Controller, Get, AppService, Injectable
|
||||
|
||||
### Community 115 - "MediaSelector.tsx"
|
||||
Cohesion: 0.05
|
||||
Nodes (45): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+37 more)
|
||||
### Community 115 - "Media.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (17): Pagination(), PaginationProps, Category, getFileType(), Media, MediaManager(), Pet, DoctorOption (+9 more)
|
||||
|
||||
### Community 116 - "Vazirmatn Changelog"
|
||||
Cohesion: 0.18
|
||||
@ -829,8 +824,8 @@ Cohesion: 0.17
|
||||
Nodes (3): Body, Post, CouponInput
|
||||
|
||||
### Community 123 - "auth.service.ts"
|
||||
Cohesion: 0.07
|
||||
Nodes (13): AppModule, Module, AuthModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput (+5 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (9): AppModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, RedisService (+1 more)
|
||||
|
||||
### Community 124 - "Repository Map"
|
||||
Cohesion: 0.20
|
||||
@ -848,13 +843,13 @@ Nodes (9): name, private, scripts, build, dev, lint, preview, type (+1 more)
|
||||
Cohesion: 0.20
|
||||
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
|
||||
|
||||
### Community 128 - "HomeController"
|
||||
Cohesion: 0.16
|
||||
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
|
||||
### Community 128 - "auth.module.ts"
|
||||
Cohesion: 0.15
|
||||
Nodes (12): AdminModule, Module, DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload (+4 more)
|
||||
|
||||
### Community 129 - "WikiController"
|
||||
Cohesion: 0.21
|
||||
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
|
||||
|
||||
### Community 130 - "Sahel-Font"
|
||||
Cohesion: 0.20
|
||||
@ -913,12 +908,12 @@ Cohesion: 0.25
|
||||
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
|
||||
|
||||
### Community 144 - "SafeImage.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (25): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+17 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (24): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+16 more)
|
||||
|
||||
### Community 145 - "Orders.tsx"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders
|
||||
### Community 145 - "PaginationDto"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+5 more)
|
||||
|
||||
### Community 146 - "System Discovery"
|
||||
Cohesion: 0.25
|
||||
@ -932,14 +927,18 @@ Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, A
|
||||
Cohesion: 0.16
|
||||
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
|
||||
|
||||
### Community 149 - "CreateOrderDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
|
||||
### Community 149 - "PetsController"
|
||||
Cohesion: 0.15
|
||||
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
|
||||
|
||||
### Community 150 - "Product Requirement Document (PRD)"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements, 4. Non-Functional Requirements (Performance, Security), 5. Epic / Feature Breakdown, Product Requirement Document (PRD)
|
||||
|
||||
### Community 151 - "SmsLogQueryDto"
|
||||
Cohesion: 0.25
|
||||
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
|
||||
|
||||
### Community 153 - "exclude"
|
||||
Cohesion: 0.22
|
||||
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
|
||||
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"
|
||||
Cohesion: 0.50
|
||||
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)
|
||||
|
||||
### Community 185 - "CartDrawer.tsx"
|
||||
Cohesion: 0.32
|
||||
Nodes (5): CartDrawer, CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, mockProduct
|
||||
Cohesion: 0.36
|
||||
Nodes (4): CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, mockProduct
|
||||
|
||||
### Community 191 - "graphify reference: add a URL and watch a folder"
|
||||
Cohesion: 0.50
|
||||
@ -1096,9 +1091,9 @@ Nodes (3): Deploy on Vercel, Getting Started, Learn More
|
||||
Cohesion: 0.50
|
||||
Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script
|
||||
|
||||
### Community 204 - "reviews.service.ts"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): ApiProperty, IsIn, IsOptional, IsString, UpdateReviewDto
|
||||
### Community 204 - "RevalidationService"
|
||||
Cohesion: 0.16
|
||||
Nodes (6): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable
|
||||
|
||||
### Community 211 - "Master Task Backlog (Phase 3.3)"
|
||||
Cohesion: 0.67
|
||||
@ -1116,13 +1111,9 @@ Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
|
||||
Cohesion: 0.67
|
||||
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
|
||||
|
||||
### Community 294 - "ZibalService"
|
||||
Cohesion: 0.09
|
||||
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
|
||||
|
||||
### Community 298 - ".initiateOrderPayment"
|
||||
Cohesion: 0.20
|
||||
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
|
||||
Cohesion: 0.32
|
||||
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
|
||||
|
||||
### Community 317 - "revalidate/route.ts"
|
||||
Cohesion: 0.83
|
||||
@ -1131,22 +1122,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
|
||||
## Knowledge Gaps
|
||||
- **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **96 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **97 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `ApiResponse` connect `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._
|
||||
- **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._
|
||||
- **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._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1356 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **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?**
|
||||
_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?**
|
||||
_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
@ -1,29 +1,29 @@
|
||||
# Graph Report - canina (2026-09-13)
|
||||
|
||||
## Corpus Check
|
||||
- 609 files · ~1,125,530 words
|
||||
- 609 files · ~1,125,811 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## 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)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## 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 `graphify update .` after code changes (no API cost).
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
- Roles
|
||||
- app.module.ts
|
||||
- ApiKeysService
|
||||
- ApiResponse
|
||||
- productService.ts
|
||||
- HomeClient.tsx
|
||||
- CmsController
|
||||
- tickets.controller.ts
|
||||
- SmsSettingsPage.tsx
|
||||
- SettingsService
|
||||
- SmsService
|
||||
- devDependencies
|
||||
- CreateReviewDto
|
||||
- UsersService
|
||||
@ -34,7 +34,7 @@
|
||||
- DoctorQueryDto
|
||||
- schema.ts
|
||||
- JwtAuthGuard
|
||||
- BulkPriceAdjustmentDto
|
||||
- admin.service.ts
|
||||
- CreateVideoDto
|
||||
- useSettingsStore
|
||||
- AdminService
|
||||
@ -48,7 +48,7 @@
|
||||
- DEVOPS-001
|
||||
- DOC-001
|
||||
- adminRoutes.tsx
|
||||
- WholesaleApplyDto
|
||||
- WholesaleService
|
||||
- B2BService
|
||||
- ContactService
|
||||
- FaqService
|
||||
@ -61,7 +61,7 @@
|
||||
- BannersService
|
||||
- TestimonialsService
|
||||
- What You Must Do When Invoked
|
||||
- sms.service.ts
|
||||
- HomeController
|
||||
- IngredientsService
|
||||
- Button.tsx
|
||||
- devDependencies
|
||||
@ -71,18 +71,18 @@
|
||||
- SmartAdvisorService
|
||||
- Modal.tsx
|
||||
- UITexts.tsx
|
||||
- Orders.tsx
|
||||
- PrescriptionsManager.tsx
|
||||
- Role & Core Objective
|
||||
- ConfirmModal.tsx
|
||||
- Orders.tsx
|
||||
- compilerOptions
|
||||
- admin.controller.ts
|
||||
- ProductPage.tsx
|
||||
- admin.module.ts
|
||||
- dependencies
|
||||
- compilerOptions
|
||||
- admin.service.ts
|
||||
- CreateApiKeyDto
|
||||
- AdminController
|
||||
- SmsService
|
||||
- ApiKeysService
|
||||
- components/Skeleton.tsx
|
||||
- Required Review Group Closures
|
||||
- compilerOptions
|
||||
@ -91,7 +91,7 @@
|
||||
- Operational Rules & Boundaries
|
||||
- WikiController
|
||||
- PetsController
|
||||
- ProductsService
|
||||
- RevalidationService
|
||||
- seo.module.ts
|
||||
- rss.xml/route.ts
|
||||
- 🏢 AI Software Agency — Master Orchestration Protocol v3
|
||||
@ -103,7 +103,7 @@
|
||||
- app.e2e-spec.js
|
||||
- zibal.service.ts
|
||||
- dependencies
|
||||
- payment.controller.ts
|
||||
- CreateEBankCheckoutDto
|
||||
- seed-products.ts
|
||||
- 20260526145407_init/migration.sql
|
||||
- Reconciled Audit Roles & Assignments
|
||||
@ -121,16 +121,16 @@
|
||||
- Comprehensive Change Log
|
||||
- Products.tsx
|
||||
- Operational Rules & Boundaries
|
||||
- PaymentService
|
||||
- BlogsService
|
||||
- InitiatePaymentDto
|
||||
- PaginationDto
|
||||
- PrismaService
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- lib/services/api.ts
|
||||
- settingsStore.ts
|
||||
- AppService
|
||||
- Media.tsx
|
||||
- MediaSelector.tsx
|
||||
- Vazirmatn Changelog
|
||||
- Vazirmatn Font فونت وزیرمتن
|
||||
- Operational Rules & Boundaries
|
||||
@ -143,7 +143,7 @@
|
||||
- validate_integrity.js
|
||||
- admin-panel/package.json
|
||||
- Sahel-Font
|
||||
- auth.module.ts
|
||||
- MetricsController
|
||||
- WikiController
|
||||
- Sahel-Font
|
||||
- Role & Core Objective
|
||||
@ -160,13 +160,13 @@
|
||||
- start-dev.js
|
||||
- generate-openapi.js
|
||||
- SafeImage.tsx
|
||||
- PaginationDto
|
||||
- WholesaleApplyDto
|
||||
- System Discovery
|
||||
- torob.controller.ts
|
||||
- ProductDto
|
||||
- PetsController
|
||||
- class-transformer
|
||||
- Product Requirement Document (PRD)
|
||||
- SmsLogQueryDto
|
||||
- helmet
|
||||
- @eslint/js
|
||||
- exclude
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
@ -218,7 +218,7 @@
|
||||
- deploy.sh
|
||||
- 🔒 Security & Performance Review (09_devops_security)
|
||||
- 👁️ UX & Persona Interface Review (08_visual_qa)
|
||||
- RevalidationService
|
||||
- reviews.service.ts
|
||||
- prisma/scientificTerms.ts
|
||||
- seed-blogs.ts
|
||||
- seed-custom.ts
|
||||
@ -234,7 +234,7 @@
|
||||
- sync_honest_manifest.js
|
||||
- sync_manifest.js
|
||||
- FormField.tsx
|
||||
- AdminQueryDto
|
||||
- js-yaml
|
||||
- Textarea.tsx
|
||||
- admin-panel/tsconfig.json
|
||||
- tailwindcss
|
||||
@ -246,8 +246,8 @@
|
||||
- .agents/workflows/graphify.md
|
||||
- instructions.md
|
||||
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
|
||||
- @types/node
|
||||
- typescript
|
||||
- @nestjs/core
|
||||
- @nestjs/jwt
|
||||
- source-map-support
|
||||
- ts-loader
|
||||
- ts-node
|
||||
@ -275,10 +275,11 @@
|
||||
- User Login API
|
||||
- User Logout API
|
||||
- @types/compression
|
||||
- tailwindcss
|
||||
- @nestjs/swagger
|
||||
- @types/express
|
||||
- @types/jest
|
||||
- @types/multer
|
||||
- @nestjs/throttler
|
||||
- Canina Pharma GmbH
|
||||
- Pets Table
|
||||
- Canina Iran Project Introduction
|
||||
@ -293,25 +294,39 @@
|
||||
- Production Docker Compose
|
||||
- Staging Docker Compose
|
||||
- ZibalService
|
||||
- passport
|
||||
- reflect-metadata
|
||||
- ZibalEBankService
|
||||
- .initiateOrderPayment
|
||||
- @tailwindcss/postcss
|
||||
- typescript
|
||||
- swagger-ui-express
|
||||
- typescript-eslint
|
||||
- @nestjs/schematics
|
||||
- @eslint/eslintrc
|
||||
- eslint-plugin-prettier
|
||||
- eslint-plugin-react-hooks
|
||||
- globals
|
||||
- @nestjs/cli
|
||||
- jest
|
||||
- @types/passport-jwt
|
||||
- @nestjs/testing
|
||||
- prettier
|
||||
- typescript
|
||||
- ts-jest
|
||||
- revalidate/route.ts
|
||||
- MaskableField.tsx
|
||||
- @types/js-yaml
|
||||
- @types/supertest
|
||||
- typescript-eslint
|
||||
- @tailwindcss/postcss
|
||||
- @types/react-dom
|
||||
- eslint-plugin-react-refresh
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `Roles()` - 108 edges
|
||||
2. `PrismaService` - 91 edges
|
||||
3. `useSettingsStore` - 65 edges
|
||||
3. `useSettingsStore` - 67 edges
|
||||
4. `SmsService` - 51 edges
|
||||
5. `api` - 45 edges
|
||||
6. `PaginationDto` - 41 edges
|
||||
@ -327,29 +342,29 @@
|
||||
backend/src/auth/auth.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `BlogsController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/blogs/blogs.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `HomeController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/home/home.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `OrdersController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
- `PetsController` --references--> `ApiResponse` [EXTRACTED]
|
||||
backend/src/pets/pets.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
|
||||
## Import Cycles
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
|
||||
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
|
||||
|
||||
## Communities (312 total, 97 thin omitted)
|
||||
## Communities (327 total, 112 thin omitted)
|
||||
|
||||
### Community 0 - "Roles"
|
||||
Cohesion: 0.24
|
||||
Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get (+5 more)
|
||||
|
||||
### Community 1 - "app.module.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (38): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+30 more)
|
||||
|
||||
### Community 2 - "ApiKeysService"
|
||||
Cohesion: 0.05
|
||||
Nodes (33): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+25 more)
|
||||
### Community 2 - "ApiResponse"
|
||||
Cohesion: 0.13
|
||||
Nodes (13): ApiKeysController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+5 more)
|
||||
|
||||
### Community 3 - "productService.ts"
|
||||
Cohesion: 0.06
|
||||
@ -371,21 +386,21 @@ Nodes (29): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty,
|
||||
Cohesion: 0.20
|
||||
Nodes (10): PatternItem, SmsConfigState, SmsEventDefinition, SmsEventVariable, SmsLogItem, SmsLogStats, SmsRule, SmsSettingsPage() (+2 more)
|
||||
|
||||
### Community 8 - "SettingsService"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+9 more)
|
||||
### Community 8 - "SmsService"
|
||||
Cohesion: 0.05
|
||||
Nodes (28): SmsEventDefinition, SmsLogQuery, SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber (+20 more)
|
||||
|
||||
### Community 9 - "devDependencies"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): devDependencies, eslint, @eslint/eslintrc, eslint-plugin-prettier, globals, @nestjs/cli, @nestjs/testing, prettier (+17 more)
|
||||
Cohesion: 0.22
|
||||
Nodes (9): devDependencies, eslint, @types/bcryptjs, @types/node, typescript, eslint, @types/node, typescript (+1 more)
|
||||
|
||||
### Community 10 - "CreateReviewDto"
|
||||
Cohesion: 0.07
|
||||
Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (25): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ReviewsController (+17 more)
|
||||
|
||||
### Community 11 - "UsersService"
|
||||
Cohesion: 0.08
|
||||
Nodes (31): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+23 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (38): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), JwtPayload, JwtStrategy, Injectable, AddressDto, ApiProperty (+30 more)
|
||||
|
||||
### Community 12 - "index.ts"
|
||||
Cohesion: 0.06
|
||||
@ -396,12 +411,12 @@ Cohesion: 0.07
|
||||
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
|
||||
|
||||
### Community 14 - "toPersian"
|
||||
Cohesion: 0.09
|
||||
Nodes (35): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), ArchivePage() (+27 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (39): B2BPortal, VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), ArchivePage() (+31 more)
|
||||
|
||||
### Community 15 - "src/services/api.ts"
|
||||
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"
|
||||
Cohesion: 0.09
|
||||
@ -412,12 +427,12 @@ Cohesion: 0.14
|
||||
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
|
||||
|
||||
### Community 18 - "JwtAuthGuard"
|
||||
Cohesion: 0.16
|
||||
Nodes (8): JwtAuthGuard, Injectable, ROLES_KEY, SortOrder, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
Cohesion: 0.20
|
||||
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
|
||||
### Community 19 - "BulkPriceAdjustmentDto"
|
||||
Cohesion: 0.30
|
||||
Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean, IsIn, IsNumber (+4 more)
|
||||
### Community 19 - "admin.service.ts"
|
||||
Cohesion: 0.16
|
||||
Nodes (19): CouponTargetInput, PaginationQuery, ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean (+11 more)
|
||||
|
||||
### Community 20 - "CreateVideoDto"
|
||||
Cohesion: 0.07
|
||||
@ -427,6 +442,10 @@ Nodes (31): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEm
|
||||
Cohesion: 0.09
|
||||
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"
|
||||
Cohesion: 0.12
|
||||
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)
|
||||
|
||||
### Community 32 - "adminRoutes.tsx"
|
||||
Cohesion: 0.11
|
||||
Nodes (10): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, AdminRouteConfig, Dashboard (+2 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (17): App(), Props, RouteErrorBoundary, State, CategoryDist, DashboardData, BestSellerItem, CategoryDistItem (+9 more)
|
||||
|
||||
### Community 33 - "WholesaleApplyDto"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
|
||||
### Community 33 - "WholesaleService"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param, Post (+6 more)
|
||||
|
||||
### Community 34 - "B2BService"
|
||||
Cohesion: 0.12
|
||||
@ -488,8 +507,8 @@ Cohesion: 0.07
|
||||
Nodes (25): اجرای بکاند, اجرای فرانتاند, اجرای پروژه در سرور با PM2, برای راهاندازی بکاند:, برای راهاندازی فرانتاند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسهها تا پس از ریاستارت سرور قطع نشوند:, راهاندازی و انتشار سیستم (Setup & Deployment) (+17 more)
|
||||
|
||||
### Community 38 - "Button"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Badge(), BadgeProps, BadgeVariant, variantStyles, Button() (+12 more)
|
||||
Cohesion: 0.16
|
||||
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
|
||||
|
||||
### Community 39 - "CategoriesController"
|
||||
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)
|
||||
|
||||
### Community 42 - "SslController"
|
||||
Cohesion: 0.11
|
||||
Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
|
||||
|
||||
### Community 43 - "BannersService"
|
||||
Cohesion: 0.13
|
||||
@ -519,17 +538,17 @@ Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body,
|
||||
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)
|
||||
|
||||
### Community 46 - "sms.service.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (16): DEFAULT_SMS_RULES, SMS_EVENT_DEFINITIONS, SmsEventDefinition, SmsEventVariable, SmsRule, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions (+8 more)
|
||||
### Community 46 - "HomeController"
|
||||
Cohesion: 0.16
|
||||
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
|
||||
|
||||
### Community 47 - "IngredientsService"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 48 - "Button.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): ButtonProps, ButtonSize, ButtonVariant, Spinner(), BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps (+9 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (15): ButtonProps, ButtonSize, ButtonVariant, Spinner(), FAQ, SslStatus, BannersManager, FAQManager (+7 more)
|
||||
|
||||
### Community 49 - "devDependencies"
|
||||
Cohesion: 0.11
|
||||
@ -537,7 +556,7 @@ Nodes (19): autoprefixer, devDependencies, autoprefixer, eslint, @eslint/js, glo
|
||||
|
||||
### Community 50 - "devDependencies"
|
||||
Cohesion: 0.12
|
||||
Nodes (17): devDependencies, eslint, jsdom, @tailwindcss/postcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
|
||||
Nodes (17): devDependencies, eslint, jsdom, tailwindcss, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
|
||||
|
||||
### Community 51 - "BlogsController"
|
||||
Cohesion: 0.07
|
||||
@ -552,31 +571,31 @@ Cohesion: 0.13
|
||||
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 54 - "Modal.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, FAQ, BlogCommentItem, ProductReview (+9 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (21): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, MENU_TABS, MenuItem, MenuType (+13 more)
|
||||
|
||||
### Community 55 - "UITexts.tsx"
|
||||
Cohesion: 0.05
|
||||
Nodes (35): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector() (+27 more)
|
||||
Cohesion: 0.14
|
||||
Nodes (12): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ToggleSwitch(), ToggleSwitchProps, AppSitePage, PageSection, SectionField (+4 more)
|
||||
|
||||
### Community 56 - "Orders.tsx"
|
||||
Cohesion: 0.11
|
||||
Nodes (15): Skeleton(), MonitoringStats, getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx (+7 more)
|
||||
### Community 56 - "PrescriptionsManager.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), MonitoringStats, ProductItem, UserRecord (+6 more)
|
||||
|
||||
### Community 57 - "Role & Core Objective"
|
||||
Cohesion: 0.09
|
||||
Nodes (22): CREATE MODE — Normal Operation, Expected JSON Output Schema, File Scope Boundary, Forbidden Actions, MODE 1: REVIEW (called during Review Phase), MODE 2: CONTENT CREATION (standalone task from backlog), Operating Modes, Operational Rules & Boundaries (+14 more)
|
||||
|
||||
### Community 58 - "ConfirmModal.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (15): ConfirmModal(), ConfirmModalProps, HeroBanner, VetTestimonial, Doctor, MENU_TABS, MenuItem, MenuType (+7 more)
|
||||
### Community 58 - "Orders.tsx"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders
|
||||
|
||||
### Community 59 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
|
||||
|
||||
### Community 60 - "admin.controller.ts"
|
||||
Cohesion: 0.18
|
||||
Cohesion: 0.19
|
||||
Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
|
||||
|
||||
### 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)
|
||||
|
||||
### Community 62 - "admin.module.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (17): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+9 more)
|
||||
Cohesion: 0.04
|
||||
Nodes (34): AdminModule, Module, PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller (+26 more)
|
||||
|
||||
### Community 63 - "dependencies"
|
||||
Cohesion: 0.05
|
||||
Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more)
|
||||
|
||||
### Community 64 - "compilerOptions"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
|
||||
|
||||
### Community 65 - "admin.service.ts"
|
||||
Cohesion: 0.31
|
||||
Nodes (7): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode
|
||||
### Community 65 - "CreateApiKeyDto"
|
||||
Cohesion: 0.27
|
||||
Nodes (7): CreateApiKeyDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsOptional, IsString
|
||||
|
||||
### Community 66 - "AdminController"
|
||||
Cohesion: 0.10
|
||||
Nodes (12): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+4 more)
|
||||
Cohesion: 0.16
|
||||
Nodes (14): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+6 more)
|
||||
|
||||
### Community 67 - "SmsService"
|
||||
Cohesion: 0.20
|
||||
Nodes (3): SmsService, Injectable, Optional
|
||||
### Community 67 - "ApiKeysService"
|
||||
Cohesion: 0.24
|
||||
Nodes (3): ApiKeysService, Injectable, Inject
|
||||
|
||||
### Community 68 - "components/Skeleton.tsx"
|
||||
Cohesion: 0.21
|
||||
@ -639,9 +658,9 @@ Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, De
|
||||
Cohesion: 0.05
|
||||
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
|
||||
|
||||
### Community 76 - "ProductsService"
|
||||
Cohesion: 0.11
|
||||
Nodes (14): ProductsController, ApiOperation, ApiTags, Body, Controller, Get, Param, Patch (+6 more)
|
||||
### Community 76 - "RevalidationService"
|
||||
Cohesion: 0.07
|
||||
Nodes (25): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable, GetProductsDto, ApiPropertyOptional (+17 more)
|
||||
|
||||
### Community 77 - "seo.module.ts"
|
||||
Cohesion: 0.16
|
||||
@ -687,9 +706,9 @@ Nodes (9): GatewayHealthResult, IPaymentGateway, PaymentInquiryResult, PaymentRe
|
||||
Cohesion: 0.11
|
||||
Nodes (19): dependencies, axios, lucide-react, motion, next, nextjs-toploader, react, react-dom (+11 more)
|
||||
|
||||
### Community 88 - "payment.controller.ts"
|
||||
Cohesion: 0.12
|
||||
Nodes (19): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min (+11 more)
|
||||
### Community 88 - "CreateEBankCheckoutDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsNumber, IsOptional, IsString, Min
|
||||
|
||||
### Community 89 - "seed-products.ts"
|
||||
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)
|
||||
|
||||
### Community 104 - "Products.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (25): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+17 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (24): Input, InputProps, formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData (+16 more)
|
||||
|
||||
### Community 105 - "Operational Rules & Boundaries"
|
||||
Cohesion: 0.17
|
||||
Nodes (11): 1. Detect Test Runner from Tech Stack, 2. Execution Output Capture (Mandatory), 3. Acceptance Criteria Verification, 4. Failure Routing Protocol, 5. Success Routing Protocol, 6. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries (+3 more)
|
||||
|
||||
### Community 107 - "BlogsService"
|
||||
Cohesion: 0.13
|
||||
Nodes (5): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable
|
||||
### Community 106 - "InitiatePaymentDto"
|
||||
Cohesion: 0.43
|
||||
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"
|
||||
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"
|
||||
Cohesion: 0.17
|
||||
@ -783,17 +806,17 @@ Nodes (10): 1. Mark Active Task as Complete, 2. Documentation Updates, 3. Dynami
|
||||
Cohesion: 0.18
|
||||
Nodes (10): 1. Pre-Deployment Checklist, 2. Build Verification, 3. Deployment Strategy (Based on Target), 4. Post-Deployment Health Check, 5. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries, Required Output Artifacts (What files to write/update) (+2 more)
|
||||
|
||||
### Community 113 - "lib/services/api.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (26): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, ProductReviews, ProductReviews(), ProductReviewsProps, ReviewItem (+18 more)
|
||||
### Community 113 - "settingsStore.ts"
|
||||
Cohesion: 0.07
|
||||
Nodes (22): BlogPost, ContactInfoItem, FAQItem, OrderDetailsModalProps, Testimonial, Tooltip(), TooltipProps, SCIENTIFIC_TERMS (+14 more)
|
||||
|
||||
### Community 114 - "AppService"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): AppController, Controller, Get, AppService, Injectable
|
||||
|
||||
### Community 115 - "Media.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (17): Pagination(), PaginationProps, Category, getFileType(), Media, MediaManager(), Pet, DoctorOption (+9 more)
|
||||
### Community 115 - "MediaSelector.tsx"
|
||||
Cohesion: 0.05
|
||||
Nodes (45): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+37 more)
|
||||
|
||||
### Community 116 - "Vazirmatn Changelog"
|
||||
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)
|
||||
|
||||
### Community 122 - "Body"
|
||||
Cohesion: 0.17
|
||||
Nodes (3): Body, Post, CouponInput
|
||||
Cohesion: 0.11
|
||||
Nodes (4): Body, Post, Put, CouponInput
|
||||
|
||||
### Community 123 - "auth.service.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (9): AppModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput, Injectable, RedisService (+1 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (13): AppModule, Module, AuthModule, Module, AdminLoginInput, AuthService, LoginInput, RegisterInput (+5 more)
|
||||
|
||||
### Community 124 - "Repository Map"
|
||||
Cohesion: 0.20
|
||||
@ -843,13 +866,13 @@ Nodes (9): name, private, scripts, build, dev, lint, preview, type (+1 more)
|
||||
Cohesion: 0.20
|
||||
Nodes (9): Arch Linux, Contributors, Install, Known problems for variable version, License, Sahel-Font, To Do (variable), طریقه استفاده از نسخه متغیر variable (+1 more)
|
||||
|
||||
### Community 128 - "auth.module.ts"
|
||||
Cohesion: 0.15
|
||||
Nodes (12): AdminModule, Module, DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload (+4 more)
|
||||
### Community 128 - "MetricsController"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
|
||||
|
||||
### Community 129 - "WikiController"
|
||||
Cohesion: 0.13
|
||||
Nodes (13): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+5 more)
|
||||
Cohesion: 0.21
|
||||
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
|
||||
|
||||
### Community 130 - "Sahel-Font"
|
||||
Cohesion: 0.20
|
||||
@ -911,9 +934,9 @@ Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
|
||||
Cohesion: 0.10
|
||||
Nodes (24): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer() (+16 more)
|
||||
|
||||
### Community 145 - "PaginationDto"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): PaginationDto, ApiPropertyOptional, IsEnum, IsInt, IsOptional, IsString, Min, Type (+5 more)
|
||||
### Community 145 - "WholesaleApplyDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto
|
||||
|
||||
### Community 146 - "System Discovery"
|
||||
Cohesion: 0.25
|
||||
@ -927,18 +950,10 @@ Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, A
|
||||
Cohesion: 0.16
|
||||
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)"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements, 4. Non-Functional Requirements (Performance, Security), 5. Epic / Feature Breakdown, Product Requirement Document (PRD)
|
||||
|
||||
### Community 151 - "SmsLogQueryDto"
|
||||
Cohesion: 0.25
|
||||
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
|
||||
|
||||
### Community 153 - "exclude"
|
||||
Cohesion: 0.22
|
||||
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
|
||||
Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script
|
||||
|
||||
### Community 204 - "RevalidationService"
|
||||
Cohesion: 0.16
|
||||
Nodes (6): Optional, RevalidationModule, Global, Module, RevalidationService, Injectable
|
||||
### Community 204 - "reviews.service.ts"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): ApiProperty, IsIn, IsOptional, IsString, UpdateReviewDto
|
||||
|
||||
### Community 211 - "Master Task Backlog (Phase 3.3)"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Management, Master Task Backlog (Phase 3.3), Phase 3 Master Execution Plan
|
||||
|
||||
### Community 220 - "AdminQueryDto"
|
||||
Cohesion: 0.40
|
||||
Nodes (5): AdminProductQueryDto, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
|
||||
### Community 224 - "wiki/page.tsx"
|
||||
Cohesion: 0.40
|
||||
Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
|
||||
@ -1111,9 +1122,13 @@ Nodes (3): generateMetadata(), formatIngredientDisplayName(), IngredientWiki()
|
||||
Cohesion: 0.67
|
||||
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
|
||||
|
||||
### Community 294 - "ZibalService"
|
||||
Cohesion: 0.09
|
||||
Nodes (4): PaymentService, Injectable, Injectable, ZibalService
|
||||
|
||||
### Community 298 - ".initiateOrderPayment"
|
||||
Cohesion: 0.32
|
||||
Nodes (6): ApiBadRequestResponse, ApiOkResponse, Req, Res, Headers, Ip
|
||||
Cohesion: 0.20
|
||||
Nodes (10): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, ApiBadRequestResponse, ApiOkResponse, Req, Res (+2 more)
|
||||
|
||||
### Community 317 - "revalidate/route.ts"
|
||||
Cohesion: 0.83
|
||||
@ -1122,22 +1137,22 @@ Nodes (3): GET(), handleRevalidate(), POST()
|
||||
## Knowledge Gaps
|
||||
- **1356 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1351 more)
|
||||
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
|
||||
_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._
|
||||
- **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._
|
||||
- **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._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1356 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `app.module.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.06265664160401002 - nodes in this community are weakly interconnected._
|
||||
- **Should `ApiKeysService` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.05012531328320802 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.06516290726817042 - nodes in this community are weakly interconnected._
|
||||
- **Should `ApiResponse` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.12631578947368421 - nodes in this community are weakly interconnected._
|
||||
- **Should `productService.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.06187202538339503 - nodes in this community are weakly interconnected._
|
||||
2
graphify-out/cache/stat-index.json
vendored
2
graphify-out/cache/stat-index.json
vendored
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
Loading…
Reference in New Issue
Block a user