feat(seo): cover all 15 app routes in page builder with live google serp preview box
Some checks failed
Deploy Canina / deploy (push) Has been cancelled
Some checks failed
Deploy Canina / deploy (push) Has been cancelled
This commit is contained in:
parent
47437883dd
commit
3ea1d0d8c1
@ -1,4 +1,4 @@
|
||||
import React, { useState, useEffect, useRef } from 'react';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import {
|
||||
Languages,
|
||||
Save,
|
||||
@ -31,6 +31,13 @@ import {
|
||||
Award,
|
||||
Video,
|
||||
Info,
|
||||
Truck,
|
||||
CreditCard,
|
||||
User,
|
||||
Shield,
|
||||
Smartphone,
|
||||
Monitor,
|
||||
Sparkle,
|
||||
} from 'lucide-react';
|
||||
import { toast } from 'react-hot-toast';
|
||||
import api, { BASE_DOMAIN } from '../services/api';
|
||||
@ -41,7 +48,7 @@ import MediaSelector from '../components/ui/MediaSelector';
|
||||
import RichTextEditor from '../components/ui/RichTextEditor';
|
||||
import IconPickerModal, { ICON_REGISTRY } from '../components/ui/IconPickerModal';
|
||||
|
||||
// Classic v1 Groupings
|
||||
// Classic v1 Groupings (Backward Compatibility)
|
||||
const V1_PAGE_TABS = [
|
||||
{ id: 'all', label: 'همه بخشها', icon: Layout },
|
||||
{ id: 'hero', label: 'بنر اصلی (Hero)', icon: Sliders },
|
||||
@ -201,7 +208,7 @@ const V1_GROUP_PAGE_MAP: Record<string, string> = {
|
||||
interface SectionField {
|
||||
key: string;
|
||||
label: string;
|
||||
type: 'rich-text' | 'text' | 'image' | 'icon' | 'boolean';
|
||||
type: 'rich-text' | 'text' | 'image' | 'icon' | 'boolean' | 'textarea';
|
||||
description?: string;
|
||||
defaultVal?: string;
|
||||
}
|
||||
@ -210,6 +217,7 @@ interface PageSection {
|
||||
id: string;
|
||||
title: string;
|
||||
icon: React.ComponentType<{ className?: string }>;
|
||||
isSeo?: boolean;
|
||||
fields: SectionField[];
|
||||
}
|
||||
|
||||
@ -221,6 +229,44 @@ interface AppSitePage {
|
||||
sections: PageSection[];
|
||||
}
|
||||
|
||||
// Generate Standard SEO Section Fields for any Page
|
||||
const createSeoSection = (pagePrefix: string, pageNameFa: string, defaultMetaTitle: string, defaultMetaDesc: string): PageSection => ({
|
||||
id: 'seo',
|
||||
title: 'تنظیمات سئو و پیشنمایش گوگل (Google SERP)',
|
||||
icon: Globe,
|
||||
isSeo: true,
|
||||
fields: [
|
||||
{
|
||||
key: `${pagePrefix}_meta_title`,
|
||||
label: `عنوان صفحه در گوگل (Meta Title) - ${pageNameFa}`,
|
||||
type: 'text',
|
||||
description: 'حداکثر ۶۰ کاراکتر - عنوانی که در تب مرورگر و عنوان آبیرنگ گوگل ظاهر میشود.',
|
||||
defaultVal: defaultMetaTitle,
|
||||
},
|
||||
{
|
||||
key: `${pagePrefix}_meta_desc`,
|
||||
label: `توضیحات متا (Meta Description) - ${pageNameFa}`,
|
||||
type: 'textarea',
|
||||
description: 'حداکثر ۱۵۵ کاراکتر - چکیده محتوای صفحه برای ترغیب کلیک در نتایج جستجو.',
|
||||
defaultVal: defaultMetaDesc,
|
||||
},
|
||||
{
|
||||
key: `${pagePrefix}_keywords`,
|
||||
label: 'کلمات کلیدی سئو (Keywords)',
|
||||
type: 'text',
|
||||
description: 'کلمات کلیدی مرتبط که با کاما (,) از یکدیگر تفکیک شدهاند.',
|
||||
defaultVal: 'کنینا, مکمل تخصصی سگ و گربه, داروی پت, کنینا آلمان',
|
||||
},
|
||||
{
|
||||
key: `${pagePrefix}_canonical`,
|
||||
label: 'آدرس کانونیکال اختصاصی (Canonical URL)',
|
||||
type: 'text',
|
||||
description: 'آدرس اصلی این صفحه جهت جلوگیری از خطای Duplicate Content در موتورهای جستجو.',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
// Full Application Pages Registry (All 15 routes from frontend/application/app)
|
||||
const SITE_PAGES: AppSitePage[] = [
|
||||
{
|
||||
id: 'home',
|
||||
@ -228,6 +274,7 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
path: '/',
|
||||
icon: Home,
|
||||
sections: [
|
||||
createSeoSection('home', 'صفحه اصلی', 'کنینا ایران | نماینده رسمی مکملهای دارویی Canina آلمان', 'فروشگاه تخصصی و نماینده انحصاری مکملهای درمانی و تقویتی سگ و گربه کنینا آلمان با فرمولاسیون دارویی و تاییدیه بالینی.'),
|
||||
{
|
||||
id: 'hero',
|
||||
title: 'بنر اصلی (Hero Banner)',
|
||||
@ -314,10 +361,11 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
},
|
||||
{
|
||||
id: 'shop',
|
||||
title: 'فروشگاه و کاتالوگ (Shop & Catalog)',
|
||||
title: 'فروشگاه و محصولات (Shop)',
|
||||
path: '/shop',
|
||||
icon: ShoppingBag,
|
||||
sections: [
|
||||
createSeoSection('shop', 'فروشگاه', 'فروشگاه مکملهای تخصصی سگ و گربه | کنینا ایران', 'خرید آنلاین انواع مکملهای دارویی مفاصل، پوست و مو، گوارش و ویتامینه سگ و گربه با تضمین اصالت کالا و مشاوره بالینی.'),
|
||||
{
|
||||
id: 'shop_header',
|
||||
title: 'هدر و فیلترهای فروشگاه',
|
||||
@ -333,65 +381,98 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'advisor',
|
||||
title: 'مشاور هوشمند سلامت پت (Smart Advisor)',
|
||||
path: '/#canino-advisor',
|
||||
icon: HelpCircle,
|
||||
id: 'catalog',
|
||||
title: 'کاتالوگ ورقزن دیجیتال (Digital Catalog)',
|
||||
path: '/catalog',
|
||||
icon: BookOpen,
|
||||
sections: [
|
||||
createSeoSection('catalog', 'کاتالوگ دیجیتال', 'کاتالوگ آنلاین و تعاملی محصولات دارویی کنینا | Canina Flipbook', 'مشاهده و مطالعه کاتالوگ جامع دارویی و مکملهای تغذیهای تخصصی کنینا با قابلیت تورق تعاملی و ثبت پیشخرید.'),
|
||||
{
|
||||
id: 'advisor_general',
|
||||
title: 'عناوین و مراحل دستیار هوشمند',
|
||||
icon: HelpCircle,
|
||||
id: 'catalog_header',
|
||||
title: 'محتوا و راهنمای کاتالوگ',
|
||||
icon: BookOpen,
|
||||
fields: [
|
||||
{ key: 'advisor_badge', label: 'بج بالای مشاور هوشمند', type: 'text' },
|
||||
{ key: 'advisor_title', label: 'عنوان مشاور هوشمند (H2)', type: 'rich-text' },
|
||||
{ key: 'advisor_subtitle', label: 'زیرعنوان و شعار تشخیصی', type: 'rich-text' },
|
||||
{ key: 'advisor_step1_title', label: 'عنوان مرحله ۱ (مشخصات پت)', type: 'text' },
|
||||
{ key: 'advisor_step1_desc', label: 'توضیحات مرحله ۱', type: 'text' },
|
||||
{ key: 'advisor_pet_name_label', label: 'برچسب نام پت', type: 'text' },
|
||||
{ key: 'advisor_pet_breed_label', label: 'برچسب نژاد پت', type: 'text' },
|
||||
{ key: 'advisor_step2_title', label: 'عنوان مرحله ۲ (سن، وزن و تحرک)', type: 'text' },
|
||||
{ key: 'advisor_step2_desc', label: 'توضیحات مرحله ۲', type: 'text' },
|
||||
{ key: 'advisor_step3_title', label: 'عنوان مرحله ۳ (علائم و پیشنهاد)', type: 'text' },
|
||||
{ key: 'advisor_step3_desc', label: 'توضیحات مرحله ۳', type: 'text' },
|
||||
{ key: 'advisor_submit_btn', label: 'متن دکمه مشاهده راهکار پیشنهادی', type: 'text' },
|
||||
{ key: 'catalog_hero_title', label: 'عنوان صفحه کاتالوگ دیجیتال (H1)', type: 'rich-text' },
|
||||
{ key: 'catalog_hero_desc', label: 'توضیحات معرفی و نحوه استفاده از کاتالوگ', type: 'rich-text' },
|
||||
{ key: 'catalog_download_btn', label: 'متن دکمه دریافت نسخه کامل PDF', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'wiki_blog',
|
||||
title: 'دانشنامه و وبلاگ تخصصی (Wiki & Blog)',
|
||||
path: '/wiki',
|
||||
icon: BookOpen,
|
||||
id: 'blog',
|
||||
title: 'وبلاگ و مقالات تخصصی (Blog)',
|
||||
path: '/blog',
|
||||
icon: FileText,
|
||||
sections: [
|
||||
createSeoSection('blog', 'وبلاگ', 'وبلاگ تخصصی و راهنمای سلامت حیوانات خانگی | کنینا ایران', 'جدیدترین مقالات، راهنماهای تغذیه، بیماریهای مفاصل و سلامت پت توسط تیم دامپزشکی کنینا.'),
|
||||
{
|
||||
id: 'wiki_general',
|
||||
title: 'عناوین و صفحات دانشنامه',
|
||||
icon: BookOpen,
|
||||
id: 'blog_header',
|
||||
title: 'هدر و بنر وبلاگ',
|
||||
icon: FileText,
|
||||
fields: [
|
||||
{ key: 'blog_page_title', label: 'عنوان صفحه مقالات و وبلاگ (H1)', type: 'rich-text' },
|
||||
{ key: 'blog_page_desc', label: 'توضیحات سئو و مقدمه مقالات علمی', type: 'rich-text' },
|
||||
{ key: 'blog_search_placeholder', label: 'متن کادر جستجو در مقالات', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'wiki',
|
||||
title: 'دانشنامه ترکیبات و داروها (Wiki)',
|
||||
path: '/wiki',
|
||||
icon: Pill,
|
||||
sections: [
|
||||
createSeoSection('wiki', 'دانشنامه', 'دانشنامه علمی ترکیبات و اصطلاحات دارویی پت | کنینا ایران', 'مرجع تخصصی اثرات بالینی، مواد تشکیلدهنده، ویتامینها و ترکیبات گیاهی به کار رفته در محصولات کنینا.'),
|
||||
{
|
||||
id: 'wiki_header',
|
||||
title: 'هدر و ناوبری دانشنامه',
|
||||
icon: Pill,
|
||||
fields: [
|
||||
{ key: 'wiki_page_title', label: 'عنوان صفحه دانشنامه (H1)', type: 'rich-text' },
|
||||
{ key: 'wiki_page_desc', label: 'توضیحات سئو دانشنامه دارویی', type: 'rich-text' },
|
||||
{ key: 'blog_page_title', label: 'عنوان صفحه مقالات و وبلاگ', type: 'rich-text' },
|
||||
{ key: 'blog_page_desc', label: 'توضیحات سئو وبلاگ', type: 'rich-text' },
|
||||
{ key: 'wiki_search_placeholder', label: 'متن جستجوی اصطلاح یا ترکیب', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'contact_about',
|
||||
title: 'درباره ما و تماس با ما (About & Contact)',
|
||||
id: 'about',
|
||||
title: 'درباره ما و تاریخچه برند (About Us)',
|
||||
path: '/about',
|
||||
icon: Award,
|
||||
sections: [
|
||||
createSeoSection('about', 'درباره ما', 'درباره شرکت کنینا | تاریخچه، اصالت و استانداردهای دارویی آلمان', 'آشنایی با تاریخچه شرکت Canina Pharma آلمان، تعهد به کیفیت بیولوژیک و بیش از ۳۵ سال سابقه پیشرو در سلامت حیوانات خانگی.'),
|
||||
{
|
||||
id: 'about_content',
|
||||
title: 'متن و داستان برند',
|
||||
icon: Award,
|
||||
fields: [
|
||||
{ key: 'about_page_title', label: 'عنوان صفحه درباره ما (H1)', type: 'rich-text' },
|
||||
{ key: 'about_page_subtitle', label: 'زیرعنوان و شعار اصالت', type: 'text' },
|
||||
{ key: 'about_full_history', label: 'تاریخچه کامل برند و شرکت (H2/P)', type: 'rich-text' },
|
||||
{ key: 'about_mission_title', label: 'عنوان ماموریت و تعهدات', type: 'text' },
|
||||
{ key: 'about_mission_desc', label: 'متن ماموریت سازمانی', type: 'rich-text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'contact',
|
||||
title: 'تماس با ما و پشتیبانی (Contact)',
|
||||
path: '/contact',
|
||||
icon: PhoneCall,
|
||||
sections: [
|
||||
createSeoSection('contact', 'تماس با ما', 'تماس با کنینا ایران | مشاوره تخصصی، نشانی و پشتیبانی مشتریان', 'راههای ارتباط با دفتر مرکزی کنینا در ایران، ثبت پیام، مشاوره رایگان دارویی و شماره تماس کارشناسان.'),
|
||||
{
|
||||
id: 'contact_info',
|
||||
title: 'اطلاعات تماس و پیامها',
|
||||
icon: PhoneCall,
|
||||
fields: [
|
||||
{ key: 'contact_page_title', label: 'عنوان صفحه تماس با ما', type: 'rich-text' },
|
||||
{ key: 'contact_page_title', label: 'عنوان صفحه تماس با ما (H1)', type: 'rich-text' },
|
||||
{ key: 'contact_page_desc', label: 'توضیحات بالای فرم تماس', type: 'rich-text' },
|
||||
{ key: 'about_full_history', label: 'تاریخچه کامل برند و شرکت (H2/P)', type: 'rich-text' },
|
||||
{ key: 'contact_form_success_msg', label: 'پیام تشکر بعد از ارسال پیام', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -402,6 +483,7 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
path: '/b2b',
|
||||
icon: Building2,
|
||||
sections: [
|
||||
createSeoSection('b2b', 'همکاران تجاری B2B', 'پرتال فروش عمده و نمایندگی کلینیکها و پتشاپها | کنینا ایران', 'ثبت درخواست عاملیت فروش، خرید عمده با تخفیف سازمانی ویژه دامپزشکان، کلینیکها و پتشاپهای سراسر کشور.'),
|
||||
{
|
||||
id: 'b2b_landing',
|
||||
title: 'صفحه معرفی و شرایط همکاری B2B',
|
||||
@ -415,12 +497,67 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'videos',
|
||||
title: 'ویدئوها و آموزشهای تصویری (Videos)',
|
||||
path: '/videos',
|
||||
icon: Video,
|
||||
sections: [
|
||||
createSeoSection('videos', 'ویدئوهای آموزشی', 'ویدئوهای آموزشی و تجربیات بالینی مکملهای پت | کنینا ایران', 'مشاهده ویدئوهای تخصصی نحوه مصرف مکملها، نظرات دامپزشکان و راهکارهای درمانی تصویری.'),
|
||||
{
|
||||
id: 'videos_hub',
|
||||
title: 'هدر و متن صفحه ویدئوها',
|
||||
icon: Video,
|
||||
fields: [
|
||||
{ key: 'videos_page_title', label: 'عنوان صفحه ویدئوها (H1)', type: 'rich-text' },
|
||||
{ key: 'videos_page_desc', label: 'توضیحات معرفی دورهها و کلیپهای آموزشی', type: 'rich-text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'search',
|
||||
title: 'جستجوی پیشرفته سایت (Search)',
|
||||
path: '/search',
|
||||
icon: Search,
|
||||
sections: [
|
||||
createSeoSection('search', 'جستجو', 'جستجوی هوشمند مکملها و دانشنامه | کنینا ایران', 'جستجوی سریع محصولات، مکملهای تخصصی، بیماریها و علائم بالینی سگ و گربه.'),
|
||||
{
|
||||
id: 'search_content',
|
||||
title: 'متون راهنما و کادر جستجو',
|
||||
icon: Search,
|
||||
fields: [
|
||||
{ key: 'search_results_title', label: 'عنوان نتایج جستجو', type: 'text' },
|
||||
{ key: 'search_no_results_text', label: 'متن پیام در صورت عدم یافتن نتیجه', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'dashboard',
|
||||
title: 'داشبورد و حساب کاربری (User Dashboard)',
|
||||
path: '/dashboard',
|
||||
icon: User,
|
||||
sections: [
|
||||
createSeoSection('dashboard', 'داشبورد کاربر', 'داشبورد کاربری و پیگیری سفارشات | کنینا ایران', 'مشاهده تاریخچه خریدها، وضعیت کیف پول، پیگیری آنلاین بستههای پستی و مدیریت پتها.'),
|
||||
{
|
||||
id: 'dashboard_content',
|
||||
title: 'عناوین و پیامهای داشبورد',
|
||||
icon: User,
|
||||
fields: [
|
||||
{ key: 'dashboard_welcome_msg', label: 'پیام خوشآمدگویی بالای داشبورد', type: 'text' },
|
||||
{ key: 'dashboard_wallet_title', label: 'عنوان کارت کیف پول کنینا', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'pet_profiles',
|
||||
title: 'پرونده سلامت همدم (Pet Profiles)',
|
||||
path: '/profile/pets',
|
||||
icon: Heart,
|
||||
sections: [
|
||||
createSeoSection('profile_pets', 'پرونده سلامت پت', 'پرونده الکترونیک سلامت و یادآور داروهای پت | کنینا ایران', 'مدیریت و ثبت پرونده سلامت سگ و گربه، تنظیم یادآورهای دوز دارو و تاریخچه تغذیه مکملها.'),
|
||||
{
|
||||
id: 'pet_profiles_info',
|
||||
title: 'عناوین پرونده سلامت و یادآورها',
|
||||
@ -432,6 +569,79 @@ const SITE_PAGES: AppSitePage[] = [
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'checkout',
|
||||
title: 'تسویهحساب و فاکتور نهایی (Checkout)',
|
||||
path: '/checkout',
|
||||
icon: CreditCard,
|
||||
sections: [
|
||||
createSeoSection('checkout', 'تسویهحساب', 'تکمیل سفارش و درگاه پرداخت امن | کنینا ایران', 'انتخاب آدرس تحویل، انتخاب روش پرداخت و تسویهحساب سریع و امن سفارشات کنینا.'),
|
||||
{
|
||||
id: 'checkout_content',
|
||||
title: 'پیامها و راهنمای تسویه',
|
||||
icon: CreditCard,
|
||||
fields: [
|
||||
{ key: 'checkout_step1_title', label: 'عنوان مرحله انتخاب آدرس', type: 'text' },
|
||||
{ key: 'checkout_step2_title', label: 'عنوان مرحله شیوه پرداخت', type: 'text' },
|
||||
{ key: 'checkout_charity_notice', label: 'متن توضیح طرح ردپای مهربانی در فاکتور', type: 'text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'track',
|
||||
title: 'پیگیری آنلاین سفارش و مرسوله (Track Order)',
|
||||
path: '/track',
|
||||
icon: Truck,
|
||||
sections: [
|
||||
createSeoSection('track', 'پیگیری سفارش', 'رهگیری آنلاین مرسوله پستی | کنینا ایران', 'پیگیری وضعیت بستهبندی، کد رهگیری پست پیشتاز و تاریخچه تحویل سفارشات.'),
|
||||
{
|
||||
id: 'track_content',
|
||||
title: 'متن و کادر رهگیری',
|
||||
icon: Truck,
|
||||
fields: [
|
||||
{ key: 'track_page_title', label: 'عنوان صفحه رهگیری (H1)', type: 'rich-text' },
|
||||
{ key: 'track_page_desc', label: 'توضیحات نحوه پیگیری با شماره همراه یا کد سفارش', type: 'rich-text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'trust_seals',
|
||||
title: 'مجوزها و نمادهای اعتماد (Trust Seals)',
|
||||
path: '/trust-seals',
|
||||
icon: Shield,
|
||||
sections: [
|
||||
createSeoSection('trust_seals', 'مجوزها و اصالت', 'مجوزهای بهداشتی، گواهی اصالت و اینماد | کنینا ایران', 'بررسی تاییدیههای سازمان دامپزشکی، گواهی استاندارد آلمان و اینماد رسمی کنینا.'),
|
||||
{
|
||||
id: 'trust_seals_content',
|
||||
title: 'متن مجوزها و گواهیها',
|
||||
icon: Shield,
|
||||
fields: [
|
||||
{ key: 'trust_page_title', label: 'عنوان صفحه مجوزها (H1)', type: 'rich-text' },
|
||||
{ key: 'trust_page_desc', label: 'توضیحات و ضمانتهای بهداشتی و قانونی', type: 'rich-text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
id: 'privacy',
|
||||
title: 'حریم خصوصی و قوانین سایت (Privacy & Terms)',
|
||||
path: '/privacy',
|
||||
icon: ShieldCheck,
|
||||
sections: [
|
||||
createSeoSection('privacy', 'حریم خصوصی', 'سیاست حفظ حریم خصوصی و شرایط استفاده | کنینا ایران', 'قوانین خرید، عودت کالا، حفاظت از اطلاعات کاربران و شرایط استفاده از خدمات کنینا.'),
|
||||
{
|
||||
id: 'privacy_content',
|
||||
title: 'متن قوانین و مقررات',
|
||||
icon: ShieldCheck,
|
||||
fields: [
|
||||
{ key: 'privacy_page_title', label: 'عنوان صفحه قوانین و مقررات (H1)', type: 'rich-text' },
|
||||
{ key: 'privacy_full_terms', label: 'متن کامل شرایط استفاده و حریم خصوصی', type: 'rich-text' },
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const SHARED_HEADER_FIELDS: SectionField[] = [
|
||||
@ -465,7 +675,8 @@ export default function UITexts() {
|
||||
const [versionTab, setVersionTab] = useState<'v2' | 'v1'>('v2');
|
||||
const [v2SubTab, setV2SubTab] = useState<'header' | 'footer' | 'pages'>('pages');
|
||||
const [openPageId, setOpenPageId] = useState<string>('home');
|
||||
const [openSectionId, setOpenSectionId] = useState<string>('hero');
|
||||
const [openSectionId, setOpenSectionId] = useState<string>('seo');
|
||||
const [previewDevice, setPreviewDevice] = useState<'desktop' | 'mobile'>('desktop');
|
||||
|
||||
// State
|
||||
const [texts, setTexts] = useState<Record<string, string>>({});
|
||||
@ -611,6 +822,14 @@ export default function UITexts() {
|
||||
onChange={(html) => setEdits({ ...edits, [field.key]: html })}
|
||||
placeholder="متن خود را وارد کنید..."
|
||||
/>
|
||||
) : field.type === 'textarea' ? (
|
||||
<textarea
|
||||
rows={3}
|
||||
value={val}
|
||||
onChange={(e) => setEdits({ ...edits, [field.key]: e.target.value })}
|
||||
placeholder={field.defaultVal || 'توضیحات خود را وارد کنید...'}
|
||||
className="w-full px-4 py-2.5 bg-white border border-gray-200 rounded-xl text-xs font-bold text-gray-900 outline-none focus:ring-2 focus:ring-purple-500 leading-relaxed"
|
||||
/>
|
||||
) : field.type === 'image' ? (
|
||||
<div className="space-y-3">
|
||||
<div className="flex gap-2">
|
||||
@ -721,10 +940,10 @@ export default function UITexts() {
|
||||
<div>
|
||||
<h1 className="text-2xl font-black text-gray-900 flex items-center gap-3">
|
||||
<Languages className="w-7 h-7 text-purple-600" />
|
||||
مدیریت محتوا و ویرایشگر صفحات (Page Builder v2)
|
||||
مدیریت جامع صفحات و ویرایشگر سئو (Page Builder v2)
|
||||
</h1>
|
||||
<p className="text-xs text-gray-500 font-bold mt-1">
|
||||
ویرایشگر جامع و زنده متون سئو، تگهای عناوین، تصاویر بنرها و آیکونهای لوسید در تمام بخشها
|
||||
پوشش کامل تمام {SITE_PAGES.length} صفحه برنامه شامل پیشنمایش زنده در گوگل (Google SERP)، ویرایشگر متن، تصاویر و آیکونها
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@ -758,7 +977,7 @@ export default function UITexts() {
|
||||
}`}
|
||||
>
|
||||
<Sparkles className="w-4 h-4 text-amber-300" />
|
||||
<span>ویرایشگر پیشرفته صفحات (Page Builder v2)</span>
|
||||
<span>ویرایشگر پیشرفته صفحات ({SITE_PAGES.length} صفحه فعال)</span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
@ -775,7 +994,7 @@ export default function UITexts() {
|
||||
</div>
|
||||
|
||||
<div className="text-[11px] text-gray-400 font-bold px-3">
|
||||
{versionTab === 'v2' ? 'نسخه مدرن آکاردئونی تفکیکشده' : 'نسخه پشتیبان فهرستی'}
|
||||
{versionTab === 'v2' ? 'نسخه مدرن آکاردئونی تفکیکشده به همراه Google SERP' : 'نسخه پشتیبان فهرستی'}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -793,7 +1012,7 @@ export default function UITexts() {
|
||||
}`}
|
||||
>
|
||||
<Layout className="w-4 h-4" />
|
||||
<span>صفحات سایت (Site Pages Accordion)</span>
|
||||
<span>تمام صفحات فروشگاه ({SITE_PAGES.length} صفحه تفکیکشده)</span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
@ -873,6 +1092,28 @@ export default function UITexts() {
|
||||
const isOpen = openPageId === page.id;
|
||||
const activeSection = page.sections.find((s) => s.id === openSectionId) || page.sections[0];
|
||||
|
||||
// Dynamic SEO Preview Derived Values
|
||||
const seoTitleKey = `${page.id}_meta_title`;
|
||||
const seoDescKey = `${page.id}_meta_desc`;
|
||||
const seoCanonicalKey = `${page.id}_canonical`;
|
||||
|
||||
const pageMetaTitle =
|
||||
edits[seoTitleKey] ??
|
||||
texts[seoTitleKey] ??
|
||||
page.sections.find((s) => s.id === 'seo')?.fields[0]?.defaultVal ??
|
||||
`${page.title} | کنینا ایران`;
|
||||
|
||||
const pageMetaDesc =
|
||||
edits[seoDescKey] ??
|
||||
texts[seoDescKey] ??
|
||||
page.sections.find((s) => s.id === 'seo')?.fields[1]?.defaultVal ??
|
||||
`مشاهده و بررسی آنلاین ${page.title} در وبسایت رسمی کنینا ایران با ضمانت اصالت کالا و مشاوره دارویی.`;
|
||||
|
||||
const pageCanonical =
|
||||
edits[seoCanonicalKey] ??
|
||||
texts[seoCanonicalKey] ??
|
||||
`https://canina.ir${page.path === '/' ? '' : page.path}`;
|
||||
|
||||
return (
|
||||
<div
|
||||
key={page.id}
|
||||
@ -906,7 +1147,7 @@ export default function UITexts() {
|
||||
|
||||
<div className="flex items-center gap-3">
|
||||
<span className="text-xs font-bold px-3 py-1 bg-white rounded-xl border border-gray-200 text-gray-600">
|
||||
{page.sections.length} بخش
|
||||
{page.sections.length} بخش (شامل سئو)
|
||||
</span>
|
||||
<ChevronDown
|
||||
className={`w-5 h-5 text-gray-400 transition-transform duration-200 ${
|
||||
@ -933,31 +1174,156 @@ export default function UITexts() {
|
||||
onClick={() => setOpenSectionId(sec.id)}
|
||||
className={`px-4 py-2 rounded-xl text-xs font-black transition-all flex items-center gap-2 cursor-pointer shrink-0 border ${
|
||||
isSecActive
|
||||
? 'bg-purple-600 text-white border-purple-600 shadow-sm'
|
||||
? sec.isSeo
|
||||
? 'bg-sky-600 text-white border-sky-600 shadow-sm'
|
||||
: 'bg-purple-600 text-white border-purple-600 shadow-sm'
|
||||
: 'bg-gray-50 text-gray-700 border-gray-200 hover:bg-gray-100'
|
||||
}`}
|
||||
>
|
||||
<SecIcon className="w-3.5 h-3.5" />
|
||||
<span>{sec.title}</span>
|
||||
{sec.isSeo && (
|
||||
<span className="text-[10px] bg-white/20 px-1.5 py-0.2 rounded font-mono">
|
||||
Google
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Active Section Fields Grid */}
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center gap-2 pb-2">
|
||||
<span className="w-2 h-2 rounded-full bg-purple-600" />
|
||||
<h4 className="text-sm font-black text-gray-800">
|
||||
فیلدهای محتوایی: {activeSection.title}
|
||||
</h4>
|
||||
</div>
|
||||
{/* If Active Section is SEO: Render Google SERP Live Preview Box Side-by-Side */}
|
||||
{activeSection.isSeo ? (
|
||||
<div className="grid grid-cols-1 lg:grid-cols-12 gap-6 items-start">
|
||||
{/* Left/Main Column: SEO Inputs */}
|
||||
<div className="lg:col-span-7 space-y-4">
|
||||
<div className="flex items-center gap-2 pb-2">
|
||||
<span className="w-2.5 h-2.5 rounded-full bg-sky-600" />
|
||||
<h4 className="text-sm font-black text-gray-800">
|
||||
فیلدهای متادیتای سئو (SEO Meta Tags)
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-6 md:grid-cols-2">
|
||||
{activeSection.fields.map((f) => renderField(f))}
|
||||
<div className="space-y-4">
|
||||
{activeSection.fields.map((f) => renderField(f))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column: Google SERP Preview Box */}
|
||||
<div className="lg:col-span-5 lg:sticky lg:top-4 bg-slate-50 border border-slate-200 rounded-3xl p-5 space-y-4 shadow-xs">
|
||||
<div className="flex items-center justify-between border-b border-slate-200 pb-3">
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="w-7 h-7 rounded-lg bg-white border border-slate-200 flex items-center justify-center shadow-xs">
|
||||
<Globe className="w-4 h-4 text-sky-600" />
|
||||
</div>
|
||||
<span className="text-xs font-black text-slate-800">پیشنمایش در گوگل</span>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-1 bg-white p-1 rounded-xl border border-slate-200">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setPreviewDevice('desktop')}
|
||||
className={`p-1.5 rounded-lg transition-colors cursor-pointer ${
|
||||
previewDevice === 'desktop'
|
||||
? 'bg-sky-50 text-sky-700 font-bold'
|
||||
: 'text-gray-400 hover:text-gray-600'
|
||||
}`}
|
||||
title="نمای دسکتاپ"
|
||||
>
|
||||
<Monitor className="w-3.5 h-3.5" />
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setPreviewDevice('mobile')}
|
||||
className={`p-1.5 rounded-lg transition-colors cursor-pointer ${
|
||||
previewDevice === 'mobile'
|
||||
? 'bg-sky-50 text-sky-700 font-bold'
|
||||
: 'text-gray-400 hover:text-gray-600'
|
||||
}`}
|
||||
title="نمای موبایل"
|
||||
>
|
||||
<Smartphone className="w-3.5 h-3.5" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Google Snippet Card */}
|
||||
<div
|
||||
className={`bg-white rounded-2xl border border-slate-200 p-4 shadow-sm text-right font-sans space-y-2 transition-all ${
|
||||
previewDevice === 'mobile' ? 'max-w-[340px] mx-auto border-sky-200' : ''
|
||||
}`}
|
||||
dir="rtl"
|
||||
>
|
||||
{/* Breadcrumbs / Domain */}
|
||||
<div className="flex items-center gap-2 text-xs text-[#202124]">
|
||||
<div className="w-5 h-5 rounded-full bg-slate-100 flex items-center justify-center text-[10px] font-bold text-slate-700 border">
|
||||
C
|
||||
</div>
|
||||
<div className="flex flex-col truncate">
|
||||
<span className="font-bold text-slate-900 text-[11px]">کنینا ایران - Canina</span>
|
||||
<span className="text-[10px] text-slate-500 font-mono" dir="ltr">
|
||||
{pageCanonical}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Title */}
|
||||
<h4 className="text-[17px] text-[#1a0dab] hover:underline cursor-pointer leading-tight font-medium font-sans select-none line-clamp-2">
|
||||
{pageMetaTitle}
|
||||
</h4>
|
||||
|
||||
{/* Snippet */}
|
||||
<p className="text-xs text-[#4d5156] leading-relaxed font-sans select-none break-words line-clamp-3">
|
||||
{pageMetaDesc}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Live Metrics & Length Warning Indicators */}
|
||||
<div className="space-y-2 text-[11px] font-bold text-slate-600 pt-2 border-t border-slate-200">
|
||||
<div className="flex items-center justify-between">
|
||||
<span>طول عنوان (Meta Title):</span>
|
||||
<span
|
||||
className={`px-2 py-0.5 rounded-lg ${
|
||||
pageMetaTitle.length > 60
|
||||
? 'bg-amber-100 text-amber-800'
|
||||
: 'bg-emerald-100 text-emerald-800'
|
||||
}`}
|
||||
>
|
||||
{pageMetaTitle.length} / ۶۰ کاراکتر
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-between">
|
||||
<span>طول توضیحات (Description):</span>
|
||||
<span
|
||||
className={`px-2 py-0.5 rounded-lg ${
|
||||
pageMetaDesc.length > 160
|
||||
? 'bg-amber-100 text-amber-800'
|
||||
: 'bg-emerald-100 text-emerald-800'
|
||||
}`}
|
||||
>
|
||||
{pageMetaDesc.length} / ۱۶۰ کاراکتر
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
/* Non-SEO Content Section Grid */
|
||||
<div className="space-y-4">
|
||||
<div className="flex items-center gap-2 pb-2">
|
||||
<span className="w-2 h-2 rounded-full bg-purple-600" />
|
||||
<h4 className="text-sm font-black text-gray-800">
|
||||
فیلدهای محتوایی: {activeSection.title}
|
||||
</h4>
|
||||
</div>
|
||||
|
||||
<div className="grid gap-6 md:grid-cols-2">
|
||||
{activeSection.fields.map((f) => renderField(f))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
"5": "tickets.controller.ts",
|
||||
"6": "UserDashboard.tsx",
|
||||
"7": "MediaSelector.tsx",
|
||||
"8": "ReportsController",
|
||||
"8": "SettingsController",
|
||||
"9": "PetProfile.tsx",
|
||||
"10": "DoctorsService",
|
||||
"11": "useSettingsStore",
|
||||
@ -37,16 +37,16 @@
|
||||
"35": "B2BService",
|
||||
"36": "What You Must Do When Invoked",
|
||||
"37": "userStore.ts",
|
||||
"38": "UsersController",
|
||||
"38": "UsersService",
|
||||
"39": "What You Must Do When Invoked",
|
||||
"40": "SslController",
|
||||
"41": "PodcastPlayerModal.tsx",
|
||||
"42": "IngredientsService",
|
||||
"43": "RedisService",
|
||||
"43": "MetricsController",
|
||||
"44": "MediaController",
|
||||
"45": "Pagination.tsx",
|
||||
"46": "SmsService",
|
||||
"47": "PetsService",
|
||||
"47": "orders.service.ts",
|
||||
"48": "PrescriptionsService",
|
||||
"49": "SmartAdvisorService",
|
||||
"50": "TestimonialsService",
|
||||
@ -70,7 +70,7 @@
|
||||
"68": "Operational Rules & Boundaries",
|
||||
"69": "WikiController",
|
||||
"70": "ApiOperation",
|
||||
"71": ".update",
|
||||
"71": "PetsController",
|
||||
"72": "seo.module.ts",
|
||||
"73": "admin.service.ts",
|
||||
"74": "🏢 AI Software Agency — Master Orchestration Protocol v3",
|
||||
@ -103,15 +103,14 @@
|
||||
"101": "UITexts.tsx",
|
||||
"102": "BlogsController",
|
||||
"103": "ProductDto",
|
||||
"104": "AuthController",
|
||||
"104": "WikiService",
|
||||
"105": "1. Summary of Integrity Repairs Performed",
|
||||
"106": "users.service.ts",
|
||||
"106": "@nestjs/cli",
|
||||
"107": "Operational Rules & Boundaries",
|
||||
"108": "Operational Rules & Boundaries",
|
||||
"109": "Operational Rules & Boundaries",
|
||||
"110": "AppService",
|
||||
"111": "SmsLogQueryDto",
|
||||
"112": "PetsController",
|
||||
"113": "Vazirmatn Changelog",
|
||||
"114": "Vazirmatn Font فونت وزیرمتن",
|
||||
"115": "Operational Rules & Boundaries",
|
||||
@ -128,7 +127,6 @@
|
||||
"126": "Role & Core Objective",
|
||||
"127": "orchestrate.py",
|
||||
"128": "backend/package.json",
|
||||
"129": "auth.module.ts",
|
||||
"130": "graphify reference: extra exports and benchmark",
|
||||
"131": "Phase 2 Final Quality Gate Summary Report",
|
||||
"132": "Task Modifications Log",
|
||||
@ -141,8 +139,7 @@
|
||||
"139": "System Discovery",
|
||||
"140": "Product Requirement Document (PRD)",
|
||||
"141": "WikiController",
|
||||
"142": "eslint-plugin-prettier",
|
||||
"143": "AuthService",
|
||||
"143": "RedisService",
|
||||
"144": "Baseline Command Plan & Reconciled Command History",
|
||||
"145": "SmsSettingsPage.tsx",
|
||||
"146": "ErrorPages.tsx",
|
||||
@ -211,10 +208,7 @@
|
||||
"209": "sync_honest_manifest.js",
|
||||
"210": "sync_manifest.js",
|
||||
"211": "@types/multer",
|
||||
"212": "CreateHealthLogDto",
|
||||
"213": "@testing-library/jest-dom",
|
||||
"214": "UsersService",
|
||||
"215": "CreateReminderDto",
|
||||
"216": "FormField.tsx",
|
||||
"217": "Input.tsx",
|
||||
"218": "Textarea.tsx",
|
||||
@ -231,16 +225,13 @@
|
||||
"229": "eslint-plugin-react-refresh",
|
||||
"230": "@tailwindcss/postcss",
|
||||
"231": "typescript",
|
||||
"232": "Body",
|
||||
"232": "AdminService",
|
||||
"233": "@testing-library/react",
|
||||
"234": "@types/react",
|
||||
"235": "typescript",
|
||||
"236": "vitest",
|
||||
"237": "axios",
|
||||
"238": "RegisterDto",
|
||||
"239": "AdminService",
|
||||
"240": "ts-loader",
|
||||
"241": "AdminLoginDto",
|
||||
"242": "@types/bcrypt",
|
||||
"243": "app.e2e-spec.js",
|
||||
"244": "blog.entity.ts",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1,13 +1,13 @@
|
||||
{
|
||||
"0": "OrdersController",
|
||||
"0": "OrdersService",
|
||||
"1": "productService.ts",
|
||||
"2": "CmsController",
|
||||
"3": "app.module.ts",
|
||||
"4": "CreateReviewDto",
|
||||
"4": "reviews.controller.ts",
|
||||
"5": "tickets.controller.ts",
|
||||
"6": "UserDashboard.tsx",
|
||||
"7": "MediaSelector.tsx",
|
||||
"8": "admin.module.ts",
|
||||
"8": "ReportsController",
|
||||
"9": "PetProfile.tsx",
|
||||
"10": "DoctorsService",
|
||||
"11": "useSettingsStore",
|
||||
@ -28,8 +28,8 @@
|
||||
"26": "TEST-001",
|
||||
"27": "DEVOPS-001",
|
||||
"28": "DOC-001",
|
||||
"29": "wholesale.controller.ts",
|
||||
"30": "main.ts",
|
||||
"29": "WholesaleApplyDto",
|
||||
"30": "app-audit-verification.e2e-spec.js",
|
||||
"31": "JwtAuthGuard",
|
||||
"32": "ZibalService",
|
||||
"33": "راهنمای تست سیستم (Software Testing)",
|
||||
@ -37,7 +37,7 @@
|
||||
"35": "B2BService",
|
||||
"36": "What You Must Do When Invoked",
|
||||
"37": "userStore.ts",
|
||||
"38": "UsersService",
|
||||
"38": "UsersController",
|
||||
"39": "What You Must Do When Invoked",
|
||||
"40": "SslController",
|
||||
"41": "PodcastPlayerModal.tsx",
|
||||
@ -97,15 +97,15 @@
|
||||
"95": "Operational Rules & Boundaries",
|
||||
"96": "exclude",
|
||||
"97": "jest",
|
||||
"98": "AdminService",
|
||||
"98": "AdminController",
|
||||
"99": "Comprehensive Change Log",
|
||||
"100": "Operational Rules & Boundaries",
|
||||
"101": "UITexts.tsx",
|
||||
"102": "BlogsController",
|
||||
"103": "ProductDto",
|
||||
"104": "CreateOrderDto",
|
||||
"104": "AuthController",
|
||||
"105": "1. Summary of Integrity Repairs Performed",
|
||||
"106": "OrdersService",
|
||||
"106": "users.service.ts",
|
||||
"107": "Operational Rules & Boundaries",
|
||||
"108": "Operational Rules & Boundaries",
|
||||
"109": "Operational Rules & Boundaries",
|
||||
@ -118,7 +118,7 @@
|
||||
"116": "compilerOptions",
|
||||
"117": "compilerOptions",
|
||||
"118": "backend/README.md",
|
||||
"119": "eslint",
|
||||
"119": "devDependencies",
|
||||
"120": "Repository Map",
|
||||
"121": "validate_integrity.js",
|
||||
"122": "admin-panel/package.json",
|
||||
@ -128,7 +128,7 @@
|
||||
"126": "Role & Core Objective",
|
||||
"127": "orchestrate.py",
|
||||
"128": "backend/package.json",
|
||||
"129": "Param",
|
||||
"129": "auth.module.ts",
|
||||
"130": "graphify reference: extra exports and benchmark",
|
||||
"131": "Phase 2 Final Quality Gate Summary Report",
|
||||
"132": "Task Modifications Log",
|
||||
@ -136,13 +136,13 @@
|
||||
"134": "ErrorBoundary",
|
||||
"135": "application/package.json",
|
||||
"136": "generate-openapi.js",
|
||||
"137": "payment.service.ts",
|
||||
"137": "AdminTransactionFilterDto",
|
||||
"138": "InitiatePaymentDto",
|
||||
"139": "System Discovery",
|
||||
"140": "Product Requirement Document (PRD)",
|
||||
"141": "WikiController",
|
||||
"142": "devDependencies",
|
||||
"143": "@nestjs/cli",
|
||||
"142": "eslint-plugin-prettier",
|
||||
"143": "AuthService",
|
||||
"144": "Baseline Command Plan & Reconciled Command History",
|
||||
"145": "SmsSettingsPage.tsx",
|
||||
"146": "ErrorPages.tsx",
|
||||
@ -173,7 +173,7 @@
|
||||
"171": "🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)",
|
||||
"172": "🚀 SEO & Content Strategy Review (12_seo_content)",
|
||||
"173": "@types/node",
|
||||
"174": "ZibalCallbackQueryDto",
|
||||
"174": ".handleZibalCallback",
|
||||
"175": "seed-ui-texts.ts",
|
||||
"176": "seed-wiki.ts",
|
||||
"177": "update-blog.dto.ts",
|
||||
@ -213,7 +213,7 @@
|
||||
"211": "@types/multer",
|
||||
"212": "CreateHealthLogDto",
|
||||
"213": "@testing-library/jest-dom",
|
||||
"214": "CreatePetDto",
|
||||
"214": "UsersService",
|
||||
"215": "CreateReminderDto",
|
||||
"216": "FormField.tsx",
|
||||
"217": "Input.tsx",
|
||||
@ -231,18 +231,18 @@
|
||||
"229": "eslint-plugin-react-refresh",
|
||||
"230": "@tailwindcss/postcss",
|
||||
"231": "typescript",
|
||||
"232": "AppModule",
|
||||
"232": "Body",
|
||||
"233": "@testing-library/react",
|
||||
"234": "@types/react",
|
||||
"235": "typescript",
|
||||
"236": "vitest",
|
||||
"237": "axios",
|
||||
"238": "bcryptjs",
|
||||
"239": "class-transformer",
|
||||
"238": "RegisterDto",
|
||||
"239": "AdminService",
|
||||
"240": "ts-loader",
|
||||
"241": "ioredis",
|
||||
"241": "AdminLoginDto",
|
||||
"242": "@types/bcrypt",
|
||||
"243": "@nestjs/common",
|
||||
"243": "app.e2e-spec.js",
|
||||
"244": "blog.entity.ts",
|
||||
"245": "home.entity.ts",
|
||||
"246": "wiki.entity.ts",
|
||||
@ -289,28 +289,17 @@
|
||||
"287": "Production Docker Compose",
|
||||
"288": "Staging Docker Compose",
|
||||
"289": "tailwindcss",
|
||||
"290": "@nestjs/swagger",
|
||||
"290": "@types/passport-jwt",
|
||||
"291": "NetworkBanner.tsx",
|
||||
"292": "@nestjs/passport",
|
||||
"293": "passport-jwt",
|
||||
"294": "@prisma/client",
|
||||
"295": "reflect-metadata",
|
||||
"296": "swagger-ui-express",
|
||||
"292": "@types/supertest",
|
||||
"293": "typescript",
|
||||
"294": "app-audit-verification.e2e-spec.d.ts",
|
||||
"295": "app.e2e-spec.d.ts",
|
||||
"297": "@eslint/eslintrc",
|
||||
"298": "eslint-config-prettier",
|
||||
"299": "@eslint/js",
|
||||
"300": "jest",
|
||||
"301": "@nestjs/schematics",
|
||||
"302": "@nestjs/testing",
|
||||
"303": "source-map-support",
|
||||
"304": "ts-jest",
|
||||
"305": "RouteErrorBoundary",
|
||||
"306": "tsconfig-paths",
|
||||
"307": "@types/bcryptjs",
|
||||
"308": "typescript-eslint",
|
||||
"309": "globals",
|
||||
"310": "AdminModule",
|
||||
"311": "DoctorsModule",
|
||||
"310": "admin.module.ts",
|
||||
"312": "tailwindcss",
|
||||
"313": "@types/react-dom"
|
||||
}
|
||||
|
||||
@ -1,29 +1,29 @@
|
||||
# Graph Report - canina (2026-08-18)
|
||||
|
||||
## Corpus Check
|
||||
- 517 files · ~740,290 words
|
||||
- 521 files · ~741,110 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 3671 nodes · 6229 edges · 314 communities (195 shown, 119 thin omitted)
|
||||
- 3689 nodes · 6248 edges · 303 communities (202 shown, 101 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 230 edges (avg confidence: 0.79)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `a291fa0c`
|
||||
- Built from commit: `6362750d`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
## Community Hubs (Navigation)
|
||||
- OrdersController
|
||||
- OrdersService
|
||||
- productService.ts
|
||||
- CmsController
|
||||
- app.module.ts
|
||||
- CreateReviewDto
|
||||
- reviews.controller.ts
|
||||
- tickets.controller.ts
|
||||
- UserDashboard.tsx
|
||||
- MediaSelector.tsx
|
||||
- admin.module.ts
|
||||
- ReportsController
|
||||
- PetProfile.tsx
|
||||
- DoctorsService
|
||||
- useSettingsStore
|
||||
@ -44,8 +44,8 @@
|
||||
- TEST-001
|
||||
- DEVOPS-001
|
||||
- DOC-001
|
||||
- wholesale.controller.ts
|
||||
- main.ts
|
||||
- WholesaleApplyDto
|
||||
- app-audit-verification.e2e-spec.js
|
||||
- JwtAuthGuard
|
||||
- ZibalService
|
||||
- راهنمای تست سیستم (Software Testing)
|
||||
@ -53,7 +53,7 @@
|
||||
- B2BService
|
||||
- What You Must Do When Invoked
|
||||
- userStore.ts
|
||||
- UsersService
|
||||
- UsersController
|
||||
- What You Must Do When Invoked
|
||||
- SslController
|
||||
- PodcastPlayerModal.tsx
|
||||
@ -113,15 +113,15 @@
|
||||
- Operational Rules & Boundaries
|
||||
- exclude
|
||||
- jest
|
||||
- AdminService
|
||||
- AdminController
|
||||
- Comprehensive Change Log
|
||||
- Operational Rules & Boundaries
|
||||
- UITexts.tsx
|
||||
- BlogsController
|
||||
- ProductDto
|
||||
- CreateOrderDto
|
||||
- AuthController
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
- OrdersService
|
||||
- users.service.ts
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
@ -134,7 +134,7 @@
|
||||
- compilerOptions
|
||||
- compilerOptions
|
||||
- backend/README.md
|
||||
- eslint
|
||||
- devDependencies
|
||||
- Repository Map
|
||||
- validate_integrity.js
|
||||
- admin-panel/package.json
|
||||
@ -144,7 +144,7 @@
|
||||
- Role & Core Objective
|
||||
- orchestrate.py
|
||||
- backend/package.json
|
||||
- Param
|
||||
- auth.module.ts
|
||||
- graphify reference: extra exports and benchmark
|
||||
- Phase 2 Final Quality Gate Summary Report
|
||||
- Task Modifications Log
|
||||
@ -152,13 +152,13 @@
|
||||
- ErrorBoundary
|
||||
- application/package.json
|
||||
- generate-openapi.js
|
||||
- payment.service.ts
|
||||
- AdminTransactionFilterDto
|
||||
- InitiatePaymentDto
|
||||
- System Discovery
|
||||
- Product Requirement Document (PRD)
|
||||
- WikiController
|
||||
- devDependencies
|
||||
- @nestjs/cli
|
||||
- eslint-plugin-prettier
|
||||
- AuthService
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
- SmsSettingsPage.tsx
|
||||
- ErrorPages.tsx
|
||||
@ -189,7 +189,7 @@
|
||||
- 🎨 Frontend & Admin Panel Technical Review (06_dev_frontend)
|
||||
- 🚀 SEO & Content Strategy Review (12_seo_content)
|
||||
- @types/node
|
||||
- ZibalCallbackQueryDto
|
||||
- .handleZibalCallback
|
||||
- seed-ui-texts.ts
|
||||
- seed-wiki.ts
|
||||
- update-blog.dto.ts
|
||||
@ -229,7 +229,7 @@
|
||||
- @types/multer
|
||||
- CreateHealthLogDto
|
||||
- @testing-library/jest-dom
|
||||
- CreatePetDto
|
||||
- UsersService
|
||||
- CreateReminderDto
|
||||
- FormField.tsx
|
||||
- Input.tsx
|
||||
@ -247,17 +247,17 @@
|
||||
- eslint-plugin-react-refresh
|
||||
- @tailwindcss/postcss
|
||||
- typescript
|
||||
- AppModule
|
||||
- Body
|
||||
- @testing-library/react
|
||||
- @types/react
|
||||
- typescript
|
||||
- vitest
|
||||
- bcryptjs
|
||||
- class-transformer
|
||||
- RegisterDto
|
||||
- AdminService
|
||||
- ts-loader
|
||||
- ioredis
|
||||
- AdminLoginDto
|
||||
- @types/bcrypt
|
||||
- @nestjs/common
|
||||
- app.e2e-spec.js
|
||||
- blog.entity.ts
|
||||
- home.entity.ts
|
||||
- wiki.entity.ts
|
||||
@ -290,28 +290,15 @@
|
||||
- Shabnam Font Sample
|
||||
- Production Docker Compose
|
||||
- Staging Docker Compose
|
||||
- @nestjs/swagger
|
||||
- @types/passport-jwt
|
||||
- NetworkBanner.tsx
|
||||
- @nestjs/passport
|
||||
- passport-jwt
|
||||
- @prisma/client
|
||||
- reflect-metadata
|
||||
- swagger-ui-express
|
||||
- @types/supertest
|
||||
- typescript
|
||||
- @eslint/eslintrc
|
||||
- eslint-config-prettier
|
||||
- @eslint/js
|
||||
- jest
|
||||
- @nestjs/schematics
|
||||
- @nestjs/testing
|
||||
- source-map-support
|
||||
- ts-jest
|
||||
- RouteErrorBoundary
|
||||
- tsconfig-paths
|
||||
- @types/bcryptjs
|
||||
- typescript-eslint
|
||||
- globals
|
||||
- AdminModule
|
||||
- DoctorsModule
|
||||
- admin.module.ts
|
||||
- tailwindcss
|
||||
- @types/react-dom
|
||||
|
||||
@ -348,11 +335,11 @@
|
||||
- **Rastikerdar Font Ecosystem** — frontend_application_public_fonts_shabnam_font_v5_0_1_readme, frontend_application_public_fonts_vazirmatn_v33_003_readme, vazir_font [EXTRACTED 0.95]
|
||||
- **Canina Deployment Stack** — scripts_compose_prod, scripts_compose_stage [EXTRACTED 1.00]
|
||||
|
||||
## Communities (314 total, 119 thin omitted)
|
||||
## Communities (303 total, 101 thin omitted)
|
||||
|
||||
### Community 0 - "OrdersController"
|
||||
Cohesion: 0.14
|
||||
Nodes (16): OrdersController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags (+8 more)
|
||||
### Community 0 - "OrdersService"
|
||||
Cohesion: 0.07
|
||||
Nodes (29): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+21 more)
|
||||
|
||||
### Community 1 - "productService.ts"
|
||||
Cohesion: 0.06
|
||||
@ -363,12 +350,12 @@ Cohesion: 0.09
|
||||
Nodes (24): CmsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+16 more)
|
||||
|
||||
### Community 3 - "app.module.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (28): BannersModule, Module, CmsModule, Module, SmsModule, Global, Module, ContactModule (+20 more)
|
||||
|
||||
### Community 4 - "CreateReviewDto"
|
||||
Cohesion: 0.07
|
||||
Nodes (29): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+21 more)
|
||||
Nodes (34): B2BModule, Module, BannersModule, Module, CmsModule, Module, SmsModule, Global (+26 more)
|
||||
|
||||
### Community 4 - "reviews.controller.ts"
|
||||
Cohesion: 0.07
|
||||
Nodes (31): CreateReviewDto, ApiProperty, IsInt, IsNotEmpty, IsOptional, IsString, Min, ApiProperty (+23 more)
|
||||
|
||||
### Community 5 - "tickets.controller.ts"
|
||||
Cohesion: 0.09
|
||||
@ -382,17 +369,17 @@ Nodes (28): VerifyContent(), AddressModal(), AddressModalProps, BackButton(), Ba
|
||||
Cohesion: 0.07
|
||||
Nodes (27): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, BlogPost, Category (+19 more)
|
||||
|
||||
### Community 8 - "admin.module.ts"
|
||||
Cohesion: 0.11
|
||||
Nodes (12): ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get, UseGuards, ReportsService (+4 more)
|
||||
### Community 8 - "ReportsController"
|
||||
Cohesion: 0.17
|
||||
Nodes (9): ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get, UseGuards, ReportsService (+1 more)
|
||||
|
||||
### Community 9 - "PetProfile.tsx"
|
||||
Cohesion: 0.14
|
||||
Nodes (12): FeaturedProducts(), OrderRowSkeleton(), PetProfileSkeleton(), ProductCardSkeleton(), Skeleton(), SkeletonProps, mockProducts, HealthLog (+4 more)
|
||||
|
||||
### Community 10 - "DoctorsService"
|
||||
Cohesion: 0.12
|
||||
Nodes (16): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (15): DoctorsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
|
||||
|
||||
### Community 11 - "useSettingsStore"
|
||||
Cohesion: 0.14
|
||||
@ -404,11 +391,11 @@ Nodes (16): App(), HeroBanner, VetTestimonial, ContactInfoItem, ContactSubmissio
|
||||
|
||||
### Community 13 - "PrismaService"
|
||||
Cohesion: 0.07
|
||||
Nodes (21): ApiExcludeController, BlogQuery, CategoryQuery, PetQuery, MetricsController, Controller, Get, Res (+13 more)
|
||||
Nodes (17): BlogQuery, WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery (+9 more)
|
||||
|
||||
### Community 14 - "pets/pets.controller.ts"
|
||||
Cohesion: 0.31
|
||||
Nodes (5): UpdatePetDto, PetsModule, Module, HealthLogInput, ReminderInput
|
||||
Cohesion: 0.16
|
||||
Nodes (13): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+5 more)
|
||||
|
||||
### Community 15 - "ProductsService"
|
||||
Cohesion: 0.09
|
||||
@ -419,24 +406,24 @@ Cohesion: 0.06
|
||||
Nodes (18): metadata, ContactFormClient(), ContactInfoItem, Testimonial, TestimonialsSection(), api, ApiErrorPayload, BASE_DOMAIN (+10 more)
|
||||
|
||||
### Community 17 - "CreateVideoDto"
|
||||
Cohesion: 0.07
|
||||
Nodes (32): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+24 more)
|
||||
Cohesion: 0.09
|
||||
Nodes (24): CreateVideoDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, UpdateVideoDto (+16 more)
|
||||
|
||||
### Community 18 - "src/services/api.ts"
|
||||
Cohesion: 0.10
|
||||
Nodes (23): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SmartAdvisorManager, SystemSettingsPage (+15 more)
|
||||
|
||||
### Community 19 - "auth.service.ts"
|
||||
Cohesion: 0.06
|
||||
Nodes (45): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+37 more)
|
||||
Cohesion: 0.11
|
||||
Nodes (19): AdminLoginInput, LoginInput, RegisterInput, LoginDto, ApiProperty, IsNotEmpty, IsString, MinLength (+11 more)
|
||||
|
||||
### Community 20 - "BE-001"
|
||||
Cohesion: 0.06
|
||||
Nodes (32): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, BE-001, Category, Completion Statement, Confidence (+24 more)
|
||||
|
||||
### Community 21 - "Roles"
|
||||
Cohesion: 0.24
|
||||
Nodes (14): Roles(), SettingsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete (+6 more)
|
||||
Cohesion: 0.20
|
||||
Nodes (16): Roles(), SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
|
||||
### Community 22 - "FE-001"
|
||||
Cohesion: 0.06
|
||||
@ -466,16 +453,16 @@ Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternati
|
||||
Cohesion: 0.06
|
||||
Nodes (31): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, Category, Completion Statement, Confidence, Dependencies (+23 more)
|
||||
|
||||
### Community 29 - "wholesale.controller.ts"
|
||||
### Community 29 - "WholesaleApplyDto"
|
||||
Cohesion: 0.10
|
||||
Nodes (22): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+14 more)
|
||||
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
|
||||
|
||||
### Community 30 - "main.ts"
|
||||
Cohesion: 0.14
|
||||
Nodes (9): CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable, ApiErrorResponse, ErrorDetailField (+1 more)
|
||||
### Community 30 - "app-audit-verification.e2e-spec.js"
|
||||
Cohesion: 0.08
|
||||
Nodes (20): CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable, ApiErrorResponse, ErrorDetailField (+12 more)
|
||||
|
||||
### Community 31 - "JwtAuthGuard"
|
||||
Cohesion: 0.21
|
||||
Cohesion: 0.19
|
||||
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
|
||||
### Community 32 - "ZibalService"
|
||||
@ -487,12 +474,12 @@ Cohesion: 0.07
|
||||
Nodes (25): اجرای بکاند, اجرای فرانتاند, اجرای پروژه در سرور با PM2, برای راهاندازی بکاند:, برای راهاندازی فرانتاند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسهها تا پس از ریاستارت سرور قطع نشوند:, راهاندازی و انتشار سیستم (Setup & Deployment) (+17 more)
|
||||
|
||||
### Community 34 - "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 35 - "B2BService"
|
||||
Cohesion: 0.12
|
||||
Nodes (17): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+9 more)
|
||||
Cohesion: 0.14
|
||||
Nodes (14): B2BController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
|
||||
|
||||
### Community 36 - "What You Must Do When Invoked"
|
||||
Cohesion: 0.07
|
||||
@ -502,48 +489,48 @@ Nodes (26): For /graphify add and --watch, For /graphify query, For the commit h
|
||||
Cohesion: 0.09
|
||||
Nodes (32): ClientLayout(), ArchiveProductCard(), AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal(), CartDrawer(), CheckoutPage() (+24 more)
|
||||
|
||||
### Community 38 - "UsersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (41): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+33 more)
|
||||
### Community 38 - "UsersController"
|
||||
Cohesion: 0.20
|
||||
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
|
||||
### Community 39 - "What You Must Do When Invoked"
|
||||
Cohesion: 0.07
|
||||
Nodes (26): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+18 more)
|
||||
|
||||
### Community 40 - "SslController"
|
||||
Cohesion: 0.11
|
||||
Nodes (15): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+7 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (14): SslController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Post (+6 more)
|
||||
|
||||
### Community 41 - "PodcastPlayerModal.tsx"
|
||||
Cohesion: 0.40
|
||||
Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps
|
||||
|
||||
### Community 42 - "IngredientsService"
|
||||
Cohesion: 0.12
|
||||
Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 43 - "RedisService"
|
||||
Cohesion: 0.08
|
||||
Nodes (8): AuthService, Injectable, normalizeMobile(), RedisModule, Global, Module, RedisService, Injectable
|
||||
Nodes (12): ApiExcludeController, AppModule, Module, MetricsController, Controller, Get, Res, RedisModule (+4 more)
|
||||
|
||||
### Community 44 - "MediaController"
|
||||
Cohesion: 0.11
|
||||
Nodes (16): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+8 more)
|
||||
Nodes (14): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 45 - "Pagination.tsx"
|
||||
Cohesion: 0.13
|
||||
Nodes (11): Pagination(), PaginationProps, Pet, GatewayHealth, Stats, Transaction, ProductItem, WikiTerm (+3 more)
|
||||
|
||||
### Community 48 - "PrescriptionsService"
|
||||
Cohesion: 0.13
|
||||
Cohesion: 0.14
|
||||
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
|
||||
|
||||
### Community 49 - "SmartAdvisorService"
|
||||
Cohesion: 0.12
|
||||
Cohesion: 0.13
|
||||
Nodes (14): SmartAdvisorController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 50 - "TestimonialsService"
|
||||
Cohesion: 0.12
|
||||
Cohesion: 0.13
|
||||
Nodes (14): TestimonialsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 51 - "Role & Core Objective"
|
||||
@ -555,12 +542,12 @@ Cohesion: 0.13
|
||||
Nodes (11): ContactController, Body, Controller, Get, Param, Post, Put, Query (+3 more)
|
||||
|
||||
### Community 53 - "PaymentController"
|
||||
Cohesion: 0.20
|
||||
Nodes (17): PaymentController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+9 more)
|
||||
Cohesion: 0.25
|
||||
Nodes (13): PaymentController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+5 more)
|
||||
|
||||
### Community 54 - "compilerOptions"
|
||||
Cohesion: 0.06
|
||||
Nodes (31): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+23 more)
|
||||
Nodes (30): compilerOptions, allowSyntheticDefaultImports, baseUrl, declaration, emitDecoratorMetadata, esModuleInterop, experimentalDecorators, forceConsistentCasingInFileNames (+22 more)
|
||||
|
||||
### Community 55 - "Media.tsx"
|
||||
Cohesion: 0.14
|
||||
@ -571,16 +558,16 @@ Cohesion: 0.08
|
||||
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
|
||||
|
||||
### Community 57 - "PetsController"
|
||||
Cohesion: 0.11
|
||||
Nodes (13): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+5 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 58 - "PaginationDto"
|
||||
Cohesion: 0.08
|
||||
Nodes (21): AdminQueryDto, ApiPropertyOptional, IsOptional, IsString, BlogsModule, Module, BlogsService, Injectable (+13 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (28): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+20 more)
|
||||
|
||||
### Community 59 - "dependencies"
|
||||
Cohesion: 0.10
|
||||
Nodes (21): dependencies, bcrypt, class-validator, helmet, js-yaml, @nestjs/core, @nestjs/jwt, @nestjs/platform-express (+13 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (41): dependencies, bcrypt, bcryptjs, class-transformer, class-validator, helmet, ioredis, js-yaml (+33 more)
|
||||
|
||||
### Community 60 - "compilerOptions"
|
||||
Cohesion: 0.10
|
||||
@ -591,15 +578,11 @@ Cohesion: 0.12
|
||||
Nodes (20): HomeClient(), HomeClientProps, getHomeData(), Home(), metadata, metadata, ArchivePage(), CATEGORY_MAP (+12 more)
|
||||
|
||||
### Community 62 - "BlogsController"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
|
||||
|
||||
### Community 63 - "SettingsService"
|
||||
Cohesion: 0.09
|
||||
Nodes (4): ApiOkResponse, Get, SettingsService, Injectable
|
||||
Cohesion: 0.13
|
||||
Nodes (15): BlogsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+7 more)
|
||||
|
||||
### Community 64 - "BannersService"
|
||||
Cohesion: 0.12
|
||||
Cohesion: 0.13
|
||||
Nodes (15): BannersController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+7 more)
|
||||
|
||||
### Community 65 - "Required Review Group Closures"
|
||||
@ -623,11 +606,11 @@ Cohesion: 0.13
|
||||
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 70 - "ApiOperation"
|
||||
Cohesion: 0.21
|
||||
Nodes (4): ApiOperation, ApiQuery, Get, Query
|
||||
Cohesion: 0.14
|
||||
Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
|
||||
### Community 71 - ".update"
|
||||
Cohesion: 0.25
|
||||
Cohesion: 0.24
|
||||
Nodes (11): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Delete, Get, Param, Patch (+3 more)
|
||||
|
||||
### Community 72 - "seo.module.ts"
|
||||
@ -635,8 +618,8 @@ Cohesion: 0.16
|
||||
Nodes (10): SeoController, ApiOperation, ApiTags, Controller, Get, Param, SeoModule, Module (+2 more)
|
||||
|
||||
### Community 73 - "admin.service.ts"
|
||||
Cohesion: 0.20
|
||||
Nodes (13): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+5 more)
|
||||
Cohesion: 0.16
|
||||
Nodes (13): CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber (+5 more)
|
||||
|
||||
### Community 74 - "🏢 AI Software Agency — Master Orchestration Protocol v3"
|
||||
Cohesion: 0.11
|
||||
@ -711,8 +694,8 @@ Cohesion: 0.06
|
||||
Nodes (32): compilerOptions, allowJs, esModuleInterop, incremental, isolatedModules, jsx, lib, module (+24 more)
|
||||
|
||||
### Community 92 - "scripts"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): scripts, build, docs:generate, lint, start, start:debug, start:dev, start:prod (+5 more)
|
||||
Cohesion: 0.14
|
||||
Nodes (14): scripts, build, build:nest, docs:generate, lint, start, start:debug, start:dev (+6 more)
|
||||
|
||||
### Community 93 - "Deep Audit Summary Report"
|
||||
Cohesion: 0.14
|
||||
@ -728,15 +711,15 @@ Nodes (12): 1. Stack Detection (Brownfield), 2. Stack Selection (Greenfield), 3.
|
||||
|
||||
### Community 96 - "exclude"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): exclude, extends, dist, node_modules, prisma, test, **/*spec.ts, ./tsconfig.json
|
||||
Nodes (8): exclude, extends, dist, node_modules, prisma, **/*spec.ts, test, ./tsconfig.json
|
||||
|
||||
### Community 97 - "jest"
|
||||
Cohesion: 0.15
|
||||
Nodes (13): jest, collectCoverageFrom, coverageDirectory, moduleFileExtensions, rootDir, testEnvironment, testRegex, transform (+5 more)
|
||||
|
||||
### Community 98 - "AdminService"
|
||||
Cohesion: 0.11
|
||||
Nodes (10): AdminController, ApiBearerAuth, ApiTags, Body, Controller, Post, Put, UseGuards (+2 more)
|
||||
### Community 98 - "AdminController"
|
||||
Cohesion: 0.13
|
||||
Nodes (8): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, Put, UseGuards
|
||||
|
||||
### Community 99 - "Comprehensive Change Log"
|
||||
Cohesion: 0.15
|
||||
@ -758,17 +741,17 @@ Nodes (9): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, Ap
|
||||
Cohesion: 0.22
|
||||
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
|
||||
|
||||
### Community 104 - "CreateOrderDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (11): CreateOrderDto, OrderItemDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional (+3 more)
|
||||
### Community 104 - "AuthController"
|
||||
Cohesion: 0.27
|
||||
Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more)
|
||||
|
||||
### Community 105 - "1. Summary of Integrity Repairs Performed"
|
||||
Cohesion: 0.17
|
||||
Nodes (11): 1.1 Authoritative Source File Inventory Rebuilt, 1.2 Raw Finding Dispositions Reconciled, 1.3 Finding Identifier Normalization, 1.4 Rejected Finding Cleanup, 1. Summary of Integrity Repairs Performed, 2. Final Verified Finding Metrics, 3. Reference and Compiler Integrity Results, 4. Quality Gate Conclusion (+3 more)
|
||||
|
||||
### Community 106 - "OrdersService"
|
||||
Cohesion: 0.14
|
||||
Nodes (8): IsNotEmpty, IsNumber, IsString, ValidateCouponDto, OrdersModule, Module, OrdersService, Injectable
|
||||
### Community 106 - "users.service.ts"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+6 more)
|
||||
|
||||
### Community 107 - "Operational Rules & Boundaries"
|
||||
Cohesion: 0.18
|
||||
@ -818,6 +801,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 119 - "devDependencies"
|
||||
Cohesion: 0.09
|
||||
Nodes (23): devDependencies, eslint, @eslint/js, jest, @nestjs/cli, @nestjs/schematics, @nestjs/testing, source-map-support (+15 more)
|
||||
|
||||
### Community 120 - "Repository Map"
|
||||
Cohesion: 0.20
|
||||
Nodes (9): 1. Active Customer Storefront: React 19 + Vite Application, 2. Active Backend Service: NestJS Application, 3. Excluded Placeholder / Non-Auditable Directories, Active Applications & Non-Auditable Scopes, Documentation Governance, Important Configuration & Infrastructure Files, Mandatory Global Audit Exclusions, Repository Map (+1 more)
|
||||
@ -854,6 +841,10 @@ Nodes (8): cmd_next_task(), cmd_progress(), cmd_reset(), cmd_status(), cmd_unblo
|
||||
Cohesion: 0.22
|
||||
Nodes (8): author, description, license, name, prisma, seed, private, version
|
||||
|
||||
### Community 129 - "auth.module.ts"
|
||||
Cohesion: 0.17
|
||||
Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+2 more)
|
||||
|
||||
### Community 130 - "graphify reference: extra exports and benchmark"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000)
|
||||
@ -882,9 +873,9 @@ Nodes (8): name, private, scripts, build, dev, lint, start, version
|
||||
Cohesion: 0.25
|
||||
Nodes (6): app_module_1, core_1, fs, path, swagger_1, yaml
|
||||
|
||||
### Community 137 - "payment.service.ts"
|
||||
Cohesion: 0.20
|
||||
Nodes (8): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type, ClientMetadata
|
||||
### Community 137 - "AdminTransactionFilterDto"
|
||||
Cohesion: 0.25
|
||||
Nodes (7): AdminTransactionFilterDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
|
||||
|
||||
### Community 138 - "InitiatePaymentDto"
|
||||
Cohesion: 0.43
|
||||
@ -902,9 +893,9 @@ Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements,
|
||||
Cohesion: 0.21
|
||||
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
|
||||
|
||||
### Community 142 - "devDependencies"
|
||||
Cohesion: 0.22
|
||||
Nodes (9): devDependencies, eslint-plugin-prettier, @types/passport-jwt, @types/supertest, typescript, typescript, eslint-plugin-prettier, @types/passport-jwt (+1 more)
|
||||
### Community 143 - "AuthService"
|
||||
Cohesion: 0.19
|
||||
Nodes (3): AuthService, Injectable, normalizeMobile()
|
||||
|
||||
### Community 144 - "Baseline Command Plan & Reconciled Command History"
|
||||
Cohesion: 0.29
|
||||
@ -1006,9 +997,9 @@ 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 174 - "ZibalCallbackQueryDto"
|
||||
Cohesion: 0.40
|
||||
Nodes (4): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto
|
||||
### Community 174 - ".handleZibalCallback"
|
||||
Cohesion: 0.24
|
||||
Nodes (8): ApiPropertyOptional, IsOptional, IsString, ZibalCallbackQueryDto, Query, Res, Headers, Ip
|
||||
|
||||
### Community 180 - "graphify reference: add a URL and watch a folder"
|
||||
Cohesion: 0.50
|
||||
@ -1054,10 +1045,6 @@ Nodes (3): ADR-AUTH-001: Admin Panel Authentication Architecture & Token Managem
|
||||
Cohesion: 0.29
|
||||
Nodes (6): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
|
||||
|
||||
### Community 214 - "CreatePetDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString
|
||||
|
||||
### Community 215 - "CreateReminderDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): CreateReminderDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
|
||||
@ -1066,29 +1053,49 @@ Nodes (6): CreateReminderDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOp
|
||||
Cohesion: 0.67
|
||||
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
|
||||
|
||||
### Community 232 - "Body"
|
||||
Cohesion: 0.24
|
||||
Nodes (3): Body, Post, CouponInput
|
||||
|
||||
### Community 238 - "RegisterDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
|
||||
|
||||
### Community 241 - "AdminLoginDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength
|
||||
|
||||
### Community 243 - "app.e2e-spec.js"
|
||||
Cohesion: 0.50
|
||||
Nodes (3): app_module_1, supertest_1, testing_1
|
||||
|
||||
### Community 305 - "RouteErrorBoundary"
|
||||
Cohesion: 0.22
|
||||
Nodes (3): Props, RouteErrorBoundary, State
|
||||
|
||||
### Community 310 - "admin.module.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (9): AdminModule, Module, BlogsService, Injectable, MediaService, Injectable, SslCertInfo, Injectable (+1 more)
|
||||
|
||||
## Knowledge Gaps
|
||||
- **1252 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1247 more)
|
||||
- **1266 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1261 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **119 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **101 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 `BannersService`, `CmsController`, `B2BService`, `CreateReviewDto`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `wholesale.controller.ts`, `JwtAuthGuard`?**
|
||||
_High betweenness centrality (0.055) - this node is a cross-community bridge._
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `OrdersController`, `BlogsController`, `UsersService`, `WikiController`, `HomeController`, `PetsController`, `ProductsService`, `auth.service.ts`?**
|
||||
_High betweenness centrality (0.042) - this node is a cross-community bridge._
|
||||
- **Why does `PrismaService` connect `PrismaService` to `CmsController`, `app.module.ts`, `CreateReviewDto`, `tickets.controller.ts`, `admin.module.ts`, `payment.service.ts`, `DoctorsService`, `pets/pets.controller.ts`, `ProductsService`, `CreateVideoDto`, `auth.service.ts`, `wholesale.controller.ts`, `ZibalService`, `CategoriesController`, `B2BService`, `UsersService`, `IngredientsService`, `RedisService`, `MediaController`, `PetsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PetsController`, `PaginationDto`, `BlogsController`, `SettingsService`, `BannersService`, `seo.module.ts`, `admin.service.ts`, `HomeController`, `zibal.service.ts`, `OrdersService`?**
|
||||
_High betweenness centrality (0.027) - this node is a cross-community bridge._
|
||||
- **Why does `Roles()` connect `Roles` to `BannersService`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `WholesaleApplyDto`, `JwtAuthGuard`?**
|
||||
_High betweenness centrality (0.052) - this node is a cross-community bridge._
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `OrdersService`, `BlogsController`, `UsersController`, `AuthController`, `WikiController`, `HomeController`, `PetsController`, `ProductsService`?**
|
||||
_High betweenness centrality (0.046) - this node is a cross-community bridge._
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CategoriesController`, `CmsController`, `reviews.controller.ts`, `tickets.controller.ts`, `admin.service.ts`, `users.service.ts`, `PrismaService`, `pets/pets.controller.ts`, `ProductsService`, `auth.service.ts`, `admin.module.ts`, `PetsController`, `PaginationDto`?**
|
||||
_High betweenness centrality (0.024) - this node is a cross-community bridge._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1252 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `OrdersController` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.14130434782608695 - nodes in this community are weakly interconnected._
|
||||
_1266 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `OrdersService` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.07171717171717172 - nodes in this community are weakly interconnected._
|
||||
- **Should `productService.ts` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.05888376856118792 - nodes in this community are weakly interconnected._
|
||||
- **Should `CmsController` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.08823529411764706 - nodes in this community are weakly interconnected._
|
||||
_Cohesion score 0.0899854862119013 - 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-08-18)
|
||||
|
||||
## Corpus Check
|
||||
- 521 files · ~741,110 words
|
||||
- 521 files · ~742,721 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 3689 nodes · 6248 edges · 303 communities (202 shown, 101 thin omitted)
|
||||
- 3690 nodes · 6249 edges · 294 communities (196 shown, 98 thin omitted)
|
||||
- Extraction: 96% EXTRACTED · 4% INFERRED · 0% AMBIGUOUS · INFERRED: 230 edges (avg confidence: 0.79)
|
||||
- Token cost: 0 input · 0 output
|
||||
|
||||
## Graph Freshness
|
||||
- Built from commit: `6362750d`
|
||||
- Built from commit: `47437883`
|
||||
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
|
||||
- Run `graphify update .` after code changes (no API cost).
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
- tickets.controller.ts
|
||||
- UserDashboard.tsx
|
||||
- MediaSelector.tsx
|
||||
- ReportsController
|
||||
- SettingsController
|
||||
- PetProfile.tsx
|
||||
- DoctorsService
|
||||
- useSettingsStore
|
||||
@ -53,16 +53,16 @@
|
||||
- B2BService
|
||||
- What You Must Do When Invoked
|
||||
- userStore.ts
|
||||
- UsersController
|
||||
- UsersService
|
||||
- What You Must Do When Invoked
|
||||
- SslController
|
||||
- PodcastPlayerModal.tsx
|
||||
- IngredientsService
|
||||
- RedisService
|
||||
- MetricsController
|
||||
- MediaController
|
||||
- Pagination.tsx
|
||||
- SmsService
|
||||
- PetsService
|
||||
- orders.service.ts
|
||||
- PrescriptionsService
|
||||
- SmartAdvisorService
|
||||
- TestimonialsService
|
||||
@ -86,7 +86,7 @@
|
||||
- Operational Rules & Boundaries
|
||||
- WikiController
|
||||
- ApiOperation
|
||||
- .update
|
||||
- PetsController
|
||||
- seo.module.ts
|
||||
- admin.service.ts
|
||||
- 🏢 AI Software Agency — Master Orchestration Protocol v3
|
||||
@ -119,15 +119,14 @@
|
||||
- UITexts.tsx
|
||||
- BlogsController
|
||||
- ProductDto
|
||||
- AuthController
|
||||
- WikiService
|
||||
- 1. Summary of Integrity Repairs Performed
|
||||
- users.service.ts
|
||||
- @nestjs/cli
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- Operational Rules & Boundaries
|
||||
- AppService
|
||||
- SmsLogQueryDto
|
||||
- PetsController
|
||||
- Vazirmatn Changelog
|
||||
- Vazirmatn Font فونت وزیرمتن
|
||||
- Operational Rules & Boundaries
|
||||
@ -144,7 +143,6 @@
|
||||
- Role & Core Objective
|
||||
- orchestrate.py
|
||||
- backend/package.json
|
||||
- auth.module.ts
|
||||
- graphify reference: extra exports and benchmark
|
||||
- Phase 2 Final Quality Gate Summary Report
|
||||
- Task Modifications Log
|
||||
@ -157,8 +155,7 @@
|
||||
- System Discovery
|
||||
- Product Requirement Document (PRD)
|
||||
- WikiController
|
||||
- eslint-plugin-prettier
|
||||
- AuthService
|
||||
- RedisService
|
||||
- Baseline Command Plan & Reconciled Command History
|
||||
- SmsSettingsPage.tsx
|
||||
- ErrorPages.tsx
|
||||
@ -227,10 +224,7 @@
|
||||
- sync_honest_manifest.js
|
||||
- sync_manifest.js
|
||||
- @types/multer
|
||||
- CreateHealthLogDto
|
||||
- @testing-library/jest-dom
|
||||
- UsersService
|
||||
- CreateReminderDto
|
||||
- FormField.tsx
|
||||
- Input.tsx
|
||||
- Textarea.tsx
|
||||
@ -247,15 +241,12 @@
|
||||
- eslint-plugin-react-refresh
|
||||
- @tailwindcss/postcss
|
||||
- typescript
|
||||
- Body
|
||||
- AdminService
|
||||
- @testing-library/react
|
||||
- @types/react
|
||||
- typescript
|
||||
- vitest
|
||||
- RegisterDto
|
||||
- AdminService
|
||||
- ts-loader
|
||||
- AdminLoginDto
|
||||
- @types/bcrypt
|
||||
- app.e2e-spec.js
|
||||
- blog.entity.ts
|
||||
@ -335,7 +326,7 @@
|
||||
- **Rastikerdar Font Ecosystem** — frontend_application_public_fonts_shabnam_font_v5_0_1_readme, frontend_application_public_fonts_vazirmatn_v33_003_readme, vazir_font [EXTRACTED 0.95]
|
||||
- **Canina Deployment Stack** — scripts_compose_prod, scripts_compose_stage [EXTRACTED 1.00]
|
||||
|
||||
## Communities (303 total, 101 thin omitted)
|
||||
## Communities (294 total, 98 thin omitted)
|
||||
|
||||
### Community 0 - "OrdersService"
|
||||
Cohesion: 0.07
|
||||
@ -369,9 +360,9 @@ Nodes (28): VerifyContent(), AddressModal(), AddressModalProps, BackButton(), Ba
|
||||
Cohesion: 0.07
|
||||
Nodes (27): ConfirmModal(), ConfirmModalProps, getFileType(), Media, MediaSelector(), MediaSelectorProps, BlogPost, Category (+19 more)
|
||||
|
||||
### Community 8 - "ReportsController"
|
||||
Cohesion: 0.17
|
||||
Nodes (9): ReportsController, ApiBearerAuth, ApiOperation, ApiTags, Controller, Get, UseGuards, ReportsService (+1 more)
|
||||
### Community 8 - "SettingsController"
|
||||
Cohesion: 0.21
|
||||
Nodes (6): SettingsController, ApiOkResponse, ApiTags, Controller, Get, Query
|
||||
|
||||
### Community 9 - "PetProfile.tsx"
|
||||
Cohesion: 0.14
|
||||
@ -390,12 +381,12 @@ Cohesion: 0.09
|
||||
Nodes (16): App(), HeroBanner, VetTestimonial, ContactInfoItem, ContactSubmission, CategoryDist, DashboardData, Ticket (+8 more)
|
||||
|
||||
### Community 13 - "PrismaService"
|
||||
Cohesion: 0.07
|
||||
Nodes (17): BlogQuery, WikiQuery, B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery (+9 more)
|
||||
Cohesion: 0.08
|
||||
Nodes (15): B2BWholesaleOrderItem, MeliPayamakPattern, MeliPayamakResponse, SendPatternSmsOptions, SmsConfig, SmsLogQuery, CreateContactSubmissionDto, UpdateContactInfoItemDto (+7 more)
|
||||
|
||||
### Community 14 - "pets/pets.controller.ts"
|
||||
Cohesion: 0.16
|
||||
Nodes (13): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+5 more)
|
||||
Cohesion: 0.13
|
||||
Nodes (15): CreatePetDto, ApiProperty, ApiPropertyOptional, IsArray, IsNotEmpty, IsNumber, IsOptional, IsString (+7 more)
|
||||
|
||||
### Community 15 - "ProductsService"
|
||||
Cohesion: 0.09
|
||||
@ -414,16 +405,16 @@ Cohesion: 0.10
|
||||
Nodes (23): ProtectedRoute(), SEARCHABLE_PAGES, Topbar(), TopbarProps, Login(), B2BManager, SmartAdvisorManager, SystemSettingsPage (+15 more)
|
||||
|
||||
### Community 19 - "auth.service.ts"
|
||||
Cohesion: 0.11
|
||||
Nodes (19): AdminLoginInput, LoginInput, RegisterInput, LoginDto, ApiProperty, IsNotEmpty, IsString, MinLength (+11 more)
|
||||
Cohesion: 0.06
|
||||
Nodes (45): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+37 more)
|
||||
|
||||
### Community 20 - "BE-001"
|
||||
Cohesion: 0.06
|
||||
Nodes (32): Acceptance Criteria, Affected Application, Affected Files, Alternative Direction, BE-001, Category, Completion Statement, Confidence (+24 more)
|
||||
|
||||
### Community 21 - "Roles"
|
||||
Cohesion: 0.20
|
||||
Nodes (16): Roles(), SettingsController, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
Cohesion: 0.25
|
||||
Nodes (10): Roles(), ApiBearerAuth, ApiOperation, Body, Delete, Param, Patch, Post (+2 more)
|
||||
|
||||
### Community 22 - "FE-001"
|
||||
Cohesion: 0.06
|
||||
@ -458,11 +449,11 @@ Cohesion: 0.10
|
||||
Nodes (20): ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, WholesaleApplyDto, ApiBearerAuth, ApiOperation (+12 more)
|
||||
|
||||
### Community 30 - "app-audit-verification.e2e-spec.js"
|
||||
Cohesion: 0.08
|
||||
Nodes (20): CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable, ApiErrorResponse, ErrorDetailField (+12 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (22): AppModule, Module, CustomHttpExceptionFilter, Catch, PrismaExceptionFilter, Catch, DecimalInterceptor, Injectable (+14 more)
|
||||
|
||||
### Community 31 - "JwtAuthGuard"
|
||||
Cohesion: 0.19
|
||||
Cohesion: 0.21
|
||||
Nodes (7): JwtAuthGuard, Injectable, ROLES_KEY, RequestWithUser, RolesGuard, Injectable, UserReqPayload
|
||||
|
||||
### Community 32 - "ZibalService"
|
||||
@ -474,8 +465,8 @@ Cohesion: 0.07
|
||||
Nodes (25): اجرای بکاند, اجرای فرانتاند, اجرای پروژه در سرور با PM2, برای راهاندازی بکاند:, برای راهاندازی فرانتاند Next.js:, بیلد کردن پروژه (Building), ذخیره پروسهها تا پس از ریاستارت سرور قطع نشوند:, راهاندازی و انتشار سیستم (Setup & Deployment) (+17 more)
|
||||
|
||||
### Community 34 - "CategoriesController"
|
||||
Cohesion: 0.09
|
||||
Nodes (17): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+9 more)
|
||||
Cohesion: 0.10
|
||||
Nodes (14): CategoriesController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete (+6 more)
|
||||
|
||||
### Community 35 - "B2BService"
|
||||
Cohesion: 0.14
|
||||
@ -489,9 +480,9 @@ Nodes (26): For /graphify add and --watch, For /graphify query, For the commit h
|
||||
Cohesion: 0.09
|
||||
Nodes (32): ClientLayout(), ArchiveProductCard(), AuthModal(), AuthModalProps, extractOtpFromText(), B2BPortal(), CartDrawer(), CheckoutPage() (+24 more)
|
||||
|
||||
### Community 38 - "UsersController"
|
||||
Cohesion: 0.20
|
||||
Nodes (16): ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+8 more)
|
||||
### Community 38 - "UsersService"
|
||||
Cohesion: 0.06
|
||||
Nodes (41): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+33 more)
|
||||
|
||||
### Community 39 - "What You Must Do When Invoked"
|
||||
Cohesion: 0.07
|
||||
@ -509,9 +500,9 @@ Nodes (3): PLAYBACK_RATES, PodcastPlayerModal(), PodcastPlayerModalProps
|
||||
Cohesion: 0.13
|
||||
Nodes (14): IngredientsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 43 - "RedisService"
|
||||
Cohesion: 0.08
|
||||
Nodes (12): ApiExcludeController, AppModule, Module, MetricsController, Controller, Get, Res, RedisModule (+4 more)
|
||||
### Community 43 - "MetricsController"
|
||||
Cohesion: 0.29
|
||||
Nodes (5): ApiExcludeController, MetricsController, Controller, Get, Res
|
||||
|
||||
### Community 44 - "MediaController"
|
||||
Cohesion: 0.11
|
||||
@ -521,6 +512,10 @@ Nodes (14): MediaController, ApiBearerAuth, ApiOperation, ApiTags, Body, Control
|
||||
Cohesion: 0.13
|
||||
Nodes (11): Pagination(), PaginationProps, Pet, GatewayHealth, Stats, Transaction, ProductItem, WikiTerm (+3 more)
|
||||
|
||||
### Community 47 - "orders.service.ts"
|
||||
Cohesion: 0.24
|
||||
Nodes (6): IsNotEmpty, IsNumber, IsString, ValidateCouponDto, OrdersModule, Module
|
||||
|
||||
### Community 48 - "PrescriptionsService"
|
||||
Cohesion: 0.14
|
||||
Nodes (14): PrescriptionsController, ApiBearerAuth, ApiOperation, ApiTags, Body, Controller, Get, Param (+6 more)
|
||||
@ -558,12 +553,12 @@ Cohesion: 0.08
|
||||
Nodes (23): compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, jsx, lib, module, moduleDetection, moduleResolution (+15 more)
|
||||
|
||||
### Community 57 - "PetsController"
|
||||
Cohesion: 0.10
|
||||
Nodes (14): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+6 more)
|
||||
Cohesion: 0.15
|
||||
Nodes (11): PetsController, ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Controller, Delete, Get (+3 more)
|
||||
|
||||
### Community 58 - "PaginationDto"
|
||||
Cohesion: 0.06
|
||||
Nodes (28): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+20 more)
|
||||
Cohesion: 0.07
|
||||
Nodes (22): BlogsModule, Module, BlogsService, Injectable, PaginationDto, SortOrder, ApiPropertyOptional, IsEnum (+14 more)
|
||||
|
||||
### Community 59 - "dependencies"
|
||||
Cohesion: 0.05
|
||||
@ -606,20 +601,20 @@ Cohesion: 0.13
|
||||
Nodes (14): ApiBearerAuth, ApiOperation, ApiQuery, ApiTags, Body, Controller, Delete, Get (+6 more)
|
||||
|
||||
### Community 70 - "ApiOperation"
|
||||
Cohesion: 0.14
|
||||
Cohesion: 0.26
|
||||
Nodes (8): ApiOperation, ApiQuery, Get, Query, AdminQueryDto, ApiPropertyOptional, IsOptional, IsString
|
||||
|
||||
### Community 71 - ".update"
|
||||
Cohesion: 0.24
|
||||
Nodes (11): ApiNotFoundResponse, ApiOkResponse, ApiOperation, Body, Delete, Get, Param, Patch (+3 more)
|
||||
### Community 71 - "PetsController"
|
||||
Cohesion: 0.08
|
||||
Nodes (32): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString, CreateReminderDto, ApiProperty (+24 more)
|
||||
|
||||
### Community 72 - "seo.module.ts"
|
||||
Cohesion: 0.16
|
||||
Nodes (10): SeoController, ApiOperation, ApiTags, Controller, Get, Param, SeoModule, Module (+2 more)
|
||||
|
||||
### Community 73 - "admin.service.ts"
|
||||
Cohesion: 0.16
|
||||
Nodes (13): CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsNumber (+5 more)
|
||||
Cohesion: 0.19
|
||||
Nodes (14): CouponInput, CouponTargetInput, PaginationQuery, CreateUserDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty (+6 more)
|
||||
|
||||
### Community 74 - "🏢 AI Software Agency — Master Orchestration Protocol v3"
|
||||
Cohesion: 0.11
|
||||
@ -718,8 +713,8 @@ Cohesion: 0.15
|
||||
Nodes (13): jest, collectCoverageFrom, coverageDirectory, moduleFileExtensions, rootDir, testEnvironment, testRegex, transform (+5 more)
|
||||
|
||||
### Community 98 - "AdminController"
|
||||
Cohesion: 0.13
|
||||
Nodes (8): AdminController, ApiBearerAuth, ApiTags, Controller, Delete, Param, Put, UseGuards
|
||||
Cohesion: 0.11
|
||||
Nodes (9): AdminController, ApiBearerAuth, ApiTags, Body, Controller, Delete, Param, Put (+1 more)
|
||||
|
||||
### Community 99 - "Comprehensive Change Log"
|
||||
Cohesion: 0.15
|
||||
@ -741,18 +736,14 @@ Nodes (9): BlogsController, ApiNotFoundResponse, ApiOkResponse, ApiOperation, Ap
|
||||
Cohesion: 0.22
|
||||
Nodes (7): ProductDto, ApiPropertyOptional, IsArray, IsBoolean, IsNumber, IsOptional, IsString
|
||||
|
||||
### Community 104 - "AuthController"
|
||||
Cohesion: 0.27
|
||||
Nodes (12): AuthController, ApiBadRequestResponse, ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags, Body, Controller (+4 more)
|
||||
### Community 104 - "WikiService"
|
||||
Cohesion: 0.22
|
||||
Nodes (3): Injectable, WikiQuery, WikiService
|
||||
|
||||
### Community 105 - "1. Summary of Integrity Repairs Performed"
|
||||
Cohesion: 0.17
|
||||
Nodes (11): 1.1 Authoritative Source File Inventory Rebuilt, 1.2 Raw Finding Dispositions Reconciled, 1.3 Finding Identifier Normalization, 1.4 Rejected Finding Cleanup, 1. Summary of Integrity Repairs Performed, 2. Final Verified Finding Metrics, 3. Reference and Compiler Integrity Results, 4. Quality Gate Conclusion (+3 more)
|
||||
|
||||
### Community 106 - "users.service.ts"
|
||||
Cohesion: 0.13
|
||||
Nodes (14): AddressDto, ApiProperty, ApiPropertyOptional, IsBoolean, IsNotEmpty, IsOptional, IsString, ApiPropertyOptional (+6 more)
|
||||
|
||||
### Community 107 - "Operational Rules & Boundaries"
|
||||
Cohesion: 0.18
|
||||
Nodes (10): 1. Detect Tech Stack First (Universal), 2. Explicit Scoring Methodology (Universal), 3. Code Coverage Ratio Rule, 4. Deep Directory Scanning, 5. Forbidden Actions, Expected JSON Output Schema, Operational Rules & Boundaries, Required Output Artifacts (What files to write/update) (+2 more)
|
||||
@ -773,10 +764,6 @@ Nodes (5): AppController, Controller, Get, AppService, Injectable
|
||||
Cohesion: 0.25
|
||||
Nodes (7): SmsLogQueryDto, ApiPropertyOptional, IsIn, IsNumber, IsOptional, IsString, Type
|
||||
|
||||
### Community 112 - "PetsController"
|
||||
Cohesion: 0.18
|
||||
Nodes (9): PetsController, ApiBadRequestResponse, ApiBearerAuth, ApiCreatedResponse, ApiTags, Controller, UploadedFile, UseGuards (+1 more)
|
||||
|
||||
### Community 113 - "Vazirmatn Changelog"
|
||||
Cohesion: 0.18
|
||||
Nodes (10): 32.0.0, 32.1, 32.101, 32.102, 33.000, 33.001, 33.002, 33.003 (+2 more)
|
||||
@ -803,7 +790,7 @@ Nodes (9): Compile and run the project, Deployment, Description, License, Projec
|
||||
|
||||
### Community 119 - "devDependencies"
|
||||
Cohesion: 0.09
|
||||
Nodes (23): devDependencies, eslint, @eslint/js, jest, @nestjs/cli, @nestjs/schematics, @nestjs/testing, source-map-support (+15 more)
|
||||
Nodes (23): devDependencies, eslint, @eslint/js, eslint-plugin-prettier, jest, @nestjs/schematics, @nestjs/testing, source-map-support (+15 more)
|
||||
|
||||
### Community 120 - "Repository Map"
|
||||
Cohesion: 0.20
|
||||
@ -841,10 +828,6 @@ Nodes (8): cmd_next_task(), cmd_progress(), cmd_reset(), cmd_status(), cmd_unblo
|
||||
Cohesion: 0.22
|
||||
Nodes (8): author, description, license, name, prisma, seed, private, version
|
||||
|
||||
### Community 129 - "auth.module.ts"
|
||||
Cohesion: 0.17
|
||||
Nodes (10): DEFAULT_JWT_REFRESH_SECRET, DEFAULT_JWT_SECRET, getJwtSecret(), AuthModule, Module, JwtPayload, JwtStrategy, Injectable (+2 more)
|
||||
|
||||
### Community 130 - "graphify reference: extra exports and benchmark"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000)
|
||||
@ -893,9 +876,9 @@ Nodes (6): 1. Executive Vision, 2. Target Audience, 3. Functional Requirements,
|
||||
Cohesion: 0.21
|
||||
Nodes (9): ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiTags, Controller, Get, Param, Query (+1 more)
|
||||
|
||||
### Community 143 - "AuthService"
|
||||
Cohesion: 0.19
|
||||
Nodes (3): AuthService, Injectable, normalizeMobile()
|
||||
### Community 143 - "RedisService"
|
||||
Cohesion: 0.10
|
||||
Nodes (6): AuthService, Injectable, normalizeMobile(), RedisService, Injectable, UserAddressInput
|
||||
|
||||
### Community 144 - "Baseline Command Plan & Reconciled Command History"
|
||||
Cohesion: 0.29
|
||||
@ -1041,29 +1024,13 @@ Nodes (3): COMPOSE_DOCKER_CLI_BUILD, DOCKER_BUILDKIT, deploy.sh script
|
||||
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 212 - "CreateHealthLogDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): CreateHealthLogDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
|
||||
|
||||
### Community 215 - "CreateReminderDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): CreateReminderDto, ApiProperty, ApiPropertyOptional, IsNotEmpty, IsOptional, IsString
|
||||
|
||||
### Community 223 - "Shabnam Font README"
|
||||
Cohesion: 0.67
|
||||
Nodes (3): Shabnam Font README, Shabnam Font Sample, Vazir Font
|
||||
|
||||
### Community 232 - "Body"
|
||||
Cohesion: 0.24
|
||||
Nodes (3): Body, Post, CouponInput
|
||||
|
||||
### Community 238 - "RegisterDto"
|
||||
Cohesion: 0.22
|
||||
Nodes (8): RegisterDto, ApiProperty, ApiPropertyOptional, IsEmail, IsNotEmpty, IsOptional, IsString, MinLength
|
||||
|
||||
### Community 241 - "AdminLoginDto"
|
||||
Cohesion: 0.29
|
||||
Nodes (6): AdminLoginDto, ApiProperty, IsEmail, IsNotEmpty, IsString, MinLength
|
||||
### Community 232 - "AdminService"
|
||||
Cohesion: 0.13
|
||||
Nodes (3): Post, AdminService, Injectable
|
||||
|
||||
### Community 243 - "app.e2e-spec.js"
|
||||
Cohesion: 0.50
|
||||
@ -1074,22 +1041,22 @@ Cohesion: 0.22
|
||||
Nodes (3): Props, RouteErrorBoundary, State
|
||||
|
||||
### Community 310 - "admin.module.ts"
|
||||
Cohesion: 0.09
|
||||
Nodes (9): AdminModule, Module, BlogsService, Injectable, MediaService, Injectable, SslCertInfo, Injectable (+1 more)
|
||||
Cohesion: 0.05
|
||||
Nodes (26): AdminModule, Module, BlogQuery, BlogsService, Injectable, CategoriesService, CategoryQuery, Injectable (+18 more)
|
||||
|
||||
## Knowledge Gaps
|
||||
- **1266 isolated node(s):** `$schema`, `collection`, `sourceRoot`, `deleteOutDir`, `name` (+1261 more)
|
||||
These have ≤1 connection - possible missing edges or undocumented components.
|
||||
- **101 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
|
||||
- **98 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 `BannersService`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `WholesaleApplyDto`, `JwtAuthGuard`?**
|
||||
- **Why does `Roles()` connect `Roles` to `BannersService`, `CmsController`, `B2BService`, `reviews.controller.ts`, `tickets.controller.ts`, `SslController`, `SettingsController`, `IngredientsService`, `ProductsService`, `PrescriptionsService`, `SmartAdvisorService`, `TestimonialsService`, `ContactService`, `PaymentController`, `WholesaleApplyDto`, `JwtAuthGuard`?**
|
||||
_High betweenness centrality (0.052) - this node is a cross-community bridge._
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `OrdersService`, `BlogsController`, `UsersController`, `AuthController`, `WikiController`, `HomeController`, `PetsController`, `ProductsService`?**
|
||||
- **Why does `ApiResponse` connect `src/services/api.ts` to `OrdersService`, `BlogsController`, `PetsController`, `UsersService`, `WikiController`, `HomeController`, `ProductsService`, `auth.service.ts`?**
|
||||
_High betweenness centrality (0.046) - this node is a cross-community bridge._
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CategoriesController`, `CmsController`, `reviews.controller.ts`, `tickets.controller.ts`, `admin.service.ts`, `users.service.ts`, `PrismaService`, `pets/pets.controller.ts`, `ProductsService`, `auth.service.ts`, `admin.module.ts`, `PetsController`, `PaginationDto`?**
|
||||
- **Why does `JwtAuthGuard` connect `JwtAuthGuard` to `CmsController`, `reviews.controller.ts`, `tickets.controller.ts`, `UsersService`, `WikiService`, `admin.service.ts`, `PrismaService`, `pets/pets.controller.ts`, `orders.service.ts`, `ProductsService`, `auth.service.ts`, `admin.module.ts`, `PaginationDto`?**
|
||||
_High betweenness centrality (0.024) - this node is a cross-community bridge._
|
||||
- **What connects `$schema`, `collection`, `sourceRoot` to the rest of the system?**
|
||||
_1266 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
|
||||
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