/** * Admin commercial registry surface map — API path bindings only. * Not a product/plan/bundle catalog: rows always load from Core Commercial APIs. */ export type CommercialAdminResourceKey = | "products" | "bundles" | "pricing" | "plans" | "trial-rules" | "subscription-templates" | "capabilities" | "policies" | "extensions" | "assets" | "automation-packs" | "metadata" | "business-types" | "recommendation-rules" | "announcements" | "promotions" | "coupons" | "discount-campaigns" | "regional-pricing" | "taxes" | "currencies" | "languages" | "marketplace-visibility" | "release-channels" | "support-levels" | "subscriptions" | "licenses" | "entitlements" | "activation-logs" | "invoices" | "transactions"; export interface CommercialAdminResourceDef { key: CommercialAdminResourceKey; label: string; description: string; /** Core Commercial API collection path */ listPath: string; createPath: string; /** Item code/id field for display + PATCH/DELETE */ codeField: string; nameField: string; /** Envelope keys for list extraction */ envelopeKeys: string[]; group: | "catalog" | "commerce" | "governance" | "ops" | "localization" | "tenant"; } export const COMMERCIAL_ADMIN_RESOURCES: CommercialAdminResourceDef[] = [ { key: "products", label: "محصولات", description: "Product registry — visibility, default_route, launch_strategy", listPath: "/api/v1/commercial/products", createPath: "/api/v1/commercial/products", codeField: "product_code", nameField: "display_name", envelopeKeys: ["items", "products"], group: "catalog", }, { key: "bundles", label: "باندل‌ها", description: "Business bundles — pricing_refs only", listPath: "/api/v1/commercial/bundles", createPath: "/api/v1/commercial/bundles", codeField: "bundle_code", nameField: "display_name", envelopeKeys: ["items", "bundles"], group: "catalog", }, { key: "pricing", label: "قیمت‌گذاری", description: "Pricing catalog items", listPath: "/api/v1/commercial/pricing", createPath: "/api/v1/commercial/pricing", codeField: "pricing_item_code", nameField: "display_name", envelopeKeys: ["items", "pricing"], group: "commerce", }, { key: "plans", label: "پلن‌ها", description: "Subscription plans (commercial registry)", listPath: "/api/v1/commercial/plans", createPath: "/api/v1/commercial/plans", codeField: "plan_code", nameField: "display_name", envelopeKeys: ["items", "plans"], group: "commerce", }, { key: "trial-rules", label: "قوانین Trial", description: "Trial duration, limits, grace, auto-disable", listPath: "/api/v1/commercial/trial-rules", createPath: "/api/v1/commercial/trial-rules", codeField: "trial_rule_code", nameField: "display_name", envelopeKeys: ["items", "trial_rules"], group: "commerce", }, { key: "subscription-templates", label: "قالب اشتراک", description: "Subscription templates / renewals", listPath: "/api/v1/commercial/subscription-templates", createPath: "/api/v1/commercial/subscription-templates", codeField: "template_code", nameField: "display_name", envelopeKeys: ["items", "templates", "subscription_templates"], group: "commerce", }, { key: "capabilities", label: "قابلیت‌ها", description: "Capability registry", listPath: "/api/v1/commercial/capabilities", createPath: "/api/v1/commercial/capabilities", codeField: "capability_code", nameField: "display_name", envelopeKeys: ["items", "capabilities"], group: "catalog", }, { key: "policies", label: "سیاست‌ها", description: "Domain and commercial policies", listPath: "/api/v1/commercial/policies", createPath: "/api/v1/commercial/policies", codeField: "policy_code", nameField: "display_name", envelopeKeys: ["items", "policies"], group: "governance", }, { key: "extensions", label: "افزونه‌ها", description: "Extension registry", listPath: "/api/v1/commercial/extensions", createPath: "/api/v1/commercial/extensions", codeField: "extension_code", nameField: "display_name", envelopeKeys: ["items", "extensions"], group: "catalog", }, { key: "assets", label: "دارایی‌ها", description: "Asset registry", listPath: "/api/v1/commercial/assets", createPath: "/api/v1/commercial/assets", codeField: "asset_code", nameField: "display_name", envelopeKeys: ["items", "assets"], group: "catalog", }, { key: "automation-packs", label: "اتوماسیون", description: "Automation packs catalog", listPath: "/api/v1/commercial/automation-packs", createPath: "/api/v1/commercial/automation-packs", codeField: "automation_pack_code", nameField: "display_name", envelopeKeys: ["items", "automation_packs", "packs"], group: "catalog", }, { key: "metadata", label: "Metadata", description: "Unlimited metadata bags", listPath: "/api/v1/commercial/metadata", createPath: "/api/v1/commercial/metadata", codeField: "registry_object_id", nameField: "target_kind", envelopeKeys: ["items", "bags", "metadata"], group: "governance", }, { key: "business-types", label: "انواع کسب‌وکار", description: "Business type catalog", listPath: "/api/v1/commercial/business-types", createPath: "/api/v1/commercial/business-types", codeField: "business_type_code", nameField: "display_name", envelopeKeys: ["items", "business_types"], group: "catalog", }, { key: "recommendation-rules", label: "قوانین پیشنهاد", description: "Recommendation rules + simulator target", listPath: "/api/v1/commercial/recommendation-rules", createPath: "/api/v1/commercial/recommendation-rules", codeField: "rule_code", nameField: "display_name", envelopeKeys: ["items", "rules"], group: "governance", }, { key: "announcements", label: "اعلان‌های تجاری", description: "Commercial announcements", listPath: "/api/v1/commercial/announcements", createPath: "/api/v1/commercial/announcements", codeField: "announcement_code", nameField: "title", envelopeKeys: ["items", "announcements"], group: "ops", }, { key: "promotions", label: "پروموشن", description: "Promotions", listPath: "/api/v1/commercial/promotions", createPath: "/api/v1/commercial/promotions", codeField: "promotion_code", nameField: "display_name", envelopeKeys: ["items", "promotions"], group: "commerce", }, { key: "coupons", label: "کوپن", description: "Coupons", listPath: "/api/v1/commercial/coupons", createPath: "/api/v1/commercial/coupons", codeField: "coupon_code", nameField: "display_name", envelopeKeys: ["items", "coupons"], group: "commerce", }, { key: "discount-campaigns", label: "کمپین تخفیف", description: "Discount campaigns", listPath: "/api/v1/commercial/discount-campaigns", createPath: "/api/v1/commercial/discount-campaigns", codeField: "campaign_code", nameField: "display_name", envelopeKeys: ["items", "campaigns", "discount_campaigns"], group: "commerce", }, { key: "regional-pricing", label: "قیمت منطقه‌ای", description: "Regional pricing overlays", listPath: "/api/v1/commercial/regional-pricing", createPath: "/api/v1/commercial/regional-pricing", codeField: "regional_pricing_code", nameField: "display_name", envelopeKeys: ["items", "regional_pricing"], group: "commerce", }, { key: "taxes", label: "مالیات", description: "Tax classes", listPath: "/api/v1/commercial/taxes", createPath: "/api/v1/commercial/taxes", codeField: "tax_class_code", nameField: "display_name", envelopeKeys: ["items", "taxes"], group: "commerce", }, { key: "currencies", label: "ارزها", description: "Currency registry", listPath: "/api/v1/commercial/currencies", createPath: "/api/v1/commercial/currencies", codeField: "currency_code", nameField: "display_name", envelopeKeys: ["items", "currencies"], group: "localization", }, { key: "languages", label: "زبان‌ها", description: "Language registry", listPath: "/api/v1/commercial/languages", createPath: "/api/v1/commercial/languages", codeField: "language_code", nameField: "display_name", envelopeKeys: ["items", "languages"], group: "localization", }, { key: "marketplace-visibility", label: "بازار / Visibility", description: "Marketplace visibility flags", listPath: "/api/v1/commercial/marketplace-visibility", createPath: "/api/v1/commercial/marketplace-visibility", codeField: "visibility_code", nameField: "display_name", envelopeKeys: ["items", "visibility"], group: "ops", }, { key: "release-channels", label: "کانال انتشار", description: "Release channels", listPath: "/api/v1/commercial/release-channels", createPath: "/api/v1/commercial/release-channels", codeField: "channel_code", nameField: "display_name", envelopeKeys: ["items", "channels"], group: "ops", }, { key: "support-levels", label: "سطح پشتیبانی", description: "Support levels", listPath: "/api/v1/commercial/support-levels", createPath: "/api/v1/commercial/support-levels", codeField: "support_level_code", nameField: "display_name", envelopeKeys: ["items", "support_levels"], group: "ops", }, { key: "subscriptions", label: "اشتراک‌ها", description: "Tenant subscriptions", listPath: "/api/v1/commercial/subscriptions", createPath: "/api/v1/commercial/subscriptions", codeField: "id", nameField: "tenant_id", envelopeKeys: ["items", "subscriptions"], group: "tenant", }, { key: "licenses", label: "لایسنس‌ها", description: "Licenses", listPath: "/api/v1/commercial/licenses", createPath: "/api/v1/commercial/licenses", codeField: "license_code", nameField: "display_name", envelopeKeys: ["items", "licenses"], group: "tenant", }, { key: "entitlements", label: "Entitlements", description: "Entitlement projections", listPath: "/api/v1/commercial/entitlements", createPath: "/api/v1/commercial/entitlements", codeField: "entitlement_code", nameField: "display_name", envelopeKeys: ["items", "entitlements"], group: "tenant", }, { key: "activation-logs", label: "لاگ فعال‌سازی", description: "Activation pipelines", listPath: "/api/v1/commercial/activation-logs", createPath: "/api/v1/commercial/activation-logs", codeField: "correlation_id", nameField: "tenant_id", envelopeKeys: ["items", "pipelines", "activation_logs"], group: "tenant", }, { key: "invoices", label: "فاکتورها", description: "Commercial invoices (published read models)", listPath: "/api/v1/commercial/invoices", createPath: "/api/v1/commercial/invoices", codeField: "invoice_code", nameField: "display_name", envelopeKeys: ["items", "invoices"], group: "tenant", }, { key: "transactions", label: "تراکنش‌ها", description: "Payment history read models (no Payment edits)", listPath: "/api/v1/commercial/transactions", createPath: "/api/v1/commercial/transactions", codeField: "transaction_code", nameField: "display_name", envelopeKeys: ["items", "transactions"], group: "tenant", }, ]; export function getCommercialAdminResource( key: string ): CommercialAdminResourceDef | undefined { return COMMERCIAL_ADMIN_RESOURCES.find((r) => r.key === key); }