Shared database models and utilities for email campaign system
npm install verasity-shared-modelsbash
Configure npm to use GitHub Packages
npm config set @verasity:registry https://npm.pkg.github.com
Install the package
npm install @verasity/shared-models
`
$3
`bash
Clone and install locally
git clone https://github.com/yourcompany/shared-models.git
cd shared-models
npm install
npm link
In your project
npm link @verasity/shared-models
`
Usage
$3
`javascript
const { EmailCampaign, EmailTemplate, EmailTracking } = require('@verasity/shared-models');
// Use models directly
const campaign = new EmailCampaign({
campaign_name: 'Test Campaign',
user_id: userId,
// ... other fields
});
`
$3
`javascript
const { campaigns, templates, users, utils } = require('@verasity/shared-models');
// Access models by category
const campaign = new campaigns.EmailCampaign({ / ... / });
const template = new templates.EmailTemplate({ / ... / });
const user = new users.User({ / ... / });
// Use utilities
const riskCategory = utils.campaignUtils.getRiskCategory(75);
const isValid = utils.validationUtils.isValidEmail('test@example.com');
`
$3
`javascript
const { constants } = require('@verasity/shared-models');
// Use application constants
if (campaign.status === constants.CAMPAIGN_STATUS.COMPLETED) {
// Handle completed campaign
}
// Credit types
const emailCredits = await CreditModel.findByCode(userId, constants.CREDIT_TYPES.EMAIL_CREDITS);
`
Available Models
$3
- EmailCampaign: Email campaign management with risk-based assignment
- SmsCampaign: SMS campaign management (TODO)
- VoiceCampaign: Voice campaign management (TODO)
- VideoCampaign: Video campaign management (TODO)
$3
- EmailTemplate: Email template with performance metrics
- SmsTemplate: SMS template (TODO)
- VoiceTemplate: Voice template (TODO)
$3
- EmailLandingPage: Landing pages with conversion tracking
- SmsLandingPage: SMS landing pages (TODO)
$3
- EmailTracking: Comprehensive email tracking events
- SmsTracking: SMS tracking (TODO)
$3
- User: Main user accounts with subscription management
- GroupUser: Individual users within groups for campaigns
- Group: User group management with analytics
$3
- CreditModel: Credit management with expiration and renewal
- Assignment: Credit assignment tracking and audit trail
$3
- RiskScore: User risk scoring with behavioral analysis
Utilities
$3
`javascript
const { campaignUtils } = require('@verasity/shared-models').utils;
// Risk category calculation
const category = campaignUtils.getRiskCategory(riskScore);
// Campaign validation
const validation = campaignUtils.validateTemplateMappings(mappings, templates, landingPages);
// Processing time estimation
const estimatedTime = campaignUtils.estimateProcessingTime(userCount, batchSize);
`
$3
`javascript
const { userUtils } = require('@verasity/shared-models').utils;
// Email validation
const isValid = userUtils.isValidEmail(email);
// User data sanitization
const cleanData = userUtils.sanitizeUserData(rawUserData);
// Engagement calculation
const engagement = userUtils.calculateEngagementScore(user);
`
$3
`javascript
const { validationUtils } = require('@verasity/shared-models').utils;
// Schema validation
const result = validationUtils.validateAndSanitize(data, schema);
// Campaign data validation
const campaignValidation = validationUtils.validateCampaignData(campaign);
`
$3
`javascript
const { trackingUtils } = require('@verasity/shared-models').utils;
// Generate tracking pixels
const pixel = trackingUtils.generateTrackingPixel(campaignId, userId, baseUrl);
// Calculate engagement metrics
const metrics = trackingUtils.calculateEngagementMetrics(trackingEvents);
// Performance reporting
const report = trackingUtils.generatePerformanceReport(campaignId, events);
`
Constants
All application constants are available through the constants export:
`javascript
const { constants } = require('@verasity/shared-models');
// Campaign status
constants.CAMPAIGN_STATUS.DRAFT
constants.CAMPAIGN_STATUS.PROCESSING
constants.CAMPAIGN_STATUS.COMPLETED
// Credit types
constants.CREDIT_TYPES.EMAIL_CAMPAIGNS
constants.CREDIT_TYPES.EMAIL_CREDITS
// Risk levels
constants.RISK_LEVELS.LOW
constants.RISK_LEVELS.MEDIUM
constants.RISK_LEVELS.HIGH
// Default values
constants.DEFAULTS.BATCH_SIZE
constants.DEFAULTS.EMAIL_CONCURRENCY
`
Model Features
$3
#### Risk-Based Campaign Assignment
`javascript
const campaign = new EmailCampaign({
template_landing_mappings: [
{
template_id: templateId,
landing_page_id: landingPageId,
risk_score: 'high'
}
]
});
`
#### Credit Management with Expiration
`javascript
const credit = new CreditModel({
code: 'EMAIL_CREDITS',
credit: 1000,
expires_at: new Date(Date.now() + 30 24 60 60 1000), // 30 days
auto_renew: true
});
`
#### Comprehensive Tracking
`javascript
const tracking = new EmailTracking({
type: 'opened',
campaign_id: campaignId,
groupuser_id: userId,
device_info: {
device_type: 'mobile',
browser: 'Chrome',
os: 'iOS'
}
});
`
$3
Models include useful virtual properties:
`javascript
// Campaign success rate
console.log(campaign.successRate); // Calculated from emails_sent/total_users
// User engagement rate
console.log(user.engagement_rate); // Calculated from interaction metrics
// Credit usage percentage
console.log(credit.usage_percentage); // Calculated from used/initial
`
$3
Models provide helpful instance methods:
`javascript
// Update campaign progress
await campaign.updateProgress(emailsSent, emailsFailed);
// Record user interaction
await riskScore.recordCampaignInteraction('clicked', campaignId);
// Deduct credits
await credit.deductCredit(100, campaignId, 'campaign', 'Campaign execution');
`
Database Indexes
All models include optimized indexes for performance:
- Campaign queries: user_id + status, worker_instance + status
- User queries: email, group_id + isDeleted, risk_category
- Tracking queries: campaign_id + type, groupuser_id + type
- Credit queries: user_id + code, expires_at
Migration Guide
$3
If you're currently importing models individually:
`javascript
// Old way
const EmailCampaign = require('../models/EmailCampaign');
const EmailTemplate = require('../models/EmailTemplate');
// New way
const { EmailCampaign, EmailTemplate } = require('@verasity/shared-models');
`
$3
For worker servers, use the shared models:
`javascript
// worker-server/processors/emailCampaignProcessor.js
const { EmailCampaign, EmailTemplate, EmailTracking } = require('@verasity/shared-models');
// No need to maintain separate model files
`
Development
$3
1. Create the model file in the appropriate category folder
2. Add comprehensive schema with indexes and methods
3. Export from the main index.js file
4. Update this README with usage examples
5. Add tests for the new model
$3
`bash
Run tests (when implemented)
npm test
Lint code
npm run lint
Check for security vulnerabilities
npm audit
`
Publishing
$3
`bash
Build and publish
npm run prepublishOnly
npm publish
`
$3
`bash
Patch version (bug fixes)
npm version patch
Minor version (new features)
npm version minor
Major version (breaking changes)
npm version major
``