@api-client/core 0.18.24 → 0.18.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/modeling/DomainEntity.d.ts +6 -1
- package/build/src/modeling/DomainEntity.d.ts.map +1 -1
- package/build/src/modeling/DomainEntity.js +24 -5
- package/build/src/modeling/DomainEntity.js.map +1 -1
- package/build/src/modeling/Semantics.d.ts +254 -0
- package/build/src/modeling/Semantics.d.ts.map +1 -1
- package/build/src/modeling/Semantics.js +328 -0
- package/build/src/modeling/Semantics.js.map +1 -1
- package/build/src/modeling/definitions/Email.js +1 -1
- package/build/src/modeling/definitions/Email.js.map +1 -1
- package/build/src/modeling/definitions/Password.d.ts.map +1 -1
- package/build/src/modeling/definitions/Password.js +1 -3
- package/build/src/modeling/definitions/Password.js.map +1 -1
- package/build/src/modeling/helpers/Intelisense.d.ts +7 -7
- package/build/src/modeling/helpers/Intelisense.d.ts.map +1 -1
- package/build/src/modeling/helpers/Intelisense.js +24 -58
- package/build/src/modeling/helpers/Intelisense.js.map +1 -1
- package/build/src/modeling/templates/meta/blog-publishing-platform.json +1 -1
- package/build/src/modeling/templates/meta/financial-services-platform.json +1 -1
- package/build/src/modeling/templates/meta/index.d.ts +1 -1
- package/build/src/modeling/templates/meta/index.js +1 -1
- package/build/src/modeling/templates/meta/index.js.map +1 -1
- package/build/src/modeling/templates/meta/iot-smart-home-platform.json +1 -1
- package/build/src/modeling/templates/verticals/business-services/financial-services-domain.d.ts.map +1 -1
- package/build/src/modeling/templates/verticals/business-services/financial-services-domain.js +248 -63
- package/build/src/modeling/templates/verticals/business-services/financial-services-domain.js.map +1 -1
- package/build/src/modeling/templates/verticals/technology-media/blog-domain.js +5 -5
- package/build/src/modeling/templates/verticals/technology-media/blog-domain.js.map +1 -1
- package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.d.ts.map +1 -1
- package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.js +2 -0
- package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.js.map +1 -1
- package/build/src/modeling/validation/postgresql.d.ts.map +1 -1
- package/build/src/modeling/validation/postgresql.js +0 -1
- package/build/src/modeling/validation/postgresql.js.map +1 -1
- package/build/src/runtime/modeling/Semantics.d.ts +84 -0
- package/build/src/runtime/modeling/Semantics.d.ts.map +1 -0
- package/build/src/runtime/modeling/Semantics.js +124 -0
- package/build/src/runtime/modeling/Semantics.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/data/models/example-generator-api.json +8 -8
- package/package.json +1 -1
- package/src/modeling/DomainEntity.ts +27 -5
- package/src/modeling/Semantics.ts +493 -0
- package/src/modeling/definitions/Email.ts +1 -1
- package/src/modeling/definitions/Password.ts +1 -3
- package/src/modeling/helpers/Intelisense.ts +33 -65
- package/src/modeling/templates/meta/blog-publishing-platform.json +1 -1
- package/src/modeling/templates/meta/financial-services-platform.json +1 -1
- package/src/modeling/templates/meta/iot-smart-home-platform.json +1 -1
- package/src/modeling/templates/verticals/business-services/financial-services-domain.ts +285 -65
- package/src/modeling/templates/verticals/technology-media/blog-domain.ts +5 -5
- package/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.ts +2 -0
- package/src/modeling/validation/postgresql.ts +0 -1
- package/src/runtime/modeling/Semantics.ts +196 -0
- package/tests/unit/modeling/client_ip_address_semantic.spec.ts +71 -0
- package/tests/unit/modeling/definitions/password.spec.ts +0 -2
- package/tests/unit/modeling/domain_entity_parents.spec.ts +243 -0
- package/tests/unit/modeling/semantic_runtime.spec.ts +113 -0
- package/tests/unit/modeling/semantics.spec.ts +68 -0
package/build/src/modeling/templates/verticals/business-services/financial-services-domain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-services-domain.js","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/business-services/financial-services-domain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Financial Services Data Domain Example\n *\n * This file demonstrates how to create a comprehensive financial services data domain\n * using the API Client Core modeling system. It follows the business-first approach\n * and demonstrates proper use of namespaces, models, entities, properties,\n * associations, and semantic annotations.\n *\n * The example includes:\n * - Account Management with bank accounts, investment accounts, and credit cards\n * - Transaction Processing with payments, transfers, deposits, and withdrawals\n * - Customer Management with KYC, risk profiles, and customer segments\n * - Investment Portfolio with assets, positions, and performance tracking\n * - Compliance & Reporting with regulatory reporting and audit trails\n * - Fraud Detection with transaction monitoring and risk scoring\n *\n * @example\n * ```typescript\n * import { createFinancialServicesDomain } from './financial-services-domain.js'\n *\n * const domain = createFinancialServicesDomain()\n * console.log('Financial Services domain created with', domain.graph.nodeCount(), 'nodes')\n * ```\n */\n\nimport { DataDomain } from '../../../DataDomain.js'\nimport {\n addIdField,\n addNameField,\n addDescriptionField,\n addEmailField,\n addFirstNameField,\n addLastNameField,\n addPhoneField,\n addCustomStatusField,\n addCreatedAtField,\n addUpdatedAtField,\n addCurrencyAmountField,\n} from '../../../helpers/Intelisense.js'\nimport type { CreateTemplateOptions } from '../../types.js'\n\nfunction createDomain(): DataDomain {\n return new DataDomain({\n info: {\n name: 'Financial Services Platform',\n displayName: 'Financial Services Platform',\n description:\n 'A comprehensive financial services platform with account management, transaction processing, ' +\n 'customer management, investment portfolios, and compliance features',\n },\n })\n}\n\n/**\n * Creates a comprehensive financial services data domain following domain-driven design principles.\n *\n * This function demonstrates the proper hierarchy and organization for a financial services platform:\n * 1. Creates the root DataDomain for the financial services platform\n * 2. Organizes functionality into logical namespaces (Customer Management, Account Management, etc.)\n * 3. Groups related entities into models within each namespace\n * 4. Defines entities with proper semantic annotations for financial workflows\n * 5. Establishes associations with appropriate cardinality for customer-account relationships\n *\n * @returns A fully configured DataDomain with all financial services entities and relationships\n */\nexport default function createFinancialServicesDomain(options: CreateTemplateOptions = {}): DataDomain {\n // Ensure the root data domain\n const domain = options.domain ?? createDomain()\n\n //\n // 1. CUSTOMER MANAGEMENT NAMESPACE\n //\n const customerManagement = domain.addNamespace({\n info: {\n name: 'CustomerManagement',\n displayName: 'Customer Management',\n description: 'Customer profiles, KYC, risk assessment, and segmentation',\n },\n })\n\n // Customer Model\n const customerModel = customerManagement.addModel({\n info: {\n name: 'Customers',\n displayName: 'Customer Management',\n description: 'Customer profiles and information',\n },\n })\n\n // Customer Entity\n const customerEntity = customerModel.addEntity({\n info: {\n name: 'customer',\n displayName: 'Customer',\n description: 'Financial services customer with KYC and risk profile',\n },\n })\n\n addIdField(customerEntity, { displayName: 'Customer ID', description: 'Unique identifier for the customer' })\n\n addFirstNameField(customerEntity, { description: 'Customer first name' })\n addLastNameField(customerEntity, { description: 'Customer last name' })\n\n customerEntity.addProperty({\n info: { name: 'date_of_birth', displayName: 'Date of Birth', description: 'Customer date of birth' },\n type: 'date',\n required: true,\n })\n\n customerEntity.addProperty({\n info: { name: 'ssn', displayName: 'Social Security Number', description: 'Customer SSN for identification' },\n type: 'string',\n required: true,\n writeOnly: true, // Sensitive data - write only\n })\n\n addEmailField(customerEntity, { description: 'Customer email address' })\n addPhoneField(customerEntity, { description: 'Customer phone number' })\n\n customerEntity.addProperty({\n info: { name: 'address', displayName: 'Address', description: 'Customer residential address' },\n type: 'string',\n required: true,\n })\n\n customerEntity.addProperty({\n info: { name: 'city', displayName: 'City', description: 'Customer city' },\n type: 'string',\n required: true,\n })\n\n customerEntity.addProperty({\n info: { name: 'state', displayName: 'State', description: 'Customer state' },\n type: 'string',\n required: true,\n })\n\n customerEntity.addProperty({\n info: { name: 'zip_code', displayName: 'ZIP Code', description: 'Customer ZIP code' },\n type: 'string',\n required: true,\n })\n\n addCustomStatusField(customerEntity, ['active', 'inactive', 'suspended', 'pending_verification'], {\n displayName: 'Customer Status',\n description: 'Current status of the customer account',\n })\n\n customerEntity.addProperty({\n info: { name: 'customer_type', displayName: 'Customer Type', description: 'Type of customer account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['individual', 'business', 'trust', 'partnership'],\n },\n })\n\n addCreatedAtField(customerEntity, { description: 'When the customer account was created' })\n addUpdatedAtField(customerEntity, { description: 'When the customer account was last updated' })\n\n // KYC Entity\n const kycEntity = customerModel.addEntity({\n info: {\n name: 'kyc',\n displayName: 'KYC Record',\n description: 'Know Your Customer verification and documentation',\n },\n })\n\n addIdField(kycEntity, { displayName: 'KYC ID', description: 'Unique identifier for the KYC record' })\n\n addCustomStatusField(kycEntity, ['pending', 'verified', 'rejected', 'expired'], {\n displayName: 'KYC Status',\n description: 'Current status of KYC verification',\n })\n\n kycEntity.addProperty({\n info: { name: 'verification_date', displayName: 'Verification Date', description: 'Date when KYC was verified' },\n type: 'date',\n })\n\n kycEntity.addProperty({\n info: { name: 'document_type', displayName: 'Document Type', description: 'Type of identification document' },\n type: 'string',\n required: true,\n schema: {\n enum: ['passport', 'drivers_license', 'national_id', 'utility_bill', 'bank_statement'],\n },\n })\n\n kycEntity.addProperty({\n info: { name: 'document_number', displayName: 'Document Number', description: 'Document identification number' },\n type: 'string',\n required: true,\n })\n\n addCreatedAtField(kycEntity, { description: 'When the KYC record was created' })\n\n // KYC-Customer Association (One-to-One)\n kycEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Customer', description: 'Customer for this KYC record' },\n required: true,\n multiple: false,\n }\n )\n\n // Risk Profile Entity\n const riskProfileEntity = customerModel.addEntity({\n info: {\n name: 'risk_profile',\n displayName: 'Risk Profile',\n description: 'Customer risk assessment and scoring',\n },\n })\n\n addIdField(riskProfileEntity, {\n displayName: 'Risk Profile ID',\n description: 'Unique identifier for the risk profile',\n })\n\n riskProfileEntity.addProperty({\n info: { name: 'risk_score', displayName: 'Risk Score', description: 'Numerical risk score (1-100)' },\n type: 'number',\n required: true,\n schema: {\n minimum: 1,\n maximum: 100,\n },\n })\n\n addCustomStatusField(riskProfileEntity, ['low', 'medium', 'high', 'very_high'], {\n displayName: 'Risk Level',\n description: 'Risk level classification',\n })\n\n riskProfileEntity.addProperty({\n info: { name: 'assessment_date', displayName: 'Assessment Date', description: 'Date when risk was assessed' },\n type: 'date',\n required: true,\n })\n\n addDescriptionField(riskProfileEntity, { description: 'Risk assessment notes and factors' })\n\n addCreatedAtField(riskProfileEntity, { description: 'When the risk profile was created' })\n\n // RiskProfile-Customer Association (One-to-One)\n riskProfileEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Customer', description: 'Customer for this risk profile' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 2. ACCOUNT MANAGEMENT NAMESPACE\n //\n const accountManagement = domain.addNamespace({\n info: {\n name: 'AccountManagement',\n displayName: 'Account Management',\n description: 'Bank accounts, investment accounts, and credit cards',\n },\n })\n\n // Account Model\n const accountModel = accountManagement.addModel({\n info: {\n name: 'Accounts',\n displayName: 'Account Management',\n description: 'Financial accounts and products',\n },\n })\n\n // Bank Account Entity\n const bankAccountEntity = accountModel.addEntity({\n info: {\n name: 'bank_account',\n displayName: 'Bank Account',\n description: 'Checking and savings accounts',\n },\n })\n\n addIdField(bankAccountEntity, { displayName: 'Account ID', description: 'Unique identifier for the account' })\n\n bankAccountEntity.addProperty({\n info: { name: 'account_number', displayName: 'Account Number', description: 'Bank account number' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n bankAccountEntity.addProperty({\n info: { name: 'routing_number', displayName: 'Routing Number', description: 'Bank routing number' },\n type: 'string',\n required: true,\n })\n\n bankAccountEntity.addProperty({\n info: { name: 'account_type', displayName: 'Account Type', description: 'Type of bank account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['checking', 'savings', 'money_market', 'cd'],\n },\n })\n\n addCurrencyAmountField(bankAccountEntity, 'balance', 'Account Balance', {\n description: 'Current account balance',\n })\n\n addCurrencyAmountField(bankAccountEntity, 'available_balance', 'Available Balance', {\n description: 'Available balance for transactions',\n })\n\n addCustomStatusField(bankAccountEntity, ['active', 'inactive', 'frozen', 'closed'], {\n displayName: 'Account Status',\n description: 'Current status of the account',\n })\n\n addCreatedAtField(bankAccountEntity, { description: 'When the account was created' })\n addUpdatedAtField(bankAccountEntity, { description: 'When the account was last updated' })\n\n // BankAccount-Customer Association (Many-to-One)\n bankAccountEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Account Holder', description: 'Customer who owns this account' },\n required: true,\n multiple: false,\n }\n )\n\n // Investment Account Entity\n const investmentAccountEntity = accountModel.addEntity({\n info: {\n name: 'investment_account',\n displayName: 'Investment Account',\n description: 'Investment and brokerage accounts',\n },\n })\n\n addIdField(investmentAccountEntity, {\n displayName: 'Investment Account ID',\n description: 'Unique identifier for the investment account',\n })\n\n investmentAccountEntity.addProperty({\n info: { name: 'account_number', displayName: 'Account Number', description: 'Investment account number' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n investmentAccountEntity.addProperty({\n info: { name: 'account_type', displayName: 'Account Type', description: 'Type of investment account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['individual', 'joint', 'ira', '401k', 'roth_ira'],\n },\n })\n\n addCurrencyAmountField(investmentAccountEntity, 'total_value', 'Total Portfolio Value', {\n description: 'Total value of all investments',\n })\n\n addCurrencyAmountField(investmentAccountEntity, 'cash_balance', 'Cash Balance', {\n description: 'Available cash balance',\n })\n\n addCustomStatusField(investmentAccountEntity, ['active', 'inactive', 'suspended', 'closed'], {\n displayName: 'Account Status',\n description: 'Current status of the investment account',\n })\n\n addCreatedAtField(investmentAccountEntity, { description: 'When the investment account was created' })\n\n // InvestmentAccount-Customer Association (Many-to-One)\n investmentAccountEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: {\n name: 'customer',\n displayName: 'Account Holder',\n description: 'Customer who owns this investment account',\n },\n required: true,\n multiple: false,\n }\n )\n\n // Credit Card Entity\n const creditCardEntity = accountModel.addEntity({\n info: {\n name: 'credit_card',\n displayName: 'Credit Card',\n description: 'Credit card accounts and lines of credit',\n },\n })\n\n addIdField(creditCardEntity, { displayName: 'Credit Card ID', description: 'Unique identifier for the credit card' })\n\n creditCardEntity.addProperty({\n info: { name: 'card_number', displayName: 'Card Number', description: 'Credit card number (masked)' },\n type: 'string',\n required: true,\n writeOnly: true, // Sensitive data - write only\n })\n\n addCurrencyAmountField(creditCardEntity, 'credit_limit', 'Credit Limit', {\n description: 'Total credit limit',\n })\n\n addCurrencyAmountField(creditCardEntity, 'available_credit', 'Available Credit', {\n description: 'Available credit remaining',\n })\n\n addCurrencyAmountField(creditCardEntity, 'current_balance', 'Current Balance', {\n description: 'Current outstanding balance',\n })\n\n creditCardEntity.addProperty({\n info: { name: 'apr', displayName: 'APR', description: 'Annual Percentage Rate' },\n type: 'number',\n required: true,\n schema: {\n minimum: 0,\n maximum: 100,\n },\n })\n\n addCustomStatusField(creditCardEntity, ['active', 'inactive', 'suspended', 'closed'], {\n displayName: 'Card Status',\n description: 'Current status of the credit card',\n })\n\n addCreatedAtField(creditCardEntity, { description: 'When the credit card was created' })\n\n // CreditCard-Customer Association (Many-to-One)\n creditCardEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Cardholder', description: 'Customer who owns this credit card' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 3. TRANSACTION PROCESSING NAMESPACE\n //\n const transactionProcessing = domain.addNamespace({\n info: {\n name: 'TransactionProcessing',\n displayName: 'Transaction Processing',\n description: 'Payments, transfers, deposits, and withdrawals',\n },\n })\n\n // Transaction Model\n const transactionModel = transactionProcessing.addModel({\n info: {\n name: 'Transactions',\n displayName: 'Transaction Management',\n description: 'Financial transactions and transfers',\n },\n })\n\n // Transaction Entity\n const transactionEntity = transactionModel.addEntity({\n info: {\n name: 'transaction',\n displayName: 'Transaction',\n description: 'Financial transaction record',\n },\n })\n\n addIdField(transactionEntity, { displayName: 'Transaction ID', description: 'Unique identifier for the transaction' })\n\n transactionEntity.addProperty({\n info: {\n name: 'transaction_number',\n displayName: 'Transaction Number',\n description: 'Human-readable transaction number',\n },\n type: 'string',\n required: true,\n unique: true,\n })\n\n addCustomStatusField(transactionEntity, ['pending', 'processing', 'completed', 'failed', 'cancelled'], {\n displayName: 'Transaction Status',\n description: 'Current status of the transaction',\n })\n\n transactionEntity.addProperty({\n info: { name: 'transaction_type', displayName: 'Transaction Type', description: 'Type of financial transaction' },\n type: 'string',\n required: true,\n schema: {\n enum: ['deposit', 'withdrawal', 'transfer', 'payment', 'fee'],\n },\n })\n\n addCurrencyAmountField(transactionEntity, 'amount', 'Transaction Amount', {\n description: 'Amount of the transaction',\n })\n\n transactionEntity.addProperty({\n info: { name: 'description', displayName: 'Description', description: 'Transaction description' },\n type: 'string',\n })\n\n transactionEntity.addProperty({\n info: { name: 'transaction_date', displayName: 'Transaction Date', description: 'Date when transaction occurred' },\n type: 'date',\n required: true,\n })\n\n transactionEntity.addProperty({\n info: { name: 'reference_number', displayName: 'Reference Number', description: 'External reference number' },\n type: 'string',\n })\n\n addCreatedAtField(transactionEntity, { description: 'When the transaction was created' })\n\n // Transaction-Customer Association (Many-to-One)\n transactionEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Customer', description: 'Customer who initiated the transaction' },\n required: true,\n multiple: false,\n }\n )\n\n // Transaction-Account Association (Many-to-One)\n transactionEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Account', description: 'Account involved in the transaction' },\n required: true,\n multiple: false,\n }\n )\n\n // Transfer Entity\n const transferEntity = transactionModel.addEntity({\n info: {\n name: 'transfer',\n displayName: 'Transfer',\n description: 'Money transfers between accounts',\n },\n })\n\n addIdField(transferEntity, { displayName: 'Transfer ID', description: 'Unique identifier for the transfer' })\n\n addCustomStatusField(transferEntity, ['pending', 'processing', 'completed', 'failed', 'cancelled'], {\n displayName: 'Transfer Status',\n description: 'Current status of the transfer',\n })\n\n addCurrencyAmountField(transferEntity, 'amount', 'Transfer Amount', {\n description: 'Amount being transferred',\n })\n\n transferEntity.addProperty({\n info: { name: 'transfer_date', displayName: 'Transfer Date', description: 'Date when transfer was initiated' },\n type: 'date',\n required: true,\n })\n\n addCreatedAtField(transferEntity, { description: 'When the transfer was created' })\n\n // Transfer-From Account Association (Many-to-One)\n transferEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'from_account', displayName: 'From Account', description: 'Source account for the transfer' },\n required: true,\n multiple: false,\n }\n )\n\n // Transfer-To Account Association (Many-to-One)\n transferEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'to_account', displayName: 'To Account', description: 'Destination account for the transfer' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 4. INVESTMENT PORTFOLIO NAMESPACE\n //\n const investmentPortfolio = domain.addNamespace({\n info: {\n name: 'InvestmentPortfolio',\n displayName: 'Investment Portfolio',\n description: 'Assets, positions, and performance tracking',\n },\n })\n\n // Portfolio Model\n const portfolioModel = investmentPortfolio.addModel({\n info: {\n name: 'Portfolios',\n displayName: 'Portfolio Management',\n description: 'Investment portfolios and assets',\n },\n })\n\n // Asset Entity\n const assetEntity = portfolioModel.addEntity({\n info: {\n name: 'asset',\n displayName: 'Asset',\n description: 'Investment asset (stocks, bonds, etc.)',\n },\n })\n\n addIdField(assetEntity, { displayName: 'Asset ID', description: 'Unique identifier for the asset' })\n\n assetEntity.addProperty({\n info: { name: 'symbol', displayName: 'Symbol', description: 'Asset symbol/ticker' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n addNameField(assetEntity, { displayName: 'Asset Name', description: 'Name of the asset' })\n\n assetEntity.addProperty({\n info: { name: 'asset_type', displayName: 'Asset Type', description: 'Type of investment asset' },\n type: 'string',\n required: true,\n schema: {\n enum: ['stock', 'bond', 'etf', 'mutual_fund', 'commodity', 'crypto'],\n },\n })\n\n addCurrencyAmountField(assetEntity, 'current_price', 'Current Price', {\n description: 'Current market price of the asset',\n })\n\n addCurrencyAmountField(assetEntity, 'market_cap', 'Market Cap', {\n description: 'Market capitalization',\n })\n\n addCreatedAtField(assetEntity, { description: 'When the asset was created' })\n\n // Position Entity\n const positionEntity = portfolioModel.addEntity({\n info: {\n name: 'position',\n displayName: 'Position',\n description: 'Investment position in a portfolio',\n },\n })\n\n addIdField(positionEntity, { displayName: 'Position ID', description: 'Unique identifier for the position' })\n\n positionEntity.addProperty({\n info: { name: 'quantity', displayName: 'Quantity', description: 'Number of shares/units held' },\n type: 'number',\n required: true,\n schema: {\n minimum: 0,\n },\n })\n\n addCurrencyAmountField(positionEntity, 'average_cost', 'Average Cost', {\n description: 'Average cost per share/unit',\n })\n\n addCurrencyAmountField(positionEntity, 'current_value', 'Current Value', {\n description: 'Current market value of the position',\n })\n\n addCurrencyAmountField(positionEntity, 'unrealized_gain_loss', 'Unrealized Gain/Loss', {\n description: 'Unrealized profit or loss',\n })\n\n addCreatedAtField(positionEntity, { description: 'When the position was created' })\n\n // Position-InvestmentAccount Association (Many-to-One)\n positionEntity.addAssociation(\n { key: investmentAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Investment Account', description: 'Account holding this position' },\n required: true,\n multiple: false,\n }\n )\n\n // Position-Asset Association (Many-to-One)\n positionEntity.addAssociation(\n { key: assetEntity.key },\n {\n info: { name: 'asset', displayName: 'Asset', description: 'Asset for this position' },\n required: true,\n multiple: false,\n }\n )\n\n // Performance Entity\n const performanceEntity = portfolioModel.addEntity({\n info: {\n name: 'performance',\n displayName: 'Performance',\n description: 'Portfolio performance tracking',\n },\n })\n\n addIdField(performanceEntity, {\n displayName: 'Performance ID',\n description: 'Unique identifier for the performance record',\n })\n\n performanceEntity.addProperty({\n info: { name: 'date', displayName: 'Date', description: 'Date of performance measurement' },\n type: 'date',\n required: true,\n })\n\n addCurrencyAmountField(performanceEntity, 'total_value', 'Total Value', {\n description: 'Total portfolio value on this date',\n })\n\n performanceEntity.addProperty({\n info: { name: 'return_percentage', displayName: 'Return Percentage', description: 'Percentage return' },\n type: 'number',\n required: true,\n schema: {\n minimum: -100,\n maximum: 1000,\n },\n })\n\n addCreatedAtField(performanceEntity, { description: 'When the performance record was created' })\n\n // Performance-InvestmentAccount Association (Many-to-One)\n performanceEntity.addAssociation(\n { key: investmentAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Investment Account', description: 'Account for this performance record' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 5. COMPLIANCE & REPORTING NAMESPACE\n //\n const complianceReporting = domain.addNamespace({\n info: {\n name: 'ComplianceReporting',\n displayName: 'Compliance & Reporting',\n description: 'Regulatory reporting and audit trails',\n },\n })\n\n // Compliance Model\n const complianceModel = complianceReporting.addModel({\n info: {\n name: 'Compliance',\n displayName: 'Compliance Management',\n description: 'Regulatory compliance and reporting',\n },\n })\n\n // Audit Trail Entity\n const auditTrailEntity = complianceModel.addEntity({\n info: {\n name: 'audit_trail',\n displayName: 'Audit Trail',\n description: 'System audit trail for compliance',\n },\n })\n\n addIdField(auditTrailEntity, { displayName: 'Audit ID', description: 'Unique identifier for the audit record' })\n\n auditTrailEntity.addProperty({\n info: { name: 'action', displayName: 'Action', description: 'Action performed' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'entity_type', displayName: 'Entity Type', description: 'Type of entity affected' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'entity_id', displayName: 'Entity ID', description: 'ID of the affected entity' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'user_id', displayName: 'User ID', description: 'User who performed the action' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'ip_address', displayName: 'IP Address', description: 'IP address of the user' },\n type: 'string',\n })\n\n addDescriptionField(auditTrailEntity, { description: 'Additional details about the action' })\n\n addCreatedAtField(auditTrailEntity, {\n name: 'timestamp',\n displayName: 'Timestamp',\n description: 'When the action occurred',\n })\n\n // Regulatory Report Entity\n const regulatoryReportEntity = complianceModel.addEntity({\n info: {\n name: 'regulatory_report',\n displayName: 'Regulatory Report',\n description: 'Regulatory reporting requirements',\n },\n })\n\n addIdField(regulatoryReportEntity, { displayName: 'Report ID', description: 'Unique identifier for the report' })\n\n addNameField(regulatoryReportEntity, { displayName: 'Report Name', description: 'Name of the regulatory report' })\n\n addCustomStatusField(regulatoryReportEntity, ['draft', 'submitted', 'approved', 'rejected'], {\n displayName: 'Report Status',\n description: 'Current status of the report',\n })\n\n regulatoryReportEntity.addProperty({\n info: { name: 'report_type', displayName: 'Report Type', description: 'Type of regulatory report' },\n type: 'string',\n required: true,\n schema: {\n enum: ['suspicious_activity', 'large_transaction', 'annual_report', 'quarterly_report'],\n },\n })\n\n regulatoryReportEntity.addProperty({\n info: { name: 'reporting_period', displayName: 'Reporting Period', description: 'Period covered by the report' },\n type: 'string',\n required: true,\n })\n\n addDescriptionField(regulatoryReportEntity, { description: 'Report content and details' })\n\n addCreatedAtField(regulatoryReportEntity, { description: 'When the report was created' })\n\n //\n // 6. FRAUD DETECTION NAMESPACE\n //\n const fraudDetection = domain.addNamespace({\n info: {\n name: 'FraudDetection',\n displayName: 'Fraud Detection',\n description: 'Transaction monitoring and risk scoring',\n },\n })\n\n // Fraud Detection Model\n const fraudDetectionModel = fraudDetection.addModel({\n info: {\n name: 'FraudDetection',\n displayName: 'Fraud Detection Management',\n description: 'Fraud detection and monitoring',\n },\n })\n\n // Fraud Alert Entity\n const fraudAlertEntity = fraudDetectionModel.addEntity({\n info: {\n name: 'fraud_alert',\n displayName: 'Fraud Alert',\n description: 'Fraud detection alerts and flags',\n },\n })\n\n addIdField(fraudAlertEntity, { displayName: 'Alert ID', description: 'Unique identifier for the fraud alert' })\n\n addCustomStatusField(fraudAlertEntity, ['pending', 'investigating', 'resolved', 'false_positive'], {\n displayName: 'Alert Status',\n description: 'Current status of the fraud alert',\n })\n\n fraudAlertEntity.addProperty({\n info: { name: 'alert_type', displayName: 'Alert Type', description: 'Type of fraud alert' },\n type: 'string',\n required: true,\n schema: {\n enum: ['suspicious_transaction', 'unusual_pattern', 'identity_theft', 'account_takeover'],\n },\n })\n\n fraudAlertEntity.addProperty({\n info: { name: 'risk_score', displayName: 'Risk Score', description: 'Risk score (1-100)' },\n type: 'number',\n required: true,\n schema: {\n minimum: 1,\n maximum: 100,\n },\n })\n\n addDescriptionField(fraudAlertEntity, { description: 'Details about the fraud alert' })\n\n addCreatedAtField(fraudAlertEntity, { description: 'When the fraud alert was created' })\n\n // FraudAlert-Transaction Association (Many-to-One)\n fraudAlertEntity.addAssociation(\n { key: transactionEntity.key },\n {\n info: { name: 'transaction', displayName: 'Transaction', description: 'Transaction that triggered the alert' },\n required: false,\n multiple: false,\n }\n )\n\n // FraudAlert-Customer Association (Many-to-One)\n fraudAlertEntity.addAssociation(\n { key: customerEntity.key },\n {\n info: { name: 'customer', displayName: 'Customer', description: 'Customer associated with the alert' },\n required: true,\n multiple: false,\n }\n )\n\n return domain\n}\n"]}
|
|
1
|
+
{"version":3,"file":"financial-services-domain.js","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/business-services/financial-services-domain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Financial Services Data Domain Example\n *\n * This file demonstrates how to create a comprehensive financial services data domain\n * using the API Client Core modeling system. It follows the business-first approach\n * and demonstrates proper use of namespaces, models, entities, properties,\n * associations, and semantic annotations.\n *\n * The example includes:\n * - Account Management with bank accounts, investment accounts, and credit cards\n * - Transaction Processing with payments, transfers, deposits, and withdrawals\n * - Customer Management with KYC, risk profiles, and customer segments\n * - Investment Portfolio with assets, positions, and performance tracking\n * - Compliance & Reporting with regulatory reporting and audit trails\n * - Fraud Detection with transaction monitoring and risk scoring\n *\n * @example\n * ```typescript\n * import { createFinancialServicesDomain } from './financial-services-domain.js'\n *\n * const domain = createFinancialServicesDomain()\n * console.log('Financial Services domain created with', domain.graph.nodeCount(), 'nodes')\n * ```\n */\n\nimport { DataDomain } from '../../../DataDomain.js'\nimport { SemanticType } from '../../../Semantics.js'\nimport {\n addIdField,\n addNameField,\n addDescriptionField,\n addEmailField,\n addFirstNameField,\n addLastNameField,\n addPhoneField,\n addCustomStatusField,\n addCreatedAtField,\n addUpdatedAtField,\n addCurrencyAmountField,\n} from '../../../helpers/Intelisense.js'\nimport type { CreateTemplateOptions } from '../../types.js'\n\nfunction createDomain(): DataDomain {\n return new DataDomain({\n info: {\n name: 'Financial Services Platform',\n displayName: 'Financial Services Platform',\n description:\n 'A comprehensive financial services platform with account management, transaction processing, ' +\n 'customer management, investment portfolios, and compliance features',\n },\n })\n}\n\n/**\n * Creates a comprehensive financial services data domain following domain-driven design principles.\n *\n * This function demonstrates the proper hierarchy and organization for a financial services platform:\n * 1. Creates the root DataDomain for the financial services platform\n * 2. Organizes functionality into logical namespaces (Customer Management, Account Management, etc.)\n * 3. Groups related entities into models within each namespace\n * 4. Defines entities with proper semantic annotations for financial workflows\n * 5. Establishes associations with appropriate cardinality for customer-account relationships\n *\n * @returns A fully configured DataDomain with all financial services entities and relationships\n */\nexport default function createFinancialServicesDomain(options: CreateTemplateOptions = {}): DataDomain {\n // Ensure the root data domain\n const domain = options.domain ?? createDomain()\n\n //\n // 1. USER & AUTHENTICATION NAMESPACE (Unified for customers and employees)\n //\n const userManagement = domain.addNamespace({\n info: {\n name: 'User Management',\n displayName: 'User & Authentication Management',\n description: 'Unified user authentication, roles, and profile management for customers and employees',\n },\n })\n\n // Authentication Model\n const authModel = userManagement.addModel({\n info: {\n name: 'Authentication',\n displayName: 'Authentication & Access Control',\n description: 'User authentication, sessions, and access control',\n },\n })\n\n // Unified User Entity (replaces separate Customer and Employee entities)\n const userEntity = authModel.addEntity({\n info: {\n name: 'user',\n displayName: 'User',\n description: 'Unified user entity for both customers and employees with role-based access',\n },\n semantics: [{ id: SemanticType.User }], // Mark as a user entity for automatic behaviors\n })\n\n addIdField(userEntity, { displayName: 'User ID', description: 'Unique identifier for the user' })\n\n // Authentication fields\n userEntity.addProperty({\n info: { name: 'username', displayName: 'Username', description: 'Unique username for login' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n userEntity.addProperty({\n info: { name: 'password', displayName: 'Password', description: 'User password (hashed)' },\n type: 'string',\n required: true,\n writeOnly: true,\n semantics: [{ id: SemanticType.Password }], // Automatic password security behaviors\n })\n\n const emailProperty = addEmailField(userEntity, { description: 'User email address' })\n emailProperty.required = true\n emailProperty.unique = true\n\n // Personal Information\n addFirstNameField(userEntity, { description: 'User first name' })\n addLastNameField(userEntity, { description: 'User last name' })\n addPhoneField(userEntity, { description: 'User phone number' })\n\n // User Type & Role (unified approach)\n userEntity.addProperty({\n info: { name: 'user_type', displayName: 'User Type', description: 'Type of user account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['customer', 'employee', 'admin', 'system'],\n },\n })\n\n userEntity.addProperty({\n info: { name: 'role', displayName: 'User Role', description: 'User role defining permissions and access level' },\n type: 'string',\n required: true,\n schema: {\n enum: [\n // Customer roles\n 'individual_customer',\n 'business_customer',\n 'premium_customer',\n 'private_banking_customer',\n // Employee roles\n 'teller',\n 'loan_officer',\n 'relationship_manager',\n 'compliance_officer',\n 'branch_manager',\n 'investment_advisor',\n 'risk_analyst',\n // Admin roles\n 'system_admin',\n 'security_admin',\n 'audit_admin',\n ],\n },\n })\n\n // Status and verification\n addCustomStatusField(userEntity, ['active', 'inactive', 'suspended', 'pending_verification', 'locked'], {\n displayName: 'User Status',\n description: 'Current status of the user account',\n })\n\n userEntity.addProperty({\n info: { name: 'email_verified', displayName: 'Email Verified', description: 'Whether user email is verified' },\n type: 'boolean',\n required: true,\n })\n\n userEntity.addProperty({\n info: { name: 'last_login', displayName: 'Last Login', description: 'When user last logged in' },\n type: 'datetime',\n })\n\n addCreatedAtField(userEntity, { description: 'When the user account was created' })\n addUpdatedAtField(userEntity, { description: 'When the user account was last updated' })\n\n // Session Entity for authentication management\n const sessionEntity = authModel.addEntity({\n info: {\n name: 'user_session',\n displayName: 'User Session',\n description: 'Active user authentication sessions',\n },\n })\n\n addIdField(sessionEntity, { displayName: 'Session ID', description: 'Unique session identifier' })\n\n sessionEntity.addProperty({\n info: { name: 'token', displayName: 'Session Token', description: 'Authentication token for the session' },\n type: 'string',\n required: true,\n writeOnly: true,\n })\n\n sessionEntity.addProperty({\n info: { name: 'expires_at', displayName: 'Expires At', description: 'When the session expires' },\n type: 'datetime',\n required: true,\n })\n\n sessionEntity.addProperty({\n info: { name: 'ip_address', displayName: 'IP Address', description: 'IP address of the session' },\n type: 'string',\n semantics: [{ id: SemanticType.ClientIPAddress }],\n })\n\n addCreatedAtField(sessionEntity, { description: 'When the session was created' })\n\n // User-Session Association\n userEntity.addAssociation(\n { key: sessionEntity.key },\n {\n info: { name: 'sessions', displayName: 'User Sessions', description: 'Active sessions for this user' },\n required: false,\n multiple: true,\n }\n )\n\n // Profile Model (for extended user information)\n const profileModel = userManagement.addModel({\n info: {\n name: 'User Profiles',\n displayName: 'User Profile Management',\n description: 'Extended user profile information and preferences',\n },\n })\n\n // Customer Profile Entity (for customer-specific information)\n const customerProfileEntity = profileModel.addEntity({\n info: {\n name: 'customer_profile',\n displayName: 'Customer Profile',\n description: 'Additional profile information specific to customers',\n },\n })\n\n addIdField(customerProfileEntity, { displayName: 'Profile ID', description: 'Unique profile identifier' })\n\n customerProfileEntity.addProperty({\n info: { name: 'date_of_birth', displayName: 'Date of Birth', description: 'Customer date of birth' },\n type: 'date',\n required: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'ssn', displayName: 'Social Security Number', description: 'Customer SSN for identification' },\n type: 'string',\n required: true,\n writeOnly: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'address', displayName: 'Address', description: 'Customer residential address' },\n type: 'string',\n required: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'city', displayName: 'City', description: 'Customer city' },\n type: 'string',\n required: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'state', displayName: 'State', description: 'Customer state' },\n type: 'string',\n required: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'zip_code', displayName: 'ZIP Code', description: 'Customer ZIP code' },\n type: 'string',\n required: true,\n })\n\n customerProfileEntity.addProperty({\n info: { name: 'customer_type', displayName: 'Customer Type', description: 'Type of customer account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['individual', 'business', 'trust', 'partnership'],\n },\n })\n\n addCreatedAtField(customerProfileEntity, { description: 'When the customer profile was created' })\n addUpdatedAtField(customerProfileEntity, { description: 'When the customer profile was last updated' })\n\n // User-CustomerProfile Association (one-to-one for customers)\n userEntity.addAssociation(\n { key: customerProfileEntity.key },\n {\n info: {\n name: 'customer_profile',\n displayName: 'Customer Profile',\n description: 'Extended customer profile information',\n },\n required: false, // Only for customers, not employees\n multiple: false,\n }\n )\n\n // Employee Profile Entity (for employee-specific information)\n const employeeProfileEntity = profileModel.addEntity({\n info: {\n name: 'employee_profile',\n displayName: 'Employee Profile',\n description: 'Additional profile information specific to employees',\n },\n })\n\n addIdField(employeeProfileEntity, {\n displayName: 'Employee Profile ID',\n description: 'Unique employee profile identifier',\n })\n\n employeeProfileEntity.addProperty({\n info: { name: 'employee_id', displayName: 'Employee ID', description: 'Company employee identifier' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n employeeProfileEntity.addProperty({\n info: { name: 'department', displayName: 'Department', description: 'Employee department' },\n type: 'string',\n required: true,\n schema: {\n enum: [\n 'retail_banking',\n 'commercial_banking',\n 'investment_services',\n 'risk_management',\n 'compliance',\n 'operations',\n 'technology',\n 'human_resources',\n 'legal',\n ],\n },\n })\n\n employeeProfileEntity.addProperty({\n info: { name: 'hire_date', displayName: 'Hire Date', description: 'Employee hire date' },\n type: 'date',\n required: true,\n })\n\n employeeProfileEntity.addProperty({\n info: { name: 'manager_id', displayName: 'Manager ID', description: 'Employee manager identifier' },\n type: 'string',\n })\n\n addCreatedAtField(employeeProfileEntity, { description: 'When the employee profile was created' })\n addUpdatedAtField(employeeProfileEntity, { description: 'When the employee profile was last updated' })\n\n // User-EmployeeProfile Association (one-to-one for employees)\n userEntity.addAssociation(\n { key: employeeProfileEntity.key },\n {\n info: {\n name: 'employee_profile',\n displayName: 'Employee Profile',\n description: 'Extended employee profile information',\n },\n required: false, // Only for employees, not customers\n multiple: false,\n }\n )\n\n // KYC Entity (enhanced for the unified approach)\n const kycEntity = profileModel.addEntity({\n info: {\n name: 'kyc_record',\n displayName: 'KYC Record',\n description: 'Know Your Customer verification and documentation',\n },\n })\n\n addIdField(kycEntity, { displayName: 'KYC ID', description: 'Unique identifier for the KYC record' })\n\n addCustomStatusField(kycEntity, ['pending', 'verified', 'rejected', 'expired'], {\n displayName: 'KYC Status',\n description: 'Current status of KYC verification',\n })\n\n kycEntity.addProperty({\n info: { name: 'verification_date', displayName: 'Verification Date', description: 'Date when KYC was verified' },\n type: 'date',\n })\n\n kycEntity.addProperty({\n info: { name: 'document_type', displayName: 'Document Type', description: 'Type of identification document' },\n type: 'string',\n required: true,\n schema: {\n enum: ['passport', 'drivers_license', 'national_id', 'utility_bill', 'bank_statement'],\n },\n })\n\n kycEntity.addProperty({\n info: { name: 'document_number', displayName: 'Document Number', description: 'Document identification number' },\n type: 'string',\n required: true,\n })\n\n addCreatedAtField(kycEntity, { description: 'When the KYC record was created' })\n addUpdatedAtField(kycEntity, { description: 'When the KYC record was last updated' })\n\n // KYC-User Association (One-to-One)\n kycEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'User', description: 'User for this KYC record' },\n required: true,\n multiple: false,\n }\n )\n\n // Risk Profile Entity\n const riskProfileEntity = profileModel.addEntity({\n info: {\n name: 'risk_profile',\n displayName: 'Risk Profile',\n description: 'Customer risk assessment and scoring',\n },\n })\n\n addIdField(riskProfileEntity, {\n displayName: 'Risk Profile ID',\n description: 'Unique identifier for the risk profile',\n })\n\n riskProfileEntity.addProperty({\n info: { name: 'risk_score', displayName: 'Risk Score', description: 'Numerical risk score (1-100)' },\n type: 'number',\n required: true,\n schema: {\n minimum: 1,\n maximum: 100,\n },\n })\n\n addCustomStatusField(riskProfileEntity, ['low', 'medium', 'high', 'very_high'], {\n displayName: 'Risk Level',\n description: 'Risk level classification',\n })\n\n riskProfileEntity.addProperty({\n info: { name: 'assessment_date', displayName: 'Assessment Date', description: 'Date when risk was assessed' },\n type: 'date',\n required: true,\n })\n\n addDescriptionField(riskProfileEntity, { description: 'Risk assessment notes and factors' })\n\n addCreatedAtField(riskProfileEntity, { description: 'When the risk profile was created' })\n addUpdatedAtField(riskProfileEntity, { description: 'When the risk profile was last updated' })\n\n // RiskProfile-User Association (One-to-One)\n riskProfileEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'User', description: 'User for this risk profile' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 2. ACCOUNT MANAGEMENT NAMESPACE\n //\n const accountManagement = domain.addNamespace({\n info: {\n name: 'AccountManagement',\n displayName: 'Account Management',\n description: 'Bank accounts, investment accounts, and credit cards',\n },\n })\n\n // Account Model\n const accountModel = accountManagement.addModel({\n info: {\n name: 'Accounts',\n displayName: 'Account Management',\n description: 'Financial accounts and products',\n },\n })\n\n // Bank Account Entity\n const bankAccountEntity = accountModel.addEntity({\n info: {\n name: 'bank_account',\n displayName: 'Bank Account',\n description: 'Checking and savings accounts',\n },\n })\n\n addIdField(bankAccountEntity, { displayName: 'Account ID', description: 'Unique identifier for the account' })\n\n bankAccountEntity.addProperty({\n info: { name: 'account_number', displayName: 'Account Number', description: 'Bank account number' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n bankAccountEntity.addProperty({\n info: { name: 'routing_number', displayName: 'Routing Number', description: 'Bank routing number' },\n type: 'string',\n required: true,\n })\n\n bankAccountEntity.addProperty({\n info: { name: 'account_type', displayName: 'Account Type', description: 'Type of bank account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['checking', 'savings', 'money_market', 'cd'],\n },\n })\n\n addCurrencyAmountField(bankAccountEntity, 'balance', 'Account Balance', {\n description: 'Current account balance',\n })\n\n addCurrencyAmountField(bankAccountEntity, 'available_balance', 'Available Balance', {\n description: 'Available balance for transactions',\n })\n\n addCustomStatusField(bankAccountEntity, ['active', 'inactive', 'frozen', 'closed'], {\n displayName: 'Account Status',\n description: 'Current status of the account',\n })\n\n addCreatedAtField(bankAccountEntity, { description: 'When the account was created' })\n addUpdatedAtField(bankAccountEntity, { description: 'When the account was last updated' })\n\n // BankAccount-User Association (Many-to-One)\n bankAccountEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'Account Holder', description: 'User who owns this account' },\n required: true,\n multiple: false,\n }\n )\n\n // Investment Account Entity\n const investmentAccountEntity = accountModel.addEntity({\n info: {\n name: 'investment_account',\n displayName: 'Investment Account',\n description: 'Investment and brokerage accounts',\n },\n })\n\n addIdField(investmentAccountEntity, {\n displayName: 'Investment Account ID',\n description: 'Unique identifier for the investment account',\n })\n\n investmentAccountEntity.addProperty({\n info: { name: 'account_number', displayName: 'Account Number', description: 'Investment account number' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n investmentAccountEntity.addProperty({\n info: { name: 'account_type', displayName: 'Account Type', description: 'Type of investment account' },\n type: 'string',\n required: true,\n schema: {\n enum: ['individual', 'joint', 'ira', '401k', 'roth_ira'],\n },\n })\n\n addCurrencyAmountField(investmentAccountEntity, 'total_value', 'Total Portfolio Value', {\n description: 'Total value of all investments',\n })\n\n addCurrencyAmountField(investmentAccountEntity, 'cash_balance', 'Cash Balance', {\n description: 'Available cash balance',\n })\n\n addCustomStatusField(investmentAccountEntity, ['active', 'inactive', 'suspended', 'closed'], {\n displayName: 'Account Status',\n description: 'Current status of the investment account',\n })\n\n addCreatedAtField(investmentAccountEntity, { description: 'When the investment account was created' })\n\n // InvestmentAccount-User Association (Many-to-One)\n investmentAccountEntity.addAssociation(\n { key: userEntity.key },\n {\n info: {\n name: 'user',\n displayName: 'Account Holder',\n description: 'User who owns this investment account',\n },\n required: true,\n multiple: false,\n }\n )\n\n // Credit Card Entity\n const creditCardEntity = accountModel.addEntity({\n info: {\n name: 'credit_card',\n displayName: 'Credit Card',\n description: 'Credit card accounts and lines of credit',\n },\n })\n\n addIdField(creditCardEntity, { displayName: 'Credit Card ID', description: 'Unique identifier for the credit card' })\n\n creditCardEntity.addProperty({\n info: { name: 'card_number', displayName: 'Card Number', description: 'Credit card number (masked)' },\n type: 'string',\n required: true,\n writeOnly: true, // Sensitive data - write only\n })\n\n addCurrencyAmountField(creditCardEntity, 'credit_limit', 'Credit Limit', {\n description: 'Total credit limit',\n })\n\n addCurrencyAmountField(creditCardEntity, 'available_credit', 'Available Credit', {\n description: 'Available credit remaining',\n })\n\n addCurrencyAmountField(creditCardEntity, 'current_balance', 'Current Balance', {\n description: 'Current outstanding balance',\n })\n\n creditCardEntity.addProperty({\n info: { name: 'apr', displayName: 'APR', description: 'Annual Percentage Rate' },\n type: 'number',\n required: true,\n schema: {\n minimum: 0,\n maximum: 100,\n },\n })\n\n addCustomStatusField(creditCardEntity, ['active', 'inactive', 'suspended', 'closed'], {\n displayName: 'Card Status',\n description: 'Current status of the credit card',\n })\n\n addCreatedAtField(creditCardEntity, { description: 'When the credit card was created' })\n\n // CreditCard-User Association (Many-to-One)\n creditCardEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'Cardholder', description: 'User who owns this credit card' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 3. TRANSACTION PROCESSING NAMESPACE\n //\n const transactionProcessing = domain.addNamespace({\n info: {\n name: 'Transaction Processing',\n displayName: 'Transaction Processing',\n description: 'Payments, transfers, deposits, and withdrawals',\n },\n })\n\n // Transaction Model\n const transactionModel = transactionProcessing.addModel({\n info: {\n name: 'Transactions',\n displayName: 'Transaction Management',\n description: 'Financial transactions and transfers',\n },\n })\n\n // Transaction Entity\n const transactionEntity = transactionModel.addEntity({\n info: {\n name: 'transaction',\n displayName: 'Transaction',\n description: 'Financial transaction record',\n },\n })\n\n addIdField(transactionEntity, { displayName: 'Transaction ID', description: 'Unique identifier for the transaction' })\n\n transactionEntity.addProperty({\n info: {\n name: 'transaction_number',\n displayName: 'Transaction Number',\n description: 'Human-readable transaction number',\n },\n type: 'string',\n required: true,\n unique: true,\n })\n\n addCustomStatusField(transactionEntity, ['pending', 'processing', 'completed', 'failed', 'cancelled'], {\n displayName: 'Transaction Status',\n description: 'Current status of the transaction',\n })\n\n transactionEntity.addProperty({\n info: { name: 'transaction_type', displayName: 'Transaction Type', description: 'Type of financial transaction' },\n type: 'string',\n required: true,\n schema: {\n enum: ['deposit', 'withdrawal', 'transfer', 'payment', 'fee'],\n },\n })\n\n addCurrencyAmountField(transactionEntity, 'amount', 'Transaction Amount', {\n description: 'Amount of the transaction',\n })\n\n transactionEntity.addProperty({\n info: { name: 'description', displayName: 'Description', description: 'Transaction description' },\n type: 'string',\n })\n\n transactionEntity.addProperty({\n info: { name: 'transaction_date', displayName: 'Transaction Date', description: 'Date when transaction occurred' },\n type: 'date',\n required: true,\n })\n\n transactionEntity.addProperty({\n info: { name: 'reference_number', displayName: 'Reference Number', description: 'External reference number' },\n type: 'string',\n })\n\n addCreatedAtField(transactionEntity, { description: 'When the transaction was created' })\n\n // Transaction-User Association (Many-to-One)\n transactionEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'User', description: 'User who initiated the transaction' },\n required: true,\n multiple: false,\n }\n )\n\n // Transaction-Account Association (Many-to-One)\n transactionEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Account', description: 'Account involved in the transaction' },\n required: true,\n multiple: false,\n }\n )\n\n // Transfer Entity\n const transferEntity = transactionModel.addEntity({\n info: {\n name: 'transfer',\n displayName: 'Transfer',\n description: 'Money transfers between accounts',\n },\n })\n\n addIdField(transferEntity, { displayName: 'Transfer ID', description: 'Unique identifier for the transfer' })\n\n addCustomStatusField(transferEntity, ['pending', 'processing', 'completed', 'failed', 'cancelled'], {\n displayName: 'Transfer Status',\n description: 'Current status of the transfer',\n })\n\n addCurrencyAmountField(transferEntity, 'amount', 'Transfer Amount', {\n description: 'Amount being transferred',\n })\n\n transferEntity.addProperty({\n info: { name: 'transfer_date', displayName: 'Transfer Date', description: 'Date when transfer was initiated' },\n type: 'date',\n required: true,\n })\n\n addCreatedAtField(transferEntity, { description: 'When the transfer was created' })\n\n // Transfer-From Account Association (Many-to-One)\n transferEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'from_account', displayName: 'From Account', description: 'Source account for the transfer' },\n required: true,\n multiple: false,\n }\n )\n\n // Transfer-To Account Association (Many-to-One)\n transferEntity.addAssociation(\n { key: bankAccountEntity.key },\n {\n info: { name: 'to_account', displayName: 'To Account', description: 'Destination account for the transfer' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 4. INVESTMENT PORTFOLIO NAMESPACE\n //\n const investmentPortfolio = domain.addNamespace({\n info: {\n name: 'Investment Portfolio',\n displayName: 'Investment Portfolio',\n description: 'Assets, positions, and performance tracking',\n },\n })\n\n // Portfolio Model\n const portfolioModel = investmentPortfolio.addModel({\n info: {\n name: 'Portfolios',\n displayName: 'Portfolio Management',\n description: 'Investment portfolios and assets',\n },\n })\n\n // Asset Entity\n const assetEntity = portfolioModel.addEntity({\n info: {\n name: 'asset',\n displayName: 'Asset',\n description: 'Investment asset (stocks, bonds, etc.)',\n },\n })\n\n addIdField(assetEntity, { displayName: 'Asset ID', description: 'Unique identifier for the asset' })\n\n assetEntity.addProperty({\n info: { name: 'symbol', displayName: 'Symbol', description: 'Asset symbol/ticker' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n addNameField(assetEntity, { displayName: 'Asset Name', description: 'Name of the asset' })\n\n assetEntity.addProperty({\n info: { name: 'asset_type', displayName: 'Asset Type', description: 'Type of investment asset' },\n type: 'string',\n required: true,\n schema: {\n enum: ['stock', 'bond', 'etf', 'mutual_fund', 'commodity', 'crypto'],\n },\n })\n\n addCurrencyAmountField(assetEntity, 'current_price', 'Current Price', {\n description: 'Current market price of the asset',\n })\n\n addCurrencyAmountField(assetEntity, 'market_cap', 'Market Cap', {\n description: 'Market capitalization',\n })\n\n addCreatedAtField(assetEntity, { description: 'When the asset was created' })\n\n // Position Entity\n const positionEntity = portfolioModel.addEntity({\n info: {\n name: 'position',\n displayName: 'Position',\n description: 'Investment position in a portfolio',\n },\n })\n\n addIdField(positionEntity, { displayName: 'Position ID', description: 'Unique identifier for the position' })\n\n positionEntity.addProperty({\n info: { name: 'quantity', displayName: 'Quantity', description: 'Number of shares/units held' },\n type: 'number',\n required: true,\n schema: {\n minimum: 0,\n },\n })\n\n addCurrencyAmountField(positionEntity, 'average_cost', 'Average Cost', {\n description: 'Average cost per share/unit',\n })\n\n addCurrencyAmountField(positionEntity, 'current_value', 'Current Value', {\n description: 'Current market value of the position',\n })\n\n addCurrencyAmountField(positionEntity, 'unrealized_gain_loss', 'Unrealized Gain/Loss', {\n description: 'Unrealized profit or loss',\n })\n\n addCreatedAtField(positionEntity, { description: 'When the position was created' })\n\n // Position-InvestmentAccount Association (Many-to-One)\n positionEntity.addAssociation(\n { key: investmentAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Investment Account', description: 'Account holding this position' },\n required: true,\n multiple: false,\n }\n )\n\n // Position-Asset Association (Many-to-One)\n positionEntity.addAssociation(\n { key: assetEntity.key },\n {\n info: { name: 'asset', displayName: 'Asset', description: 'Asset for this position' },\n required: true,\n multiple: false,\n }\n )\n\n // Performance Entity\n const performanceEntity = portfolioModel.addEntity({\n info: {\n name: 'performance',\n displayName: 'Performance',\n description: 'Portfolio performance tracking',\n },\n })\n\n addIdField(performanceEntity, {\n displayName: 'Performance ID',\n description: 'Unique identifier for the performance record',\n })\n\n performanceEntity.addProperty({\n info: { name: 'date', displayName: 'Date', description: 'Date of performance measurement' },\n type: 'date',\n required: true,\n })\n\n addCurrencyAmountField(performanceEntity, 'total_value', 'Total Value', {\n description: 'Total portfolio value on this date',\n })\n\n performanceEntity.addProperty({\n info: { name: 'return_percentage', displayName: 'Return Percentage', description: 'Percentage return' },\n type: 'number',\n required: true,\n schema: {\n minimum: -100,\n maximum: 1000,\n },\n })\n\n addCreatedAtField(performanceEntity, { description: 'When the performance record was created' })\n\n // Performance-InvestmentAccount Association (Many-to-One)\n performanceEntity.addAssociation(\n { key: investmentAccountEntity.key },\n {\n info: { name: 'account', displayName: 'Investment Account', description: 'Account for this performance record' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 5. COMPLIANCE & REPORTING NAMESPACE\n //\n const complianceReporting = domain.addNamespace({\n info: {\n name: 'Compliance Reporting',\n displayName: 'Compliance & Reporting',\n description: 'Regulatory reporting and audit trails',\n },\n })\n\n // Compliance Model\n const complianceModel = complianceReporting.addModel({\n info: {\n name: 'Compliance',\n displayName: 'Compliance Management',\n description: 'Regulatory compliance and reporting',\n },\n })\n\n // Audit Trail Entity\n const auditTrailEntity = complianceModel.addEntity({\n info: {\n name: 'audit_trail',\n displayName: 'Audit Trail',\n description: 'System audit trail for compliance',\n },\n })\n\n addIdField(auditTrailEntity, { displayName: 'Audit ID', description: 'Unique identifier for the audit record' })\n\n auditTrailEntity.addProperty({\n info: { name: 'action', displayName: 'Action', description: 'Action performed' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'entity_type', displayName: 'Entity Type', description: 'Type of entity affected' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'entity_id', displayName: 'Entity ID', description: 'ID of the affected entity' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'user_id', displayName: 'User ID', description: 'User who performed the action' },\n type: 'string',\n required: true,\n })\n\n auditTrailEntity.addProperty({\n info: { name: 'ip_address', displayName: 'IP Address', description: 'IP address of the user' },\n type: 'string',\n semantics: [{ id: SemanticType.ClientIPAddress }],\n })\n\n addDescriptionField(auditTrailEntity, { description: 'Additional details about the action' })\n\n addCreatedAtField(auditTrailEntity, {\n name: 'timestamp',\n displayName: 'Timestamp',\n description: 'When the action occurred',\n })\n\n // Regulatory Report Entity\n const regulatoryReportEntity = complianceModel.addEntity({\n info: {\n name: 'regulatory_report',\n displayName: 'Regulatory Report',\n description: 'Regulatory reporting requirements',\n },\n })\n\n addIdField(regulatoryReportEntity, { displayName: 'Report ID', description: 'Unique identifier for the report' })\n\n addNameField(regulatoryReportEntity, { displayName: 'Report Name', description: 'Name of the regulatory report' })\n\n addCustomStatusField(regulatoryReportEntity, ['draft', 'submitted', 'approved', 'rejected'], {\n displayName: 'Report Status',\n description: 'Current status of the report',\n })\n\n regulatoryReportEntity.addProperty({\n info: { name: 'report_type', displayName: 'Report Type', description: 'Type of regulatory report' },\n type: 'string',\n required: true,\n schema: {\n enum: ['suspicious_activity', 'large_transaction', 'annual_report', 'quarterly_report'],\n },\n })\n\n regulatoryReportEntity.addProperty({\n info: { name: 'reporting_period', displayName: 'Reporting Period', description: 'Period covered by the report' },\n type: 'string',\n required: true,\n })\n\n addDescriptionField(regulatoryReportEntity, { description: 'Report content and details' })\n\n addCreatedAtField(regulatoryReportEntity, { description: 'When the report was created' })\n\n //\n // 6. FRAUD DETECTION NAMESPACE\n //\n const fraudDetection = domain.addNamespace({\n info: {\n name: 'FraudDetection',\n displayName: 'Fraud Detection',\n description: 'Transaction monitoring and risk scoring',\n },\n })\n\n // Fraud Detection Model\n const fraudDetectionModel = fraudDetection.addModel({\n info: {\n name: 'FraudDetection',\n displayName: 'Fraud Detection Management',\n description: 'Fraud detection and monitoring',\n },\n })\n\n // Fraud Alert Entity\n const fraudAlertEntity = fraudDetectionModel.addEntity({\n info: {\n name: 'fraud_alert',\n displayName: 'Fraud Alert',\n description: 'Fraud detection alerts and flags',\n },\n })\n\n addIdField(fraudAlertEntity, { displayName: 'Alert ID', description: 'Unique identifier for the fraud alert' })\n\n addCustomStatusField(fraudAlertEntity, ['pending', 'investigating', 'resolved', 'false_positive'], {\n displayName: 'Alert Status',\n description: 'Current status of the fraud alert',\n })\n\n fraudAlertEntity.addProperty({\n info: { name: 'alert_type', displayName: 'Alert Type', description: 'Type of fraud alert' },\n type: 'string',\n required: true,\n schema: {\n enum: ['suspicious_transaction', 'unusual_pattern', 'identity_theft', 'account_takeover'],\n },\n })\n\n fraudAlertEntity.addProperty({\n info: { name: 'risk_score', displayName: 'Risk Score', description: 'Risk score (1-100)' },\n type: 'number',\n required: true,\n schema: {\n minimum: 1,\n maximum: 100,\n },\n })\n\n addDescriptionField(fraudAlertEntity, { description: 'Details about the fraud alert' })\n\n addCreatedAtField(fraudAlertEntity, { description: 'When the fraud alert was created' })\n\n // FraudAlert-Transaction Association (Many-to-One)\n fraudAlertEntity.addAssociation(\n { key: transactionEntity.key },\n {\n info: { name: 'transaction', displayName: 'Transaction', description: 'Transaction that triggered the alert' },\n required: false,\n multiple: false,\n }\n )\n\n // FraudAlert-User Association (Many-to-One)\n fraudAlertEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'user', displayName: 'User', description: 'User associated with the alert' },\n required: true,\n multiple: false,\n }\n )\n\n return domain\n}\n"]}
|
|
@@ -499,11 +499,11 @@ export default function createBlogDomain(options = {}) {
|
|
|
499
499
|
type: 'string',
|
|
500
500
|
semantics: [createURLSemantic()],
|
|
501
501
|
});
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
502
|
+
pageViewEntity.addProperty({
|
|
503
|
+
info: { name: 'ip_address', displayName: 'IP Address', description: 'Visitor IP address' },
|
|
504
|
+
type: 'string',
|
|
505
|
+
semantics: [{ id: SemanticType.ClientIPAddress }],
|
|
506
|
+
});
|
|
507
507
|
pageViewEntity.addProperty({
|
|
508
508
|
info: { name: 'user_agent', displayName: 'User Agent', description: 'Browser user agent string' },
|
|
509
509
|
type: 'string',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-domain.js","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/technology-media/blog-domain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Blog/Publishing Data Domain Example\n *\n * This file demonstrates how to create a comprehensive blog/publishing data domain\n * using the API Client Core modeling system. It follows the business-first approach\n * and demonstrates proper use of namespaces, models, entities, properties,\n * associations, and semantic annotations.\n *\n * The example includes:\n * - Content Management with posts, pages, and media\n * - User Management with authors, editors, and subscribers\n * - Publishing Workflow with drafts, reviews, and publication\n * - Social Features with comments, likes, and sharing\n * - Analytics and SEO with metadata and tracking\n * - Multi-tenant support for multiple blogs/publications\n *\n * @example\n * ```typescript\n * import { createBlogDomain } from './blog-domain.js'\n *\n * const domain = createBlogDomain()\n * console.log('Blog domain created with', domain.graph.nodeCount(), 'nodes')\n * ```\n */\n\nimport { DataDomain } from '../../../DataDomain.js'\nimport { SemanticType } from '../../../Semantics.js'\nimport { createCalculatedSemantic } from '../../../definitions/Calculated.js'\nimport { createURLSemantic } from '../../../definitions/URL.js'\nimport {\n addIdField,\n addNameField,\n addDescriptionField,\n addPublicUniqueNameField,\n addCustomStatusField,\n addCreatedAtField,\n addUpdatedAtField,\n addEmailField,\n addPasswordField,\n addFirstNameField,\n addLastNameField,\n addAvatarUrlField,\n addBooleanField,\n addQuantityField,\n} from '../../../helpers/Intelisense.js'\nimport type { CreateTemplateOptions } from '../../types.js'\n\nfunction createDomain(): DataDomain {\n return new DataDomain({\n info: {\n name: 'Blog Publishing Platform',\n displayName: 'Blog Publishing Platform',\n description:\n 'A comprehensive content management and publishing platform for blogs, magazines, and digital publications',\n },\n })\n}\n\n/**\n * Creates a comprehensive blog/publishing data domain following domain-driven design principles.\n *\n * This function demonstrates the proper hierarchy and organization for a publishing platform:\n * 1. Creates the root DataDomain for the publishing platform\n * 2. Organizes functionality into logical namespaces (Content, Users, Publishing, etc.)\n * 3. Groups related entities into models within each namespace\n * 4. Defines entities with proper semantic annotations for publishing workflows\n * 5. Establishes associations with appropriate cardinality for content relationships\n *\n * @returns A fully configured DataDomain with all blog/publishing entities and relationships\n */\nexport default function createBlogDomain(options: CreateTemplateOptions = {}): DataDomain {\n // Ensure the root data domain\n const domain = options.domain ?? createDomain()\n\n //\n // 1. CONTENT MANAGEMENT NAMESPACE\n //\n const contentManagement = domain.addNamespace({\n info: {\n name: 'ContentManagement',\n displayName: 'Content Management',\n description: 'Core content creation, editing, and organization features',\n },\n })\n\n // Publication Model - Multi-tenant support\n const publicationModel = contentManagement.addModel({\n info: {\n name: 'Publications',\n displayName: 'Publications Management',\n description: 'Individual blogs, magazines, or publications within the platform',\n },\n })\n\n // Publication Entity - Represents individual blogs/publications\n const publicationEntity = publicationModel.addEntity({\n info: {\n name: 'publication',\n displayName: 'Publication',\n description: 'Individual blog or publication site',\n },\n })\n\n addIdField(publicationEntity, { displayName: 'Publication ID', description: 'Unique identifier for the publication' })\n\n addNameField(publicationEntity, { displayName: 'Publication Name', description: 'Display name of the publication' })\n\n addPublicUniqueNameField(publicationEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the publication',\n })\n\n addDescriptionField(publicationEntity, { description: 'Publication description and tagline' })\n\n publicationEntity.addProperty({\n info: { name: 'domain', displayName: 'Custom Domain', description: 'Custom domain name for the publication' },\n type: 'string',\n // semantics: [{ id: SemanticType.DomainName }],\n })\n\n publicationEntity.addProperty({\n info: { name: 'logo_url', displayName: 'Logo URL', description: 'URL to publication logo image' },\n type: 'string',\n semantics: [{ id: SemanticType.ImageURL }],\n })\n\n addCustomStatusField(publicationEntity, ['active', 'suspended', 'archived'], {\n displayName: 'Publication Status',\n description: 'Current status of the publication',\n })\n\n addCreatedAtField(publicationEntity, { description: 'When the publication was created' })\n\n // Content Model\n const contentModel = contentManagement.addModel({\n info: {\n name: 'Content',\n displayName: 'Content Management',\n description: 'Posts, pages, and other content types',\n },\n })\n\n // Category Entity\n const categoryEntity = contentModel.addEntity({\n info: {\n name: 'category',\n displayName: 'Content Category',\n description: 'Content categorization for organization and navigation',\n },\n })\n\n addIdField(categoryEntity, { displayName: 'Category ID', description: 'Unique identifier for the category' })\n\n addNameField(categoryEntity, { displayName: 'Category Name', description: 'Display name of the category' })\n\n addPublicUniqueNameField(categoryEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the category',\n })\n\n addDescriptionField(categoryEntity, { description: 'Category description' })\n\n categoryEntity.addProperty({\n info: { name: 'color', displayName: 'Color', description: 'Theme color for the category' },\n type: 'string',\n // semantics: [{ id: SemanticType.Color }],\n })\n\n // Category-Publication Association (Many-to-One)\n categoryEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this category belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Self-referencing association for category hierarchy\n categoryEntity.addAssociation(\n { key: categoryEntity.key },\n {\n info: {\n name: 'parentCategory',\n displayName: 'Parent Category',\n description: 'Parent category for hierarchical organization',\n },\n required: false,\n multiple: false,\n }\n )\n\n // Tag Entity\n const tagEntity = contentModel.addEntity({\n info: {\n name: 'Tag',\n displayName: 'Content Tag',\n description: 'Tags for flexible content labeling and discovery',\n },\n })\n\n addIdField(tagEntity, { displayName: 'Tag ID', description: 'Unique identifier for the tag' })\n\n addNameField(tagEntity, { displayName: 'Tag Name', description: 'Display name of the tag' })\n\n addPublicUniqueNameField(tagEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the tag',\n })\n\n // Tag-Publication Association (Many-to-One)\n tagEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this tag belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Post Entity - Main content type\n const postEntity = contentModel.addEntity({\n info: {\n name: 'Post',\n displayName: 'Blog Post',\n description: 'Individual blog posts and articles',\n },\n })\n\n addIdField(postEntity, { displayName: 'Post ID', description: 'Unique identifier for the post' })\n\n postEntity.addProperty({\n info: { name: 'title', displayName: 'Post Title', description: 'Title of the blog post' },\n type: 'string',\n required: true,\n semantics: [{ id: SemanticType.Title }],\n })\n\n addPublicUniqueNameField(postEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the post',\n })\n\n postEntity.addProperty({\n info: { name: 'excerpt', displayName: 'Excerpt', description: 'Brief summary or excerpt of the post' },\n type: 'string',\n semantics: [{ id: SemanticType.Summary }],\n })\n\n const postContent = postEntity.addProperty({\n info: { name: 'content', displayName: 'Content', description: 'Full content of the post in HTML or Markdown' },\n type: 'string',\n required: true,\n semantics: [{ id: SemanticType.HTML }],\n })\n\n postEntity.addProperty({\n info: {\n name: 'content_format',\n displayName: 'Content Format',\n description: 'Format of the content (HTML, Markdown, etc.)',\n },\n type: 'string',\n required: true,\n schema: {\n enum: ['html', 'markdown', 'richtext'],\n defaultValue: { type: 'literal', value: 'markdown' },\n },\n })\n\n postEntity.addProperty({\n info: { name: 'featured_image_url', displayName: 'Featured Image URL', description: 'URL to featured image' },\n type: 'string',\n semantics: [{ id: SemanticType.ImageURL }],\n })\n\n addCustomStatusField(postEntity, ['draft', 'pending_review', 'scheduled', 'published', 'archived'], {\n displayName: 'Post Status',\n description: 'Current publishing status of the post',\n })\n\n addCreatedAtField(postEntity, {\n name: 'published_at',\n displayName: 'Published At',\n description: 'When the post was published',\n })\n\n postEntity.addProperty({\n info: {\n name: 'scheduled_at',\n displayName: 'Scheduled At',\n description: 'When the post is scheduled to be published',\n },\n type: 'datetime',\n })\n\n addQuantityField(postEntity, {\n name: 'view_count',\n displayName: 'View Count',\n description: 'Number of times the post has been viewed',\n })\n\n postEntity.addProperty({\n info: { name: 'reading_time', displayName: 'Reading Time', description: 'Estimated reading time in minutes' },\n type: 'number',\n readOnly: true,\n semantics: [\n createCalculatedSemantic({\n formula: `CEIL(LENGTH(REPLACE({{${postContent.key}}}, \" \", \"\")) / 250)`,\n dependencies: [postContent.key],\n recalculateOnUpdate: true,\n }),\n ],\n })\n\n postEntity.addProperty({\n info: { name: 'word_count', displayName: 'Word Count', description: 'Number of words in the post content' },\n type: 'number',\n readOnly: true,\n semantics: [\n createCalculatedSemantic({\n formula: `LENGTH({{${postContent.key}}}) - LENGTH(REPLACE({{${postContent.key}}}, \" \", \"\")) + 1`,\n dependencies: [postContent.key],\n recalculateOnUpdate: true,\n }),\n ],\n })\n\n postEntity.addProperty({\n info: { name: 'meta_title', displayName: 'Meta Title', description: 'SEO meta title' },\n type: 'string',\n // semantics: [{ id: SemanticType.SEOTitle }],\n })\n\n postEntity.addProperty({\n info: { name: 'meta_description', displayName: 'Meta Description', description: 'SEO meta description' },\n type: 'string',\n // semantics: [{ id: SemanticType.SEODescription }],\n })\n\n addCreatedAtField(postEntity, { description: 'When the post was created' })\n addUpdatedAtField(postEntity, { description: 'When the post was last updated' })\n\n // Post-Publication Association (Many-to-One)\n postEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this post belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Post-Category Association (Many-to-Many)\n postEntity.addAssociation(\n { key: categoryEntity.key },\n {\n info: { name: 'categories', displayName: 'Post Categories', description: 'Categories this post belongs to' },\n required: false,\n multiple: true,\n semantics: [{ id: SemanticType.Categories }],\n }\n )\n\n // Post-Tag Association (Many-to-Many)\n postEntity.addAssociation(\n { key: tagEntity.key },\n {\n info: { name: 'tags', displayName: 'Post Tags', description: 'Tags associated with this post' },\n required: false,\n multiple: true,\n semantics: [{ id: SemanticType.Tags }],\n }\n )\n\n //\n // 2. USER MANAGEMENT NAMESPACE\n //\n const userManagement = domain.addNamespace({\n info: {\n name: 'UserManagement',\n displayName: 'User Management',\n description: 'Authors, editors, subscribers, and user roles management',\n },\n })\n\n // User Model\n const userModel = userManagement.addModel({\n info: {\n name: 'Users',\n displayName: 'User Management',\n description: 'User accounts and authentication',\n },\n })\n\n // User Entity\n const userEntity = userModel.addEntity({\n info: {\n name: 'user',\n displayName: 'User Account',\n description: 'User account for authors, editors, and subscribers',\n },\n semantics: [{ id: SemanticType.User }],\n })\n\n addIdField(userEntity, { displayName: 'User ID', description: 'Unique identifier for the user' })\n\n addEmailField(userEntity, { description: 'User email address for login and communication' })\n\n addPasswordField(userEntity, { description: 'Encrypted password for authentication' })\n\n userEntity.addProperty({\n info: { name: 'username', displayName: 'Username', description: 'Unique username for the user' },\n type: 'string',\n required: true,\n unique: true,\n semantics: [{ id: SemanticType.PublicUniqueName }],\n })\n\n userEntity.addProperty({\n info: { name: 'display_name', displayName: 'Display Name', description: 'Public display name for the user' },\n type: 'string',\n required: true,\n })\n\n addFirstNameField(userEntity, { description: 'User first name' })\n addLastNameField(userEntity, { description: 'User last name' })\n\n userEntity.addProperty({\n info: { name: 'bio', displayName: 'Biography', description: 'User biography and description' },\n type: 'string',\n semantics: [{ id: SemanticType.Description }],\n })\n\n addAvatarUrlField(userEntity, { description: 'URL to user profile picture' })\n\n userEntity.addProperty({\n info: { name: 'website', displayName: 'Website', description: 'User personal website URL' },\n type: 'string',\n semantics: [createURLSemantic()],\n })\n\n // userEntity.addProperty({\n // info: {\n // name: 'social_links',\n // displayName: 'Social Links',\n // description: 'JSON object containing social media links',\n // },\n // type: 'string',\n // // semantics: [{ id: SemanticType.SocialMediaLinks }],\n // })\n\n addCustomStatusField(userEntity, ['subscriber', 'author', 'editor', 'admin', 'super_admin'], {\n name: 'role',\n displayName: 'User Role',\n description: 'User role for permission management',\n })\n\n addCustomStatusField(userEntity, ['active', 'inactive', 'suspended', 'pending_verification'], {\n displayName: 'User Status',\n description: 'Current status of the user account',\n })\n\n addBooleanField(userEntity, 'emailVerified', 'false', {\n displayName: 'Email Verified',\n description: 'Whether the user has verified their email',\n })\n\n // userEntity.addProperty({\n // info: { name: 'last_login_at', displayName: 'Last Login At', description: 'When the user last logged in' },\n // type: 'datetime',\n // readOnly: true,\n // semantics: [{ id: SemanticType.LastLoginTimestamp }],\n // })\n\n addCreatedAtField(userEntity, { description: 'When the user account was created' })\n\n // Post-Author Association (Many-to-One)\n postEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'author', displayName: 'Post Author', description: 'Author who wrote this post' },\n required: true,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n //\n // 3. SOCIAL FEATURES NAMESPACE\n //\n const socialFeatures = domain.addNamespace({\n info: {\n name: 'SocialFeatures',\n displayName: 'Social Features',\n description: 'Comments, likes, shares, and social interactions',\n },\n })\n\n // Comment Model\n const commentModel = socialFeatures.addModel({\n info: {\n name: 'Comments',\n displayName: 'Comment System',\n description: 'Post comments and replies',\n },\n })\n\n // Comment Entity\n const commentEntity = commentModel.addEntity({\n info: {\n name: 'comment',\n displayName: 'Comment',\n description: 'User comments on posts',\n },\n })\n\n addIdField(commentEntity, { displayName: 'Comment ID', description: 'Unique identifier for the comment' })\n\n commentEntity.addProperty({\n info: { name: 'content', displayName: 'Comment Content', description: 'Content of the comment' },\n type: 'string',\n required: true,\n })\n\n commentEntity.addProperty({\n info: {\n name: 'author_name',\n displayName: 'Author Name',\n description: 'Name of the comment author (for guest comments)',\n },\n type: 'string',\n })\n\n addEmailField(commentEntity, {\n name: 'author_email',\n displayName: 'Author Email',\n description: 'Email of the comment author (for guest comments)',\n })\n\n addCustomStatusField(commentEntity, ['pending', 'approved', 'rejected', 'spam'], {\n displayName: 'Comment Status',\n description: 'Moderation status of the comment',\n })\n\n // commentEntity.addProperty({\n // info: { name: 'ip_address', displayName: 'IP Address', description: 'IP address of the commenter' },\n // type: 'string',\n // semantics: [{ id: SemanticType.IPAddress }],\n // })\n\n commentEntity.addProperty({\n info: { name: 'user_agent', displayName: 'User Agent', description: 'Browser user agent string' },\n type: 'string',\n })\n\n addCreatedAtField(commentEntity, { description: 'When the comment was created' })\n\n // Comment-Post Association (Many-to-One)\n commentEntity.addAssociation(\n { key: postEntity.key },\n {\n info: { name: 'post', displayName: 'Post', description: 'Post this comment belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Comment-User Association (Many-to-One) - Optional for guest comments\n commentEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'author', displayName: 'Comment Author', description: 'Registered user who wrote this comment' },\n required: false,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n // Self-referencing association for comment replies\n commentEntity.addAssociation(\n { key: commentEntity.key },\n {\n info: { name: 'parent_comment', displayName: 'Parent Comment', description: 'Parent comment for replies' },\n required: false,\n multiple: false,\n }\n )\n\n //\n // 4. ANALYTICS NAMESPACE\n //\n const analytics = domain.addNamespace({\n info: {\n name: 'Analytics',\n displayName: 'Analytics & Tracking',\n description: 'Analytics, metrics, and performance tracking',\n },\n })\n\n // Analytics Model\n const analyticsModel = analytics.addModel({\n info: {\n name: 'Analytics',\n displayName: 'Content Analytics',\n description: 'Content performance and user engagement metrics',\n },\n })\n\n // Page View Entity\n const pageViewEntity = analyticsModel.addEntity({\n info: {\n name: 'page_view',\n displayName: 'Page View',\n description: 'Individual page view tracking record',\n },\n })\n\n addIdField(pageViewEntity, { displayName: 'Page View ID', description: 'Unique identifier for the page view' })\n\n pageViewEntity.addProperty({\n info: { name: 'path', displayName: 'Page Path', description: 'URL path of the viewed page' },\n type: 'string',\n required: true,\n })\n\n pageViewEntity.addProperty({\n info: { name: 'referrer', displayName: 'Referrer', description: 'Referring URL' },\n type: 'string',\n semantics: [createURLSemantic()],\n })\n\n // pageViewEntity.addProperty({\n // info: { name: 'ip_address', displayName: 'IP Address', description: 'Visitor IP address' },\n // type: 'string',\n // semantics: [{ id: SemanticType.IPAddress }],\n // })\n\n pageViewEntity.addProperty({\n info: { name: 'user_agent', displayName: 'User Agent', description: 'Browser user agent string' },\n type: 'string',\n })\n\n pageViewEntity.addProperty({\n info: { name: 'session_id', displayName: 'Session ID', description: 'Visitor session identifier' },\n type: 'string',\n })\n\n addCreatedAtField(pageViewEntity, {\n name: 'viewed_at',\n displayName: 'Viewed At',\n description: 'When the page was viewed',\n })\n\n // PageView-Post Association (Many-to-One) - Optional, only for post views\n pageViewEntity.addAssociation(\n { key: postEntity.key },\n {\n info: { name: 'post', displayName: 'Viewed Post', description: 'Post that was viewed (if applicable)' },\n required: false,\n multiple: false,\n }\n )\n\n // PageView-Publication Association (Many-to-One)\n pageViewEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this page view belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 5. MEDIA MANAGEMENT NAMESPACE\n //\n const mediaManagement = domain.addNamespace({\n info: {\n name: 'MediaManagement',\n displayName: 'Media Management',\n description: 'Image, video, and file upload management',\n },\n })\n\n // Media Model\n const mediaModel = mediaManagement.addModel({\n info: {\n name: 'Media',\n displayName: 'Media Library',\n description: 'Uploaded files, images, and media assets',\n },\n })\n\n // Media File Entity\n const mediaFileEntity = mediaModel.addEntity({\n info: {\n name: 'media_file',\n displayName: 'Media File',\n description: 'Uploaded media files (images, videos, documents)',\n },\n })\n\n addIdField(mediaFileEntity, { displayName: 'Media File ID', description: 'Unique identifier for the media file' })\n\n mediaFileEntity.addProperty({\n info: { name: 'filename', displayName: 'File Name', description: 'Original filename of the uploaded file' },\n type: 'string',\n required: true,\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'storage_key', displayName: 'Storage Key', description: 'Unique storage key for the file' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'url', displayName: 'File URL', description: 'Public URL to access the file' },\n type: 'string',\n required: true,\n semantics: [createURLSemantic()],\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'mime_type', displayName: 'MIME Type', description: 'MIME type of the file' },\n type: 'string',\n required: true,\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'file_size',\n displayName: 'File Size',\n description: 'File size in bytes',\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'width',\n displayName: 'Image Width',\n description: 'Width in pixels (for images)',\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'height',\n displayName: 'Image Height',\n description: 'Height in pixels (for images)',\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'alt_text', displayName: 'Alt Text', description: 'Alternative text for accessibility' },\n type: 'string',\n // semantics: [{ id: SemanticType.ImageAltText }],\n })\n\n addCreatedAtField(mediaFileEntity, {\n name: 'uploaded_at',\n displayName: 'Uploaded At',\n description: 'When the file was uploaded',\n })\n\n // MediaFile-User Association (Many-to-One)\n mediaFileEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'uploader', displayName: 'File Uploader', description: 'User who uploaded this file' },\n required: true,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n // MediaFile-Publication Association (Many-to-One)\n mediaFileEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this media file belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n return domain\n}\n"]}
|
|
1
|
+
{"version":3,"file":"blog-domain.js","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/technology-media/blog-domain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Blog/Publishing Data Domain Example\n *\n * This file demonstrates how to create a comprehensive blog/publishing data domain\n * using the API Client Core modeling system. It follows the business-first approach\n * and demonstrates proper use of namespaces, models, entities, properties,\n * associations, and semantic annotations.\n *\n * The example includes:\n * - Content Management with posts, pages, and media\n * - User Management with authors, editors, and subscribers\n * - Publishing Workflow with drafts, reviews, and publication\n * - Social Features with comments, likes, and sharing\n * - Analytics and SEO with metadata and tracking\n * - Multi-tenant support for multiple blogs/publications\n *\n * @example\n * ```typescript\n * import { createBlogDomain } from './blog-domain.js'\n *\n * const domain = createBlogDomain()\n * console.log('Blog domain created with', domain.graph.nodeCount(), 'nodes')\n * ```\n */\n\nimport { DataDomain } from '../../../DataDomain.js'\nimport { SemanticType } from '../../../Semantics.js'\nimport { createCalculatedSemantic } from '../../../definitions/Calculated.js'\nimport { createURLSemantic } from '../../../definitions/URL.js'\nimport {\n addIdField,\n addNameField,\n addDescriptionField,\n addPublicUniqueNameField,\n addCustomStatusField,\n addCreatedAtField,\n addUpdatedAtField,\n addEmailField,\n addPasswordField,\n addFirstNameField,\n addLastNameField,\n addAvatarUrlField,\n addBooleanField,\n addQuantityField,\n} from '../../../helpers/Intelisense.js'\nimport type { CreateTemplateOptions } from '../../types.js'\n\nfunction createDomain(): DataDomain {\n return new DataDomain({\n info: {\n name: 'Blog Publishing Platform',\n displayName: 'Blog Publishing Platform',\n description:\n 'A comprehensive content management and publishing platform for blogs, magazines, and digital publications',\n },\n })\n}\n\n/**\n * Creates a comprehensive blog/publishing data domain following domain-driven design principles.\n *\n * This function demonstrates the proper hierarchy and organization for a publishing platform:\n * 1. Creates the root DataDomain for the publishing platform\n * 2. Organizes functionality into logical namespaces (Content, Users, Publishing, etc.)\n * 3. Groups related entities into models within each namespace\n * 4. Defines entities with proper semantic annotations for publishing workflows\n * 5. Establishes associations with appropriate cardinality for content relationships\n *\n * @returns A fully configured DataDomain with all blog/publishing entities and relationships\n */\nexport default function createBlogDomain(options: CreateTemplateOptions = {}): DataDomain {\n // Ensure the root data domain\n const domain = options.domain ?? createDomain()\n\n //\n // 1. CONTENT MANAGEMENT NAMESPACE\n //\n const contentManagement = domain.addNamespace({\n info: {\n name: 'ContentManagement',\n displayName: 'Content Management',\n description: 'Core content creation, editing, and organization features',\n },\n })\n\n // Publication Model - Multi-tenant support\n const publicationModel = contentManagement.addModel({\n info: {\n name: 'Publications',\n displayName: 'Publications Management',\n description: 'Individual blogs, magazines, or publications within the platform',\n },\n })\n\n // Publication Entity - Represents individual blogs/publications\n const publicationEntity = publicationModel.addEntity({\n info: {\n name: 'publication',\n displayName: 'Publication',\n description: 'Individual blog or publication site',\n },\n })\n\n addIdField(publicationEntity, { displayName: 'Publication ID', description: 'Unique identifier for the publication' })\n\n addNameField(publicationEntity, { displayName: 'Publication Name', description: 'Display name of the publication' })\n\n addPublicUniqueNameField(publicationEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the publication',\n })\n\n addDescriptionField(publicationEntity, { description: 'Publication description and tagline' })\n\n publicationEntity.addProperty({\n info: { name: 'domain', displayName: 'Custom Domain', description: 'Custom domain name for the publication' },\n type: 'string',\n // semantics: [{ id: SemanticType.DomainName }],\n })\n\n publicationEntity.addProperty({\n info: { name: 'logo_url', displayName: 'Logo URL', description: 'URL to publication logo image' },\n type: 'string',\n semantics: [{ id: SemanticType.ImageURL }],\n })\n\n addCustomStatusField(publicationEntity, ['active', 'suspended', 'archived'], {\n displayName: 'Publication Status',\n description: 'Current status of the publication',\n })\n\n addCreatedAtField(publicationEntity, { description: 'When the publication was created' })\n\n // Content Model\n const contentModel = contentManagement.addModel({\n info: {\n name: 'Content',\n displayName: 'Content Management',\n description: 'Posts, pages, and other content types',\n },\n })\n\n // Category Entity\n const categoryEntity = contentModel.addEntity({\n info: {\n name: 'category',\n displayName: 'Content Category',\n description: 'Content categorization for organization and navigation',\n },\n })\n\n addIdField(categoryEntity, { displayName: 'Category ID', description: 'Unique identifier for the category' })\n\n addNameField(categoryEntity, { displayName: 'Category Name', description: 'Display name of the category' })\n\n addPublicUniqueNameField(categoryEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the category',\n })\n\n addDescriptionField(categoryEntity, { description: 'Category description' })\n\n categoryEntity.addProperty({\n info: { name: 'color', displayName: 'Color', description: 'Theme color for the category' },\n type: 'string',\n // semantics: [{ id: SemanticType.Color }],\n })\n\n // Category-Publication Association (Many-to-One)\n categoryEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this category belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Self-referencing association for category hierarchy\n categoryEntity.addAssociation(\n { key: categoryEntity.key },\n {\n info: {\n name: 'parentCategory',\n displayName: 'Parent Category',\n description: 'Parent category for hierarchical organization',\n },\n required: false,\n multiple: false,\n }\n )\n\n // Tag Entity\n const tagEntity = contentModel.addEntity({\n info: {\n name: 'Tag',\n displayName: 'Content Tag',\n description: 'Tags for flexible content labeling and discovery',\n },\n })\n\n addIdField(tagEntity, { displayName: 'Tag ID', description: 'Unique identifier for the tag' })\n\n addNameField(tagEntity, { displayName: 'Tag Name', description: 'Display name of the tag' })\n\n addPublicUniqueNameField(tagEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the tag',\n })\n\n // Tag-Publication Association (Many-to-One)\n tagEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this tag belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Post Entity - Main content type\n const postEntity = contentModel.addEntity({\n info: {\n name: 'Post',\n displayName: 'Blog Post',\n description: 'Individual blog posts and articles',\n },\n })\n\n addIdField(postEntity, { displayName: 'Post ID', description: 'Unique identifier for the post' })\n\n postEntity.addProperty({\n info: { name: 'title', displayName: 'Post Title', description: 'Title of the blog post' },\n type: 'string',\n required: true,\n semantics: [{ id: SemanticType.Title }],\n })\n\n addPublicUniqueNameField(postEntity, {\n name: 'slug',\n displayName: 'URL Slug',\n description: 'URL-friendly identifier for the post',\n })\n\n postEntity.addProperty({\n info: { name: 'excerpt', displayName: 'Excerpt', description: 'Brief summary or excerpt of the post' },\n type: 'string',\n semantics: [{ id: SemanticType.Summary }],\n })\n\n const postContent = postEntity.addProperty({\n info: { name: 'content', displayName: 'Content', description: 'Full content of the post in HTML or Markdown' },\n type: 'string',\n required: true,\n semantics: [{ id: SemanticType.HTML }],\n })\n\n postEntity.addProperty({\n info: {\n name: 'content_format',\n displayName: 'Content Format',\n description: 'Format of the content (HTML, Markdown, etc.)',\n },\n type: 'string',\n required: true,\n schema: {\n enum: ['html', 'markdown', 'richtext'],\n defaultValue: { type: 'literal', value: 'markdown' },\n },\n })\n\n postEntity.addProperty({\n info: { name: 'featured_image_url', displayName: 'Featured Image URL', description: 'URL to featured image' },\n type: 'string',\n semantics: [{ id: SemanticType.ImageURL }],\n })\n\n addCustomStatusField(postEntity, ['draft', 'pending_review', 'scheduled', 'published', 'archived'], {\n displayName: 'Post Status',\n description: 'Current publishing status of the post',\n })\n\n addCreatedAtField(postEntity, {\n name: 'published_at',\n displayName: 'Published At',\n description: 'When the post was published',\n })\n\n postEntity.addProperty({\n info: {\n name: 'scheduled_at',\n displayName: 'Scheduled At',\n description: 'When the post is scheduled to be published',\n },\n type: 'datetime',\n })\n\n addQuantityField(postEntity, {\n name: 'view_count',\n displayName: 'View Count',\n description: 'Number of times the post has been viewed',\n })\n\n postEntity.addProperty({\n info: { name: 'reading_time', displayName: 'Reading Time', description: 'Estimated reading time in minutes' },\n type: 'number',\n readOnly: true,\n semantics: [\n createCalculatedSemantic({\n formula: `CEIL(LENGTH(REPLACE({{${postContent.key}}}, \" \", \"\")) / 250)`,\n dependencies: [postContent.key],\n recalculateOnUpdate: true,\n }),\n ],\n })\n\n postEntity.addProperty({\n info: { name: 'word_count', displayName: 'Word Count', description: 'Number of words in the post content' },\n type: 'number',\n readOnly: true,\n semantics: [\n createCalculatedSemantic({\n formula: `LENGTH({{${postContent.key}}}) - LENGTH(REPLACE({{${postContent.key}}}, \" \", \"\")) + 1`,\n dependencies: [postContent.key],\n recalculateOnUpdate: true,\n }),\n ],\n })\n\n postEntity.addProperty({\n info: { name: 'meta_title', displayName: 'Meta Title', description: 'SEO meta title' },\n type: 'string',\n // semantics: [{ id: SemanticType.SEOTitle }],\n })\n\n postEntity.addProperty({\n info: { name: 'meta_description', displayName: 'Meta Description', description: 'SEO meta description' },\n type: 'string',\n // semantics: [{ id: SemanticType.SEODescription }],\n })\n\n addCreatedAtField(postEntity, { description: 'When the post was created' })\n addUpdatedAtField(postEntity, { description: 'When the post was last updated' })\n\n // Post-Publication Association (Many-to-One)\n postEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this post belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Post-Category Association (Many-to-Many)\n postEntity.addAssociation(\n { key: categoryEntity.key },\n {\n info: { name: 'categories', displayName: 'Post Categories', description: 'Categories this post belongs to' },\n required: false,\n multiple: true,\n semantics: [{ id: SemanticType.Categories }],\n }\n )\n\n // Post-Tag Association (Many-to-Many)\n postEntity.addAssociation(\n { key: tagEntity.key },\n {\n info: { name: 'tags', displayName: 'Post Tags', description: 'Tags associated with this post' },\n required: false,\n multiple: true,\n semantics: [{ id: SemanticType.Tags }],\n }\n )\n\n //\n // 2. USER MANAGEMENT NAMESPACE\n //\n const userManagement = domain.addNamespace({\n info: {\n name: 'UserManagement',\n displayName: 'User Management',\n description: 'Authors, editors, subscribers, and user roles management',\n },\n })\n\n // User Model\n const userModel = userManagement.addModel({\n info: {\n name: 'Users',\n displayName: 'User Management',\n description: 'User accounts and authentication',\n },\n })\n\n // User Entity\n const userEntity = userModel.addEntity({\n info: {\n name: 'user',\n displayName: 'User Account',\n description: 'User account for authors, editors, and subscribers',\n },\n semantics: [{ id: SemanticType.User }],\n })\n\n addIdField(userEntity, { displayName: 'User ID', description: 'Unique identifier for the user' })\n\n addEmailField(userEntity, { description: 'User email address for login and communication' })\n\n addPasswordField(userEntity, { description: 'Encrypted password for authentication' })\n\n userEntity.addProperty({\n info: { name: 'username', displayName: 'Username', description: 'Unique username for the user' },\n type: 'string',\n required: true,\n unique: true,\n semantics: [{ id: SemanticType.PublicUniqueName }],\n })\n\n userEntity.addProperty({\n info: { name: 'display_name', displayName: 'Display Name', description: 'Public display name for the user' },\n type: 'string',\n required: true,\n })\n\n addFirstNameField(userEntity, { description: 'User first name' })\n addLastNameField(userEntity, { description: 'User last name' })\n\n userEntity.addProperty({\n info: { name: 'bio', displayName: 'Biography', description: 'User biography and description' },\n type: 'string',\n semantics: [{ id: SemanticType.Description }],\n })\n\n addAvatarUrlField(userEntity, { description: 'URL to user profile picture' })\n\n userEntity.addProperty({\n info: { name: 'website', displayName: 'Website', description: 'User personal website URL' },\n type: 'string',\n semantics: [createURLSemantic()],\n })\n\n // userEntity.addProperty({\n // info: {\n // name: 'social_links',\n // displayName: 'Social Links',\n // description: 'JSON object containing social media links',\n // },\n // type: 'string',\n // // semantics: [{ id: SemanticType.SocialMediaLinks }],\n // })\n\n addCustomStatusField(userEntity, ['subscriber', 'author', 'editor', 'admin', 'super_admin'], {\n name: 'role',\n displayName: 'User Role',\n description: 'User role for permission management',\n })\n\n addCustomStatusField(userEntity, ['active', 'inactive', 'suspended', 'pending_verification'], {\n displayName: 'User Status',\n description: 'Current status of the user account',\n })\n\n addBooleanField(userEntity, 'emailVerified', 'false', {\n displayName: 'Email Verified',\n description: 'Whether the user has verified their email',\n })\n\n // userEntity.addProperty({\n // info: { name: 'last_login_at', displayName: 'Last Login At', description: 'When the user last logged in' },\n // type: 'datetime',\n // readOnly: true,\n // semantics: [{ id: SemanticType.LastLoginTimestamp }],\n // })\n\n addCreatedAtField(userEntity, { description: 'When the user account was created' })\n\n // Post-Author Association (Many-to-One)\n postEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'author', displayName: 'Post Author', description: 'Author who wrote this post' },\n required: true,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n //\n // 3. SOCIAL FEATURES NAMESPACE\n //\n const socialFeatures = domain.addNamespace({\n info: {\n name: 'SocialFeatures',\n displayName: 'Social Features',\n description: 'Comments, likes, shares, and social interactions',\n },\n })\n\n // Comment Model\n const commentModel = socialFeatures.addModel({\n info: {\n name: 'Comments',\n displayName: 'Comment System',\n description: 'Post comments and replies',\n },\n })\n\n // Comment Entity\n const commentEntity = commentModel.addEntity({\n info: {\n name: 'comment',\n displayName: 'Comment',\n description: 'User comments on posts',\n },\n })\n\n addIdField(commentEntity, { displayName: 'Comment ID', description: 'Unique identifier for the comment' })\n\n commentEntity.addProperty({\n info: { name: 'content', displayName: 'Comment Content', description: 'Content of the comment' },\n type: 'string',\n required: true,\n })\n\n commentEntity.addProperty({\n info: {\n name: 'author_name',\n displayName: 'Author Name',\n description: 'Name of the comment author (for guest comments)',\n },\n type: 'string',\n })\n\n addEmailField(commentEntity, {\n name: 'author_email',\n displayName: 'Author Email',\n description: 'Email of the comment author (for guest comments)',\n })\n\n addCustomStatusField(commentEntity, ['pending', 'approved', 'rejected', 'spam'], {\n displayName: 'Comment Status',\n description: 'Moderation status of the comment',\n })\n\n // commentEntity.addProperty({\n // info: { name: 'ip_address', displayName: 'IP Address', description: 'IP address of the commenter' },\n // type: 'string',\n // semantics: [{ id: SemanticType.IPAddress }],\n // })\n\n commentEntity.addProperty({\n info: { name: 'user_agent', displayName: 'User Agent', description: 'Browser user agent string' },\n type: 'string',\n })\n\n addCreatedAtField(commentEntity, { description: 'When the comment was created' })\n\n // Comment-Post Association (Many-to-One)\n commentEntity.addAssociation(\n { key: postEntity.key },\n {\n info: { name: 'post', displayName: 'Post', description: 'Post this comment belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n // Comment-User Association (Many-to-One) - Optional for guest comments\n commentEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'author', displayName: 'Comment Author', description: 'Registered user who wrote this comment' },\n required: false,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n // Self-referencing association for comment replies\n commentEntity.addAssociation(\n { key: commentEntity.key },\n {\n info: { name: 'parent_comment', displayName: 'Parent Comment', description: 'Parent comment for replies' },\n required: false,\n multiple: false,\n }\n )\n\n //\n // 4. ANALYTICS NAMESPACE\n //\n const analytics = domain.addNamespace({\n info: {\n name: 'Analytics',\n displayName: 'Analytics & Tracking',\n description: 'Analytics, metrics, and performance tracking',\n },\n })\n\n // Analytics Model\n const analyticsModel = analytics.addModel({\n info: {\n name: 'Analytics',\n displayName: 'Content Analytics',\n description: 'Content performance and user engagement metrics',\n },\n })\n\n // Page View Entity\n const pageViewEntity = analyticsModel.addEntity({\n info: {\n name: 'page_view',\n displayName: 'Page View',\n description: 'Individual page view tracking record',\n },\n })\n\n addIdField(pageViewEntity, { displayName: 'Page View ID', description: 'Unique identifier for the page view' })\n\n pageViewEntity.addProperty({\n info: { name: 'path', displayName: 'Page Path', description: 'URL path of the viewed page' },\n type: 'string',\n required: true,\n })\n\n pageViewEntity.addProperty({\n info: { name: 'referrer', displayName: 'Referrer', description: 'Referring URL' },\n type: 'string',\n semantics: [createURLSemantic()],\n })\n\n pageViewEntity.addProperty({\n info: { name: 'ip_address', displayName: 'IP Address', description: 'Visitor IP address' },\n type: 'string',\n semantics: [{ id: SemanticType.ClientIPAddress }],\n })\n\n pageViewEntity.addProperty({\n info: { name: 'user_agent', displayName: 'User Agent', description: 'Browser user agent string' },\n type: 'string',\n })\n\n pageViewEntity.addProperty({\n info: { name: 'session_id', displayName: 'Session ID', description: 'Visitor session identifier' },\n type: 'string',\n })\n\n addCreatedAtField(pageViewEntity, {\n name: 'viewed_at',\n displayName: 'Viewed At',\n description: 'When the page was viewed',\n })\n\n // PageView-Post Association (Many-to-One) - Optional, only for post views\n pageViewEntity.addAssociation(\n { key: postEntity.key },\n {\n info: { name: 'post', displayName: 'Viewed Post', description: 'Post that was viewed (if applicable)' },\n required: false,\n multiple: false,\n }\n )\n\n // PageView-Publication Association (Many-to-One)\n pageViewEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this page view belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n //\n // 5. MEDIA MANAGEMENT NAMESPACE\n //\n const mediaManagement = domain.addNamespace({\n info: {\n name: 'MediaManagement',\n displayName: 'Media Management',\n description: 'Image, video, and file upload management',\n },\n })\n\n // Media Model\n const mediaModel = mediaManagement.addModel({\n info: {\n name: 'Media',\n displayName: 'Media Library',\n description: 'Uploaded files, images, and media assets',\n },\n })\n\n // Media File Entity\n const mediaFileEntity = mediaModel.addEntity({\n info: {\n name: 'media_file',\n displayName: 'Media File',\n description: 'Uploaded media files (images, videos, documents)',\n },\n })\n\n addIdField(mediaFileEntity, { displayName: 'Media File ID', description: 'Unique identifier for the media file' })\n\n mediaFileEntity.addProperty({\n info: { name: 'filename', displayName: 'File Name', description: 'Original filename of the uploaded file' },\n type: 'string',\n required: true,\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'storage_key', displayName: 'Storage Key', description: 'Unique storage key for the file' },\n type: 'string',\n required: true,\n unique: true,\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'url', displayName: 'File URL', description: 'Public URL to access the file' },\n type: 'string',\n required: true,\n semantics: [createURLSemantic()],\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'mime_type', displayName: 'MIME Type', description: 'MIME type of the file' },\n type: 'string',\n required: true,\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'file_size',\n displayName: 'File Size',\n description: 'File size in bytes',\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'width',\n displayName: 'Image Width',\n description: 'Width in pixels (for images)',\n })\n\n addQuantityField(mediaFileEntity, {\n name: 'height',\n displayName: 'Image Height',\n description: 'Height in pixels (for images)',\n })\n\n mediaFileEntity.addProperty({\n info: { name: 'alt_text', displayName: 'Alt Text', description: 'Alternative text for accessibility' },\n type: 'string',\n // semantics: [{ id: SemanticType.ImageAltText }],\n })\n\n addCreatedAtField(mediaFileEntity, {\n name: 'uploaded_at',\n displayName: 'Uploaded At',\n description: 'When the file was uploaded',\n })\n\n // MediaFile-User Association (Many-to-One)\n mediaFileEntity.addAssociation(\n { key: userEntity.key },\n {\n info: { name: 'uploader', displayName: 'File Uploader', description: 'User who uploaded this file' },\n required: true,\n multiple: false,\n semantics: [{ id: SemanticType.ResourceOwnerIdentifier }],\n }\n )\n\n // MediaFile-Publication Association (Many-to-One)\n mediaFileEntity.addAssociation(\n { key: publicationEntity.key },\n {\n info: { name: 'publication', displayName: 'Publication', description: 'Publication this media file belongs to' },\n required: true,\n multiple: false,\n }\n )\n\n return domain\n}\n"]}
|
package/build/src/modeling/templates/verticals/technology-media/iot-smart-home-domain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iot-smart-home-domain.d.ts","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/technology-media/iot-smart-home-domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"iot-smart-home-domain.d.ts","sourceRoot":"","sources":["../../../../../../src/modeling/templates/verticals/technology-media/iot-smart-home-domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAYnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAc3D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,OAAO,GAAE,qBAA0B,GAAG,UAAU,CAksChG"}
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import { DataDomain } from '../../../DataDomain.js';
|
|
33
33
|
import { addIdField, addNameField, addDescriptionField, addEmailField, addPhoneField, addCustomStatusField, addCreatedAtField, addUpdatedAtField, } from '../../../helpers/Intelisense.js';
|
|
34
|
+
import { SemanticType } from '../../../Semantics.js';
|
|
34
35
|
function createDomain() {
|
|
35
36
|
return new DataDomain({
|
|
36
37
|
info: {
|
|
@@ -130,6 +131,7 @@ export default function createIoTSmartHomeDomain(options = {}) {
|
|
|
130
131
|
info: { name: 'ip_address', displayName: 'IP Address', description: 'Device IP address' },
|
|
131
132
|
type: 'string',
|
|
132
133
|
required: false,
|
|
134
|
+
semantics: [{ id: SemanticType.ClientIPAddress }],
|
|
133
135
|
});
|
|
134
136
|
deviceEntity.addProperty({
|
|
135
137
|
info: { name: 'location', displayName: 'Location', description: 'Device location in home' },
|