Database Schema
Overview
The service management module uses MongoDB with Mongoose ODM for data persistence. The schema supports complex service configurations with multilingual content, flexible pricing models, and rich presentation options following Domain-Driven Design principles.
Core Entities
Service Entity
Collection: service
Schema Definition: ServiceSchema
_id
ObjectId
Auto
Generated
Unique identifier
presentation
PresentationSchema
Yes
-
Visual presentation and branding
configuration
ServiceConfigurationSchema
No
-
Service behavior configuration
prepaymentPolicy
PaymentPolicySchema
Yes
-
Payment requirements and policies
schedules
Array<ScheduleSchema>
No
[]
Available time slots and scheduling
languageVersions
Array<LanguageVersionSchema>
Yes
-
Multilingual service descriptions
durationVersions
Array<DurationVersionSchema>
Yes
-
Duration options with pricing
specialists
Array<SpecialistSchema>
No
[]
Assigned specialists (migration)
order
Number
No
null
Display order for service listing
stateHistory
Array<StateHistorySchema>
No
[]
State change tracking
createdAt
Date
Auto
Current
Creation timestamp
updatedAt
Date
Auto
Current
Last update timestamp
Service Business Rules
Language Versions: At least one language version required
Duration Versions: At least one duration version required for bookable services
Presentation: Must include valid presentation configuration
Prepayment Policy: Required for all services
Order Uniqueness: Order numbers should be unique within tenant
Sub-Schemas
Presentation Schema (PresentationSchema)
PresentationSchema)Purpose: Manages visual presentation, branding, and media for services.
banners
Array<ObjectId>
No
[]
References to Media entities
color
String
No
-
Hex color code or color name
Configuration:
_id: false- No separate ID for sub-documenttimestamps: true- Tracks presentation changesref: Media.name- References Media collection
Business Rules:
Color must be valid hex format or recognized color name
Banners reference valid media files
Media files must be image format (JPEG, PNG, WebP)
Maximum file size enforcement at application level
Service Configuration Schema (ServiceConfigurationSchema)
ServiceConfigurationSchema)Purpose: Defines service behavior and operational settings.
duration
DurationConfigurationSchema
No
-
Duration-related configuration
Configuration:
_id: false- No separate ID for sub-documenttimestamps: true- Tracks configuration changes
Duration Configuration Schema (DurationConfigurationSchema)
DurationConfigurationSchema)Purpose: Configures how service duration is managed and presented.
durationVersionType
String
Yes
-
Duration configuration type
Enum Values:
RANGE: Fixed duration with optional breaksVARIABLE: Variable duration based on customer needs
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- No automatic timestamps
Payment Policy Schema (PaymentPolicySchema)
PaymentPolicySchema)Purpose: Defines payment requirements and cancellation policies.
isRequired
Boolean
Yes
-
Whether prepayment is mandatory
isPercentage
Boolean
No
-
Whether value is percentage or fixed
value
String
No
-
Prepayment amount or percentage
minimalCancelTime
String
No
-
Minimum cancellation time in seconds
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- No automatic timestamps
Business Rules:
When
isRequired: true, value should be providedPercentage values must be 0-100
Cancellation time must be positive integer
Value stored as string for precision
Duration Version Schema (DurationVersionSchema)
DurationVersionSchema)Purpose: Defines specific duration options with associated pricing.
breakInSeconds
Number
No
-
Break time after service completion
durationInSeconds
Number
Yes
-
Service duration in seconds
prices
Array<PriceSchema>
No
[]
Available pricing options
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- No automatic timestamps
Validation Rules:
Duration must be positive integer
Break time cannot be negative
At least one price should be provided for bookable services
Duration should be reasonable (5 minutes to 24 hours)
Price Schema (PriceSchema)
PriceSchema)Purpose: Defines pricing information with currency and language targeting.
price
Number
Yes
-
Price amount
currency
String
No
USD
ISO 4217 currency code
preferredLanguages
Array<String>
No
[]
Target languages for this price
Configuration:
_id: false- No separate ID for sub-documenttimestamps: true- Tracks price changesenum: CurrencyCodeEnum- Validates currency codesenum: LanguageCodeEnum- Validates language codes
Validation Rules:
Price must be positive number
Currency must be valid ISO 4217 code
Languages must be valid ISO 639-1 codes
Supports decimal precision for pricing
Shared Schemas
Language Version Schema (LanguageVersionSchema)
LanguageVersionSchema)Purpose: Provides multilingual content support for services.
language
String
Yes
-
ISO 639-1 language code
title
String
Yes
-
Service title in specified language
description
String
No
-
Service description in specified language
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- No automatic timestampsenum: LanguageCodeEnum- Validates language codes
Business Rules:
At least one language version required per service
Title is mandatory for each language
Description is optional but recommended
Language codes must be unique within service
Schedule Schema (ScheduleSchema)
ScheduleSchema)Purpose: Defines service availability and scheduling rules.
weekDays
Array<Number>
Yes
-
Available weekdays (1=Monday, 7=Sunday)
startTime
String
Yes
-
Start time in HH:mm format
endTime
String
Yes
-
End time in HH:mm format
timezone
String
No
-
Timezone identifier
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- No automatic timestamps
Validation Rules:
Week days must be 1-7
Times must be valid HH:mm format
End time must be after start time
Timezone must be valid identifier
State History Schema (StateHistorySchema)
StateHistorySchema)Purpose: Tracks state changes for audit and rollback capabilities.
state
String
Yes
-
State identifier
timestamp
Date
Yes
Current
When state change occurred
actor
ObjectId
No
-
Who made the change
metadata
Object
No
-
Additional change information
Configuration:
_id: false- No separate ID for sub-documenttimestamps: false- Uses explicit timestamp field
Relationships
Service โ Media (Banners)
Type: One-to-Many
Field:
presentation.bannersCollection:
mediaDescription: References uploaded banner images
Service โ Specialists
Type: Many-to-Many
Field:
specialistsCollection:
specialistDescription: Assigned service providers (migration field)
Service โ Required Resources
Type: Many-to-Many (via separate collection)
Field: Not directly in schema
Collection:
service-required-resourcesDescription: Resources needed for service delivery
Indexes
Primary Indexes
Performance Indexes
Search Optimization
Full-Text Search: Compound text index on title and description
Language-Specific: Support for language-specific search
Price Range: Efficient price range queries
Duration Filtering: Quick duration-based filtering
Availability: Schedule-based availability queries
Data Integrity
Validation Rules
Required Fields: Language versions and duration versions mandatory
Format Validation: Times, currencies, languages follow standards
Business Logic: Duration and pricing constraints
Reference Integrity: Media and specialist references valid
Range Validation: Reasonable limits on duration and pricing
Constraints
Unique Constraints: Order numbers unique per tenant
Referential Integrity: Media references must exist
Business Rules: Prepayment policies consistent
Data Consistency: Language versions complete
Migration Considerations
Schema Evolution: Backwards compatibility for schema changes
Data Migration: Scripts for structural changes
Index Management: Efficient index creation and updates
Legacy Support: Support for old data formats
Multi-Tenancy
Tenant Isolation
Services belong to specific tenants
Queries include tenant context automatically
Cross-tenant access prevention
Tenant-specific indexing strategies
Tenant-Aware Operations
All database operations include tenant context:
Create operations include tenant ID
Read operations filter by tenant
Update/Delete operations validate tenant ownership
Aggregation queries include tenant filtering
Performance Optimization
Query Performance
Index Utilization: Proper index design for common queries
Aggregation Pipelines: Efficient complex queries
Projection: Return only needed fields
Population Strategy: Optimize related data loading
Storage Optimization
Document Size: Reasonable document size limits
Embedded vs Referenced: Optimal data structure design
Compression: MongoDB compression for storage efficiency
Archive Strategy: Archive old service versions
Caching Strategy
Query Caching: Cache frequent service queries
Computed Fields: Cache calculated values
Invalidation: Smart cache invalidation on updates
Distributed Caching: Multi-instance cache coordination
Backup and Recovery
Backup Strategy
Document Integrity: Complete service data backup
Media Coordination: Sync with media storage backup
Index Preservation: Recreate indexes after restore
Relationship Consistency: Maintain reference integrity
Recovery Procedures
Point-in-Time Recovery: Restore to specific timestamps
Selective Recovery: Restore individual services
Data Validation: Verify data integrity after restore
Index Rebuilding: Recreate performance indexes
Security Considerations
Data Protection
Access Control: Role-based database access
Encryption: Encryption at rest and in transit
Audit Logging: Track all data modifications
PII Handling: Secure handling of service descriptions
Query Security
Injection Prevention: Parameterized queries
Access Validation: Tenant-aware query filtering
Resource Limits: Query execution time limits
Rate Limiting: Database operation rate limiting
Monitoring and Maintenance
Performance Monitoring
Query Performance: Slow query detection and optimization
Index Usage: Monitor index effectiveness
Storage Growth: Track collection size growth
Cache Hit Rates: Monitor caching effectiveness
Maintenance Tasks
Index Optimization: Regular index analysis and tuning
Data Archiving: Archive old service versions
Statistics Updates: Keep query optimizer statistics current
Cleanup Operations: Remove orphaned references
Development Guidelines
Schema Design
Normalization: Balance between normalization and performance
Embedding Strategy: When to embed vs reference
Index Strategy: Design indexes for query patterns
Validation: Comprehensive schema validation
Testing Strategies
Unit Tests: Test schema validation rules
Integration Tests: Test with real MongoDB instance
Performance Tests: Load test with realistic data
Migration Tests: Validate schema migration scripts
Best Practices
Document Size: Keep documents under MongoDB limits
Query Patterns: Design schema for common queries
Update Patterns: Minimize document rewrites
Consistency: Maintain referential integrity
Last updated
Was this helpful?