fix(pricing): auto-recalculate all products on financial settings save and support per-product custom rounding override
This commit is contained in:
parent
ac15ece619
commit
c4e4a336d8
@ -203,6 +203,8 @@ model Product {
|
||||
buyPrice Decimal @default(0) @map("buy_price") @db.Decimal(15, 2)
|
||||
marginRetailPercent Decimal? @map("margin_retail_percent") @db.Decimal(6, 2)
|
||||
marginWholesalePercent Decimal? @map("margin_wholesale_percent") @db.Decimal(6, 2)
|
||||
roundingStep Int? @map("rounding_step")
|
||||
roundingMode String? @map("rounding_mode") @db.VarChar(10)
|
||||
priceDisplay String @map("price_display") @db.VarChar(50)
|
||||
unit String @db.VarChar(50)
|
||||
packageSize Decimal @map("package_size") @db.Decimal(10, 2)
|
||||
|
||||
@ -456,6 +456,16 @@ export class AdminService {
|
||||
marginRetail !== undefined ? marginRetail : undefined,
|
||||
marginWholesalePercent:
|
||||
marginWholesale !== undefined ? marginWholesale : undefined,
|
||||
roundingStep:
|
||||
data.roundingStep !== undefined
|
||||
? data.roundingStep
|
||||
? Number(data.roundingStep)
|
||||
: null
|
||||
: undefined,
|
||||
roundingMode:
|
||||
data.roundingMode !== undefined
|
||||
? data.roundingMode || null
|
||||
: undefined,
|
||||
priceValue: data.priceValue || 0,
|
||||
wholesalePrice:
|
||||
data.wholesalePrice !== undefined ? data.wholesalePrice : null,
|
||||
@ -540,6 +550,16 @@ export class AdminService {
|
||||
marginRetail !== undefined ? marginRetail : undefined,
|
||||
marginWholesalePercent:
|
||||
marginWholesale !== undefined ? marginWholesale : undefined,
|
||||
roundingStep:
|
||||
data.roundingStep !== undefined
|
||||
? data.roundingStep
|
||||
? Number(data.roundingStep)
|
||||
: null
|
||||
: undefined,
|
||||
roundingMode:
|
||||
data.roundingMode !== undefined
|
||||
? data.roundingMode || null
|
||||
: undefined,
|
||||
priceValue: data.priceValue,
|
||||
wholesalePrice:
|
||||
data.wholesalePrice !== undefined ? data.wholesalePrice : undefined,
|
||||
@ -1099,20 +1119,82 @@ export class AdminService {
|
||||
create: { key: 'pricing_config', category: 'pricing', value },
|
||||
});
|
||||
|
||||
let updatedCount = 0;
|
||||
if (dto.applyToAllProducts !== false) {
|
||||
const products = await this.prisma.product.findMany({
|
||||
where: { buyPrice: { gt: 0 } },
|
||||
select: {
|
||||
id: true,
|
||||
slug: true,
|
||||
artNo: true,
|
||||
buyPrice: true,
|
||||
roundingStep: true,
|
||||
roundingMode: true,
|
||||
},
|
||||
});
|
||||
|
||||
const revalidateSlugs: string[] = [];
|
||||
for (const prod of products) {
|
||||
const buyPrice = Number(prod.buyPrice || 0);
|
||||
if (buyPrice > 0) {
|
||||
const prodStep = prod.roundingStep
|
||||
? Number(prod.roundingStep)
|
||||
: value.roundingStep;
|
||||
const prodMode = (prod.roundingMode ||
|
||||
value.roundingMode) as RoundingMode;
|
||||
const newRetailPrice = calculateSellingPrice(
|
||||
buyPrice,
|
||||
value.defaultRetailMarginPercent,
|
||||
prodStep,
|
||||
prodMode,
|
||||
);
|
||||
const newWholesalePrice = calculateSellingPrice(
|
||||
buyPrice,
|
||||
value.defaultWholesaleMarginPercent,
|
||||
prodStep,
|
||||
prodMode,
|
||||
);
|
||||
|
||||
await this.prisma.product.update({
|
||||
where: { id: prod.id },
|
||||
data: {
|
||||
priceValue: newRetailPrice,
|
||||
wholesalePrice: newWholesalePrice,
|
||||
marginRetailPercent: value.defaultRetailMarginPercent,
|
||||
marginWholesalePercent: value.defaultWholesaleMarginPercent,
|
||||
priceDisplay: `${newRetailPrice.toLocaleString('fa-IR')} تومان`,
|
||||
},
|
||||
});
|
||||
updatedCount++;
|
||||
if (prod.slug) revalidateSlugs.push(prod.slug);
|
||||
}
|
||||
}
|
||||
|
||||
if (revalidateSlugs.length > 0) {
|
||||
for (const slug of revalidateSlugs.slice(0, 30)) {
|
||||
this.revalidationService.revalidateProduct(slug).catch(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'تنظیمات قیمتگذاری و گرد کردن با موفقیت ذخیره شد.',
|
||||
message:
|
||||
updatedCount > 0
|
||||
? `تنظیمات ذخیره و قیمت ${updatedCount} محصول با فرمول جدید بهروزرسانی و گرد شدند.`
|
||||
: 'تنظیمات قیمتگذاری و گرد کردن با موفقیت ذخیره شد.',
|
||||
data: value,
|
||||
updatedCount,
|
||||
};
|
||||
}
|
||||
|
||||
async applyGlobalMargins(dto: ApplyGlobalMarginsDto) {
|
||||
const pricingSettings = await this.getPricingSettings();
|
||||
const roundingStep =
|
||||
const globalRoundingStep =
|
||||
dto.roundingStep !== undefined
|
||||
? Number(dto.roundingStep)
|
||||
: pricingSettings.roundingStep;
|
||||
const roundingMode = (dto.roundingMode ||
|
||||
const globalRoundingMode = (dto.roundingMode ||
|
||||
pricingSettings.roundingMode) as RoundingMode;
|
||||
const retailMargin = Number(dto.retailMarginPercent);
|
||||
const wholesaleMargin = Number(dto.wholesaleMarginPercent);
|
||||
@ -1139,6 +1221,8 @@ export class AdminService {
|
||||
slug: true,
|
||||
artNo: true,
|
||||
buyPrice: true,
|
||||
roundingStep: true,
|
||||
roundingMode: true,
|
||||
priceValue: true,
|
||||
wholesalePrice: true,
|
||||
},
|
||||
@ -1150,17 +1234,22 @@ export class AdminService {
|
||||
for (const prod of products) {
|
||||
const buyPrice = Number(prod.buyPrice || 0);
|
||||
if (buyPrice > 0) {
|
||||
const prodStep = prod.roundingStep
|
||||
? Number(prod.roundingStep)
|
||||
: globalRoundingStep;
|
||||
const prodMode = (prod.roundingMode ||
|
||||
globalRoundingMode) as RoundingMode;
|
||||
const newRetailPrice = calculateSellingPrice(
|
||||
buyPrice,
|
||||
retailMargin,
|
||||
roundingStep,
|
||||
roundingMode,
|
||||
prodStep,
|
||||
prodMode,
|
||||
);
|
||||
const newWholesalePrice = calculateSellingPrice(
|
||||
buyPrice,
|
||||
wholesaleMargin,
|
||||
roundingStep,
|
||||
roundingMode,
|
||||
prodStep,
|
||||
prodMode,
|
||||
);
|
||||
|
||||
await this.prisma.product.update({
|
||||
@ -1170,6 +1259,7 @@ export class AdminService {
|
||||
wholesalePrice: newWholesalePrice,
|
||||
marginRetailPercent: retailMargin,
|
||||
marginWholesalePercent: wholesaleMargin,
|
||||
priceDisplay: `${newRetailPrice.toLocaleString('fa-IR')} تومان`,
|
||||
},
|
||||
});
|
||||
updatedCount++;
|
||||
|
||||
@ -33,6 +33,14 @@ export class UpdatePricingSettingsDto {
|
||||
@IsNumber()
|
||||
@Min(0)
|
||||
defaultWholesaleMarginPercent!: number;
|
||||
|
||||
@ApiPropertyOptional({
|
||||
description: 'آیا قیمت تمام محصولات بر اساس فرمول جدید بلافاصله بهروزرسانی شود؟',
|
||||
default: true,
|
||||
})
|
||||
@IsOptional()
|
||||
@IsBoolean()
|
||||
applyToAllProducts?: boolean;
|
||||
}
|
||||
|
||||
export class ApplyGlobalMarginsDto {
|
||||
|
||||
@ -83,6 +83,19 @@ export class ProductDto {
|
||||
@IsNumber()
|
||||
wholesaleMarginPercent?: number;
|
||||
|
||||
@ApiPropertyOptional({ description: 'گام گرد کردن اختصاصی این محصول (اختیاری)' })
|
||||
@IsOptional()
|
||||
@IsNumber()
|
||||
roundingStep?: number;
|
||||
|
||||
@ApiPropertyOptional({
|
||||
description: 'جهت گرد کردن اختصاصی این محصول (اختیاری)',
|
||||
enum: ['UP', 'DOWN', 'NEAREST'],
|
||||
})
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
roundingMode?: string;
|
||||
|
||||
@ApiPropertyOptional({ description: 'نمایش متنی قیمت' })
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
|
||||
@ -28,6 +28,7 @@ export default function FinancialSettingsPage() {
|
||||
defaultWholesaleMarginPercent: 15,
|
||||
});
|
||||
const [testBuyPrice, setTestBuyPrice] = useState('1000000');
|
||||
const [applyToAllProductsNow, setApplyToAllProductsNow] = useState(true);
|
||||
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [isSaving, setIsSaving] = useState(false);
|
||||
@ -84,7 +85,7 @@ export default function FinancialSettingsPage() {
|
||||
e.preventDefault();
|
||||
try {
|
||||
setIsSaving(true);
|
||||
await Promise.all([
|
||||
const [, , resPricing] = await Promise.all([
|
||||
api.patch('/settings/financial', financial),
|
||||
api.put('/admin/settings', {
|
||||
TAX_PERCENTAGE: String(financial.taxPercentage),
|
||||
@ -92,8 +93,13 @@ export default function FinancialSettingsPage() {
|
||||
REFILL_SUBSCRIPTION_ENABLED: refillEnabled ? 'true' : 'false',
|
||||
REFILL_REWARD_PERCENT: refillPercent,
|
||||
}),
|
||||
api.put('/admin/pricing/settings', {
|
||||
...pricing,
|
||||
applyToAllProducts: applyToAllProductsNow,
|
||||
}),
|
||||
]);
|
||||
toast.success('تنظیمات مالی با موفقیت بروزرسانی شد');
|
||||
const pricingMsg = resPricing.data?.message;
|
||||
toast.success(pricingMsg || 'تنظیمات مالی و قیمتگذاری با موفقیت ذخیره شد');
|
||||
} catch (err) {
|
||||
console.error('Failed to update financial settings:', err);
|
||||
toast.error('خطا در بروزرسانی تنظیمات مالی');
|
||||
@ -444,6 +450,26 @@ export default function FinancialSettingsPage() {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Instant Recalculation Toggle */}
|
||||
<div className="p-4 bg-gradient-to-r from-purple-100/90 to-indigo-100/80 border border-purple-200 rounded-2xl flex items-center justify-between">
|
||||
<label className="flex items-start gap-3 cursor-pointer">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={applyToAllProductsNow}
|
||||
onChange={(e) => setApplyToAllProductsNow(e.target.checked)}
|
||||
className="w-5 h-5 mt-0.5 rounded-lg text-purple-600 focus:ring-purple-500 border-purple-300 cursor-pointer shrink-0"
|
||||
/>
|
||||
<div>
|
||||
<span className="text-xs font-black text-purple-950 block">
|
||||
محاسبه و بروزرسانی فوری قیمت تمام کالاهای فروشگاه با این درصد سود و رند کردن جدید
|
||||
</span>
|
||||
<span className="text-[11px] text-purple-800 block mt-0.5 font-medium leading-relaxed">
|
||||
با فعال بودن این گزینه هنگام زدن دکمه ذخیره، قیمت فروش تک و عمده تمامی محصولات بر اساس قیمت خرید، درصد سود جدید ({pricing.defaultRetailMarginPercent}٪ / {pricing.defaultWholesaleMarginPercent}٪) و پله رند کردن ({pricing.roundingStep.toLocaleString('fa-IR')} تومان {pricing.roundingMode === 'UP' ? 'به بالا' : pricing.roundingMode === 'DOWN' ? 'به پایین' : 'به نزدیکترین'}) فوراً در دیتابیس مجدداً محاسبه و بهروزرسانی میشوند.
|
||||
</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -68,6 +68,8 @@ export interface Product {
|
||||
buyPrice?: number;
|
||||
marginRetailPercent?: number;
|
||||
marginWholesalePercent?: number;
|
||||
roundingStep?: number | null;
|
||||
roundingMode?: string | null;
|
||||
priceDisplay?: string;
|
||||
unit?: string;
|
||||
packageSize?: number;
|
||||
@ -255,7 +257,9 @@ export default function Products() {
|
||||
pdfCover: '',
|
||||
symptoms: [] as string[],
|
||||
isPreorder: false,
|
||||
preorderDeposit: '' as number | string
|
||||
preorderDeposit: '' as number | string,
|
||||
roundingStep: '' as number | string,
|
||||
roundingMode: '' as string,
|
||||
});
|
||||
|
||||
// Smart Pricing & Rounding state
|
||||
@ -428,7 +432,9 @@ export default function Products() {
|
||||
pdfCover: product.pdfCover || '',
|
||||
symptoms: product.symptoms ? product.symptoms.map((s: { symptom: string } | string) => typeof s === 'string' ? s : s.symptom) : [],
|
||||
isPreorder: Boolean(product.isPreorder),
|
||||
preorderDeposit: product.preorderDeposit !== undefined && product.preorderDeposit !== null ? product.preorderDeposit : ''
|
||||
preorderDeposit: product.preorderDeposit !== undefined && product.preorderDeposit !== null ? product.preorderDeposit : '',
|
||||
roundingStep: product.roundingStep !== undefined && product.roundingStep !== null ? product.roundingStep : '',
|
||||
roundingMode: product.roundingMode || '',
|
||||
});
|
||||
} else {
|
||||
setEditingProduct(null);
|
||||
@ -438,6 +444,8 @@ export default function Products() {
|
||||
buyPrice: '', priceValue: '', wholesalePrice: '',
|
||||
priceValueMarginPercent: pricingSettings.defaultRetailMarginPercent,
|
||||
wholesaleMarginPercent: pricingSettings.defaultWholesaleMarginPercent,
|
||||
roundingStep: '',
|
||||
roundingMode: '',
|
||||
priceDisplay: '', unit: '', packageSize: '', dosageLogic: '', suitableFor: 'سگ و گربه',
|
||||
imageUrl: '', metaTitle: '', metaDescription: '', keywords: '', canonicalUrl: '', slug: '',
|
||||
stockStatus: 'IN_STOCK', noIndex: false, noFollow: false, ogImage: '', featuredImageAlt: '',
|
||||
@ -646,6 +654,8 @@ export default function Products() {
|
||||
wholesalePrice: formData.wholesalePrice ? Number(formData.wholesalePrice) : undefined,
|
||||
priceValueMarginPercent: formData.priceValueMarginPercent !== '' ? Number(formData.priceValueMarginPercent) : undefined,
|
||||
wholesaleMarginPercent: formData.wholesaleMarginPercent !== '' ? Number(formData.wholesaleMarginPercent) : undefined,
|
||||
roundingStep: formData.roundingStep !== '' ? Number(formData.roundingStep) : null,
|
||||
roundingMode: formData.roundingMode || null,
|
||||
priceDisplay: formData.priceDisplay || `${Number(formData.priceValue || 0).toLocaleString('fa-IR')} تومان`,
|
||||
unit: (formData.unit || '').trim() || undefined,
|
||||
packageSize: Number(formData.packageSize) || 0,
|
||||
@ -1270,12 +1280,15 @@ export default function Products() {
|
||||
let pMargin = formData.priceValueMarginPercent;
|
||||
let wMargin = formData.wholesaleMarginPercent;
|
||||
|
||||
const effStep = formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep;
|
||||
const effMode = (formData.roundingMode || pricingSettings.roundingMode) as 'UP' | 'DOWN' | 'NEAREST';
|
||||
|
||||
if (bPrice && pMargin !== '') {
|
||||
pPrice = calculateSellingPrice(
|
||||
Number(bPrice),
|
||||
Number(pMargin),
|
||||
pricingSettings.roundingStep,
|
||||
pricingSettings.roundingMode,
|
||||
effStep,
|
||||
effMode,
|
||||
);
|
||||
} else if (bPrice && pPrice) {
|
||||
pMargin = Math.round(
|
||||
@ -1287,8 +1300,8 @@ export default function Products() {
|
||||
wPrice = calculateSellingPrice(
|
||||
Number(bPrice),
|
||||
Number(wMargin),
|
||||
pricingSettings.roundingStep,
|
||||
pricingSettings.roundingMode,
|
||||
effStep,
|
||||
effMode,
|
||||
);
|
||||
} else if (bPrice && wPrice) {
|
||||
wMargin = Math.round(
|
||||
@ -1344,12 +1357,14 @@ export default function Products() {
|
||||
const margin = e.target.value !== '' ? Number(e.target.value) : '';
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let pPrice = formData.priceValue;
|
||||
const effStep = formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep;
|
||||
const effMode = (formData.roundingMode || pricingSettings.roundingMode) as 'UP' | 'DOWN' | 'NEAREST';
|
||||
if (bPrice && margin !== '') {
|
||||
pPrice = calculateSellingPrice(
|
||||
bPrice,
|
||||
Number(margin),
|
||||
pricingSettings.roundingStep,
|
||||
pricingSettings.roundingMode,
|
||||
effStep,
|
||||
effMode,
|
||||
);
|
||||
}
|
||||
setFormData({
|
||||
@ -1400,12 +1415,14 @@ export default function Products() {
|
||||
const margin = e.target.value !== '' ? Number(e.target.value) : '';
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let wPrice = formData.wholesalePrice;
|
||||
const effStep = formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep;
|
||||
const effMode = (formData.roundingMode || pricingSettings.roundingMode) as 'UP' | 'DOWN' | 'NEAREST';
|
||||
if (bPrice && margin !== '') {
|
||||
wPrice = calculateSellingPrice(
|
||||
bPrice,
|
||||
Number(margin),
|
||||
pricingSettings.roundingStep,
|
||||
pricingSettings.roundingMode,
|
||||
effStep,
|
||||
effMode,
|
||||
);
|
||||
}
|
||||
setFormData({
|
||||
@ -1423,21 +1440,173 @@ export default function Products() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Active Rounding Info Badge */}
|
||||
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-2 px-4 py-2.5 bg-indigo-50/70 border border-indigo-100 rounded-2xl text-xs text-indigo-900">
|
||||
<div className="flex items-center gap-2">
|
||||
<Compass className="w-4 h-4 text-indigo-600 shrink-0" />
|
||||
<span className="font-bold">قاعده گرد کردن هوشمند فعال:</span>
|
||||
<span className="font-mono font-bold bg-white px-2 py-0.5 rounded-lg border border-indigo-200">
|
||||
{pricingSettings.roundingStep.toLocaleString('fa-IR')} تومان
|
||||
</span>
|
||||
<span>
|
||||
({pricingSettings.roundingMode === 'UP' ? 'گرد به بالا / سقف' : pricingSettings.roundingMode === 'DOWN' ? 'گرد به پایین / کف' : 'گرد به نزدیکترین مضرب'})
|
||||
</span>
|
||||
{/* Custom Rounding Rules & Link to Global Settings */}
|
||||
<div className="bg-gradient-to-br from-indigo-50/80 to-purple-50/60 border border-indigo-100 p-4 rounded-2xl space-y-3">
|
||||
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-2 border-b border-indigo-100/80 pb-2.5">
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<Compass className="w-4 h-4 text-indigo-600 shrink-0" />
|
||||
<span className="font-bold text-xs text-indigo-950">قاعده گرد کردن هوشمند قیمت:</span>
|
||||
<span className="font-mono font-bold text-xs bg-white text-indigo-700 px-2 py-0.5 rounded-lg border border-indigo-200">
|
||||
{(formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep).toLocaleString('fa-IR')} تومان
|
||||
</span>
|
||||
<span className="text-xs text-indigo-900 font-medium">
|
||||
({(formData.roundingMode || pricingSettings.roundingMode) === 'UP' ? 'گرد به بالا / سقف' : (formData.roundingMode || pricingSettings.roundingMode) === 'DOWN' ? 'گرد به پایین / کف' : 'گرد به نزدیکترین مضرب'})
|
||||
</span>
|
||||
{formData.roundingStep !== '' || formData.roundingMode !== '' ? (
|
||||
<span className="text-[10px] bg-amber-100 text-amber-800 font-black px-2 py-0.5 rounded-md">اختصاصی این کالا</span>
|
||||
) : (
|
||||
<span className="text-[10px] bg-indigo-100 text-indigo-800 font-black px-2 py-0.5 rounded-md">پیروی از تنظیمات کلی</span>
|
||||
)}
|
||||
</div>
|
||||
<a
|
||||
href="/settings/financial"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-xs text-indigo-600 hover:text-indigo-800 font-bold flex items-center gap-1 shrink-0 underline decoration-indigo-300 hover:decoration-indigo-600 transition-colors"
|
||||
>
|
||||
تنظیمات کلی فرمول و رند کردن ⚙️
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-3 pt-1">
|
||||
<div>
|
||||
<div className="flex items-center justify-between mb-1.5">
|
||||
<label className="text-xs font-bold text-gray-700">پله گرد کردن اختصاصی این کالا (تومان):</label>
|
||||
{formData.roundingStep !== '' && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let pPrice = formData.priceValue;
|
||||
let wPrice = formData.wholesalePrice;
|
||||
const activeMode = (formData.roundingMode || pricingSettings.roundingMode) as 'UP' | 'DOWN' | 'NEAREST';
|
||||
if (bPrice && formData.priceValueMarginPercent !== '') {
|
||||
pPrice = calculateSellingPrice(bPrice, Number(formData.priceValueMarginPercent), pricingSettings.roundingStep, activeMode);
|
||||
}
|
||||
if (bPrice && formData.wholesaleMarginPercent !== '') {
|
||||
wPrice = calculateSellingPrice(bPrice, Number(formData.wholesaleMarginPercent), pricingSettings.roundingStep, activeMode);
|
||||
}
|
||||
setFormData({
|
||||
...formData,
|
||||
roundingStep: '',
|
||||
priceValue: pPrice,
|
||||
wholesalePrice: wPrice,
|
||||
priceDisplay: `${Number(pPrice || 0).toLocaleString('fa-IR')} تومان`,
|
||||
});
|
||||
}}
|
||||
className="text-[10px] text-red-500 hover:underline font-bold"
|
||||
>
|
||||
بازنشانی به پیشفرض کلی ({pricingSettings.roundingStep.toLocaleString('fa-IR')} تومان)
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
<div className="flex items-center gap-1.5 flex-wrap">
|
||||
{[1000, 5000, 10000, 50000, 100000].map((step) => (
|
||||
<button
|
||||
key={step}
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let pPrice = formData.priceValue;
|
||||
let wPrice = formData.wholesalePrice;
|
||||
const activeMode = (formData.roundingMode || pricingSettings.roundingMode) as 'UP' | 'DOWN' | 'NEAREST';
|
||||
if (bPrice && formData.priceValueMarginPercent !== '') {
|
||||
pPrice = calculateSellingPrice(bPrice, Number(formData.priceValueMarginPercent), step, activeMode);
|
||||
}
|
||||
if (bPrice && formData.wholesaleMarginPercent !== '') {
|
||||
wPrice = calculateSellingPrice(bPrice, Number(formData.wholesaleMarginPercent), step, activeMode);
|
||||
}
|
||||
setFormData({
|
||||
...formData,
|
||||
roundingStep: step,
|
||||
priceValue: pPrice,
|
||||
wholesalePrice: wPrice,
|
||||
priceDisplay: `${Number(pPrice || 0).toLocaleString('fa-IR')} تومان`,
|
||||
});
|
||||
}}
|
||||
className={`px-2.5 py-1 text-xs font-bold rounded-lg border transition-all ${
|
||||
(formData.roundingStep !== '' ? Number(formData.roundingStep) === step : pricingSettings.roundingStep === step)
|
||||
? 'bg-indigo-600 text-white border-indigo-600 shadow-sm'
|
||||
: 'bg-white text-gray-700 border-gray-200 hover:border-indigo-300'
|
||||
}`}
|
||||
>
|
||||
{step.toLocaleString('fa-IR')}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div className="flex items-center justify-between mb-1.5">
|
||||
<label className="text-xs font-bold text-gray-700">جهت گرد کردن اختصاصی این کالا:</label>
|
||||
{formData.roundingMode !== '' && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let pPrice = formData.priceValue;
|
||||
let wPrice = formData.wholesalePrice;
|
||||
const activeStep = formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep;
|
||||
if (bPrice && formData.priceValueMarginPercent !== '') {
|
||||
pPrice = calculateSellingPrice(bPrice, Number(formData.priceValueMarginPercent), activeStep, pricingSettings.roundingMode);
|
||||
}
|
||||
if (bPrice && formData.wholesaleMarginPercent !== '') {
|
||||
wPrice = calculateSellingPrice(bPrice, Number(formData.wholesaleMarginPercent), activeStep, pricingSettings.roundingMode);
|
||||
}
|
||||
setFormData({
|
||||
...formData,
|
||||
roundingMode: '',
|
||||
priceValue: pPrice,
|
||||
wholesalePrice: wPrice,
|
||||
priceDisplay: `${Number(pPrice || 0).toLocaleString('fa-IR')} تومان`,
|
||||
});
|
||||
}}
|
||||
className="text-[10px] text-red-500 hover:underline font-bold"
|
||||
>
|
||||
بازنشانی به پیشفرض کلی ({pricingSettings.roundingMode === 'UP' ? 'به بالا' : pricingSettings.roundingMode === 'DOWN' ? 'به پایین' : 'نزدیکترین'})
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
<div className="grid grid-cols-3 gap-1.5">
|
||||
{[
|
||||
{ mode: 'UP', label: 'به بالا (سقف)' },
|
||||
{ mode: 'DOWN', label: 'به پایین (کف)' },
|
||||
{ mode: 'NEAREST', label: 'نزدیکترین' },
|
||||
].map((item) => (
|
||||
<button
|
||||
key={item.mode}
|
||||
type="button"
|
||||
onClick={() => {
|
||||
const bPrice = formData.buyPrice ? Number(formData.buyPrice) : null;
|
||||
let pPrice = formData.priceValue;
|
||||
let wPrice = formData.wholesalePrice;
|
||||
const activeStep = formData.roundingStep !== '' ? Number(formData.roundingStep) : pricingSettings.roundingStep;
|
||||
if (bPrice && formData.priceValueMarginPercent !== '') {
|
||||
pPrice = calculateSellingPrice(bPrice, Number(formData.priceValueMarginPercent), activeStep, item.mode as any);
|
||||
}
|
||||
if (bPrice && formData.wholesaleMarginPercent !== '') {
|
||||
wPrice = calculateSellingPrice(bPrice, Number(formData.wholesaleMarginPercent), activeStep, item.mode as any);
|
||||
}
|
||||
setFormData({
|
||||
...formData,
|
||||
roundingMode: item.mode,
|
||||
priceValue: pPrice,
|
||||
wholesalePrice: wPrice,
|
||||
priceDisplay: `${Number(pPrice || 0).toLocaleString('fa-IR')} تومان`,
|
||||
});
|
||||
}}
|
||||
className={`px-2 py-1.5 text-xs font-bold rounded-lg border transition-all text-center ${
|
||||
(formData.roundingMode !== '' ? formData.roundingMode === item.mode : pricingSettings.roundingMode === item.mode)
|
||||
? 'bg-purple-600 text-white border-purple-600 shadow-sm'
|
||||
: 'bg-white text-gray-700 border-gray-200 hover:border-purple-300'
|
||||
}`}
|
||||
>
|
||||
{item.label}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span className="text-[11px] text-gray-500">
|
||||
هنگام تغییر قیمت خرید یا درصد سود، قیمت نهایی خودکار با این قاعده رند میشود.
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 pt-2">
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"1": "app.module.ts",
|
||||
"2": "PaymentService",
|
||||
"3": "productService.ts",
|
||||
"4": "PetProfile.tsx",
|
||||
"4": "api",
|
||||
"5": "CmsController",
|
||||
"6": "tickets.controller.ts",
|
||||
"7": "Button.tsx",
|
||||
@ -13,15 +13,15 @@
|
||||
"11": "ConfirmModal.tsx",
|
||||
"12": "index.ts",
|
||||
"13": "app-audit-verification.e2e-spec.js",
|
||||
"14": "toPersian",
|
||||
"14": "UserDashboard.tsx",
|
||||
"15": "src/services/api.ts",
|
||||
"16": "DoctorQueryDto",
|
||||
"17": "schema.ts",
|
||||
"18": "JwtAuthGuard",
|
||||
"19": "admin.service.ts",
|
||||
"19": "admin.controller.ts",
|
||||
"20": "CreateVideoDto",
|
||||
"21": "ReportsController",
|
||||
"22": "SmsService",
|
||||
"21": "SmsService",
|
||||
"22": "SettingsController",
|
||||
"23": "MenuService",
|
||||
"24": "BE-001",
|
||||
"25": "FE-001",
|
||||
@ -47,7 +47,7 @@
|
||||
"45": "What You Must Do When Invoked",
|
||||
"46": "20260526145407_init/migration.sql",
|
||||
"47": "IngredientsService",
|
||||
"48": "auth.service.ts",
|
||||
"48": ".sendOtp",
|
||||
"49": "devDependencies",
|
||||
"50": "devDependencies",
|
||||
"51": "BlogsController",
|
||||
@ -57,16 +57,16 @@
|
||||
"55": "UITexts.tsx",
|
||||
"56": "PrescriptionsManager.tsx",
|
||||
"57": "Role & Core Objective",
|
||||
"58": "UserDashboard.tsx",
|
||||
"58": "components/Skeleton.tsx",
|
||||
"59": "compilerOptions",
|
||||
"60": "CreateUserDto",
|
||||
"61": "ProductPage.tsx",
|
||||
"62": "BlogsService",
|
||||
"62": "SettingsService",
|
||||
"63": "dependencies",
|
||||
"64": "compilerOptions",
|
||||
"65": "RevalidationService",
|
||||
"66": "Get",
|
||||
"67": "PetsController",
|
||||
"66": "AdminController",
|
||||
"67": "admin.module.ts",
|
||||
"68": "useSettingsStore",
|
||||
"69": "Required Review Group Closures",
|
||||
"70": "compilerOptions",
|
||||
@ -89,10 +89,10 @@
|
||||
"87": "dependencies",
|
||||
"88": "CreateEBankCheckoutDto",
|
||||
"89": "seed-products.ts",
|
||||
"90": "OrderService",
|
||||
"90": "useCartStore",
|
||||
"91": "Reconciled Audit Roles & Assignments",
|
||||
"92": "OrdersService",
|
||||
"93": "ArchivePage.tsx",
|
||||
"92": "OrdersController",
|
||||
"93": "HomeClient.tsx",
|
||||
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
|
||||
"95": "wiki/[slug]/page.tsx",
|
||||
"96": "compilerOptions",
|
||||
@ -105,7 +105,7 @@
|
||||
"103": "Comprehensive Change Log",
|
||||
"104": "Products.tsx",
|
||||
"105": "Operational Rules & Boundaries",
|
||||
"106": "RedisService",
|
||||
"106": "AuthService",
|
||||
"107": "PaginationDto",
|
||||
"108": "PrismaService",
|
||||
"109": "1. Summary of Integrity Repairs Performed",
|
||||
@ -127,8 +127,8 @@
|
||||
"125": "validate_integrity.js",
|
||||
"126": "admin-panel/package.json",
|
||||
"127": "Sahel-Font",
|
||||
"128": "AdminController",
|
||||
"129": "WikiService",
|
||||
"128": "Param",
|
||||
"129": "admin.service.ts",
|
||||
"130": "Sahel-Font",
|
||||
"131": "Role & Core Objective",
|
||||
"132": "orchestrate.py",
|
||||
@ -144,14 +144,14 @@
|
||||
"142": "start-dev.js",
|
||||
"143": "generate-openapi.js",
|
||||
"144": "SafeImage.tsx",
|
||||
"145": "AuthService",
|
||||
"145": "auth.controller.ts",
|
||||
"146": "System Discovery",
|
||||
"147": "HomeController",
|
||||
"148": "track/page.tsx",
|
||||
"149": "trust-seals/page.tsx",
|
||||
"150": "Product Requirement Document (PRD)",
|
||||
"151": "ValidateCouponDto",
|
||||
"152": "MetricsController",
|
||||
"151": "CreateOrderDto",
|
||||
"152": "RedisService",
|
||||
"153": "exclude",
|
||||
"154": "Baseline Command Plan & Reconciled Command History",
|
||||
"155": "seo-backfill.ts",
|
||||
@ -184,6 +184,7 @@
|
||||
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
|
||||
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
|
||||
"184": "eslint-config-next",
|
||||
"185": "auth.service.ts",
|
||||
"186": "seed-ui-texts.ts",
|
||||
"187": "seed-wiki.ts",
|
||||
"188": "update-blog.dto.ts",
|
||||
@ -195,11 +196,14 @@
|
||||
"194": "Raw Finding Verification & Disposition Report",
|
||||
"195": "React + TypeScript + Vite",
|
||||
"196": "Select.tsx",
|
||||
"197": "userStore.ts",
|
||||
"197": "lib/services/api.ts",
|
||||
"198": "RegisterDto",
|
||||
"199": "SmsLogQueryDto",
|
||||
"200": "application/README.md",
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "VerifyOtpDto",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -218,15 +222,23 @@
|
||||
"220": "Input.tsx",
|
||||
"221": "Textarea.tsx",
|
||||
"222": "admin-panel/tsconfig.json",
|
||||
"223": "AuthController",
|
||||
"224": "eslint-config-prettier",
|
||||
"225": "next.config.ts",
|
||||
"226": "Shabnam Font README",
|
||||
"227": "AGENTS.md",
|
||||
"228": "rules/graphify.md",
|
||||
"229": ".agents/workflows/graphify.md",
|
||||
"230": "instructions.md",
|
||||
"231": "@nestjs/schematics",
|
||||
"232": "prisma",
|
||||
"233": "tailwindcss",
|
||||
"234": "source-map-support",
|
||||
"235": "ts-loader",
|
||||
"236": "ts-node",
|
||||
"237": "tsconfig-paths",
|
||||
"238": "@vitejs/plugin-react",
|
||||
"239": "eslint-plugin-prettier",
|
||||
"239": "@types/bcrypt",
|
||||
"240": "supertest",
|
||||
"241": "blog.entity.ts",
|
||||
"242": "home.entity.ts",
|
||||
@ -251,10 +263,11 @@
|
||||
"261": "User Login API",
|
||||
"262": "User Logout API",
|
||||
"263": "generate-openapi.d.ts",
|
||||
"264": "globals",
|
||||
"264": "@types/compression",
|
||||
"265": "jest",
|
||||
"266": "@nestjs/cli",
|
||||
"268": "prettier",
|
||||
"266": "@types/express",
|
||||
"267": "@types/jest",
|
||||
"268": "@types/multer",
|
||||
"269": "eslint-plugin-react-hooks",
|
||||
"270": "app-audit-verification.e2e-spec.d.ts",
|
||||
"271": "app.e2e-spec.d.ts",
|
||||
@ -281,6 +294,7 @@
|
||||
"292": "Production Docker Compose",
|
||||
"293": "Staging Docker Compose",
|
||||
"294": "ZibalService",
|
||||
"295": "typescript",
|
||||
"297": "ZibalEBankService",
|
||||
"298": ".initiateOrderPayment",
|
||||
"299": "@tailwindcss/postcss",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -3,14 +3,14 @@
|
||||
"1": "app.module.ts",
|
||||
"2": "PaymentService",
|
||||
"3": "productService.ts",
|
||||
"4": "UserDashboard.tsx",
|
||||
"4": "PetProfile.tsx",
|
||||
"5": "CmsController",
|
||||
"6": "tickets.controller.ts",
|
||||
"7": "Button.tsx",
|
||||
"8": "WikiController",
|
||||
"9": "devDependencies",
|
||||
"10": "CreateReviewDto",
|
||||
"11": "MediaSelector.tsx",
|
||||
"11": "ConfirmModal.tsx",
|
||||
"12": "index.ts",
|
||||
"13": "app-audit-verification.e2e-spec.js",
|
||||
"14": "toPersian",
|
||||
@ -18,7 +18,7 @@
|
||||
"16": "DoctorQueryDto",
|
||||
"17": "schema.ts",
|
||||
"18": "JwtAuthGuard",
|
||||
"19": "users.controller.ts",
|
||||
"19": "admin.service.ts",
|
||||
"20": "CreateVideoDto",
|
||||
"21": "ReportsController",
|
||||
"22": "SmsService",
|
||||
@ -32,14 +32,14 @@
|
||||
"30": "DEVOPS-001",
|
||||
"31": "DOC-001",
|
||||
"32": "adminRoutes.tsx",
|
||||
"33": "ContactService",
|
||||
"33": "WholesaleApplyDto",
|
||||
"34": "B2BService",
|
||||
"35": "AuthController",
|
||||
"36": "FaqController",
|
||||
"35": "ContactService",
|
||||
"36": "FaqService",
|
||||
"37": "راهنمای تست سیستم (Software Testing)",
|
||||
"38": "Transactions.tsx",
|
||||
"38": "Button",
|
||||
"39": "CategoriesController",
|
||||
"40": "admin.module.ts",
|
||||
"40": "MediaController",
|
||||
"41": "What You Must Do When Invoked",
|
||||
"42": "SslController",
|
||||
"43": "BannersService",
|
||||
@ -51,21 +51,21 @@
|
||||
"49": "devDependencies",
|
||||
"50": "devDependencies",
|
||||
"51": "BlogsController",
|
||||
"52": "PrescriptionsService",
|
||||
"52": "prescriptions.controller.ts",
|
||||
"53": "SmartAdvisorService",
|
||||
"54": "Modal.tsx",
|
||||
"55": "UITexts.tsx",
|
||||
"56": "Orders.tsx",
|
||||
"56": "PrescriptionsManager.tsx",
|
||||
"57": "Role & Core Objective",
|
||||
"58": "auth.module.ts",
|
||||
"58": "UserDashboard.tsx",
|
||||
"59": "compilerOptions",
|
||||
"60": "admin.service.ts",
|
||||
"60": "CreateUserDto",
|
||||
"61": "ProductPage.tsx",
|
||||
"62": "UsersService",
|
||||
"62": "BlogsService",
|
||||
"63": "dependencies",
|
||||
"64": "compilerOptions",
|
||||
"65": "BlogsService",
|
||||
"66": "ApiOperation",
|
||||
"65": "RevalidationService",
|
||||
"66": "Get",
|
||||
"67": "PetsController",
|
||||
"68": "useSettingsStore",
|
||||
"69": "Required Review Group Closures",
|
||||
@ -84,17 +84,17 @@
|
||||
"82": "scripts",
|
||||
"83": "dependencies",
|
||||
"84": "Role & Core Objective",
|
||||
"85": "Reports.tsx",
|
||||
"85": "torob.controller.ts",
|
||||
"86": "zibal.service.ts",
|
||||
"87": "dependencies",
|
||||
"88": "CreateEBankCheckoutDto",
|
||||
"89": "seed-products.ts",
|
||||
"90": "useCartStore",
|
||||
"90": "OrderService",
|
||||
"91": "Reconciled Audit Roles & Assignments",
|
||||
"92": "OrdersService",
|
||||
"93": "ArchivePage.tsx",
|
||||
"94": "Phase 3.1 — Human Review Preparation and Master Backlog Critique",
|
||||
"95": "blog/[slug]/page.tsx",
|
||||
"95": "wiki/[slug]/page.tsx",
|
||||
"96": "compilerOptions",
|
||||
"97": "InitiatePaymentDto",
|
||||
"98": "scripts",
|
||||
@ -103,18 +103,18 @@
|
||||
"101": "Operational Rules & Boundaries",
|
||||
"102": "jest",
|
||||
"103": "Comprehensive Change Log",
|
||||
"104": "Coupons.tsx",
|
||||
"104": "Products.tsx",
|
||||
"105": "Operational Rules & Boundaries",
|
||||
"106": "AuthService",
|
||||
"106": "RedisService",
|
||||
"107": "PaginationDto",
|
||||
"108": "PrismaService",
|
||||
"109": "1. Summary of Integrity Repairs Performed",
|
||||
"110": "Operational Rules & Boundaries",
|
||||
"111": "Operational Rules & Boundaries",
|
||||
"112": "Operational Rules & Boundaries",
|
||||
"113": "RegisterDto",
|
||||
"113": "Orders.tsx",
|
||||
"114": "AppService",
|
||||
"115": "Blogs.tsx",
|
||||
"115": "MediaSelector.tsx",
|
||||
"116": "Vazirmatn Changelog",
|
||||
"117": "Vazirmatn Font فونت وزیرمتن",
|
||||
"118": "Operational Rules & Boundaries",
|
||||
@ -122,7 +122,7 @@
|
||||
"120": "compilerOptions",
|
||||
"121": "backend/README.md",
|
||||
"122": "AdminService",
|
||||
"123": "UsersController",
|
||||
"123": "UsersService",
|
||||
"124": "Repository Map",
|
||||
"125": "validate_integrity.js",
|
||||
"126": "admin-panel/package.json",
|
||||
@ -143,15 +143,15 @@
|
||||
"141": "application/package.json",
|
||||
"142": "start-dev.js",
|
||||
"143": "generate-openapi.js",
|
||||
"144": "PodcastPlayerModal.tsx",
|
||||
"145": "FaqService",
|
||||
"144": "SafeImage.tsx",
|
||||
"145": "AuthService",
|
||||
"146": "System Discovery",
|
||||
"147": "HomeController",
|
||||
"148": "class-transformer",
|
||||
"149": "SmsSettingsPage.tsx",
|
||||
"148": "track/page.tsx",
|
||||
"149": "trust-seals/page.tsx",
|
||||
"150": "Product Requirement Document (PRD)",
|
||||
"151": "helmet",
|
||||
"152": "RedisService",
|
||||
"151": "ValidateCouponDto",
|
||||
"152": "MetricsController",
|
||||
"153": "exclude",
|
||||
"154": "Baseline Command Plan & Reconciled Command History",
|
||||
"155": "seo-backfill.ts",
|
||||
@ -176,15 +176,14 @@
|
||||
"174": "rebuild_honest_ledger.js",
|
||||
"175": "validate_evidence_grade.js",
|
||||
"176": "uploads/[...path]/route.ts",
|
||||
"177": "videos/page.tsx",
|
||||
"177": "app/page.tsx",
|
||||
"178": "نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina",
|
||||
"179": "app.e2e-spec.js",
|
||||
"179": "@types/node",
|
||||
"180": "API Contract Specification",
|
||||
"181": "⚙️ Backend Technical Review (05_dev_backend)",
|
||||
"182": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
|
||||
"183": "🚀 SEO & Content Strategy Review (12_seo_content)",
|
||||
"184": "js-yaml",
|
||||
"185": "@nestjs/core",
|
||||
"184": "eslint-config-next",
|
||||
"186": "seed-ui-texts.ts",
|
||||
"187": "seed-wiki.ts",
|
||||
"188": "update-blog.dto.ts",
|
||||
@ -197,13 +196,10 @@
|
||||
"195": "React + TypeScript + Vite",
|
||||
"196": "Select.tsx",
|
||||
"197": "userStore.ts",
|
||||
"198": "@nestjs/jwt",
|
||||
"199": "tailwindcss",
|
||||
"200": "application/README.md",
|
||||
"201": "deploy.sh",
|
||||
"202": "🔒 Security & Performance Review (09_devops_security)",
|
||||
"203": "👁️ UX & Persona Interface Review (08_visual_qa)",
|
||||
"204": "eslint",
|
||||
"205": "prisma/scientificTerms.ts",
|
||||
"206": "seed-blogs.ts",
|
||||
"207": "seed-custom.ts",
|
||||
@ -222,21 +218,13 @@
|
||||
"220": "Input.tsx",
|
||||
"221": "Textarea.tsx",
|
||||
"222": "admin-panel/tsconfig.json",
|
||||
"223": "catalog/page.tsx",
|
||||
"224": "eslint-config-prettier",
|
||||
"225": "next.config.ts",
|
||||
"226": "Shabnam Font README",
|
||||
"227": "AGENTS.md",
|
||||
"228": "rules/graphify.md",
|
||||
"229": ".agents/workflows/graphify.md",
|
||||
"230": "instructions.md",
|
||||
"231": "@nestjs/swagger",
|
||||
"232": "@nestjs/throttler",
|
||||
"233": "tailwindcss",
|
||||
"234": "passport",
|
||||
"235": "reflect-metadata",
|
||||
"236": "swagger-ui-express",
|
||||
"237": "@eslint/eslintrc",
|
||||
"238": "@vitejs/plugin-react",
|
||||
"239": "eslint-plugin-prettier",
|
||||
"240": "supertest",
|
||||
@ -266,7 +254,6 @@
|
||||
"264": "globals",
|
||||
"265": "jest",
|
||||
"266": "@nestjs/cli",
|
||||
"267": "@nestjs/testing",
|
||||
"268": "prettier",
|
||||
"269": "eslint-plugin-react-hooks",
|
||||
"270": "app-audit-verification.e2e-spec.d.ts",
|
||||
@ -294,36 +281,22 @@
|
||||
"292": "Production Docker Compose",
|
||||
"293": "Staging Docker Compose",
|
||||
"294": "ZibalService",
|
||||
"295": "@nestjs/schematics",
|
||||
"296": "ts-jest",
|
||||
"297": "ZibalEBankService",
|
||||
"298": ".initiateOrderPayment",
|
||||
"299": "@tailwindcss/postcss",
|
||||
"300": "typescript",
|
||||
"301": "@types/js-yaml",
|
||||
"302": "typescript-eslint",
|
||||
"303": "prisma",
|
||||
"304": "source-map-support",
|
||||
"305": "@types/supertest",
|
||||
"306": "@eslint/js",
|
||||
"307": "ts-loader",
|
||||
"308": "typescript-eslint",
|
||||
"309": "axios",
|
||||
"310": "tailwindcss",
|
||||
"311": "tsconfig-paths",
|
||||
"312": "@types/passport-jwt",
|
||||
"313": "20260526160916_add_ui_texts_and_scientific_terms/migration.sql",
|
||||
"314": "@types/bcrypt",
|
||||
"315": "typescript",
|
||||
"316": "@types/compression",
|
||||
"317": "revalidate/route.ts",
|
||||
"318": "MaskableField.tsx",
|
||||
"319": "@tailwindcss/postcss",
|
||||
"320": "@types/express",
|
||||
"321": "orders/page.tsx",
|
||||
"322": "pets/page.tsx",
|
||||
"323": "@types/jest",
|
||||
"325": "@types/react-dom",
|
||||
"327": "eslint-plugin-react-refresh",
|
||||
"329": "@types/multer"
|
||||
"327": "eslint-plugin-react-refresh"
|
||||
}
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
# Graph Report - canina (2026-09-02)
|
||||
|
||||
## Corpus Check
|
||||
- 596 files · ~1,072,182 words
|
||||
- 599 files · ~1,076,804 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 4173 nodes · 7530 edges · 327 communities (211 shown, 116 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 281 edges (avg confidence: 0.79)
|
||||
- 4207 nodes · 7629 edges · 300 communities (207 shown, 93 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 287 edges (avg confidence: 0.79)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `88060431`
|
||||
- Built from commit: `382ebc0c`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
@ -19,14 +19,14 @@
|
||||
- app.module.ts
|
||||
- PaymentService
|
||||
- productService.ts
|
||||
- UserDashboard.tsx
|
||||
- PetProfile.tsx
|
||||
- CmsController
|
||||
- tickets.controller.ts
|
||||
- Button.tsx
|
||||
- WikiController
|
||||
- devDependencies
|
||||
- CreateReviewDto
|
||||
- MediaSelector.tsx
|
||||
- ConfirmModal.tsx
|
||||
- index.ts
|
||||
- app-audit-verification.e2e-spec.js
|
||||
- toPersian
|
||||
@ -34,7 +34,7 @@
|
||||
- DoctorQueryDto
|
||||
- schema.ts
|
||||
- JwtAuthGuard
|
||||
- users.controller.ts
|
||||
- admin.service.ts
|
||||
- CreateVideoDto
|
||||
- ReportsController
|
||||
- SmsService
|
||||
@ -48,14 +48,14 @@
|
||||
- DEVOPS-001
|
||||
- DOC-001
|
||||
- adminRoutes.tsx
|
||||
- ContactService
|
||||
- WholesaleApplyDto
|
||||
- B2BService
|
||||
- AuthController
|
||||
- FaqController
|
||||
- ContactService
|
||||
- FaqService
|
||||
- راهنمای تست سیستم (Software Testing)
|
||||
- Transactions.tsx
|
||||
- Button
|
||||
- CategoriesController
|
||||
- admin.module.ts
|
||||
- MediaController
|
||||
- What You Must Do When Invoked
|
||||
- SslController
|
||||
- BannersService
|
||||
@ -67,21 +67,21 @@
|
||||
- devDependencies
|
||||
- devDependencies
|
||||
- BlogsController
|
||||
- PrescriptionsService
|
||||
- prescriptions.controller.ts
|
||||
- SmartAdvisorService
|
||||
- Modal.tsx
|
||||
- UITexts.tsx
|
||||
- Orders.tsx
|
||||
- PrescriptionsManager.tsx
|
||||
- Role & Core Objective
|
||||
- auth.module.ts
|
||||
- UserDashboard.tsx
|
||||
- compilerOptions
|
||||
- admin.service.ts
|
||||
- CreateUserDto
|
||||
- ProductPage.tsx
|
||||
- UsersService
|
||||
- BlogsService
|
||||
- dependencies
|
||||
- compilerOptions
|
||||
- BlogsService
|
||||
- ApiOperation
|
||||
- RevalidationService
|
||||
- Get
|
||||
- PetsController
|
||||
- useSettingsStore
|
||||
- Required Review Group Closures
|
||||
@ -100,17 +100,17 @@
|
||||
- scripts
|
||||
- dependencies
|
||||
- Role & Core Objective
|
||||
- Reports.tsx
|
||||
- torob.controller.ts
|
||||
- zibal.service.ts
|
||||
- dependencies
|
||||
- CreateEBankCheckoutDto
|
||||
- seed-products.ts
|
||||
- useCartStore
|
||||
- OrderService
|
||||
- Reconciled Audit Roles & Assignments
|
||||
- OrdersService
|
||||
- ArchivePage.tsx
|
||||
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
|
||||
- blog/[slug]/page.tsx
|
||||
- wiki/[slug]/page.tsx
|
||||
- compilerOptions
|
||||
- InitiatePaymentDto
|
||||
- scripts
|
||||
@ -119,18 +119,18 @@
|
||||
- Operational Rules & Boundaries
|
||||
- jest
|
||||
- Comprehensive Change Log
|
||||
- Coupons.tsx
|
||||
- Products.tsx
|
||||
- Operational Rules & Boundaries
|
||||
- AuthService
|
||||
- RedisService
|
||||
- PaginationDto
|
||||
- PrismaService
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- RegisterDto
|
||||
- Orders.tsx
|
||||
- AppService
|
||||
- Blogs.tsx
|
||||
- MediaSelector.tsx
|
||||
- Vazirmatn Changelog
|
||||
- Vazirmatn Font فونت وزیرمتن
|
||||
- Operational Rules & Boundaries
|
||||
@ -138,7 +138,7 @@
|
||||
- compilerOptions
|
||||
- backend/README.md
|
||||
- AdminService
|
||||
- UsersController
|
||||
- UsersService
|
||||
- Repository Map
|
||||
- validate_integrity.js
|
||||
- admin-panel/package.json
|
||||
@ -159,15 +159,15 @@
|
||||
- application/package.json
|
||||
- start-dev.js
|
||||
- generate-openapi.js
|
||||
- PodcastPlayerModal.tsx
|
||||
- FaqService
|
||||
- SafeImage.tsx
|
||||
- AuthService
|
||||
- System Discovery
|
||||
- HomeController
|
||||
- class-transformer
|
||||
- SmsSettingsPage.tsx
|
||||
- track/page.tsx
|
||||
- trust-seals/page.tsx
|
||||
- Product Requirement Document (PRD)
|
||||
- helmet
|
||||
- RedisService
|
||||
- ValidateCouponDto
|
||||
- MetricsController
|
||||
- exclude
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
- seo-backfill.ts
|
||||
@ -191,15 +191,14 @@
|
||||
- rebuild_honest_ledger.js
|
||||
- validate_evidence_grade.js
|
||||
- uploads/[...path]/route.ts
|
||||
- videos/page.tsx
|
||||
- app/page.tsx
|
||||
- نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina
|
||||
- app.e2e-spec.js
|
||||
- @types/node
|
||||
- API Contract Specification
|
||||
- ⚙️ Backend Technical Review (05_dev_backend)
|
||||
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
|
||||
- 🚀 SEO & Content Strategy Review (12_seo_content)
|
||||
- js-yaml
|
||||
- @nestjs/core
|
||||
- eslint-config-next
|
||||
- seed-ui-texts.ts
|
||||
- seed-wiki.ts
|
||||
- update-blog.dto.ts
|
||||
@ -212,13 +211,10 @@
|
||||
- React + TypeScript + Vite
|
||||
- Select.tsx
|
||||
- userStore.ts
|
||||
- @nestjs/jwt
|
||||
- tailwindcss
|
||||
- application/README.md
|
||||
- deploy.sh
|
||||
- 🔒 Security & Performance Review (09_devops_security)
|
||||
- 👁️ UX & Persona Interface Review (08_visual_qa)
|
||||
- eslint
|
||||
- prisma/scientificTerms.ts
|
||||
- seed-blogs.ts
|
||||
- seed-custom.ts
|
||||
@ -237,21 +233,13 @@
|
||||
- Input.tsx
|
||||
- Textarea.tsx
|
||||
- admin-panel/tsconfig.json
|
||||
- catalog/page.tsx
|
||||
- eslint-config-prettier
|
||||
- next.config.ts
|
||||
- Shabnam Font README
|
||||
- AGENTS.md
|
||||
- rules/graphify.md
|
||||
- .agents/workflows/graphify.md
|
||||
- instructions.md
|
||||
- @nestjs/swagger
|
||||
- @nestjs/throttler
|
||||
- tailwindcss
|
||||
- passport
|
||||
- reflect-metadata
|
||||
- swagger-ui-express
|
||||
- @eslint/eslintrc
|
||||
- @vitejs/plugin-react
|
||||
- eslint-plugin-prettier
|
||||
- supertest
|
||||
@ -277,7 +265,6 @@
|
||||
- globals
|
||||
- jest
|
||||
- @nestjs/cli
|
||||
- @nestjs/testing
|
||||
- prettier
|
||||
- eslint-plugin-react-hooks
|
||||
- Canina Pharma GmbH
|
||||
@ -294,34 +281,20 @@
|
||||
- Production Docker Compose
|
||||
- Staging Docker Compose
|
||||
- ZibalService
|
||||
- @nestjs/schematics
|
||||
- ts-jest
|
||||
- ZibalEBankService
|
||||
- .initiateOrderPayment
|
||||
- @tailwindcss/postcss
|
||||
- typescript
|
||||
- @types/js-yaml
|
||||
- typescript-eslint
|
||||
- prisma
|
||||
- source-map-support
|
||||
- @types/supertest
|
||||
- @eslint/js
|
||||
- ts-loader
|
||||
- typescript-eslint
|
||||
- tsconfig-paths
|
||||
- @types/passport-jwt
|
||||
- 20260526160916_add_ui_texts_and_scientific_terms/migration.sql
|
||||
- @types/bcrypt
|
||||
- typescript
|
||||
- @types/compression
|
||||
- revalidate/route.ts
|
||||
- MaskableField.tsx
|
||||
- @tailwindcss/postcss
|
||||
- @types/express
|
||||
- @types/jest
|
||||
- @types/react-dom
|
||||
- eslint-plugin-react-refresh
|
||||
- @types/multer
|
||||
|
||||
## God Nodes (most connected - your core abstractions)
|
||||
1. `Roles()` - 106 edges
|
||||
@ -330,10 +303,10 @@
|
||||
4. `api` - 44 edges
|
||||
5. `SmsService` - 43 edges
|
||||
6. `PaginationDto` - 41 edges
|
||||
7. `Button()` - 39 edges
|
||||
8. `PaymentController` - 38 edges
|
||||
9. `ZibalService` - 37 edges
|
||||
10. `AdminService` - 36 edges
|
||||
7. `AdminService` - 40 edges
|
||||
8. `AdminController` - 39 edges
|
||||
9. `Button()` - 39 edges
|
||||
10. `PaymentController` - 38 edges
|
||||
|
||||
## Surprising Connections (you probably didn't know these)
|
||||
- `User Roles and Capabilities` --conceptually_related_to--> `User Profile Photo` [INFERRED]
|
||||
@ -352,7 +325,7 @@
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
|
||||
|
||||
## Communities (327 total, 116 thin omitted)
|
||||
## Communities (300 total, 93 thin omitted)
|
||||
|
||||
### Community 0 - "Roles"
|
||||
Cohesion: 0.24
|
||||
@ -360,7 +333,7 @@ Nodes (13): Roles(), PaymentController, ApiBearerAuth, ApiOperation, ApiTags, Bo
|
||||
|
||||
### Community 1 - "app.module.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (39): B2BModule, Module, BannersModule, Module, CmsModule, Module, RevalidationModule, Global (+31 more)
|
||||
Nodes (40): B2BModule, Module, BannersModule, Module, CmsModule, Module, RevalidationModule, Global (+32 more)
|
||||
|
||||
### Community 2 - "PaymentService"
|
||||
Cohesion: 0.11
|
||||
@ -368,11 +341,11 @@ Nodes (9): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOpt
|
||||
|
||||
### Community 3 - "productService.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (41): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+33 more)
|
||||
Nodes (39): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+31 more)
|
||||
|
||||
### Community 4 - "UserDashboard.tsx"
|
||||
Cohesion: 0.11
|
||||
Nodes (20): metadata, OrderDetailsModal(), PetProfile(), SearchResultsPage(), CURRENT_SYMPTOMS, MEDICAL_HISTORIES, SmartAdvisor(), SmartAdvisorProps (+12 more)
|
||||
### Community 4 - "PetProfile.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (18): metadata, FeaturedProducts(), ProductCard(), OrderSuccess(), PetProfile(), SearchResultsPage(), CURRENT_SYMPTOMS, MEDICAL_HISTORIES (+10 more)
|
||||
|
||||
### Community 5 - "CmsController"
|
||||
Cohesion: 0.09
|
||||
@ -383,56 +356,56 @@ Cohesion: 0.09
|
||||
Nodes (31): AdminUpdateTicketDto, CreateTicketDto, ReplyTicketDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString (+23 more)
|
||||
|
||||
### Community 7 - "Button.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (14): Button(), ButtonProps, ButtonSize, ButtonVariant, Spinner(), FAQ, BlogCommentItem, ProductReview (+6 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (21): ButtonProps, ButtonSize, ButtonVariant, Spinner(), Doctor, FAQ, PatternItem, SmsConfigState (+13 more)
|
||||
|
||||
### Community 8 - "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 9 - "devDependencies"
|
||||
Cohesion: 0.22
|
||||
Nodes (9): devDependencies, ts-node, @types/bcryptjs, @types/node, typescript, @types/node, typescript, ts-node (+1 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (43): devDependencies, eslint, eslint-config-prettier, @eslint/eslintrc, @nestjs/schematics, @nestjs/testing, prisma, source-map-support (+35 more)
|
||||
|
||||
### Community 10 - "CreateReviewDto"
|
||||
Cohesion: 0.07
|
||||
Nodes (30): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+22 more)
|
||||
|
||||
### Community 11 - "MediaSelector.tsx"
|
||||
### Community 11 - "ConfirmModal.tsx"
|
||||
Cohesion: 0.06
|
||||
Nodes (35): ConfirmModal(), ConfirmModalProps, ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps (+27 more)
|
||||
Nodes (30): ConfirmModal(), ConfirmModalProps, Pagination(), PaginationProps, Category, HeroBanner, VetTestimonial, getFileType() (+22 more)
|
||||
|
||||
### Community 12 - "index.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/*.ts, authFile, test, compilerOptions (+16 more)
|
||||
|
||||
### Community 13 - "app-audit-verification.e2e-spec.js"
|
||||
Cohesion: 0.06
|
||||
Nodes (28): AppModule, Module, EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter (+20 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
|
||||
|
||||
### Community 14 - "toPersian"
|
||||
Cohesion: 0.17
|
||||
Nodes (19): VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), BackButton(), BackButtonProps (+11 more)
|
||||
Nodes (20): HomeClient(), VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), CheckoutPage() (+12 more)
|
||||
|
||||
### Community 15 - "src/services/api.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (31): Layout(), ProtectedRoute(), MenuGroup, Sidebar(), SidebarProps, SubMenuItem, LiveMonitoringSummary, SEARCHABLE_PAGES (+23 more)
|
||||
|
||||
### Community 16 - "DoctorQueryDto"
|
||||
Cohesion: 0.09
|
||||
Nodes (24): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (26): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+18 more)
|
||||
|
||||
### Community 17 - "schema.ts"
|
||||
Cohesion: 0.15
|
||||
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getRelatedProducts(), getWikiTerm(), WikiTermPage() (+10 more)
|
||||
Cohesion: 0.14
|
||||
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
|
||||
|
||||
### Community 18 - "JwtAuthGuard"
|
||||
Cohesion: 0.18
|
||||
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
Nodes (6): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable
|
||||
|
||||
### Community 19 - "users.controller.ts"
|
||||
Cohesion: 0.13
|
||||
Nodes (13): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+5 more)
|
||||
### Community 19 - "admin.service.ts"
|
||||
Cohesion: 0.15
|
||||
Nodes (21): CouponInput, CouponTargetInput, PaginationQuery, ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray (+13 more)
|
||||
|
||||
### Community 20 - "CreateVideoDto"
|
||||
Cohesion: 0.09
|
||||
@ -484,39 +457,39 @@ Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternati
|
||||
|
||||
### Community 32 - "adminRoutes.tsx"
|
||||
Cohesion: 0.08
|
||||
Nodes (17): App(), Props, RouteErrorBoundary, State, HeroBanner, VetTestimonial, AdminRouteConfig, CMS (+9 more)
|
||||
Nodes (14): App(), Props, RouteErrorBoundary, State, BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps (+6 more)
|
||||
|
||||
### Community 33 - "ContactService"
|
||||
Cohesion: 0.06
|
||||
Nodes (32): ContactController, Body, Controller, Get, Param, Post, Put, Query (+24 more)
|
||||
### Community 33 - "WholesaleApplyDto"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
|
||||
|
||||
### Community 34 - "B2BService"
|
||||
Cohesion: 0.13
|
||||
Nodes (15): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+7 more)
|
||||
|
||||
### Community 35 - "AuthController"
|
||||
Cohesion: 0.25
|
||||
Nodes (13): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+5 more)
|
||||
### Community 35 - "ContactService"
|
||||
Cohesion: 0.13
|
||||
Nodes (12): ContactController, Body, Controller, Get, Param, Post, Put, Query (+4 more)
|
||||
|
||||
### Community 36 - "FaqController"
|
||||
### Community 36 - "FaqService"
|
||||
Cohesion: 0.14
|
||||
Nodes (12): FaqController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+4 more)
|
||||
Nodes (14): FaqController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 37 - "راهنمای تست سیستم (Software Testing)"
|
||||
Cohesion: 0.07
|
||||
Nodes (25): اجرای بکاند, اجرای فرانتاند, اجرای پروژه در سرور با PM2, برای راهاندازی بکاند:, برای راهاندازی فرانتاند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسهها تا پس از ریاستارت سرور قطع نشوند:, راهاندازی و انتشار سیستم (Setup & Deployment) (+17 more)
|
||||
|
||||
### Community 38 - "Transactions.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (19): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Badge(), BadgeProps, BadgeVariant, variantStyles, ThSort() (+11 more)
|
||||
### Community 38 - "Button"
|
||||
Cohesion: 0.16
|
||||
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
|
||||
|
||||
### Community 39 - "CategoriesController"
|
||||
Cohesion: 0.10
|
||||
Nodes (16): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
|
||||
|
||||
### Community 40 - "admin.module.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (19): AdminModule, Module, MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller (+11 more)
|
||||
### Community 40 - "MediaController"
|
||||
Cohesion: 0.11
|
||||
Nodes (14): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 41 - "What You Must Do When Invoked"
|
||||
Cohesion: 0.07
|
||||
@ -547,8 +520,8 @@ Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 48 - "auth.service.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (25): AdminLoginInput, LoginInput, RegisterInput, AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString (+17 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (46): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+38 more)
|
||||
|
||||
### Community 49 - "devDependencies"
|
||||
Cohesion: 0.11
|
||||
@ -556,75 +529,75 @@ 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, @testing-library/jest-dom, @testing-library/react, @types/node, @types/react (+9 more)
|
||||
|
||||
### Community 51 - "BlogsController"
|
||||
Cohesion: 0.14
|
||||
Nodes (16): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (18): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+10 more)
|
||||
|
||||
### Community 52 - "PrescriptionsService"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
|
||||
### Community 52 - "prescriptions.controller.ts"
|
||||
Cohesion: 0.11
|
||||
Nodes (17): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+9 more)
|
||||
|
||||
### Community 53 - "SmartAdvisorService"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 54 - "Modal.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (14): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, MENU_TABS, MenuItem, MenuType (+6 more)
|
||||
Cohesion: 0.11
|
||||
Nodes (15): maxWidthClasses, Modal(), ModalProps, ContactInfoItem, ContactSubmission, BlogCommentItem, ProductReview, Reviews() (+7 more)
|
||||
|
||||
### Community 55 - "UITexts.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): ICON_REGISTRY, IconPickerModal(), IconPickerModalProps, ToggleSwitch(), ToggleSwitchProps, AppSitePage, PageSection, SectionField (+7 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 - "auth.module.ts"
|
||||
Cohesion: 0.17
|
||||
Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+2 more)
|
||||
### Community 58 - "UserDashboard.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (11): DeleteConfirmModal(), DeleteConfirmModalProps, OrderDetailsModal(), OrderRowSkeleton(), PetProfileSkeleton(), Skeleton(), SkeletonProps, CreateTicketPayload (+3 more)
|
||||
|
||||
### Community 59 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
|
||||
|
||||
### Community 60 - "admin.service.ts"
|
||||
Cohesion: 0.13
|
||||
Nodes (21): CouponInput, CouponTargetInput, PaginationQuery, ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber (+13 more)
|
||||
### Community 60 - "CreateUserDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (10): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+2 more)
|
||||
|
||||
### Community 61 - "ProductPage.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (20): ProductImageZoomModalProps, CalculatorState, GalleryMediaItem, ICON_MAP, isVideoUrl(), ProductImageZoomModal, ProductPage(), ProductReviews (+12 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (19): ProductImageZoomModalProps, CalculatorState, GalleryMediaItem, ICON_MAP, isVideoUrl(), ProductImageZoomModal, ProductPage(), ProductReviews (+11 more)
|
||||
|
||||
### Community 63 - "dependencies"
|
||||
Cohesion: 0.09
|
||||
Nodes (23): dependencies, bcrypt, bcryptjs, class-validator, compression, ioredis, @nestjs/common, @nestjs/passport (+15 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (43): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, compression, helmet, ioredis (+35 more)
|
||||
|
||||
### Community 64 - "compilerOptions"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
|
||||
|
||||
### Community 65 - "BlogsService"
|
||||
Cohesion: 0.09
|
||||
Nodes (4): BlogsService, Injectable, RevalidationService, Injectable
|
||||
### Community 65 - "RevalidationService"
|
||||
Cohesion: 0.12
|
||||
Nodes (9): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString, RevalidationService (+1 more)
|
||||
|
||||
### Community 66 - "ApiOperation"
|
||||
Cohesion: 0.13
|
||||
Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
### Community 66 - "Get"
|
||||
Cohesion: 0.17
|
||||
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
|
||||
### Community 67 - "PetsController"
|
||||
Cohesion: 0.10
|
||||
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
|
||||
Cohesion: 0.11
|
||||
Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more)
|
||||
|
||||
### Community 68 - "useSettingsStore"
|
||||
Cohesion: 0.08
|
||||
Nodes (36): HomeClient(), HomeClientProps, B2BLandingClient(), BlogPostClientProps, BlogPost, BlogPreviewSection(), ContactInfoItem, EnamadBadge() (+28 more)
|
||||
Nodes (29): HomeClientProps, B2BLandingClient(), BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps, ContactInfoItem, FAQItem (+21 more)
|
||||
|
||||
### Community 69 - "Required Review Group Closures"
|
||||
Cohesion: 0.10
|
||||
@ -635,8 +608,8 @@ Cohesion: 0.08
|
||||
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
|
||||
|
||||
### Community 71 - "getPageMetadata"
|
||||
Cohesion: 0.08
|
||||
Nodes (17): generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), getHomeData(), Home(), generateMetadata(), generateMetadata() (+9 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (14): generateMetadata(), CatalogClient(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata(), generateMetadata() (+6 more)
|
||||
|
||||
### Community 72 - "Operational Rules & Boundaries"
|
||||
Cohesion: 0.11
|
||||
@ -655,8 +628,8 @@ Cohesion: 0.05
|
||||
Nodes (47): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreatePetDto, ApiProperty (+39 more)
|
||||
|
||||
### Community 76 - "ProductsService"
|
||||
Cohesion: 0.07
|
||||
Nodes (27): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+19 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (19): GetProductsDto, ApiPropertyOptional, IsEnum, IsOptional, IsString, ProductsController, ApiOperation, ApiTags (+11 more)
|
||||
|
||||
### Community 77 - "seo.module.ts"
|
||||
Cohesion: 0.16
|
||||
@ -690,9 +663,9 @@ Nodes (21): dependencies, axios, lucide-react, react, react-dom, react-hot-toast
|
||||
Cohesion: 0.12
|
||||
Nodes (16): 1. Active Secret Scanning (All Modified Files), 2. Docker Container Verification (if Dockerfile exists), 3. CI/CD Basic Check (if `.github/workflows/` exists), 4. Failure Routing Protocol, 5. Forbidden Actions, ENFORCE MODE — Normal Operation, Expected JSON Output Schema, Operational Rules & Boundaries (+8 more)
|
||||
|
||||
### Community 85 - "Reports.tsx"
|
||||
Cohesion: 0.20
|
||||
Nodes (7): BestSellerItem, CategoryDistItem, COLORS, CustomTooltipProps, ReportData, TopCouponItem, Reports
|
||||
### Community 85 - "torob.controller.ts"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): buildTorobProductSpec(), buildTorobProductTitle(), TorobController, ApiOperation, ApiTags, Controller, Get, Query
|
||||
|
||||
### Community 86 - "zibal.service.ts"
|
||||
Cohesion: 0.16
|
||||
@ -710,29 +683,25 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
|
||||
Cohesion: 0.17
|
||||
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
|
||||
|
||||
### Community 90 - "useCartStore"
|
||||
Cohesion: 0.09
|
||||
Nodes (19): B2BPortal, CartDrawer, B2BPortal(), CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, OrderSuccess(), OrderTracking() (+11 more)
|
||||
|
||||
### Community 91 - "Reconciled Audit Roles & Assignments"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more)
|
||||
|
||||
### Community 92 - "OrdersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (35): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+27 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
|
||||
|
||||
### Community 93 - "ArchivePage.tsx"
|
||||
Cohesion: 0.08
|
||||
Nodes (21): ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, OrderRowSkeleton(), PetProfileSkeleton() (+13 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (15): ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, ProductCardSkeleton(), B2BInquiry (+7 more)
|
||||
|
||||
### Community 94 - "Phase 3.1 — Human Review Preparation and Master Backlog Critique"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): 10. Dependency & Wave Adjustments, 11. Acceptance Criteria Refinements, 12. Business and Product Decision Classification, 13. Final Recommended Backlog Summary, 1. Executive Assessment, 2. Findings That Require No Change, 3. Findings Requiring Task Refinements, 4. Tasks Requiring Splitting (+6 more)
|
||||
|
||||
### Community 95 - "blog/[slug]/page.tsx"
|
||||
Cohesion: 0.26
|
||||
Nodes (11): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), revalidate (+3 more)
|
||||
### Community 95 - "wiki/[slug]/page.tsx"
|
||||
Cohesion: 0.19
|
||||
Nodes (16): BlogPostPage(), generateMetadata(), getBlog(), revalidate, safeIso(), safeLocalDate(), generateMetadata(), revalidate (+8 more)
|
||||
|
||||
### Community 96 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
@ -766,25 +735,25 @@ Nodes (13): jest, collectCoverageFrom, coverageDirectory, moduleFileExtensions,
|
||||
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 - "Coupons.tsx"
|
||||
Cohesion: 0.15
|
||||
Nodes (11): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+3 more)
|
||||
### Community 104 - "Products.tsx"
|
||||
Cohesion: 0.09
|
||||
Nodes (23): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDigits(), Coupon, CouponFormData, CouponModalProps, CouponTarget (+15 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 - "AuthService"
|
||||
Cohesion: 0.18
|
||||
Nodes (4): AuthService, Injectable, normalizeMobile(), UserAddressInput
|
||||
### Community 106 - "RedisService"
|
||||
Cohesion: 0.08
|
||||
Nodes (7): AppModule, Module, AuthService, Injectable, normalizeMobile(), RedisService, Injectable
|
||||
|
||||
### Community 107 - "PaginationDto"
|
||||
Cohesion: 0.07
|
||||
Nodes (20): CategoryQuery, BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder (+12 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (31): AdminModule, Module, MediaService, Injectable, SslCertInfo, BlogsModule, Module, BlogFilterDto (+23 more)
|
||||
|
||||
### Community 108 - "PrismaService"
|
||||
Cohesion: 0.07
|
||||
Nodes (20): WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery, CreateContactSubmissionDto (+12 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (22): CategoryQuery, PetQuery, WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig (+14 more)
|
||||
|
||||
### Community 109 - "1. Summary of Integrity Repairs Performed"
|
||||
Cohesion: 0.17
|
||||
@ -802,17 +771,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 - "RegisterDto"
|
||||
### Community 113 - "Orders.tsx"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
|
||||
Nodes (8): getPaymentMethodLabel(), Order, ORDER_STATUS_MAP, OrderItem, Orders(), PaymentTx, toPersianDigits(), Orders
|
||||
|
||||
### Community 114 - "AppService"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): AppController, Controller, Get, AppService, Injectable
|
||||
|
||||
### Community 115 - "Blogs.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (14): ActiveStates, PRESET_BG_COLORS, PRESET_COLORS, RichTextEditor(), RichTextEditorProps, AuthorUser, BlogCategory, BlogPost (+6 more)
|
||||
### Community 115 - "MediaSelector.tsx"
|
||||
Cohesion: 0.07
|
||||
Nodes (23): ImagePreviewModal(), ImagePreviewModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, ActiveStates, PRESET_BG_COLORS (+15 more)
|
||||
|
||||
### Community 116 - "Vazirmatn Changelog"
|
||||
Cohesion: 0.18
|
||||
@ -838,13 +807,9 @@ Nodes (9): compilerOptions, esModuleInterop, module, moduleResolution, skipLibCh
|
||||
Cohesion: 0.20
|
||||
Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more)
|
||||
|
||||
### Community 122 - "AdminService"
|
||||
Cohesion: 0.15
|
||||
Nodes (4): Body, Post, AdminService, Injectable
|
||||
|
||||
### Community 123 - "UsersController"
|
||||
Cohesion: 0.20
|
||||
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
### Community 123 - "UsersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (42): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+34 more)
|
||||
|
||||
### Community 124 - "Repository Map"
|
||||
Cohesion: 0.20
|
||||
@ -863,8 +828,8 @@ 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 - "AdminController"
|
||||
Cohesion: 0.11
|
||||
Nodes (8): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, Put, UseGuards
|
||||
Cohesion: 0.18
|
||||
Nodes (11): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Param (+3 more)
|
||||
|
||||
### Community 130 - "Sahel-Font"
|
||||
Cohesion: 0.20
|
||||
@ -922,13 +887,9 @@ Nodes (7): backend, distMainPath, fs, http, path, { spawn, execSync }, waitForBa
|
||||
Cohesion: 0.25
|
||||
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
|
||||
|
||||
### Community 144 - "PodcastPlayerModal.tsx"
|
||||
Cohesion: 0.40
|
||||
Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps
|
||||
|
||||
### Community 145 - "FaqService"
|
||||
Cohesion: 0.33
|
||||
Nodes (4): FaqModule, Module, FaqService, Injectable
|
||||
### Community 144 - "SafeImage.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): BackButton(), BackButtonProps, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal() (+12 more)
|
||||
|
||||
### Community 146 - "System Discovery"
|
||||
Cohesion: 0.25
|
||||
@ -938,17 +899,17 @@ Nodes (7): Active Core Applications, Current Architecture, Evidence-Based Status
|
||||
Cohesion: 0.16
|
||||
Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, HomeModule, Module (+2 more)
|
||||
|
||||
### Community 149 - "SmsSettingsPage.tsx"
|
||||
Cohesion: 0.29
|
||||
Nodes (7): PatternItem, SmsConfigState, SmsLogItem, SmsLogStats, SmsSettingsPage(), toPersianDigits(), SmsSettingsPage
|
||||
|
||||
### Community 150 - "Product Requirement Document (PRD)"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements, 4. Non-Functional Requirements (Performance, Security), 5. Epic / Feature Breakdown, Product Requirement Document (PRD)
|
||||
|
||||
### Community 152 - "RedisService"
|
||||
Cohesion: 0.10
|
||||
Nodes (10): ApiExcludeController, MetricsController, Controller, Get, Res, RedisModule, Global, Module (+2 more)
|
||||
### Community 151 - "ValidateCouponDto"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): IsNotEmpty, IsNumber, IsString, ValidateCouponDto
|
||||
|
||||
### Community 152 - "MetricsController"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
|
||||
|
||||
### Community 153 - "exclude"
|
||||
Cohesion: 0.22
|
||||
@ -1038,18 +999,14 @@ Nodes (4): activeFiles, errors, validationOutput, warnings
|
||||
Cohesion: 0.60
|
||||
Nodes (4): dynamic, GET(), getCandidateUrls(), HEAD()
|
||||
|
||||
### Community 177 - "videos/page.tsx"
|
||||
Cohesion: 0.47
|
||||
Nodes (5): generateMetadata(), getInitialVideos(), Videos(), VideosPage(), generateVideoObjectSchema()
|
||||
### Community 177 - "app/page.tsx"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): generateMetadata(), getHomeData(), Home()
|
||||
|
||||
### Community 178 - "نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina"
|
||||
Cohesion: 0.33
|
||||
Nodes (5): نقشه جامع پوشش تستهای سرتاسری (E2E Test Coverage Map) — پروژه Canina, ۱. معماری و نقشهای کاربری (User Roles), ۲. ماتریس جریانها و قابلیتهای کاربرمحور (Feature & Flow Matrix), ۳. وضعیت پوشش نهایی سوئیت ۱۱گانه (Final 11 Test Suites Status), ۴. راهنمای نگهداری و افزودن فیچرهای جدید بدون شکستن تستها (Developer Maintenance Guide)
|
||||
|
||||
### Community 179 - "app.e2e-spec.js"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): app_module_1, supertest_1, testing_1
|
||||
|
||||
### Community 180 - "API Contract Specification"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): 1. OpenAPI 3.0 (Swagger) Specification, 2. Endpoint Definitions & Data Types, API Contract Specification
|
||||
@ -1091,8 +1048,8 @@ Cohesion: 0.50
|
||||
Nodes (3): Select, SelectOption, SelectProps
|
||||
|
||||
### Community 197 - "userStore.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (33): AuthModal, ClientLayout(), LoginModal, AuthModal(), AuthModalProps, extractOtpFromText(), BrandLogo(), BrandLogoProps (+25 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (37): AuthModal, B2BPortal, CartDrawer, ClientLayout(), LoginModal, AuthModal(), AuthModalProps, extractOtpFromText() (+29 more)
|
||||
|
||||
### Community 200 - "application/README.md"
|
||||
Cohesion: 0.50
|
||||
@ -1119,24 +1076,24 @@ Cohesion: 0.83
|
||||
Nodes (3): GET(), handleRevalidate(), POST()
|
||||
|
||||
## Knowledge Gaps
|
||||
- **1346 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1341 more)
|
||||
- **1348 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1343 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **116 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **93 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `AuthController`, `WikiController`, `PetsController`, `ProductsService`, `HomeController`, `UsersController`, `OrdersService`?**
|
||||
_High betweenness centrality (0.081) - this node is a cross-community bridge._
|
||||
- **Why does `Roles()` connect `Roles` to `ContactService`, `B2BService`, `FaqController`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ProductsService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `PrescriptionsService`, `SmartAdvisorService`, `SmsService`, `MenuService`?**
|
||||
_High betweenness centrality (0.065) - this node is a cross-community bridge._
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `WikiService`, `PetsController`, `CmsController`, `tickets.controller.ts`, `admin.module.ts`, `PaginationDto`, `PetsController`, `ProductsService`, `OrdersService`, `auth.service.ts`, `DoctorQueryDto`, `users.controller.ts`, `ReportsController`, `admin.service.ts`?**
|
||||
_High betweenness centrality (0.034) - this node is a cross-community bridge._
|
||||
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ProductsService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `SmsService`, `MenuService`?**
|
||||
_High betweenness centrality (0.068) - this node is a cross-community bridge._
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `WikiController`, `PetsController`, `ProductsService`, `auth.service.ts`, `HomeController`, `UsersService`, `OrdersService`?**
|
||||
_High betweenness centrality (0.062) - this node is a cross-community bridge._
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CmsController`, `tickets.controller.ts`, `PaginationDto`, `PetsController`, `ProductsService`, `auth.service.ts`, `DoctorQueryDto`, `admin.service.ts`, `prescriptions.controller.ts`, `ReportsController`, `UsersService`?**
|
||||
_High betweenness centrality (0.028) - this node is a cross-community bridge._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1346 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
_1348 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `app.module.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.062310949788263764 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.05786090005844535 - nodes in this community are weakly interconnected._
|
||||
- **Should `PaymentService` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.11 - nodes in this community are weakly interconnected._
|
||||
- **Should `productService.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.055130784708249496 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.05780885780885781 - 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,16 +1,16 @@
|
||||
# Graph Report - canina (2026-09-02)
|
||||
|
||||
## Corpus Check
|
||||
- 599 files · ~1,076,804 words
|
||||
- 599 files · ~1,077,927 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 4207 nodes · 7629 edges · 300 communities (207 shown, 93 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 287 edges (avg confidence: 0.79)
|
||||
- 4207 nodes · 7634 edges · 314 communities (214 shown, 100 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 288 edges (avg confidence: 0.79)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `382ebc0c`
|
||||
- Built from commit: `ac15ece6`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
- app.module.ts
|
||||
- PaymentService
|
||||
- productService.ts
|
||||
- PetProfile.tsx
|
||||
- api
|
||||
- CmsController
|
||||
- tickets.controller.ts
|
||||
- Button.tsx
|
||||
@ -29,15 +29,15 @@
|
||||
- ConfirmModal.tsx
|
||||
- index.ts
|
||||
- app-audit-verification.e2e-spec.js
|
||||
- toPersian
|
||||
- UserDashboard.tsx
|
||||
- src/services/api.ts
|
||||
- DoctorQueryDto
|
||||
- schema.ts
|
||||
- JwtAuthGuard
|
||||
- admin.service.ts
|
||||
- admin.controller.ts
|
||||
- CreateVideoDto
|
||||
- ReportsController
|
||||
- SmsService
|
||||
- SettingsController
|
||||
- MenuService
|
||||
- BE-001
|
||||
- FE-001
|
||||
@ -63,7 +63,7 @@
|
||||
- What You Must Do When Invoked
|
||||
- 20260526145407_init/migration.sql
|
||||
- IngredientsService
|
||||
- auth.service.ts
|
||||
- .sendOtp
|
||||
- devDependencies
|
||||
- devDependencies
|
||||
- BlogsController
|
||||
@ -73,16 +73,16 @@
|
||||
- UITexts.tsx
|
||||
- PrescriptionsManager.tsx
|
||||
- Role & Core Objective
|
||||
- UserDashboard.tsx
|
||||
- components/Skeleton.tsx
|
||||
- compilerOptions
|
||||
- CreateUserDto
|
||||
- ProductPage.tsx
|
||||
- BlogsService
|
||||
- SettingsService
|
||||
- dependencies
|
||||
- compilerOptions
|
||||
- RevalidationService
|
||||
- Get
|
||||
- PetsController
|
||||
- AdminController
|
||||
- admin.module.ts
|
||||
- useSettingsStore
|
||||
- Required Review Group Closures
|
||||
- compilerOptions
|
||||
@ -105,10 +105,10 @@
|
||||
- dependencies
|
||||
- CreateEBankCheckoutDto
|
||||
- seed-products.ts
|
||||
- OrderService
|
||||
- useCartStore
|
||||
- Reconciled Audit Roles & Assignments
|
||||
- OrdersService
|
||||
- ArchivePage.tsx
|
||||
- OrdersController
|
||||
- HomeClient.tsx
|
||||
- Phase 3.1 — Human Review Preparation and Master Backlog Critique
|
||||
- wiki/[slug]/page.tsx
|
||||
- compilerOptions
|
||||
@ -121,7 +121,7 @@
|
||||
- Comprehensive Change Log
|
||||
- Products.tsx
|
||||
- Operational Rules & Boundaries
|
||||
- RedisService
|
||||
- AuthService
|
||||
- PaginationDto
|
||||
- PrismaService
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
@ -143,8 +143,8 @@
|
||||
- validate_integrity.js
|
||||
- admin-panel/package.json
|
||||
- Sahel-Font
|
||||
- AdminController
|
||||
- WikiService
|
||||
- Param
|
||||
- admin.service.ts
|
||||
- Sahel-Font
|
||||
- Role & Core Objective
|
||||
- orchestrate.py
|
||||
@ -160,14 +160,14 @@
|
||||
- start-dev.js
|
||||
- generate-openapi.js
|
||||
- SafeImage.tsx
|
||||
- AuthService
|
||||
- auth.controller.ts
|
||||
- System Discovery
|
||||
- HomeController
|
||||
- track/page.tsx
|
||||
- trust-seals/page.tsx
|
||||
- Product Requirement Document (PRD)
|
||||
- ValidateCouponDto
|
||||
- MetricsController
|
||||
- CreateOrderDto
|
||||
- RedisService
|
||||
- exclude
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
- seo-backfill.ts
|
||||
@ -199,6 +199,7 @@
|
||||
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
|
||||
- 🚀 SEO & Content Strategy Review (12_seo_content)
|
||||
- eslint-config-next
|
||||
- auth.service.ts
|
||||
- seed-ui-texts.ts
|
||||
- seed-wiki.ts
|
||||
- update-blog.dto.ts
|
||||
@ -210,11 +211,14 @@
|
||||
- Raw Finding Verification & Disposition Report
|
||||
- React + TypeScript + Vite
|
||||
- Select.tsx
|
||||
- userStore.ts
|
||||
- lib/services/api.ts
|
||||
- RegisterDto
|
||||
- SmsLogQueryDto
|
||||
- application/README.md
|
||||
- deploy.sh
|
||||
- 🔒 Security & Performance Review (09_devops_security)
|
||||
- 👁️ UX & Persona Interface Review (08_visual_qa)
|
||||
- VerifyOtpDto
|
||||
- prisma/scientificTerms.ts
|
||||
- seed-blogs.ts
|
||||
- seed-custom.ts
|
||||
@ -233,15 +237,23 @@
|
||||
- Input.tsx
|
||||
- Textarea.tsx
|
||||
- admin-panel/tsconfig.json
|
||||
- AuthController
|
||||
- eslint-config-prettier
|
||||
- next.config.ts
|
||||
- Shabnam Font README
|
||||
- AGENTS.md
|
||||
- rules/graphify.md
|
||||
- .agents/workflows/graphify.md
|
||||
- instructions.md
|
||||
- @nestjs/schematics
|
||||
- prisma
|
||||
- tailwindcss
|
||||
- source-map-support
|
||||
- ts-loader
|
||||
- ts-node
|
||||
- tsconfig-paths
|
||||
- @vitejs/plugin-react
|
||||
- eslint-plugin-prettier
|
||||
- @types/bcrypt
|
||||
- supertest
|
||||
- blog.entity.ts
|
||||
- home.entity.ts
|
||||
@ -262,10 +274,11 @@
|
||||
- start.sh
|
||||
- User Login API
|
||||
- User Logout API
|
||||
- globals
|
||||
- @types/compression
|
||||
- jest
|
||||
- @nestjs/cli
|
||||
- prettier
|
||||
- @types/express
|
||||
- @types/jest
|
||||
- @types/multer
|
||||
- eslint-plugin-react-hooks
|
||||
- Canina Pharma GmbH
|
||||
- Pets Table
|
||||
@ -281,6 +294,7 @@
|
||||
- Production Docker Compose
|
||||
- Staging Docker Compose
|
||||
- ZibalService
|
||||
- typescript
|
||||
- ZibalEBankService
|
||||
- .initiateOrderPayment
|
||||
- @tailwindcss/postcss
|
||||
@ -321,11 +335,11 @@
|
||||
backend/src/orders/orders.controller.ts → frontend/admin-panel/src/types/admin.ts
|
||||
|
||||
## Import Cycles
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/api.ts`
|
||||
- 3-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/services/authService.ts -> frontend/application/lib/services/api.ts`
|
||||
- 4-file cycle: `frontend/application/lib/services/api.ts -> frontend/application/lib/store/userStore.ts -> frontend/application/lib/store/cartStore.ts -> frontend/application/lib/services/orderService.ts -> frontend/application/lib/services/api.ts`
|
||||
|
||||
## Communities (300 total, 93 thin omitted)
|
||||
## Communities (314 total, 100 thin omitted)
|
||||
|
||||
### Community 0 - "Roles"
|
||||
Cohesion: 0.24
|
||||
@ -341,11 +355,11 @@ Nodes (9): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOpt
|
||||
|
||||
### Community 3 - "productService.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (39): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+31 more)
|
||||
Nodes (38): buildTorobProductSpec(), buildTorobProductTitle(), dynamic, GET(), revalidate, dynamic, GET(), revalidate (+30 more)
|
||||
|
||||
### Community 4 - "PetProfile.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (18): metadata, FeaturedProducts(), ProductCard(), OrderSuccess(), PetProfile(), SearchResultsPage(), CURRENT_SYMPTOMS, MEDICAL_HISTORIES (+10 more)
|
||||
### Community 4 - "api"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): metadata, ContactInfoItem, OrderDetailsModal(), OrderDetailsModalProps, CURRENT_SYMPTOMS, MEDICAL_HISTORIES, SmartAdvisor(), SmartAdvisorProps (+6 more)
|
||||
|
||||
### Community 5 - "CmsController"
|
||||
Cohesion: 0.09
|
||||
@ -360,12 +374,12 @@ Cohesion: 0.08
|
||||
Nodes (21): ButtonProps, ButtonSize, ButtonVariant, Spinner(), Doctor, FAQ, PatternItem, SmsConfigState (+13 more)
|
||||
|
||||
### Community 8 - "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 9 - "devDependencies"
|
||||
Cohesion: 0.05
|
||||
Nodes (43): devDependencies, eslint, eslint-config-prettier, @eslint/eslintrc, @nestjs/schematics, @nestjs/testing, prisma, source-map-support (+35 more)
|
||||
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.07
|
||||
@ -380,12 +394,12 @@ Cohesion: 0.06
|
||||
Nodes (24): backend, frontend, playwright.config.ts, @playwright/test, tests/**/*.ts, authFile, test, compilerOptions (+16 more)
|
||||
|
||||
### Community 13 - "app-audit-verification.e2e-spec.js"
|
||||
Cohesion: 0.07
|
||||
Nodes (26): EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter, Catch, PrismaExceptionFilter (+18 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (28): AppModule, Module, EnvironmentVariables, IsNotEmpty, IsOptional, IsString, validateEnv(), CustomHttpExceptionFilter (+20 more)
|
||||
|
||||
### Community 14 - "toPersian"
|
||||
Cohesion: 0.17
|
||||
Nodes (20): HomeClient(), VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), CheckoutPage() (+12 more)
|
||||
### Community 14 - "UserDashboard.tsx"
|
||||
Cohesion: 0.13
|
||||
Nodes (28): VerifyContent(), AddressFormData, AddressModal(), AddressModalProps, normalizeDigits(), validateAddressForm(), AuthModal(), AuthModalProps (+20 more)
|
||||
|
||||
### Community 15 - "src/services/api.ts"
|
||||
Cohesion: 0.08
|
||||
@ -400,24 +414,24 @@ Cohesion: 0.14
|
||||
Nodes (18): B2BPage(), generateMetadata(), ContactPage(), generateMetadata(), generateMetadata(), getInitialVideos(), Videos(), ContactFormClient() (+10 more)
|
||||
|
||||
### Community 18 - "JwtAuthGuard"
|
||||
Cohesion: 0.18
|
||||
Cohesion: 0.19
|
||||
Nodes (6): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable
|
||||
|
||||
### Community 19 - "admin.service.ts"
|
||||
Cohesion: 0.15
|
||||
Nodes (21): CouponInput, CouponTargetInput, PaginationQuery, ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray (+13 more)
|
||||
### Community 19 - "admin.controller.ts"
|
||||
Cohesion: 0.29
|
||||
Nodes (12): ApplyGlobalMarginsDto, BulkPriceAdjustmentDto, ApiProperty, ApiPropertyOptional, IsArray, IsBoolean, IsIn, IsNumber (+4 more)
|
||||
|
||||
### Community 20 - "CreateVideoDto"
|
||||
Cohesion: 0.09
|
||||
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
|
||||
|
||||
### Community 21 - "ReportsController"
|
||||
### Community 21 - "SmsService"
|
||||
Cohesion: 0.14
|
||||
Nodes (11): ReportsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+3 more)
|
||||
Nodes (4): SmsService, Injectable, OrdersService, Injectable
|
||||
|
||||
### Community 22 - "SmsService"
|
||||
Cohesion: 0.06
|
||||
Nodes (26): SmsService, Injectable, SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString (+18 more)
|
||||
### Community 22 - "SettingsController"
|
||||
Cohesion: 0.17
|
||||
Nodes (15): SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller, Delete (+7 more)
|
||||
|
||||
### Community 23 - "MenuService"
|
||||
Cohesion: 0.12
|
||||
@ -484,8 +498,8 @@ Cohesion: 0.16
|
||||
Nodes (13): TransactionReceiptData, TransactionReceiptModal(), TransactionReceiptModalProps, Button(), ThSort(), ThSortProps, GatewayHealth, Stats (+5 more)
|
||||
|
||||
### Community 39 - "CategoriesController"
|
||||
Cohesion: 0.10
|
||||
Nodes (16): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+8 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (17): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
|
||||
|
||||
### Community 40 - "MediaController"
|
||||
Cohesion: 0.11
|
||||
@ -519,9 +533,9 @@ Nodes (14): "coupons", "health_logs", "order_items", "orders", "pet_medical_cond
|
||||
Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 48 - "auth.service.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (46): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+38 more)
|
||||
### Community 48 - ".sendOtp"
|
||||
Cohesion: 0.32
|
||||
Nodes (10): ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, Body, Post, Req, Throttle (+2 more)
|
||||
|
||||
### Community 49 - "devDependencies"
|
||||
Cohesion: 0.11
|
||||
@ -559,21 +573,21 @@ Nodes (14): Badge(), BadgeProps, BadgeVariant, variantStyles, Skeleton(), Monito
|
||||
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 - "UserDashboard.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (11): DeleteConfirmModal(), DeleteConfirmModalProps, OrderDetailsModal(), OrderRowSkeleton(), PetProfileSkeleton(), Skeleton(), SkeletonProps, CreateTicketPayload (+3 more)
|
||||
### Community 58 - "components/Skeleton.tsx"
|
||||
Cohesion: 0.24
|
||||
Nodes (4): OrderRowSkeleton(), PetProfileSkeleton(), Skeleton(), SkeletonProps
|
||||
|
||||
### Community 59 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
|
||||
|
||||
### Community 60 - "CreateUserDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (10): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+2 more)
|
||||
Cohesion: 0.18
|
||||
Nodes (11): CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber, IsOptional, IsString (+3 more)
|
||||
|
||||
### Community 61 - "ProductPage.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (19): ProductImageZoomModalProps, CalculatorState, GalleryMediaItem, ICON_MAP, isVideoUrl(), ProductImageZoomModal, ProductPage(), ProductReviews (+11 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (20): PodcastInlinePlayer(), ProductImageZoomModalProps, CalculatorState, GalleryMediaItem, ICON_MAP, isVideoUrl(), ProductImageZoomModal, ProductPage() (+12 more)
|
||||
|
||||
### Community 63 - "dependencies"
|
||||
Cohesion: 0.05
|
||||
@ -584,20 +598,20 @@ Cohesion: 0.10
|
||||
Nodes (20): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection, moduleResolution, noEmit (+12 more)
|
||||
|
||||
### Community 65 - "RevalidationService"
|
||||
Cohesion: 0.12
|
||||
Cohesion: 0.13
|
||||
Nodes (9): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString, RevalidationService (+1 more)
|
||||
|
||||
### Community 66 - "Get"
|
||||
### Community 66 - "AdminController"
|
||||
Cohesion: 0.17
|
||||
Nodes (7): ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
Nodes (13): AdminController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Get, Query (+5 more)
|
||||
|
||||
### Community 67 - "PetsController"
|
||||
Cohesion: 0.11
|
||||
Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more)
|
||||
### Community 67 - "admin.module.ts"
|
||||
Cohesion: 0.04
|
||||
Nodes (33): AdminModule, Module, MediaService, Injectable, PetsController, ApiBearerAuth, ApiOperation, ApiQuery (+25 more)
|
||||
|
||||
### Community 68 - "useSettingsStore"
|
||||
Cohesion: 0.08
|
||||
Nodes (29): HomeClientProps, B2BLandingClient(), BlogPost, BlogPreviewSection(), BrandLogo(), BrandLogoProps, ContactInfoItem, FAQItem (+21 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (22): AuthModal, B2BPortal, CartDrawer, ClientLayout(), B2BLandingClient(), BrandLogo(), BrandLogoProps, FAQItem (+14 more)
|
||||
|
||||
### Community 69 - "Required Review Group Closures"
|
||||
Cohesion: 0.10
|
||||
@ -683,17 +697,21 @@ Nodes (8): CreateEBankCheckoutDto, ApiProperty, ApiPropertyOptional, IsNotEmpty,
|
||||
Cohesion: 0.17
|
||||
Nodes (12): prisma, main(), prisma, determineSuitableFor(), findOrCreateCategory(), getProductImageUrl(), main(), parseSize() (+4 more)
|
||||
|
||||
### Community 90 - "useCartStore"
|
||||
Cohesion: 0.07
|
||||
Nodes (27): ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, CartDrawer(), DeleteConfirmModal(), DeleteConfirmModalProps, FeaturedProducts() (+19 more)
|
||||
|
||||
### Community 91 - "Reconciled Audit Roles & Assignments"
|
||||
Cohesion: 0.12
|
||||
Nodes (15): 10. Documentation Engineer, 1. Lead Architect / Orchestrator, 2. React / Vite Storefront Auditor, 3. NestJS Backend Auditor, 4. Admin Features Auditor, 5. Database & Data Integrity Auditor, 6. Security Auditor, 7. TypeScript & Code Quality Auditor (+7 more)
|
||||
|
||||
### Community 92 - "OrdersService"
|
||||
Cohesion: 0.07
|
||||
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
|
||||
|
||||
### Community 93 - "ArchivePage.tsx"
|
||||
### Community 92 - "OrdersController"
|
||||
Cohesion: 0.13
|
||||
Nodes (15): ArchivePage(), ArchiveProductCard(), CATEGORY_MAP, ICON_MAP, BannerPlacement(), BannerPlacementProps, ProductCardSkeleton(), B2BInquiry (+7 more)
|
||||
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
|
||||
|
||||
### Community 93 - "HomeClient.tsx"
|
||||
Cohesion: 0.12
|
||||
Nodes (17): HomeClient(), HomeClientProps, BannerPlacement(), BannerPlacementProps, BlogPreviewSection(), Hero(), StatCounter(), TestimonialsSection() (+9 more)
|
||||
|
||||
### Community 94 - "Phase 3.1 — Human Review Preparation and Master Backlog Critique"
|
||||
Cohesion: 0.13
|
||||
@ -743,17 +761,13 @@ Nodes (23): formatPriceWithCommas(), PriceInput(), PriceInputProps, toEnglishDig
|
||||
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 - "RedisService"
|
||||
Cohesion: 0.08
|
||||
Nodes (7): AppModule, Module, AuthService, Injectable, normalizeMobile(), RedisService, Injectable
|
||||
|
||||
### Community 107 - "PaginationDto"
|
||||
Cohesion: 0.06
|
||||
Nodes (31): AdminModule, Module, MediaService, Injectable, SslCertInfo, BlogsModule, Module, BlogFilterDto (+23 more)
|
||||
Nodes (25): BlogsModule, Module, BlogFilterDto, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional (+17 more)
|
||||
|
||||
### Community 108 - "PrismaService"
|
||||
Cohesion: 0.06
|
||||
Nodes (22): CategoryQuery, PetQuery, WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig (+14 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (19): B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery, CreateContactSubmissionDto, UpdateContactInfoItemDto (+11 more)
|
||||
|
||||
### Community 109 - "1. Summary of Integrity Repairs Performed"
|
||||
Cohesion: 0.17
|
||||
@ -807,6 +821,10 @@ Nodes (9): compilerOptions, esModuleInterop, module, moduleResolution, skipLibCh
|
||||
Cohesion: 0.20
|
||||
Nodes (9): Compile and run the project, Deployment, Description, License, Project setup, Resources, Run tests, Stay in touch (+1 more)
|
||||
|
||||
### Community 122 - "AdminService"
|
||||
Cohesion: 0.09
|
||||
Nodes (6): Body, Post, Put, AdminService, CouponInput, Injectable
|
||||
|
||||
### Community 123 - "UsersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (42): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+34 more)
|
||||
@ -827,9 +845,9 @@ 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 - "AdminController"
|
||||
Cohesion: 0.18
|
||||
Nodes (11): AdminController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Param (+3 more)
|
||||
### Community 129 - "admin.service.ts"
|
||||
Cohesion: 0.23
|
||||
Nodes (8): CouponTargetInput, PaginationQuery, applyRounding(), calculateSellingPrice(), DEFAULT_PRICING_SETTINGS, PricingSettings, RoundingMode, CANONICAL_ALIASES
|
||||
|
||||
### Community 130 - "Sahel-Font"
|
||||
Cohesion: 0.20
|
||||
@ -888,8 +906,12 @@ Cohesion: 0.25
|
||||
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
|
||||
|
||||
### Community 144 - "SafeImage.tsx"
|
||||
Cohesion: 0.10
|
||||
Nodes (20): BackButton(), BackButtonProps, BlogPostClientProps, PLAYBACK_RATES, PodcastInlinePlayer(), PodcastInlinePlayerProps, PLAYBACK_RATES, PodcastPlayerModal() (+12 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (23): BackButton(), BackButtonProps, BlogCategory, BlogPostItem, BlogPostClientProps, BlogPost, ProductDetailModalProps, PLAYBACK_RATES (+15 more)
|
||||
|
||||
### Community 145 - "auth.controller.ts"
|
||||
Cohesion: 0.16
|
||||
Nodes (11): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength, LoginDto, ApiProperty (+3 more)
|
||||
|
||||
### Community 146 - "System Discovery"
|
||||
Cohesion: 0.25
|
||||
@ -903,13 +925,13 @@ Nodes (10): HomeController, ApiOkResponse, ApiOperation, ApiTags, Controller, Ge
|
||||
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 - "ValidateCouponDto"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): IsNotEmpty, IsNumber, IsString, ValidateCouponDto
|
||||
### Community 151 - "CreateOrderDto"
|
||||
Cohesion: 0.21
|
||||
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
|
||||
|
||||
### Community 152 - "MetricsController"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
|
||||
### Community 152 - "RedisService"
|
||||
Cohesion: 0.10
|
||||
Nodes (10): ApiExcludeController, MetricsController, Controller, Get, Res, RedisModule, Global, Module (+2 more)
|
||||
|
||||
### Community 153 - "exclude"
|
||||
Cohesion: 0.22
|
||||
@ -1023,6 +1045,10 @@ Nodes (3): Architectural Overview, Critical Review Findings & Required Enhanceme
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Overview & Content Foundation, SEO & Content Requirements, 🚀 SEO & Content Strategy Review (12_seo_content)
|
||||
|
||||
### Community 185 - "auth.service.ts"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): AdminLoginInput, LoginInput, RegisterInput, SendOtpDto, ApiProperty, IsNotEmpty, IsString, Matches
|
||||
|
||||
### Community 191 - "graphify reference: add a URL and watch a folder"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder
|
||||
@ -1047,9 +1073,17 @@ Nodes (3): Expanding the ESLint configuration, React Compiler, React + TypeScrip
|
||||
Cohesion: 0.50
|
||||
Nodes (3): Select, SelectOption, SelectProps
|
||||
|
||||
### Community 197 - "userStore.ts"
|
||||
Cohesion: 0.08
|
||||
Nodes (37): AuthModal, B2BPortal, CartDrawer, ClientLayout(), LoginModal, AuthModal(), AuthModalProps, extractOtpFromText() (+29 more)
|
||||
### Community 197 - "lib/services/api.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): LoginModal, B2BPortal(), LoginModal(), LoginModalProps, PrescriptionUploadModal(), PrescriptionUploadModalProps, ApiErrorPayload, baseURL (+9 more)
|
||||
|
||||
### Community 198 - "RegisterDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
|
||||
|
||||
### Community 199 - "SmsLogQueryDto"
|
||||
Cohesion: 0.25
|
||||
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
|
||||
|
||||
### Community 200 - "application/README.md"
|
||||
Cohesion: 0.50
|
||||
@ -1059,10 +1093,18 @@ Nodes (3): Deploy on Vercel, Getting Started, Learn More
|
||||
Cohesion: 0.50
|
||||
Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script
|
||||
|
||||
### Community 204 - "VerifyOtpDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): ApiProperty, IsNotEmpty, IsString, Matches, VerifyOtpDto, Length
|
||||
|
||||
### Community 211 - "Master Task Backlog (Phase 3.3)"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Management, Master Task Backlog (Phase 3.3), Phase 3 Master Execution Plan
|
||||
|
||||
### Community 223 - "AuthController"
|
||||
Cohesion: 0.40
|
||||
Nodes (3): AuthController, ApiTags, Controller
|
||||
|
||||
### Community 226 - "Shabnam Font README"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
|
||||
@ -1078,16 +1120,16 @@ Nodes (3): GET(), handleRevalidate(), POST()
|
||||
## Knowledge Gaps
|
||||
- **1348 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1343 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **93 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **100 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
|
||||
## Suggested Questions
|
||||
_Questions this graph is uniquely positioned to answer:_
|
||||
|
||||
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ProductsService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `SmsService`, `MenuService`?**
|
||||
- **Why does `Roles()` connect `Roles` to `WholesaleApplyDto`, `B2BService`, `ContactService`, `FaqService`, `CmsController`, `tickets.controller.ts`, `SslController`, `BannersService`, `ProductsService`, `CreateReviewDto`, `TestimonialsService`, `IngredientsService`, `JwtAuthGuard`, `prescriptions.controller.ts`, `SmartAdvisorService`, `SettingsController`, `MenuService`?**
|
||||
_High betweenness centrality (0.068) - this node is a cross-community bridge._
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `WikiController`, `PetsController`, `ProductsService`, `auth.service.ts`, `HomeController`, `UsersService`, `OrdersService`?**
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `BlogsController`, `WikiController`, `PetsController`, `ProductsService`, `HomeController`, `UsersService`, `OrdersController`, `AuthController`?**
|
||||
_High betweenness centrality (0.062) - this node is a cross-community bridge._
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CmsController`, `tickets.controller.ts`, `PaginationDto`, `PetsController`, `ProductsService`, `auth.service.ts`, `DoctorQueryDto`, `admin.service.ts`, `prescriptions.controller.ts`, `ReportsController`, `UsersService`?**
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `admin.module.ts`, `CmsController`, `tickets.controller.ts`, `CategoriesController`, `PaginationDto`, `PetsController`, `ProductsService`, `DoctorQueryDto`, `auth.controller.ts`, `admin.controller.ts`, `prescriptions.controller.ts`, `UsersService`?**
|
||||
_High betweenness centrality (0.028) - this node is a cross-community bridge._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1348 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
@ -1096,4 +1138,4 @@ _Questions this graph is uniquely positioned to answer:_
|
||||
- **Should `PaymentService` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.11 - nodes in this community are weakly interconnected._
|
||||
- **Should `productService.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.05780885780885781 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.06299603174603174 - 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