TorbatYar/frontend/modules/commercial/admin/resources.ts

344 lines
8.9 KiB
TypeScript

/**
* Admin Commercial bindings contain transport coordinates only.
* All user-facing copy comes from the universal Presentation Dictionary.
*/
import {
getRegistryPresentation,
normalizeRegistryKind,
type PresentationRegistryKind,
type RegistryPresentation,
} from "../presentation";
export type CommercialAdminResourceKey = PresentationRegistryKind;
export interface CommercialAdminResourceDef {
key: CommercialAdminResourceKey;
presentation: RegistryPresentation;
listPath: string;
createPath: string;
codeField: string;
nameField: string;
envelopeKeys: string[];
requiresTenant?: boolean;
readOnly?: boolean;
group:
| "catalog"
| "commerce"
| "governance"
| "ops"
| "localization"
| "tenant";
}
type ResourceBinding = Omit<
CommercialAdminResourceDef,
"presentation" | "createPath"
> & {
createPath?: string;
};
function defineResource(binding: ResourceBinding): CommercialAdminResourceDef {
return {
...binding,
presentation: getRegistryPresentation(binding.key),
createPath: binding.createPath || binding.listPath,
};
}
const RESOURCE_BINDINGS: ResourceBinding[] = [
{
key: "products",
listPath: "/api/v1/commercial/products",
codeField: "product_code",
nameField: "display_name",
envelopeKeys: ["items", "products"],
group: "catalog",
},
{
key: "bundles",
listPath: "/api/v1/commercial/bundles",
codeField: "bundle_code",
nameField: "display_name",
envelopeKeys: ["items", "bundles"],
group: "catalog",
},
{
key: "pricing",
listPath: "/api/v1/commercial/pricing",
codeField: "pricing_item_code",
nameField: "display_name",
envelopeKeys: ["items", "pricing"],
group: "commerce",
},
{
key: "plans",
listPath: "/api/v1/commercial/plans",
codeField: "plan_code",
nameField: "display_name",
envelopeKeys: ["items", "plans"],
group: "commerce",
},
{
key: "trial-rules",
listPath: "/api/v1/commercial/trial-rules",
codeField: "trial_rule_code",
nameField: "display_name",
envelopeKeys: ["items", "trial_rules"],
group: "commerce",
},
{
key: "subscription-templates",
listPath: "/api/v1/commercial/subscription-templates",
codeField: "template_code",
nameField: "display_name",
envelopeKeys: ["items", "templates", "subscription_templates"],
group: "commerce",
},
{
key: "usage-plans",
listPath: "/api/v1/commercial/usage-plans",
codeField: "usage_plan_code",
nameField: "display_name",
envelopeKeys: ["items", "usage_plans"],
group: "commerce",
},
{
key: "capabilities",
listPath: "/api/v1/commercial/capabilities",
codeField: "capability_code",
nameField: "display_name",
envelopeKeys: ["items", "capabilities"],
group: "catalog",
},
{
key: "business-types",
listPath: "/api/v1/commercial/business-types",
codeField: "business_type_code",
nameField: "display_name",
envelopeKeys: ["items", "business_types"],
group: "catalog",
},
{
key: "assessment-schemas",
listPath: "/api/v1/commercial/assessment-schemas",
codeField: "assessment_schema_code",
nameField: "display_name",
envelopeKeys: ["items", "schemas", "assessment_schemas"],
group: "governance",
},
{
key: "recommendation-rules",
listPath: "/api/v1/commercial/recommendation-rules",
codeField: "rule_code",
nameField: "display_name",
envelopeKeys: ["items", "rules"],
group: "governance",
},
{
key: "policies",
listPath: "/api/v1/commercial/policies",
codeField: "policy_code",
nameField: "display_name",
envelopeKeys: ["items", "policies"],
group: "governance",
},
{
key: "extensions",
listPath: "/api/v1/commercial/extensions",
codeField: "extension_code",
nameField: "display_name",
envelopeKeys: ["items", "extensions"],
group: "catalog",
},
{
key: "assets",
listPath: "/api/v1/commercial/assets",
codeField: "asset_code",
nameField: "display_name",
envelopeKeys: ["items", "assets"],
group: "catalog",
},
{
key: "automation-packs",
listPath: "/api/v1/commercial/automation-packs",
codeField: "automation_pack_code",
nameField: "display_name",
envelopeKeys: ["items", "automation_packs", "packs"],
group: "catalog",
},
{
key: "metadata",
listPath: "/api/v1/commercial/metadata",
codeField: "registry_object_id",
nameField: "target_kind",
envelopeKeys: ["items", "bags", "metadata"],
group: "governance",
},
{
key: "announcements",
listPath: "/api/v1/commercial/announcements",
codeField: "announcement_code",
nameField: "title",
envelopeKeys: ["items", "announcements"],
group: "ops",
},
{
key: "notifications",
listPath: "/api/v1/commercial/notifications",
codeField: "notification_code",
nameField: "title",
envelopeKeys: ["items", "notifications"],
group: "ops",
},
{
key: "promotions",
listPath: "/api/v1/commercial/promotions",
codeField: "promotion_code",
nameField: "display_name",
envelopeKeys: ["items", "promotions"],
group: "commerce",
},
{
key: "coupons",
listPath: "/api/v1/commercial/coupons",
codeField: "coupon_code",
nameField: "display_name",
envelopeKeys: ["items", "coupons"],
group: "commerce",
},
{
key: "discount-campaigns",
listPath: "/api/v1/commercial/discount-campaigns",
codeField: "campaign_code",
nameField: "display_name",
envelopeKeys: ["items", "campaigns", "discount_campaigns"],
group: "commerce",
},
{
key: "regional-pricing",
listPath: "/api/v1/commercial/regional-pricing",
codeField: "regional_pricing_code",
nameField: "display_name",
envelopeKeys: ["items", "regional_pricing"],
group: "commerce",
},
{
key: "taxes",
listPath: "/api/v1/commercial/taxes",
codeField: "tax_class_code",
nameField: "display_name",
envelopeKeys: ["items", "taxes", "tax_classes"],
group: "commerce",
},
{
key: "currencies",
listPath: "/api/v1/commercial/currencies",
codeField: "currency_code",
nameField: "display_name",
envelopeKeys: ["items", "currencies"],
group: "localization",
},
{
key: "languages",
listPath: "/api/v1/commercial/languages",
codeField: "language_code",
nameField: "display_name",
envelopeKeys: ["items", "languages"],
group: "localization",
},
{
key: "marketplace-visibility",
listPath: "/api/v1/commercial/marketplace-visibility",
codeField: "visibility_code",
nameField: "display_name",
envelopeKeys: ["items", "visibility"],
group: "ops",
},
{
key: "release-channels",
listPath: "/api/v1/commercial/release-channels",
codeField: "channel_code",
nameField: "display_name",
envelopeKeys: ["items", "channels"],
group: "ops",
},
{
key: "support-levels",
listPath: "/api/v1/commercial/support-levels",
codeField: "support_level_code",
nameField: "display_name",
envelopeKeys: ["items", "support_levels"],
group: "ops",
},
{
key: "subscriptions",
listPath: "/api/v1/commercial/subscriptions",
codeField: "id",
nameField: "tenant_id",
envelopeKeys: ["items", "subscriptions"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
{
key: "licenses",
listPath: "/api/v1/commercial/licenses",
codeField: "license_code",
nameField: "display_name",
envelopeKeys: ["items", "licenses"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
{
key: "entitlements",
listPath: "/api/v1/commercial/entitlements",
codeField: "entitlement_code",
nameField: "display_name",
envelopeKeys: ["items", "entitlements"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
{
key: "activation-logs",
listPath: "/api/v1/commercial/activation-logs",
codeField: "correlation_id",
nameField: "tenant_id",
envelopeKeys: ["items", "pipelines", "activation_logs"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
{
key: "invoices",
listPath: "/api/v1/commercial/invoices",
codeField: "invoice_code",
nameField: "display_name",
envelopeKeys: ["items", "invoices"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
{
key: "transactions",
listPath: "/api/v1/commercial/transactions",
codeField: "transaction_code",
nameField: "display_name",
envelopeKeys: ["items", "transactions"],
group: "tenant",
requiresTenant: true,
readOnly: true,
},
];
export const COMMERCIAL_ADMIN_RESOURCES: CommercialAdminResourceDef[] =
RESOURCE_BINDINGS.map(defineResource);
export function getCommercialAdminResource(
key: string
): CommercialAdminResourceDef | undefined {
const normalized = normalizeRegistryKind(key);
return COMMERCIAL_ADMIN_RESOURCES.find((resource) => resource.key === normalized);
}