{"version":3,"file":"index.cjs","sources":["../src/entities/BaseEntity.js","../src/value-objects/Email.js","../src/value-objects/Coordinates.js","../src/errors/DomainErrors.js","../src/entities/User.js","../src/entities/Tour.js","../src/entities/PointOfInterest.js","../src/entities/AudioFile.js","../src/entities/UserTourProgress.js","../src/entities/UserPreferences.js","../src/entities/Subscription.js","../src/entities/Pricing.js","../src/entities/UserFeedback.js","../src/entities/Admin.js","../src/entities/AudioTour.js","../src/entities/AuthResult.js","../src/entities/Destination.js","../src/entities/Feedback.js","../src/entities/FeedbackAggregate.js","../src/entities/TourGuideStory.js","../src/value-objects/UserRole.js","../src/value-objects/UserStatus.js","../src/value-objects/RateLimit.js","../src/services/BusinessRuleValidationService.js","../src/services/DomainEventService.js","../src/events/UserEvents.js","../src/events/TourEvents.js"],"sourcesContent":["export class BaseEntity {\n    constructor({ id, createdAt, updatedAt, clock, ...props } = {}) {\n        // Clock is optional when reconstituting from database (createdAt/updatedAt provided)\n        // Clock is required when creating new entities or updating existing ones\n        if (!clock && (!createdAt || !updatedAt)) {\n            throw new Error('Clock dependency is required for BaseEntity construction when timestamps are not provided');\n        }\n\n        const now = clock ? clock.now() : new Date().toISOString();\n        this.id = id;\n        this.createdAt = createdAt || now;\n        this.updatedAt = updatedAt || this.createdAt;\n\n        Object.assign(this, props);\n    }\n\n    updateLastModifiedTimestamp(clock) {\n        if (!clock) {\n            throw new Error('Clock dependency is required for timestamp updates');\n        }\n        this.updatedAt = clock.now();\n    }\n\n    hasBeenModified() {\n        return this.updatedAt && this.createdAt && this.updatedAt > this.createdAt;\n    }\n\n    getTimeSinceLastModification(clock) {\n        if (!this.updatedAt) return null;\n        \n        if (!clock) {\n            throw new Error('Clock dependency is required for time calculations');\n        }\n\n        return clock.getTimeDifference(this.updatedAt);\n    }\n\n    // For backward compatibility\n    _touch(clock) {\n        this.updateLastModifiedTimestamp(clock);\n    }\n}\n","export class Email {\n    constructor(email) {\n        if (!email || typeof email !== 'string') {\n            throw new Error('Email must be a non-empty string');\n        }\n\n        const trimmedEmail = email.trim();\n        if (trimmedEmail.length === 0) {\n            throw new Error('Email cannot be empty');\n        }\n\n        const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n        if (!emailRegex.test(trimmedEmail)) {\n            throw new Error('Invalid email format');\n        }\n\n        if (trimmedEmail.length > 254) {\n            throw new Error('Email address is too long (max 254 characters)');\n        }\n\n        this.value = trimmedEmail.toLowerCase();\n    }\n\n    toString() {\n        return this.value;\n    }\n\n    equals(other) {\n        if (!(other instanceof Email)) {\n            return false;\n        }\n        return this.value === other.value;\n    }\n\n    getDomain() {\n        return this.value.split('@')[1];\n    }\n\n    getLocalPart() {\n        return this.value.split('@')[0];\n    }\n} ","export class Coordinates {\n    constructor(latitude, longitude) {\n        if (typeof latitude !== 'number' || typeof longitude !== 'number') {\n            throw new Error('Latitude and longitude must be numbers');\n        }\n\n        if (isNaN(latitude) || isNaN(longitude)) {\n            throw new Error('Latitude and longitude cannot be NaN');\n        }\n\n        if (!isFinite(latitude) || !isFinite(longitude)) {\n            throw new Error('Latitude and longitude must be finite numbers');\n        }\n\n        if (latitude < -90 || latitude > 90) {\n            throw new Error('Latitude must be between -90 and 90 degrees');\n        }\n\n        if (longitude < -180 || longitude > 180) {\n            throw new Error('Longitude must be between -180 and 180 degrees');\n        }\n\n        this.latitude = latitude;\n        this.longitude = longitude;\n    }\n\n    static fromObject({ lat, lng }) {\n        return new Coordinates(lat, lng);\n    }\n\n    toObject() {\n        return { lat: this.latitude, lng: this.longitude };\n    }\n\n    equals(other) {\n        if (!(other instanceof Coordinates)) {\n            return false;\n        }\n        return this.latitude === other.latitude && this.longitude === other.longitude;\n    }\n\n    toString() {\n        return `${this.latitude}, ${this.longitude}`;\n    }\n\n    getLatitude() {\n        return this.latitude;\n    }\n\n    getLongitude() {\n        return this.longitude;\n    }\n\n    static isValid(coordinateObject) {\n        try {\n            if (!coordinateObject || typeof coordinateObject !== 'object') {\n                return false;\n            }\n            new Coordinates(coordinateObject.lat, coordinateObject.lng);\n            return true;\n        } catch {\n            return false;\n        }\n    }\n}\n","\n\nexport class InvalidCoordinatesError extends Error {\n    constructor(coordinates) {\n        super(`Invalid coordinates: ${JSON.stringify(coordinates)}`);\n        this.name = 'InvalidCoordinatesError';\n        this.coordinates = coordinates;\n    }\n}\n\nexport class InvalidEmailError extends Error {\n    constructor(email) {\n        super(`Invalid email format: ${email}`);\n        this.name = 'InvalidEmailError';\n        this.email = email;\n    }\n}\n\nexport class ValidationError extends Error {\n    constructor(field, message) {\n        super(`Validation error for ${field}: ${message}`);\n        this.name = 'ValidationError';\n        this.field = field;\n    }\n}\n\nexport class RepositoryNotImplementedError extends Error {\n    constructor(method) {\n        super(`Repository method not implemented: ${method}`);\n        this.name = 'RepositoryNotImplementedError';\n        this.method = method;\n    }\n}\n\nexport class BusinessRuleViolationError extends Error {\n    constructor(rule, details) {\n        super(`Business rule violation: ${rule}. ${details}`);\n        this.name = 'BusinessRuleViolationError';\n        this.rule = rule;\n        this.details = details;\n    }\n}\n\nexport class ApprovalWorkflowNotFoundError extends Error {\n    constructor(id) {\n        super(`Approval workflow not found: ${id}`);\n        this.name = 'ApprovalWorkflowNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class WorkflowStatusTransitionError extends Error {\n    constructor(action, currentStatus) {\n        const pastParticiple = action === 'cancel' ? 'cancelled' : \n                              action === 'escalate' ? 'escalated' : \n                              action === 'delegate' ? 'delegated' : \n                              `${action}d`;\n        super(`Workflow cannot be ${pastParticiple} in its current status`);\n        this.name = 'WorkflowStatusTransitionError';\n        this.action = action;\n        this.currentStatus = currentStatus;\n    }\n}\n\nexport class WorkflowAuthorizationError extends Error {\n    constructor(action, currentApprover, requiredApprover) {\n        super(`Only ${requiredApprover} can ${action} this workflow, but ${currentApprover} attempted it`);\n        this.name = 'WorkflowAuthorizationError';\n        this.action = action;\n        this.currentApprover = currentApprover;\n        this.requiredApprover = requiredApprover;\n    }\n}\n\nexport class WorkflowValidationError extends Error {\n    constructor(field, message) {\n        super(`Workflow validation error for ${field}: ${message}`);\n        this.name = 'WorkflowValidationError';\n        this.field = field;\n    }\n}\n\nexport class WorkflowDelegationError extends Error {\n    constructor(reason) {\n        super(`Workflow delegation error: ${reason}`);\n        this.name = 'WorkflowDelegationError';\n        this.reason = reason;\n    }\n}\n\nexport class AudioFileValidationError extends Error {\n    constructor(field, message) {\n        super(`Audio file validation error for ${field}: ${message}`);\n        this.name = 'AudioFileValidationError';\n        this.field = field;\n    }\n}\n\nexport class AudioFileNotFoundError extends Error {\n    constructor(id) {\n        super(`Audio file with ID ${id} not found`);\n        this.name = 'AudioFileNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class AudioFileDuplicateError extends Error {\n    constructor(tourId, language) {\n        super(`Audio file already exists for tour ${tourId} in language ${language}`);\n        this.name = 'AudioFileDuplicateError';\n        this.tourId = tourId;\n        this.language = language;\n    }\n}\nexport class AuditLogValidationError extends Error {\n    constructor(field, message) {\n        super(`Audit log validation error for ${field}: ${message}`);\n        this.name = 'AuditLogValidationError';\n        this.field = field;\n    }\n}\n\nexport class AuditLogNotFoundError extends Error {\n    constructor(id) {\n        super(`Audit log with ID ${id} not found`);\n        this.name = 'AuditLogNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class AuditLogDuplicateError extends Error {\n    constructor(actorId, action, targetEntity) {\n        super(`Audit log already exists for actor ${actorId}, action ${action}, target ${targetEntity}`);\n        this.name = 'AuditLogDuplicateError';\n        this.actorId = actorId;\n        this.action = action;\n        this.targetEntity = targetEntity;\n    }\n}\n\n\n\n\nexport class AdminValidationError extends Error {\n    constructor(field, message) {\n        super(`Admin validation error for ${field}: ${message}`);\n        this.name = 'AdminValidationError';\n        this.field = field;\n    }\n}\n\nexport class AdminNotFoundError extends Error {\n    constructor(id) {\n        super(`Admin with ID ${id} not found`);\n        this.name = 'AdminNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class AdminAlreadyExistsError extends Error {\n    constructor(email) {\n        super(`Admin with email ${email} already exists`);\n        this.name = 'AdminAlreadyExistsError';\n        this.email = email;\n    }\n}\n\nexport class ContentJobValidationError extends Error {\n    constructor(field, message) {\n        super(`Content job validation error for ${field}: ${message}`);\n        this.name = 'ContentJobValidationError';\n        this.field = field;\n    }\n}\n\nexport class ContentJobNotFoundError extends Error {\n    constructor(id) {\n        super(`Content job with ID ${id} not found`);\n        this.name = 'ContentJobNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class ContentVersionValidationError extends Error {\n    constructor(field, message) {\n        super(`Content version validation error for ${field}: ${message}`);\n        this.name = 'ContentVersionValidationError';\n        this.field = field;\n    }\n}\n\nexport class ContentVersionNotFoundError extends Error {\n    constructor(id) {\n        super(`Content version with ID ${id} not found`);\n        this.name = 'ContentVersionNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class ContentVersionDuplicateError extends Error {\n    constructor(contentId, version) {\n        super(`Content version ${version} already exists for content ${contentId}`);\n        this.name = 'ContentVersionDuplicateError';\n        this.contentId = contentId;\n        this.version = version;\n    }\n}\n\nexport class UserAlreadyExistsError extends Error {\n    constructor(email) {\n        super(`User with email ${email} already exists`);\n        this.name = 'UserAlreadyExistsError';\n        this.email = email;\n    }\n}\n\nexport class UserNotFoundError extends Error {\n    constructor(id) {\n        super(`User with ID ${id} not found`);\n        this.name = 'UserNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class UserValidationError extends Error {\n    constructor(field, message) {\n        super(`User validation error for ${field}: ${message}`);\n        this.name = 'UserValidationError';\n        this.field = field;\n    }\n}\n\nexport class TourValidationError extends Error {\n    constructor(field, message) {\n        super(`Tour validation error for ${field}: ${message}`);\n        this.name = 'TourValidationError';\n        this.field = field;\n    }\n}\n\nexport class TourNotFoundError extends Error {\n    constructor(id) {\n        super(`Tour with ID ${id} not found`);\n        this.name = 'TourNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class TourDuplicateError extends Error {\n    constructor(title, city) {\n        super(`Tour with title \"${title}\" already exists in ${city}`);\n        this.name = 'TourDuplicateError';\n        this.title = title;\n        this.city = city;\n    }\n}\n\nexport class PointOfInterestValidationError extends Error {\n    constructor(field, message) {\n        super(`Point of Interest validation error for ${field}: ${message}`);\n        this.name = 'PointOfInterestValidationError';\n        this.field = field;\n    }\n}\n\nexport class PointOfInterestNotFoundError extends Error {\n    constructor(id) {\n        super(`Point of Interest with ID ${id} not found`);\n        this.name = 'PointOfInterestNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class PointOfInterestDuplicateError extends Error {\n    constructor(name, tourId) {\n        super(`Point of Interest with name \"${name}\" already exists in tour ${tourId}`);\n        this.name = 'PointOfInterestDuplicateError';\n        this.name = name;\n        this.tourId = tourId;\n    }\n}\n\nexport class UserPreferencesValidationError extends Error {\n    constructor(field, message) {\n        super(`User Preferences validation error for ${field}: ${message}`);\n        this.name = 'UserPreferencesValidationError';\n        this.field = field;\n    }\n}\n\nexport class UserPreferencesNotFoundError extends Error {\n    constructor(id) {\n        super(`User Preferences with ID ${id} not found`);\n        this.name = 'UserPreferencesNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class UserPreferencesDuplicateError extends Error {\n    constructor(userId) {\n        super(`User Preferences for user ${userId} already exists`);\n        this.name = 'UserPreferencesDuplicateError';\n        this.userId = userId;\n    }\n}\n\nexport class MediaAssetValidationError extends Error {\n    constructor(field, message) {\n        super(`Media Asset validation error for ${field}: ${message}`);\n        this.name = 'MediaAssetValidationError';\n        this.field = field;\n    }\n}\n\nexport class MediaAssetNotFoundError extends Error {\n    constructor(id) {\n        super(`Media Asset with ID ${id} not found`);\n        this.name = 'MediaAssetNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class MediaAssetDuplicateError extends Error {\n    constructor(uri, type) {\n        super(`Media Asset with URI \"${uri}\" already exists for type ${type}`);\n        this.name = 'MediaAssetDuplicateError';\n        this.uri = uri;\n        this.type = type;\n    }\n}\n\nexport class DownloadPackValidationError extends Error {\n    constructor(field, message) {\n        super(`Download Pack validation error for ${field}: ${message}`);\n        this.name = 'DownloadPackValidationError';\n        this.field = field;\n    }\n}\n\nexport class DownloadPackNotFoundError extends Error {\n    constructor(id) {\n        super(`Download Pack with ID ${id} not found`);\n        this.name = 'DownloadPackNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class DownloadPackDuplicateError extends Error {\n    constructor(tourId, language) {\n        super(`Download Pack for tour ${tourId} and language ${language} already exists`);\n        this.name = 'DownloadPackDuplicateError';\n        this.tourId = tourId;\n        this.language = language;\n    }\n}\n\nexport class PricingValidationError extends Error {\n    constructor(field, message) {\n        super(`Pricing validation error for ${field}: ${message}`);\n        this.name = 'PricingValidationError';\n        this.field = field;\n    }\n}\n\nexport class PricingNotFoundError extends Error {\n    constructor(id) {\n        super(`Pricing with ID ${id} not found`);\n        this.name = 'PricingNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class PricingDuplicateError extends Error {\n    constructor(tourId) {\n        super(`Pricing for tour ${tourId} already exists`);\n        this.name = 'PricingDuplicateError';\n        this.tourId = tourId;\n    }\n}\n\nexport class SubscriptionValidationError extends Error {\n    constructor(field, message) {\n        super(`Subscription validation error for ${field}: ${message}`);\n        this.name = 'SubscriptionValidationError';\n        this.field = field;\n    }\n}\n\nexport class SubscriptionNotFoundError extends Error {\n    constructor(id) {\n        super(`Subscription with ID ${id} not found`);\n        this.name = 'SubscriptionNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class SubscriptionDuplicateError extends Error {\n    constructor(userId, plan) {\n        super(`Subscription for user ${userId} with plan ${plan} already exists`);\n        this.name = 'SubscriptionDuplicateError';\n        this.userId = userId;\n        this.plan = plan;\n    }\n}\n\nexport class UserFeedbackValidationError extends Error {\n    constructor(field, message) {\n        super(`User Feedback validation error for ${field}: ${message}`);\n        this.name = 'UserFeedbackValidationError';\n        this.field = field;\n    }\n}\n\nexport class UserFeedbackNotFoundError extends Error {\n    constructor(id) {\n        super(`User Feedback with ID ${id} not found`);\n        this.name = 'UserFeedbackNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class UserFeedbackDuplicateError extends Error {\n    constructor(userId, tourId) {\n        super(`User Feedback for User ID \"${userId}\" and Tour ID \"${tourId}\" already exists`);\n        this.name = 'UserFeedbackDuplicateError';\n        this.userId = userId;\n        this.tourId = tourId;\n    }\n}\n\nexport class UserTourProgressValidationError extends Error {\n    constructor(field, message) {\n        super(`User Tour Progress validation error for ${field}: ${message}`);\n        this.name = 'UserTourProgressValidationError';\n        this.field = field;\n    }\n}\n\nexport class UserTourProgressNotFoundError extends Error {\n    constructor(id) {\n        super(`User Tour Progress with ID ${id} not found`);\n        this.name = 'UserTourProgressNotFoundError';\n        this.id = id;\n    }\n}\n\nexport class UserTourProgressDuplicateError extends Error {\n    constructor(userId, tourId) {\n        super(`User Tour Progress for User ID \"${userId}\" and Tour ID \"${tourId}\" already exists`);\n        this.name = 'UserTourProgressDuplicateError';\n        this.userId = userId;\n        this.tourId = tourId;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\nimport { Email } from '../value-objects/Email.js';\nimport { Coordinates } from '../value-objects/Coordinates.js';\nimport { ValidationError } from '../errors/DomainErrors.js';\n\nexport class User extends BaseEntity {\n    constructor({\n        id, email, name, password,\n        preferences, subscription,\n        location, language, role = 'user',\n        status = 'active', isActive = true, lockedUntil = null, loginAttempts = 0, passwordResetToken = null, passwordResetExpiry = null,\n        lastLoginAt, emailVerified = false,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock });\n        \n        // Input validation\n        if (!name || typeof name !== 'string' || name.trim().length === 0) {\n            throw new ValidationError('name', 'Name is required and must be a non-empty string');\n        }\n        \n        if (!password || typeof password !== 'string') {\n            throw new ValidationError('password', 'Password is required');\n        }\n        \n        this.id = id;\n        \n        if (email) {\n            try {\n                this.email = new Email(email);\n            } catch (error) {\n                throw new ValidationError('email', error.message);\n            }\n        } else {\n            this.email = null;\n        }\n        \n        this.name = name.trim();\n        this.password = password;\n        this.preferences = preferences;\n        this.subscription = subscription;\n        \n        if (location) {\n            try {\n                this.location = Coordinates.fromObject(location);\n            } catch (error) {\n                throw new ValidationError('location', error.message);\n            }\n        } else {\n            this.location = null;\n        }\n        \n        this.language = language;\n        this.role = role;\n        this.status = status;\n        this.isActive = isActive;\n        this.lastLoginAt = lastLoginAt;\n        this.emailVerified = emailVerified;\n        this.loginAttempts = loginAttempts || 0;\n        this.lockedUntil = lockedUntil || null;\n        this.passwordResetToken = passwordResetToken || null;\n        this.passwordResetExpiry = passwordResetExpiry || null;\n    }\n\n    activate(clock) {\n        this.isActive = true;\n        this.status = 'active';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    deactivate(clock) {\n        this.isActive = false;\n        this.status = 'inactive';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    suspend(clock, reason = 'Policy violation') {\n        this.isActive = false;\n        this.status = 'suspended';\n        this.suspensionReason = reason;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    relocateTo(newLocation, clock) {\n        if (!newLocation) {\n            throw new ValidationError('location', 'Location is required');\n        }\n        \n        try {\n            this.location = Coordinates.fromObject(newLocation);\n        } catch (error) {\n            throw new ValidationError('location', error.message);\n        }\n        \n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateEmail(newEmail, clock) {\n        if (!newEmail) {\n            throw new ValidationError('email', 'Email is required');\n        }\n        \n        try {\n            this.email = new Email(newEmail);\n            this.emailVerified = false; // Reset verification when email changes\n        } catch (error) {\n            throw new ValidationError('email', error.message);\n        }\n        \n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateLanguage(newLanguage, clock) {\n        this.language = newLanguage;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePreferences(newPreferences, clock) {\n        this.preferences = { ...this.preferences, ...newPreferences };\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateSubscription(newSubscription, clock) {\n        this.subscription = newSubscription;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateRole(newRole, clock) {\n        this.role = newRole;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePassword(newPassword, clock) {\n        this.password = newPassword;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    recordLogin(clock) {\n        this.lastLoginAt = clock.now();\n        this.loginAttempts = loginAttempts || 0;\n        this.lockedUntil = lockedUntil || null;\n        this.passwordResetToken = passwordResetToken || null;\n        this.passwordResetExpiry = passwordResetExpiry || null;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    recordFailedLogin(clock) {\n        this.loginAttempts += 1;\n        if (this.loginAttempts >= 5) {\n            this.lockedUntil = clock.now();\n        }\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    verifyEmail(clock) {\n        this.emailVerified = true;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    // NEW: Enhanced business logic methods\n    canBeDeleted() {\n        return this.status !== 'active' || this.role === 'user';\n    }\n\n    canBeEdited() {\n        return this.status !== 'suspended';\n    }\n\n    isOwnedBy(userId) {\n        return !!(this.id && this.id === userId);\n    }\n\n    getAccountAge(clock) {\n        if (!this.createdAt) return 0;\n        const now = new Date(clock.now());\n        const created = new Date(this.createdAt);\n        return Math.floor((now - created) / (1000 * 60 * 60 * 24)); // days\n    }\n\n    getLastLoginDays(clock) {\n        if (!this.lastLoginAt) return null;\n        const now = new Date(clock.now());\n        const lastLogin = new Date(this.lastLoginAt);\n        return Math.floor((now - lastLogin) / (1000 * 60 * 60 * 24)); // days\n    }\n\n    hasValidEmail() {\n        return this.email !== null && this.emailVerified;\n    }\n\n    isEmailVerified() {\n        return this.emailVerified;\n    }\n\n    getPermissionLevel() {\n        const levels = {\n            'super_admin': 5,\n            'admin': 4,\n            'content_manager': 3,\n            'moderator': 2,\n            'user': 1\n        };\n        return levels[this.role] || 1;\n    }\n\n    canAccessFeature(feature) {\n        const featurePermissions = {\n            'admin_panel': ['admin', 'super_admin'],\n            'content_management': ['content_manager', 'admin', 'super_admin'],\n            'user_management': ['admin', 'super_admin'],\n            'moderation': ['moderator', 'admin', 'super_admin'],\n            'bulk_operations': ['admin', 'super_admin'],\n            'premium_content': this.hasActiveSubscription()\n        };\n        \n        const requiredRoles = featurePermissions[feature];\n        if (!requiredRoles) return false;\n        \n        if (Array.isArray(requiredRoles)) {\n            return requiredRoles.includes(this.role);\n        }\n        \n        return requiredRoles;\n    }\n\n    getProfileCompleteness() {\n        const totalFields = 8;\n        const completedFields = [\n            this.name && this.name.length > 0,\n            this.email !== null,\n            this.emailVerified,\n            this.location !== null,\n            this.language !== null,\n            this.preferences !== null,\n            this.subscription !== null,\n            this.lastLoginAt !== null\n        ].filter(Boolean).length;\n        \n        return {\n            percentage: (completedFields / totalFields) * 100,\n            missing: totalFields - completedFields,\n            details: {\n                hasName: this.name && this.name.length > 0,\n                hasEmail: this.email !== null,\n                emailVerified: this.emailVerified,\n                hasLocation: this.location !== null,\n                hasLanguage: this.language !== null,\n                hasPreferences: this.preferences !== null,\n                hasSubscription: this.subscription !== null,\n                hasLoggedIn: this.lastLoginAt !== null\n            }\n        };\n    }\n\n    isProfileComplete() {\n        const completeness = this.getProfileCompleteness();\n        return completeness.percentage >= 80;\n    }\n\n    getSecurityScore() {\n        let score = 0;\n        \n        if (this.password && this.password.length >= 12) score += 20;\n        if (this.emailVerified) score += 10;\n        if (this.twoFactorEnabled) score += 10;\n        \n        if (this.lastLoginAt) score += 10;\n        if (this.loginAttempts === 0) score += 10;\n        if (!this.lockedUntil) score += 10;\n        \n        if (this.location) score += 10;\n        if (this.preferences && Object.keys(this.preferences).length > 0) score += 10;\n        if (this.subscription && this.subscription.status === 'active') score += 10;\n        \n        return Math.min(score, 100);\n    }\n\n    needsPasswordReset() {\n        if (!this.lastPasswordChange) return true;\n        const daysSinceChange = this.getDaysSincePasswordChange() || 0;\n        return daysSinceChange > 90; // 90 days\n    }\n\n    getActivityLevel(clock) {\n        if (!this.lastLoginAt) return 'inactive';\n        \n        const daysSinceLogin = this.getLastLoginDays(clock) || 0;\n        if (daysSinceLogin <= 1) return 'very_active';\n        if (daysSinceLogin <= 7) return 'active';\n        if (daysSinceLogin <= 30) return 'moderate';\n        if (daysSinceLogin <= 90) return 'low';\n        return 'inactive';\n    }\n\n    hasActiveSubscription() {\n        return !!(this.subscription && \n               this.subscription.status === 'active' && \n               new Date(this.subscription.endDate) > new Date());\n    }\n\n    isLocked() {\n        return !!(this.lockedUntil && new Date(this.lockedUntil) > new Date());\n    }\n\n    getDaysSincePasswordChange() {\n        if (!this.lastPasswordChange) return null;\n        const now = new Date();\n        const lastChange = new Date(this.lastPasswordChange);\n        return Math.floor((now - lastChange) / (1000 * 60 * 60 * 24));\n    }\n\n    getEmail() {\n        return this.email ? this.email.toString() : null;\n    }\n\n    getLocationValue() {\n        return this.location ? this.location.toObject() : null;\n    }\n\n    isUserActive() {\n        return this.isActive;\n    }\n\n    hasEmail() {\n        return this.email !== null;\n    }\n\n    hasLocation() {\n        return this.location !== null;\n    }\n\n    hasPreferences() {\n        return this.preferences !== null && this.preferences !== undefined && Object.keys(this.preferences).length > 0;\n    }\n\n    hasSubscription() {\n        return this.subscription !== null && this.subscription !== undefined;\n    }\n\n    isActive() {\n        return this.isActive;\n    }\n\n    toPublic() {\n        return {\n            id: this.id,\n            email: this.email ? this.email.toString() : null,\n            name: this.name,\n            location: this.location ? this.location.toObject() : null,\n            language: this.language,\n            role: this.role,\n            status: this.status,\n            isActive: this.isActive,\n            emailVerified: this.emailVerified,\n            lastLoginAt: this.lastLoginAt,\n            createdAt: this.createdAt,\n            updatedAt: this.updatedAt\n        };\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\nimport { TourValidationError } from '../errors/DomainErrors.js';\n\nexport class Tour extends BaseEntity {\n    constructor({\n        id, title, description, city, country,\n        duration, difficulty, category,\n        pointsOfInterest, audioFiles,\n        languages, pricing, creatorId, status,\n        isPopular, isFeatured,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock });\n        this.id = id;\n        this.title = title;\n        this.description = description;\n        this.city = city;\n        this.country = country;\n        this.duration = duration;\n        this.difficulty = difficulty;\n        this.category = category;\n        this.pointsOfInterest = pointsOfInterest || [];\n        this.audioFiles = audioFiles || [];\n        this.languages = languages || [];\n        this.pricing = pricing;\n        this.creatorId = creatorId;\n        this.status = status || 'draft';\n        this.isPopular = isPopular || false;\n        this.isFeatured = isFeatured || false;\n        this.publishedAt = null;\n        this.archivedAt = null;\n        this.lastModifiedBy = null;\n        this.statusHistory = [];\n    }\n\n    // Existing methods\n    addPointOfInterest(poiId, clock) {\n        if (!this.pointsOfInterest.includes(poiId)) {\n            this.pointsOfInterest.push(poiId);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    removePointOfInterest(poiId, clock) {\n        const index = this.pointsOfInterest.indexOf(poiId);\n        if (index > -1) {\n            this.pointsOfInterest.splice(index, 1);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    addAudioFile(audioFile, clock) {\n        this.audioFiles.push(audioFile);\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    addLanguage(language, clock) {\n        if (!this.languages.includes(language)) {\n            this.languages.push(language);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    canBePublished() {\n        return this.pointsOfInterest.length > 0 && \n               this.audioFiles.length > 0 && \n               this.languages.length > 0;\n    }\n\n    updateLastModifiedTimestamp(clock) {\n        this.updatedAt = clock.now();\n    }\n\n    getEstimatedDuration() {\n        return this.duration;\n    }\n\n    supportsLanguage(language) {\n        return this.languages.includes(language);\n    }\n\n    // NEW: Enhanced business logic methods\n    validateTitle(title) {\n        if (!title || title.trim().length < 3) {\n            throw new TourValidationError('title', 'Title must be at least 3 characters');\n        }\n        if (title.length > 100) {\n            throw new TourValidationError('title', 'Title must be less than 100 characters');\n        }\n    }\n\n    canBeEdited() {\n        return this.status === 'draft' || this.status === 'archived';\n    }\n\n    canBeDeleted() {\n        return this.status !== 'published';\n    }\n\n    isOwnedBy(userId) {\n        return !!(this.creatorId && this.creatorId === userId);\n    }\n\n    getContentCompleteness() {\n        const totalRequirements = 3; // POIs, Audio, Languages\n        const completedRequirements = [\n            this.pointsOfInterest.length > 0,\n            this.audioFiles.length > 0,\n            this.languages.length > 0\n        ].filter(Boolean).length;\n        \n        return {\n            percentage: (completedRequirements / totalRequirements) * 100,\n            missing: totalRequirements - completedRequirements,\n            details: {\n                hasPointsOfInterest: this.pointsOfInterest.length > 0,\n                hasAudioFiles: this.audioFiles.length > 0,\n                hasLanguages: this.languages.length > 0\n            }\n        };\n    }\n\n    getStatusHistory() {\n        return [...this.statusHistory];\n    }\n\n    addStatusChange(oldStatus, newStatus, changedBy, clock) {\n        this.statusHistory.push({\n            oldStatus,\n            newStatus,\n            changedBy,\n            changedAt: clock.now()\n        });\n    }\n\n    setLastModifiedBy(userId) {\n        this.lastModifiedBy = userId;\n    }\n\n    getLastModifiedBy() {\n        return this.lastModifiedBy;\n    }\n\n    isPublished() {\n        return this.status === 'published';\n    }\n\n    isDraft() {\n        return this.status === 'draft';\n    }\n\n    isArchived() {\n        return this.status === 'archived';\n    }\n\n    isSuspended() {\n        return this.status === 'suspended';\n    }\n\n    getDaysSinceCreation(clock) {\n        if (!this.createdAt) return 0;\n        const created = new Date(this.createdAt);\n        const now = new Date(clock.now());\n        return Math.floor((now - created) / (1000 * 60 * 60 * 24));\n    }\n\n    getDaysSinceLastUpdate(clock) {\n        if (!this.updatedAt) return 0;\n        const updated = new Date(this.updatedAt);\n        const now = new Date(clock.now());\n        return Math.floor((now - updated) / (1000 * 60 * 60 * 24));\n    }\n\n    getContentScore() {\n        let score = 0;\n        \n        // Basic content (40 points)\n        if (this.title && this.title.length > 10) score += 10;\n        if (this.description && this.description.length > 50) score += 10;\n        if (this.city && this.country) score += 10;\n        if (this.duration && this.duration > 0) score += 10;\n        \n        // Rich content (40 points)\n        if (this.pointsOfInterest.length > 0) score += 15;\n        if (this.audioFiles.length > 0) score += 15;\n        if (this.languages.length > 0) score += 10;\n        \n        // Premium features (20 points)\n        if (this.pricing) score += 10;\n        if (this.isPopular) score += 5;\n        if (this.isFeatured) score += 5;\n        \n        return Math.min(score, 100);\n    }\n\n    getReadinessForPublishing() {\n        const completeness = this.getContentCompleteness();\n        const score = this.getContentScore();\n        \n        return {\n            isReady: completeness.percentage === 100 && score >= 80,\n            completeness,\n            score,\n            missingRequirements: completeness.details\n        };\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\nimport { Coordinates } from '../value-objects/Coordinates.js';\n\nexport class PointOfInterest extends BaseEntity {\n    constructor({\n        id, tourId, name, description, coordinates,\n        latitude, longitude, category, tags, images, audioNarration,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock });\n        this.id = id;\n        this.tourId = tourId;\n        this.name = name;\n        this.description = description;\n        this.coordinates = coordinates ? Coordinates.fromObject(coordinates) : null;\n        this.latitude = latitude;\n        this.longitude = longitude;\n        this.category = category;\n        this.tags = tags || [];\n        this.images = images || [];\n        this.audioNarration = audioNarration;\n    }\n\n    addTag(tag, clock) {\n        if (!this.tags.includes(tag)) {\n            this.tags.push(tag);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    removeTag(tag, clock) {\n        const index = this.tags.indexOf(tag);\n        if (index > -1) {\n            this.tags.splice(index, 1);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    addImage(image, clock) {\n        this.images.push(image);\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    removeImage(image, clock) {\n        const index = this.images.indexOf(image);\n        if (index > -1) {\n            this.images.splice(index, 1);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    updateImages(images, clock) {\n        this.images = images;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    setAudioNarration(audioNarration, clock) {\n        this.audioNarration = audioNarration;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateCoordinates(coordinates, clock) {\n        this.coordinates = coordinates instanceof Coordinates \n            ? coordinates \n            : Coordinates.fromObject(coordinates);\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateCategory(category, clock) {\n        this.category = category;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    hasCoordinates() {\n        return !!this.coordinates;\n    }\n\n    hasTags() {\n        return this.tags.length > 0;\n    }\n\n    hasImages() {\n        return this.images.length > 0;\n    }\n\n    hasAudioNarration() {\n        return !!this.audioNarration;\n    }\n\n    isInCategory(category) {\n        return this.category === category;\n    }\n\n    hasTag(tag) {\n        return this.tags.includes(tag);\n    }\n\n    getTagCount() {\n        return this.tags.length;\n    }\n\n    getImageCount() {\n        return this.images.length;\n    }\n\n    getCoordinatesValue() {\n        return this.coordinates ? this.coordinates.toObject() : null;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\nimport { AudioFileValidationError } from '../errors/DomainErrors.js';\n\nexport class AudioFile extends BaseEntity {\n    constructor({\n        id, tourId, language, uri,\n        duration, size, quality,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock });\n        \n        if (tourId !== undefined && !tourId) {\n            throw new AudioFileValidationError('tourId', 'Tour ID is required');\n        }\n        if (language !== undefined && !language) {\n            throw new AudioFileValidationError('language', 'Language is required');\n        }\n        if (uri !== undefined && !uri) {\n            throw new AudioFileValidationError('uri', 'URI is required');\n        }\n        \n        const validQualities = ['low', 'standard', 'medium', 'high', 'ultra'];\n        if (quality && !validQualities.includes(quality)) {\n            throw new AudioFileValidationError('quality', 'Invalid quality level');\n        }\n        \n        if (duration !== undefined && duration < 0) {\n            throw new AudioFileValidationError('duration', 'Duration cannot be negative');\n        }\n        \n        if (size !== undefined && size < 0) {\n            throw new AudioFileValidationError('size', 'Size cannot be negative');\n        }\n        \n        if (uri && !this.isValidUri(uri)) {\n            throw new AudioFileValidationError('uri', 'Invalid URI format');\n        }\n        \n        this.id = id;\n        this.tourId = tourId;\n        this.language = language;\n        this.uri = uri;\n        this.duration = duration;\n        this.size = size;\n        this.quality = quality || 'standard';\n    }\n\n    isValidUri(uri) {\n        if (typeof uri !== 'string') return false;\n        if (uri.length === 0) return false;\n        return true;\n    }\n\n    updateUri(newUri, clock) {\n        if (!newUri) {\n            throw new AudioFileValidationError('uri', 'URI is required');\n        }\n        if (!this.isValidUri(newUri)) {\n            throw new AudioFileValidationError('uri', 'Invalid URI format');\n        }\n        this.uri = newUri;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateQuality(quality, clock) {\n        const validQualities = ['low', 'standard', 'medium', 'high', 'ultra'];\n        if (!quality) {\n            throw new AudioFileValidationError('quality', 'Quality is required');\n        }\n        if (!validQualities.includes(quality)) {\n            throw new AudioFileValidationError('quality', 'Invalid quality level');\n        }\n        this.quality = quality;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateDuration(duration, clock) {\n        if (duration !== undefined && duration < 0) {\n            throw new AudioFileValidationError('duration', 'Duration cannot be negative');\n        }\n        this.duration = duration;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateSize(size, clock) {\n        if (size !== undefined && size < 0) {\n            throw new AudioFileValidationError('size', 'Size cannot be negative');\n        }\n        this.size = size;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    hasDuration() {\n        return !!this.duration;\n    }\n\n    hasSize() {\n        return !!this.size;\n    }\n\n    isHighQuality() {\n        return this.quality === 'high' || this.quality === 'ultra';\n    }\n\n    canBeDownloaded() {\n        return !!this.uri;\n    }\n\n    getDurationInMinutes() {\n        return this.duration ? Math.round(this.duration / 60) : 0;\n    }\n\n    getSizeInMB() {\n        return this.size ? Math.round(this.size / (1024 * 1024)) : 0;\n    }\n\n    isLongDuration() {\n        return this.duration && this.duration > 300;\n    }\n\n    isLargeFile() {\n        return this.size && this.size > 10 * 1024 * 1024;\n    }\n\n    getQualityLevel() {\n        const qualityLevels = {\n            'low': 1,\n            'standard': 2,\n            'medium': 3,\n            'high': 4,\n            'ultra': 5\n        };\n        return qualityLevels[this.quality] || 0;\n    }\n\n    isBetterQualityThan(otherQuality) {\n        const otherQualityLevel = this.getQualityLevel.call({ quality: otherQuality });\n        return this.getQualityLevel() > otherQualityLevel;\n    }\n\n    getFormattedDuration() {\n        if (!this.duration) return 'Unknown';\n        const minutes = Math.floor(this.duration / 60);\n        const seconds = Math.floor(this.duration % 60);\n        return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n    }\n\n    getFormattedSize() {\n        if (!this.size) return 'Unknown';\n        const mb = this.size / (1024 * 1024);\n        return `${mb.toFixed(2)} MB`;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\n\nexport class UserTourProgress extends BaseEntity {\n    constructor({\n        id, userId, tourId, startedAt, completedAt,\n        visitedPois, completedPois, downloaded,\n        currentPoiId, lastAccessedAt, totalProgress,\n        isCompleted, isDownloaded, createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock, clock });\n        this.id = id;\n        this.userId = userId;\n        this.tourId = tourId;\n        this.startedAt = startedAt;\n        this.completedAt = completedAt;\n        this.visitedPois = visitedPois || [];\n        this.completedPois = completedPois || [];\n        this.downloaded = downloaded || false;\n        this.currentPoiId = currentPoiId;\n        this.lastAccessedAt = lastAccessedAt;\n        this.totalProgress = totalProgress || 0;\n        this.isCompleted = isCompleted || false;\n        this.isDownloaded = isDownloaded || false;\n    }\n\n    updateLastAccessedTimestamp(clock) {\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    startTour(poiId, clock) {\n        this.startedAt = clock.now();\n        this.currentPoiId = poiId;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    visitPoi(poiId, clock) {\n        if (!this.visitedPois.includes(poiId)) {\n            this.visitedPois.push(poiId);\n        }\n        this.currentPoiId = poiId;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    completePoi(poiId, clock) {\n        if (!this.completedPois.includes(poiId)) {\n            this.completedPois.push(poiId);\n            this.lastAccessedAt = clock.now();\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    completeTour(clock) {\n        this.completedAt = clock.now();\n        this.isCompleted = true;\n        this.totalProgress = 100;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    markAsDownloaded(clock) {\n        this.downloaded = true;\n        this.isDownloaded = true;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    markAsNotDownloaded(clock) {\n        this.downloaded = false;\n        this.isDownloaded = false;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    resetProgress(clock) {\n        this.visitedPois = [];\n        this.completedPois = [];\n        this.downloaded = false;\n        this.completedAt = null;\n        this.isCompleted = false;\n        this.isDownloaded = false;\n        this.currentPoiId = null;\n        this.totalProgress = 0;\n        this.lastAccessedAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    hasStarted() {\n        return !!this.startedAt;\n    }\n\n    isInProgress() {\n        return this.hasStarted() && !this.completedAt && !this.isCompleted;\n    }\n\n    hasCompletedPoi(poiId) {\n        return this.completedPois.includes(poiId);\n    }\n\n    hasCurrentPoi() {\n        return !!this.currentPoiId;\n    }\n\n    getCompletedPoisCount() {\n        return this.completedPois.length;\n    }\n\n    getCurrentPoiId() {\n        return this.currentPoiId;\n    }\n\n    getUserId() {\n        return this.userId;\n    }\n\n    getTourId() {\n        return this.tourId;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\n\nexport class UserPreferences extends BaseEntity {\n    constructor({\n        id, userId, language, theme, notifications,\n        privacy, accessibility, createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock });\n        this.id = id;\n        this.userId = userId;\n        this.language = language || 'en';\n        this.theme = theme || 'light';\n        this.notifications = notifications !== undefined ? notifications : true;\n        this.privacy = privacy !== undefined ? privacy : true;\n        this.accessibility = accessibility !== undefined ? accessibility : false;\n    }\n\n    updateLanguage(language, clock) {\n        this.language = language;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateTheme(theme, clock) {\n        this.theme = theme;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateNotifications(notifications, clock) {\n        this.notifications = notifications;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePrivacy(privacy, clock) {\n        this.privacy = privacy;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateAccessibility(accessibility, clock) {\n        this.accessibility = accessibility;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    isNotificationEnabled() {\n        return this.notifications === true;\n    }\n\n    isPrivacyEnabled() {\n        return this.privacy === true;\n    }\n\n    isAccessibilityEnabled() {\n        return this.accessibility === true;\n    }\n\n    getLanguage() {\n        return this.language;\n    }\n\n    getTheme() {\n        return this.theme;\n    }\n\n    getUserId() {\n        return this.userId;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\n\nexport class Subscription extends BaseEntity {\n    constructor({\n        id, userId, plan, status,\n        startDate, endDate, autoRenew,\n        paymentMethod, createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock });\n        this.id = id;\n        this.userId = userId;\n        this.plan = plan;\n        this.status = status || 'active';\n        this.startDate = startDate;\n        this.endDate = endDate;\n        this.autoRenew = autoRenew !== undefined ? autoRenew : true;\n        this.paymentMethod = paymentMethod;\n    }\n\n    activate(clock) {\n        this.status = 'active';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    cancel(clock) {\n        this.status = 'cancelled';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    pause(clock) {\n        this.status = 'paused';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    resume(clock) {\n        this.status = 'active';\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePlan(plan, clock) {\n        this.plan = plan;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateAutoRenew(autoRenew, clock) {\n        this.autoRenew = autoRenew;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePaymentMethod(paymentMethod, clock) {\n        this.paymentMethod = paymentMethod;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    extend(months, clock) {\n        if (this.endDate) {\n            const currentDate = clock.parseDate(this.endDate);\n            currentDate.setMonth(currentDate.getMonth() + months);\n            this.endDate = clock.formatDate(currentDate);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    isActive() {\n        return this.status === 'active';\n    }\n\n    isCancelled() {\n        return this.status === 'cancelled';\n    }\n\n    isPaused() {\n        return this.status === 'paused';\n    }\n\n    hasAutoRenew() {\n        return this.autoRenew === true;\n    }\n\n    getPlan() {\n        return this.plan;\n    }\n\n    getStatus() {\n        return this.status;\n    }\n\n    getUserId() {\n        return this.userId;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\n\nexport class Pricing extends BaseEntity {\n    constructor({\n        id, tourId, basePrice, currency,\n        discounts, subscriptionRequired,\n        freeTier, premiumTier,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock });\n        this.id = id;\n        this.tourId = tourId;\n        this.basePrice = basePrice;\n        this.currency = currency || 'USD';\n        this.discounts = discounts || [];\n        this.subscriptionRequired = subscriptionRequired || false;\n        this.freeTier = freeTier || {};\n        this.premiumTier = premiumTier || {};\n    }\n\n    addDiscount(discount, clock) {\n        this.discounts.push(discount);\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    removeDiscount(discount, clock) {\n        const index = this.discounts.indexOf(discount);\n        if (index > -1) {\n            this.discounts.splice(index, 1);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    updateBasePrice(basePrice, clock) {\n        this.basePrice = basePrice;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateCurrency(currency, clock) {\n        this.currency = currency;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateSubscriptionRequired(subscriptionRequired, clock) {\n        this.subscriptionRequired = subscriptionRequired;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateFreeTier(freeTier, clock) {\n        this.freeTier = freeTier;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updatePremiumTier(premiumTier, clock) {\n        this.premiumTier = premiumTier;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    hasDiscounts() {\n        return this.discounts.length > 0;\n    }\n\n    requiresSubscription() {\n        return this.subscriptionRequired;\n    }\n\n    getBasePrice() {\n        return this.basePrice;\n    }\n\n    getCurrency() {\n        return this.currency;\n    }\n\n    getDiscountCount() {\n        return this.discounts.length;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\n\nexport class UserFeedback extends BaseEntity {\n    constructor({\n        id, userId, tourId, rating, comment,\n        sentiment, isPublic, createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock, clock });\n        this.id = id;\n        this.userId = userId;\n        this.tourId = tourId;\n        this.rating = rating;\n        this.comment = comment;\n        this.sentiment = sentiment || 'neutral';\n        this.isPublic = isPublic !== undefined ? isPublic : true;\n    }\n\n    updateRating(rating, clock) {\n        this.rating = rating;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateComment(comment, clock) {\n        this.comment = comment;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateSentiment(sentiment, clock) {\n        this.sentiment = sentiment;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    makePublic(clock) {\n        this.isPublic = true;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    makePrivate(clock) {\n        this.isPublic = false;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    isPositive() {\n        return this.sentiment === 'positive';\n    }\n\n    isNegative() {\n        return this.sentiment === 'negative';\n    }\n\n    isNeutral() {\n        return this.sentiment === 'neutral';\n    }\n\n    isPublicFeedback() {\n        return this.isPublic === true;\n    }\n\n    getRating() {\n        return this.rating;\n    }\n\n    getSentiment() {\n        return this.sentiment;\n    }\n\n    getUserId() {\n        return this.userId;\n    }\n\n    getTourId() {\n        return this.tourId;\n    }\n}\n","import { BaseEntity } from './BaseEntity.js';\nimport { Email } from '../value-objects/Email.js';\nimport { ValidationError } from '../errors/DomainErrors.js';\n\nexport class Admin extends BaseEntity {\n    constructor({\n        id, email, name, password, permissions, department,\n        isActive, lastLoginAt,\n        createdAt, updatedAt, clock\n    } = {}) {\n        super({ createdAt, updatedAt, clock });\n        \n        // Input validation\n        if (!name || typeof name !== 'string' || name.trim().length === 0) {\n            throw new ValidationError('name', 'Name is required and must be a non-empty string');\n        }\n        \n        if (!password || typeof password !== 'string') {\n            throw new ValidationError('password', 'Password is required');\n        }\n        \n        this.id = id;\n        this.email = email ? new Email(email) : null;\n        this.name = name.trim();\n        this.password = password;\n        this.permissions = permissions || [];\n        this.department = department;\n        this.isActive = isActive !== undefined ? isActive : true;\n        this.lastLoginAt = lastLoginAt;\n    }\n\n    addPermission(permission, clock) {\n        if (!this.permissions.includes(permission)) {\n            this.permissions.push(permission);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    removePermission(permission, clock) {\n        const index = this.permissions.indexOf(permission);\n        if (index > -1) {\n            this.permissions.splice(index, 1);\n            this.updateLastModifiedTimestamp(clock);\n        }\n    }\n\n    updatePermissions(permissions, clock) {\n        this.permissions = permissions;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateDepartment(department, clock) {\n        this.department = department.trim();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateEmail(email, clock) {\n        this.email = new Email(email);\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    updateLastLogin(clock) {\n        this.lastLoginAt = clock.now();\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    activate(clock) {\n        this.isActive = true;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    deactivate(clock) {\n        this.isActive = false;\n        this.updateLastModifiedTimestamp(clock);\n    }\n\n    hasPermission(permission) {\n        return this.permissions.includes(permission);\n    }\n\n    isSuperAdmin() {\n        return this.permissions.includes('manage_system');\n    }\n\n    getPermissionLevel() {\n        if (this.isSuperAdmin()) return 'super_admin';\n        if (this.hasPermission('manage_pricing') && this.hasPermission('manage_content')) return 'business_admin';\n        if (this.hasPermission('manage_content')) return 'content_admin';\n        if (this.hasPermission('manage_users')) return 'admin';\n        return 'basic_admin';\n    }\n\n    isAdminActive() {\n        return this.isActive === true;\n    }\n\n    getEmail() {\n        return this.email ? this.email.toString() : null;\n    }\n}\n","class AudioTour {\n  constructor(id, destinationId, title, description, audioUrl, duration, tourGuideContent = null) {\n    this.id = id;\n    this.destinationId = destinationId;\n    this.title = title;\n    this.description = description;\n    this.audioUrl = audioUrl;\n    this.duration = duration; // in minutes\n    this.tourGuideContent = tourGuideContent || {\n      intro: '',\n      historical: '',\n      architectural: '',\n      routeMap: [],\n      fictionalElements: '',\n      additionalNotes: ''\n    };\n    this._isPlaying = false;\n    this._currentSectionIndex = 0;\n    this._sections = this._buildSections();\n  }\n\n\n  _buildSections() {\n    const sections = [];\n\n    if (this.tourGuideContent.intro) {\n      sections.push({\n        id: 'intro',\n        title: 'Introduction',\n        content: this.tourGuideContent.intro,\n        type: 'content'\n      });\n    }\n\n    if (this.tourGuideContent.historical) {\n      sections.push({\n        id: 'historical',\n        title: 'Historical Background',\n        content: this.tourGuideContent.historical,\n        type: 'content'\n      });\n    }\n\n    if (this.tourGuideContent.architectural) {\n      sections.push({\n        id: 'architectural',\n        title: 'Architecture & Design',\n        content: this.tourGuideContent.architectural,\n        type: 'content'\n      });\n    }\n\n    if (this.tourGuideContent.routeMap && this.tourGuideContent.routeMap.length > 0) {\n      this.tourGuideContent.routeMap.forEach((routeItem, index) => {\n        sections.push({\n          id: `route-${index}`,\n          title: routeItem.title || `Route Step ${index + 1}`,\n          content: routeItem.description || 'No description available',\n          type: 'route',\n          routeIndex: index,\n          totalRoutes: this.tourGuideContent.routeMap.length\n        });\n      });\n    }\n\n    if (this.tourGuideContent.fictionalElements) {\n      sections.push({\n        id: 'fictional',\n        title: 'Legends & Stories',\n        content: this.tourGuideContent.fictionalElements,\n        type: 'content'\n      });\n    }\n\n    if (this.tourGuideContent.additionalNotes) {\n      sections.push({\n        id: 'notes',\n        title: 'Visit Tips',\n        content: this.tourGuideContent.additionalNotes,\n        type: 'content'\n      });\n    }\n\n    return sections;\n  }\n\n  getTourInfo() {\n    return {\n      id: this.id,\n      destinationId: this.destinationId,\n      title: this.title,\n      description: this.description,\n      duration: this.duration,\n      sectionCount: this._sections.length,\n      isPlaying: this._isPlaying,\n      currentSectionIndex: this._currentSectionIndex\n    };\n  }\n\n  start() {\n    this._isPlaying = true;\n    this._currentSectionIndex = 0;\n    return this.getTourInfo();\n  }\n\n  stop() {\n    this._isPlaying = false;\n    this._currentSectionIndex = 0;\n    return this.getTourInfo();\n  }\n\n  pause() {\n    this._isPlaying = false;\n    return this.getTourInfo();\n  }\n\n  resume() {\n    this._isPlaying = true;\n    return this.getTourInfo();\n  }\n\n  nextSection() {\n    if (this._currentSectionIndex < this._sections.length - 1) {\n      this._currentSectionIndex++;\n    }\n    return this.getCurrentSection();\n  }\n\n  previousSection() {\n    if (this._currentSectionIndex > 0) {\n      this._currentSectionIndex--;\n    }\n    return this.getCurrentSection();\n  }\n\n  getCurrentSection() {\n    if (this._sections.length === 0) return null;\n    const section = this._sections[this._currentSectionIndex];\n    return {\n      ...section,\n      index: this._currentSectionIndex,\n      total: this._sections.length\n    };\n  }\n\n  getCurrentSectionIndex() {\n    return this._currentSectionIndex;\n  }\n\n  getSection(index) {\n    if (index >= 0 && index < this._sections.length) {\n      return {\n        ...this._sections[index],\n        index,\n        total: this._sections.length\n      };\n    }\n    return null;\n  }\n\n  getAllSections() {\n    return this._sections.map((section, index) => ({\n      ...section,\n      index,\n      total: this._sections.length\n    }));\n  }\n\n  isPlaying() {\n    return this._isPlaying;\n  }\n\n  getProgress() {\n    if (this._sections.length === 0) return 0;\n\n    return Math.round((this._currentSectionIndex / (this._sections.length - 1)) * 100);\n  }\n\n  hasNextSection() {\n    return this._currentSectionIndex < this._sections.length - 1;\n  }\n\n  hasPreviousSection() {\n    return this._currentSectionIndex > 0;\n  }\n\n  toObject() {\n    return {\n      id: this.id,\n      destinationId: this.destinationId,\n      title: this.title,\n      description: this.description,\n      audioUrl: this.audioUrl,\n      duration: this.duration,\n      tourGuideContent: this.tourGuideContent,\n      isPlaying: this._isPlaying,\n      currentSectionIndex: this._currentSectionIndex\n    };\n  }\n}\n\nexport default AudioTour; ","export class AuthResult {\n  constructor({\n    success = false,\n    user = null,\n    error = null,\n    message = '',\n    requiresEmailVerification = false,\n    requiresPasswordReset = false\n  }) {\n    this.success = success;\n    this.user = user;\n    this.error = error;\n    this.message = message;\n    this.requiresEmailVerification = requiresEmailVerification;\n    this.requiresPasswordReset = requiresPasswordReset;\n  }\n\n  static success(user, message = 'Authentication successful') {\n    return new AuthResult({\n      success: true,\n      user,\n      message\n    });\n  }\n\n\n  static failure(error, message = 'Authentication failed') {\n    return new AuthResult({\n      success: false,\n      error,\n      message\n    });\n  }\n\n\n  static emailVerificationRequired(user, message = 'Please verify your email address') {\n    return new AuthResult({\n      success: false,\n      user,\n      message,\n      requiresEmailVerification: true\n    });\n  }\n\n\n  static passwordResetRequired(message = 'Password reset required') {\n    return new AuthResult({\n      success: false,\n      message,\n      requiresPasswordReset: true\n    });\n  }\n\n\n  isSuccess() {\n    return this.success && !this.requiresEmailVerification;\n  }\n\n\n  hasError() {\n    return !this.success && this.error;\n  }\n\n\n  getErrorMessage() {\n    return this.error || this.message;\n  }\n} ","class Destination {\n  constructor(id, name, summary, location = '', image = '', audioTourId = null) {\n    this.id = id;\n    this.name = name;\n    this.summary = summary;\n    this.location = location;\n    this.image = image;\n    this.audioTourId = audioTourId;\n  }\n\n  hasAudioTour() {\n    return this.audioTourId !== null && this.audioTourId !== undefined;\n  }\n\n  getDestinationInfo() {\n    return {\n      id: this.id,\n      name: this.name,\n      summary: this.summary,\n      location: this.location,\n      image: this.image,\n      hasAudioTour: this.hasAudioTour(),\n      audioTourId: this.audioTourId\n    };\n  }\n}\n\nexport default Destination;\n","class Feedback {\n  constructor(data = {}) {\n    this.id = data.id || null;\n    this.scope = data.scope || 'destination';\n    this.subjectId = data.subject_id || data.subjectId || null;\n    this.score = data.score || null; // 1-5 rating\n    this.thumb = data.thumb || null; // 'up' | 'down' | null\n    this.tags = data.tags || [];\n    this.comment = data.comment || null;\n    this.locale = data.locale || 'en';\n    this.appVersion = data.app_version || data.appVersion || '1.0.0';\n    this.device = data.device || 'unknown';\n    this.city = data.city || null;\n    this.userId = data.user_id || data.userId || null;\n    this.idempotencyKey = data.idempotency_key || data.idempotencyKey || null;\n    this.status = data.status || 'pending'; // 'pending' | 'approved' | 'hidden' | 'pending_flagged'\n    this.createdAt = data.created_at || data.createdAt || new Date();\n    this.updatedAt = data.updated_at || data.updatedAt || new Date();\n  }\n\n\n  validate() {\n    const errors = [];\n\n    if (!this.subjectId) {\n      errors.push('Subject ID is required');\n    }\n\n    if (this.scope !== 'destination') {\n      errors.push('Scope must be \"destination\"');\n    }\n\n    if (this.score !== null && (this.score < 1 || this.score > 5)) {\n      errors.push('Score must be between 1 and 5');\n    }\n\n    if (this.thumb && !['up', 'down'].includes(this.thumb)) {\n      errors.push('Thumb must be \"up\" or \"down\"');\n    }\n\n    if (this.comment && this.comment.length > 500) {\n      errors.push('Comment must be 500 characters or less');\n    }\n\n    if (this.tags && !Array.isArray(this.tags)) {\n      errors.push('Tags must be an array');\n    }\n\n    if (this.tags && this.tags.length > 10) {\n      errors.push('Maximum 10 tags allowed');\n    }\n\n    if (!this.idempotencyKey) {\n      errors.push('Idempotency key is required');\n    }\n\n    return {\n      isValid: errors.length === 0,\n      errors\n    };\n  }\n\n\n  toObject() {\n    return {\n      scope: this.scope,\n      subject_id: this.subjectId,\n      score: this.score,\n      thumb: this.thumb,\n      tags: this.tags,\n      comment: this.comment,\n      locale: this.locale,\n      app_version: this.appVersion,\n      device: this.device,\n      city: this.city,\n      user_id: this.userId,\n      idempotency_key: this.idempotencyKey,\n      status: this.status,\n      created_at: this.createdAt,\n      updated_at: this.updatedAt\n    };\n  }\n\n\n  static fromRequestData(data) {\n    return new Feedback({\n      scope: 'destination',\n      subject_id: data.destinationId,\n      score: data.score,\n      thumb: data.thumb,\n      tags: data.tags || [],\n      comment: data.comment,\n      locale: data.locale,\n      app_version: data.appVersion,\n      device: data.device,\n      city: data.city,\n      user_id: data.userId,\n      idempotency_key: data.idempotencyKey\n    });\n  }\n}\n\nexport default Feedback; ","class FeedbackAggregate {\n  constructor(data = {}) {\n    this.id = data.id || null;\n    this.subjectId = data.subject_id || data.subjectId || null;\n    this.n = data.n || 0;\n    this.sum = data.sum || 0;\n    this.hist = data.hist || { \"1\": 0, \"2\": 0, \"3\": 0, \"4\": 0, \"5\": 0 };\n    this.thumbsUp = data.thumbs_up || data.thumbsUp || 0;\n    this.thumbsDown = data.thumbs_down || data.thumbsDown || 0;\n    this.bayesAvg = data.bayes_avg || data.bayesAvg || 0;\n    this.updatedAt = data.updated_at || data.updatedAt || new Date();\n\n    this.MU = 4.2;\n    this.M = 20;\n  }\n\n  calculateBayesAverage() {\n    if (this.n === 0) {\n      return this.MU;\n    }\n    return ((this.M * this.MU) + this.sum) / (this.M + this.n);\n  }\n\n  updateWithFeedback(feedback) {\n    if (feedback.score !== null && feedback.score !== undefined) {\n      this.n += 1;\n      this.sum += feedback.score;\n      const key = String(feedback.score);\n      this.hist[key] = (this.hist[key] || 0) + 1;\n    }\n\n    if (feedback.thumb === 'up') {\n      this.thumbsUp += 1;\n    } else if (feedback.thumb === 'down') {\n      this.thumbsDown += 1;\n    }\n\n    this.bayesAvg = this.calculateBayesAverage();\n    this.updatedAt = new Date();\n  }\n\n  getAverageRating() {\n    return this.n > 0 ? this.sum / this.n : 0;\n  }\n\n  getThumbsRatio() {\n    const total = this.thumbsUp + this.thumbsDown;\n    return total > 0 ? this.thumbsUp / total : 0;\n  }\n\n  toObject() {\n    return {\n      n: this.n,\n      sum: this.sum,\n      hist: this.hist,\n      thumbs_up: this.thumbsUp,\n      thumbs_down: this.thumbsDown,\n      bayes_avg: this.bayesAvg,\n      updated_at: this.updatedAt\n    };\n  }\n\n  static fromFirestoreData(data, subjectId) {\n    return new FeedbackAggregate({\n      subject_id: subjectId,\n      n: data.n || 0,\n      sum: data.sum || 0,\n      hist: data.hist || { \"1\": 0, \"2\": 0, \"3\": 0, \"4\": 0, \"5\": 0 },\n      thumbs_up: data.thumbs_up || 0,\n      thumbs_down: data.thumbs_down || 0,\n      bayes_avg: data.bayes_avg || 0,\n      updated_at: data.updated_at || new Date()\n    });\n  }\n\n  static createEmpty(subjectId) {\n    return new FeedbackAggregate({\n      subject_id: subjectId,\n      n: 0,\n      sum: 0,\n      hist: { \"1\": 0, \"2\": 0, \"3\": 0, \"4\": 0, \"5\": 0 },\n      thumbs_up: 0,\n      thumbs_down: 0,\n      bayes_avg: 4.2,\n      updated_at: new Date()\n    });\n  }\n}\n\nexport default FeedbackAggregate; ","class TourGuideStory {\n  constructor() {\n    this.destination = null;\n    this._started = false;\n  }\n\n  setDestination(destination) {\n    if (this._started) {\n      throw new Error('Cannot change destination while tour is active');\n    }\n    this.destination = destination;\n  }\n\n  start() {\n    if (!this.destination) {\n      throw new Error('No destination set');\n    }\n    this._started = true;\n  }\n\n  stop() {\n    this._started = false;\n  }\n\n  isStarted() {\n    return this._started;\n  }\n}\n\nexport default TourGuideStory;\n","import { ValidationError } from '../errors/DomainErrors.js';\n\nexport class UserRole {\n    static VALID_ROLES = ['user', 'moderator', 'content_manager', 'admin', 'super_admin'];\n    \n    constructor(role) {\n        this.validate(role);\n        this.role = role;\n    }\n\n    validate(role) {\n        if (!role || typeof role !== 'string') {\n            throw new ValidationError('role', 'Role is required and must be a string');\n        }\n        \n        if (!UserRole.VALID_ROLES.includes(role)) {\n            throw new ValidationError('role', `Invalid role. Must be one of: ${UserRole.VALID_ROLES.join(', ')}`);\n        }\n    }\n\n    getPermissionLevel() {\n        const levels = {\n            'super_admin': 5,\n            'admin': 4,\n            'content_manager': 3,\n            'moderator': 2,\n            'user': 1\n        };\n        return levels[this.role] || 1;\n    }\n\n    canAccessFeature(feature) {\n        const featurePermissions = {\n            'admin_panel': ['admin', 'super_admin'],\n            'content_management': ['content_manager', 'admin', 'super_admin'],\n            'user_management': ['admin', 'super_admin'],\n            'moderation': ['moderator', 'admin', 'super_admin'],\n            'bulk_operations': ['admin', 'super_admin']\n        };\n        \n        const requiredRoles = featurePermissions[feature];\n        if (!requiredRoles) return false;\n        \n        return requiredRoles.includes(this.role);\n    }\n\n    isHigherThan(otherRole) {\n        return this.getPermissionLevel() > otherRole.getPermissionLevel();\n    }\n\n    toString() {\n        return this.role;\n    }\n\n    toJSON() {\n        return {\n            role: this.role,\n            permissionLevel: this.getPermissionLevel()\n        };\n    }\n}\n","import { ValidationError } from '../errors/DomainErrors.js';\n\nexport class UserStatus {\n    static VALID_STATUSES = ['active', 'inactive', 'suspended', 'pending', 'locked'];\n    \n    constructor(status) {\n        this.validate(status);\n        this.status = status;\n    }\n\n    validate(status) {\n        if (!status || typeof status !== 'string') {\n            throw new ValidationError('status', 'Status is required and must be a string');\n        }\n        \n        if (!UserStatus.VALID_STATUSES.includes(status)) {\n            throw new ValidationError('status', `Invalid status. Must be one of: ${UserStatus.VALID_STATUSES.join(', ')}`);\n        }\n    }\n\n    isActive() {\n        return this.status === 'active';\n    }\n\n    isInactive() {\n        return this.status === 'inactive';\n    }\n\n    isSuspended() {\n        return this.status === 'suspended';\n    }\n\n    isPending() {\n        return this.status === 'pending';\n    }\n\n    isLocked() {\n        return this.status === 'locked';\n    }\n\n    canBeEdited() {\n        return this.status !== 'suspended' && this.status !== 'locked';\n    }\n\n    canBeDeleted() {\n        return this.status !== 'active';\n    }\n\n    toString() {\n        return this.status;\n    }\n\n    toJSON() {\n        return {\n            status: this.status,\n            isActive: this.isActive(),\n            canBeEdited: this.canBeEdited(),\n            canBeDeleted: this.canBeDeleted()\n        };\n    }\n}\n","import { ValidationError } from '../errors/DomainErrors.js';\n\nexport class RateLimit {\n    constructor(limit, window, type = 'requests') {\n        this.validate(limit, window, type);\n        this.limit = limit;\n        this.window = window; // in minutes\n        this.type = type;\n    }\n    \n    validate(limit, window, type) {\n        if (!Number.isInteger(limit) || limit <= 0) {\n            throw new ValidationError('limit', 'Rate limit must be a positive integer');\n        }\n        \n        if (!Number.isInteger(window) || window <= 0) {\n            throw new ValidationError('window', 'Rate limit window must be a positive integer (minutes)');\n        }\n        \n        const validTypes = ['requests', 'login_attempts', 'api_calls', 'uploads', 'downloads'];\n        if (!validTypes.includes(type)) {\n            throw new ValidationError('type', `Invalid rate limit type. Must be one of: ${validTypes.join(', ')}`);\n        }\n    }\n    \n    getLimit() {\n        return this.limit;\n    }\n    \n    getWindow() {\n        return this.window;\n    }\n    \n    getType() {\n        return this.type;\n    }\n    \n    // Get rate limit in requests per hour\n    getRequestsPerHour() {\n        return Math.floor((this.limit * 60) / this.window);\n    }\n    \n    // Get rate limit in requests per day\n    getRequestsPerDay() {\n        return Math.floor((this.limit * 24 * 60) / this.window);\n    }\n    \n    // Check if a given count exceeds the limit\n    exceedsLimit(currentCount) {\n        return currentCount > this.limit;\n    }\n    \n    // Get remaining requests\n    getRemainingRequests(currentCount) {\n        return Math.max(0, this.limit - currentCount);\n    }\n    \n    // Get reset time for the window\n    getResetTime(startTime) {\n        const start = new Date(startTime);\n        const resetTime = new Date(start.getTime() + (this.window * 60 * 1000));\n        return resetTime;\n    }\n    \n    // Check if rate limit is appropriate for the use case\n    isAppropriateFor(useCase) {\n        const recommendations = {\n            'user_registration': { minLimit: 5, maxLimit: 10, window: 60 },\n            'password_reset': { minLimit: 3, maxLimit: 5, window: 60 },\n            'api_access': { minLimit: 100, maxLimit: 1000, window: 60 },\n            'file_upload': { minLimit: 10, maxLimit: 50, window: 60 },\n            'content_creation': { minLimit: 20, maxLimit: 100, window: 60 }\n        };\n        \n        const rec = recommendations[useCase];\n        if (!rec) return true;\n        \n        return this.limit >= rec.minLimit && \n               this.limit <= rec.maxLimit && \n               this.window >= rec.window;\n    }\n    \n    // Get business rule recommendations\n    getBusinessRuleRecommendations() {\n        const recommendations = [];\n        \n        if (this.type === 'login_attempts' && this.limit > 5) {\n            recommendations.push('Consider implementing account lockout after failed attempts');\n        }\n        \n        if (this.type === 'api_calls' && this.limit > 1000) {\n            recommendations.push('Consider implementing tiered rate limits based on user subscription');\n        }\n        \n        if (this.window < 1) {\n            recommendations.push('Very short windows may impact user experience');\n        }\n        \n        if (this.window > 60) {\n            recommendations.push('Long windows may allow abuse before detection');\n        }\n        \n        return recommendations;\n    }\n    \n    // Create rate limit for specific business scenarios\n    static forUserRegistration() {\n        return new RateLimit(5, 60, 'requests');\n    }\n    \n    static forPasswordReset() {\n        return new RateLimit(3, 60, 'requests');\n    }\n    \n    static forLoginAttempts() {\n        return new RateLimit(5, 15, 'login_attempts');\n    }\n    \n    static forApiAccess() {\n        return new RateLimit(100, 60, 'api_calls');\n    }\n    \n    static forFileUpload() {\n        return new RateLimit(10, 60, 'uploads');\n    }\n    \n    static forContentCreation() {\n        return new RateLimit(20, 60, 'requests');\n    }\n    \n    // Get rate limit severity level\n    getSeverityLevel() {\n        if (this.limit <= 5) return 'strict';\n        if (this.limit <= 20) return 'moderate';\n        if (this.limit <= 100) return 'lenient';\n        return 'permissive';\n    }\n    \n    // Check if rate limit is business-appropriate\n    isBusinessAppropriate() {\n        const businessRules = {\n            'requests': { min: 1, max: 1000 },\n            'login_attempts': { min: 3, max: 10 },\n            'api_calls': { min: 10, max: 10000 },\n            'uploads': { min: 1, max: 100 },\n            'downloads': { min: 1, max: 1000 }\n        };\n        \n        const rule = businessRules[this.type];\n        if (!rule) return true;\n        \n        return this.limit >= rule.min && this.limit <= rule.max;\n    }\n    \n    toString() {\n        return `${this.limit} ${this.type} per ${this.window} minutes`;\n    }\n    \n    toJSON() {\n        return {\n            limit: this.limit,\n            window: this.window,\n            type: this.type,\n            requestsPerHour: this.getRequestsPerHour(),\n            requestsPerDay: this.getRequestsPerDay(),\n            severityLevel: this.getSeverityLevel(),\n            isBusinessAppropriate: this.isBusinessAppropriate(),\n            recommendations: this.getBusinessRuleRecommendations()\n        };\n    }\n}\n","import { BusinessRuleViolationError } from '../errors/DomainErrors.js';\n\nexport class BusinessRuleValidationService {\n    static validateTourPublishingRules(tour, user) {\n        const violations = [];\n        \n        // Check if user has permission to publish\n        if (!user.canAccessFeature('content_management')) {\n            violations.push('User does not have permission to publish tours');\n        }\n        \n        // Check if tour has required content\n        if (!tour.pointsOfInterest || tour.pointsOfInterest.length === 0) {\n            violations.push('Tour must have at least one point of interest');\n        }\n        \n        if (!tour.audioFiles || tour.audioFiles.length === 0) {\n            violations.push('Tour must have at least one audio file');\n        }\n        \n        if (!tour.languages || tour.languages.length === 0) {\n            violations.push('Tour must support at least one language');\n        }\n        \n        // Check tour content quality\n        if (tour.description && tour.description.length < 50) {\n            violations.push('Tour description must be at least 50 characters');\n        }\n        \n        if (tour.duration < 15) {\n            violations.push('Tour duration must be at least 15 minutes');\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('tour_publishing', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static validateUserRegistrationRules(userData, existingUsers = []) {\n        const violations = [];\n        \n        // Check email uniqueness\n        const emailExists = existingUsers.some(user => \n            user.email && user.email.toLowerCase() === userData.email.toLowerCase()\n        );\n        \n        if (emailExists) {\n            violations.push('Email address is already registered');\n        }\n        \n        // Check age requirements (if birth date provided)\n        if (userData.birthDate) {\n            const age = this.calculateAge(userData.birthDate);\n            if (age < 13) {\n                violations.push('User must be at least 13 years old');\n            }\n        }\n        \n        // Check business rules for premium features\n        if (userData.subscription && userData.subscription.plan === 'premium') {\n            if (!userData.emailVerified) {\n                violations.push('Email must be verified for premium subscription');\n            }\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('user_registration', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static validateSubscriptionRules(subscription, user) {\n        const violations = [];\n        \n        // Check if user already has active subscription\n        if (user.hasActiveSubscription()) {\n            violations.push('User already has an active subscription');\n        }\n        \n        // Check subscription limits\n        if (subscription.plan === 'free' && user.subscriptionCount >= 1) {\n            violations.push('Free plan allows only one subscription');\n        }\n        \n        // Check payment method requirements\n        if (subscription.plan !== 'free' && !subscription.paymentMethod) {\n            violations.push('Payment method is required for paid plans');\n        }\n        \n        // Check age restrictions for certain plans\n        if (subscription.plan === 'enterprise' && user.age < 18) {\n            violations.push('Enterprise plan requires user to be 18 or older');\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('subscription', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static validateContentApprovalRules(workflow, approver) {\n        const violations = [];\n        \n        // Check if approver has permission\n        if (!approver.canAccessFeature('content_management')) {\n            violations.push('Approver does not have content management permissions');\n        }\n        \n        // Check if workflow is in correct state\n        if (workflow.status !== 'pending') {\n            violations.push('Workflow must be in pending status for approval');\n        }\n        \n        // Check if approver is assigned to this workflow\n        if (workflow.approverId !== approver.id) {\n            violations.push('Only assigned approver can approve this workflow');\n        }\n        \n        // Check business hours for approval (if applicable)\n        const currentHour = new Date().getHours();\n        if (currentHour < 9 || currentHour > 17) {\n            violations.push('Approvals can only be processed during business hours (9 AM - 5 PM)');\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('content_approval', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static validatePricingRules(pricing, tour) {\n        const violations = [];\n        \n        // Check if tour exists and is published\n        if (!tour || tour.status !== 'published') {\n            violations.push('Pricing can only be set for published tours');\n        }\n        \n        // Check pricing limits\n        if (pricing.basePrice < 0) {\n            violations.push('Base price cannot be negative');\n        }\n        \n        if (pricing.basePrice > 1000) {\n            violations.push('Base price cannot exceed $1000');\n        }\n        \n        // Check currency support\n        const supportedCurrencies = ['USD', 'EUR', 'GBP', 'CAD', 'AUD'];\n        if (!supportedCurrencies.includes(pricing.currency)) {\n            violations.push(`Currency ${pricing.currency} is not supported`);\n        }\n        \n        // Check discount rules\n        if (pricing.discounts) {\n            for (const discount of pricing.discounts) {\n                if (discount.percentage > 100) {\n                    violations.push('Discount percentage cannot exceed 100%');\n                }\n                \n                if (discount.percentage < 0) {\n                    violations.push('Discount percentage cannot be negative');\n                }\n            }\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('pricing', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static validateTourProgressRules(progress, user, tour) {\n        const violations = [];\n        \n        // Check if user has access to tour\n        if (!user.hasAccessToTour(tour)) {\n            violations.push('User does not have access to this tour');\n        }\n        \n        // Check if tour is active\n        if (tour.status !== 'published') {\n            violations.push('Tour must be published to track progress');\n        }\n        \n        // Check progress limits\n        if (progress.totalProgress < 0 || progress.totalProgress > 100) {\n            violations.push('Progress must be between 0 and 100 percent');\n        }\n        \n        // Check if user has completed prerequisites\n        if (tour.prerequisites && tour.prerequisites.length > 0) {\n            const completedPrerequisites = tour.prerequisites.filter(prereq => \n                user.hasCompletedTour(prereq.tourId)\n            );\n            \n            if (completedPrerequisites.length !== tour.prerequisites.length) {\n                violations.push('User must complete prerequisite tours first');\n            }\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('tour_progress', violations.join('; '));\n        }\n        \n        return true;\n    }\n    \n    static calculateAge(birthDate) {\n        const today = new Date();\n        const birth = new Date(birthDate);\n        let age = today.getFullYear() - birth.getFullYear();\n        const monthDiff = today.getMonth() - birth.getMonth();\n        \n        if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {\n            age--;\n        }\n        \n        return age;\n    }\n    \n    static validateBulkOperationRules(operation, items, user) {\n        const violations = [];\n        \n        // Check operation limits\n        if (items.length > 100) {\n            violations.push('Bulk operations are limited to 100 items');\n        }\n        \n        // Check user permissions\n        if (!user.canAccessFeature('bulk_operations')) {\n            violations.push('User does not have permission for bulk operations');\n        }\n        \n        // Check item-specific rules\n        for (const item of items) {\n            if (!item.id) {\n                violations.push('All items must have valid IDs');\n                break;\n            }\n        }\n        \n        if (violations.length > 0) {\n            throw new BusinessRuleViolationError('bulk_operation', violations.join('; '));\n        }\n        \n        return true;\n    }\n}\n","import { BaseEntity } from '../entities/BaseEntity.js';\n\nexport class DomainEvent extends BaseEntity {\n    constructor({ id, eventType, aggregateId, aggregateType, eventData, version, timestamp, clock } = {}) {\n        super({ id, createdAt: timestamp, updatedAt: timestamp, clock });\n        this.eventType = eventType;\n        this.aggregateId = aggregateId;\n        this.aggregateType = aggregateType;\n        this.eventData = eventData || {};\n        this.version = version || 1;\n        this.timestamp = timestamp || clock.now();\n    }\n    \n    toJSON() {\n        return {\n            id: this.id,\n            eventType: this.eventType,\n            aggregateId: this.aggregateId,\n            aggregateType: this.aggregateType,\n            eventData: this.eventData,\n            version: this.version,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class DomainEventService {\n    constructor(eventStore, clock) {\n        this.eventStore = eventStore;\n        this.clock = clock;\n        this.eventHandlers = new Map();\n    }\n    \n    publish(eventType, aggregateId, aggregateType, eventData) {\n        const event = new DomainEvent({\n            eventType,\n            aggregateId,\n            aggregateType,\n            eventData,\n            clock: this.clock\n        });\n        \n        // Store the event\n        this.eventStore.append(event);\n        \n        // Notify handlers\n        this.notifyHandlers(event);\n        \n        return event;\n    }\n    \n    subscribe(eventType, handler) {\n        if (!this.eventHandlers.has(eventType)) {\n            this.eventHandlers.set(eventType, []);\n        }\n        this.eventHandlers.get(eventType).push(handler);\n    }\n    \n    unsubscribe(eventType, handler) {\n        if (this.eventHandlers.has(eventType)) {\n            const handlers = this.eventHandlers.get(eventType);\n            const index = handlers.indexOf(handler);\n            if (index > -1) {\n                handlers.splice(index, 1);\n            }\n        }\n    }\n    \n    notifyHandlers(event) {\n        const handlers = this.eventHandlers.get(event.eventType) || [];\n        handlers.forEach(handler => {\n            try {\n                handler(event);\n            } catch (error) {\n                console.error(`Error in event handler for ${event.eventType}:`, error);\n            }\n        });\n    }\n    \n    // User Events\n    publishUserRegistered(userId, userData) {\n        return this.publish('UserRegistered', userId, 'User', {\n            userId,\n            email: userData.email,\n            name: userData.name,\n            role: userData.role\n        });\n    }\n    \n    publishUserActivated(userId, activatedBy) {\n        return this.publish('UserActivated', userId, 'User', {\n            userId,\n            activatedBy,\n            activationReason: 'Manual activation'\n        });\n    }\n    \n    publishUserDeactivated(userId, deactivatedBy, reason) {\n        return this.publish('UserDeactivated', userId, 'User', {\n            userId,\n            deactivatedBy,\n            reason\n        });\n    }\n    \n    publishUserRoleChanged(userId, oldRole, newRole, changedBy) {\n        return this.publish('UserRoleChanged', userId, 'User', {\n            userId,\n            oldRole,\n            newRole,\n            changedBy\n        });\n    }\n    \n    // Tour Events\n    publishTourCreated(tourId, tourData, creatorId) {\n        return this.publish('TourCreated', tourId, 'Tour', {\n            tourId,\n            title: tourData.title,\n            city: tourData.city,\n            country: tourData.country,\n            creatorId\n        });\n    }\n    \n    publishTourPublished(tourId, publishedBy) {\n        return this.publish('TourPublished', tourId, 'Tour', {\n            tourId,\n            publishedBy,\n            publishedAt: this.clock.now()\n        });\n    }\n    \n    publishTourUnpublished(tourId, unpublishedBy, reason) {\n        return this.publish('TourUnpublished', tourId, 'Tour', {\n            tourId,\n            unpublishedBy,\n            reason,\n            unpublishedAt: this.clock.now()\n        });\n    }\n    \n    publishTourArchived(tourId, archivedBy, reason) {\n        return this.publish('TourArchived', tourId, 'Tour', {\n            tourId,\n            archivedBy,\n            reason,\n            archivedAt: this.clock.now()\n        });\n    }\n    \n    // Subscription Events\n    publishSubscriptionCreated(subscriptionId, userId, plan) {\n        return this.publish('SubscriptionCreated', subscriptionId, 'Subscription', {\n            subscriptionId,\n            userId,\n            plan,\n            createdAt: this.clock.now()\n        });\n    }\n    \n    publishSubscriptionActivated(subscriptionId, userId) {\n        return this.publish('SubscriptionActivated', subscriptionId, 'Subscription', {\n            subscriptionId,\n            userId,\n            activatedAt: this.clock.now()\n        });\n    }\n    \n    publishSubscriptionCancelled(subscriptionId, userId, reason) {\n        return this.publish('SubscriptionCancelled', subscriptionId, 'Subscription', {\n            subscriptionId,\n            userId,\n            reason,\n            cancelledAt: this.clock.now()\n        });\n    }\n    \n    publishSubscriptionExpired(subscriptionId, userId) {\n        return this.publish('SubscriptionExpired', subscriptionId, 'Subscription', {\n            subscriptionId,\n            userId,\n            expiredAt: this.clock.now()\n        });\n    }\n    \n    // Content Events\n    publishContentApproved(contentId, contentType, approverId) {\n        return this.publish('ContentApproved', contentId, contentType, {\n            contentId,\n            contentType,\n            approverId,\n            approvedAt: this.clock.now()\n        });\n    }\n    \n    publishContentRejected(contentId, contentType, approverId, reason) {\n        return this.publish('ContentRejected', contentId, contentType, {\n            contentId,\n            contentType,\n            approverId,\n            reason,\n            rejectedAt: this.clock.now()\n        });\n    }\n    \n    // Progress Events\n    publishTourStarted(tourId, userId) {\n        return this.publish('TourStarted', tourId, 'TourProgress', {\n            tourId,\n            userId,\n            startedAt: this.clock.now()\n        });\n    }\n    \n    publishTourCompleted(tourId, userId, completionTime) {\n        return this.publish('TourCompleted', tourId, 'TourProgress', {\n            tourId,\n            userId,\n            completedAt: this.clock.now(),\n            completionTime\n        });\n    }\n    \n    publishProgressUpdated(tourId, userId, progress) {\n        return this.publish('ProgressUpdated', tourId, 'TourProgress', {\n            tourId,\n            userId,\n            progress,\n            updatedAt: this.clock.now()\n        });\n    }\n    \n    // Feedback Events\n    publishFeedbackSubmitted(feedbackId, userId, tourId, rating) {\n        return this.publish('FeedbackSubmitted', feedbackId, 'UserFeedback', {\n            feedbackId,\n            userId,\n            tourId,\n            rating,\n            submittedAt: this.clock.now()\n        });\n    }\n    \n    publishFeedbackUpdated(feedbackId, userId, tourId, newRating) {\n        return this.publish('FeedbackUpdated', feedbackId, 'UserFeedback', {\n            feedbackId,\n            userId,\n            tourId,\n            newRating,\n            updatedAt: this.clock.now()\n        });\n    }\n    \n    // System Events\n    publishSystemMaintenanceStarted(maintenanceId, duration, affectedServices) {\n        return this.publish('SystemMaintenanceStarted', maintenanceId, 'System', {\n            maintenanceId,\n            duration,\n            affectedServices,\n            startedAt: this.clock.now()\n        });\n    }\n    \n    publishSystemMaintenanceCompleted(maintenanceId) {\n        return this.publish('SystemMaintenanceCompleted', maintenanceId, 'System', {\n            maintenanceId,\n            completedAt: this.clock.now()\n        });\n    }\n    \n    // Get events for an aggregate\n    async getEventsForAggregate(aggregateId, aggregateType) {\n        return await this.eventStore.getEventsForAggregate(aggregateId, aggregateType);\n    }\n    \n    // Get events by type\n    async getEventsByType(eventType, limit = 100) {\n        return await this.eventStore.getEventsByType(eventType, limit);\n    }\n    \n    // Get events by date range\n    async getEventsByDateRange(startDate, endDate, limit = 100) {\n        return await this.eventStore.getEventsByDateRange(startDate, endDate, limit);\n    }\n}\n","import { BaseEntity } from '../entities/BaseEntity.js';\n\nexport class UserRegisteredEvent extends BaseEntity {\n    constructor({ userId, email, name, role, registrationSource, clock }) {\n        super({ clock });\n        this.eventType = 'UserRegistered';\n        this.userId = userId;\n        this.email = email;\n        this.name = name;\n        this.role = role;\n        this.registrationSource = registrationSource || 'web';\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            email: this.email,\n            name: this.name,\n            role: this.role,\n            registrationSource: this.registrationSource,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserActivatedEvent extends BaseEntity {\n    constructor({ userId, activatedBy, activationReason, clock }) {\n        super({ clock });\n        this.eventType = 'UserActivated';\n        this.userId = userId;\n        this.activatedBy = activatedBy;\n        this.activationReason = activationReason || 'Manual activation';\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            activatedBy: this.activatedBy,\n            activationReason: this.activationReason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserDeactivatedEvent extends BaseEntity {\n    constructor({ userId, deactivatedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'UserDeactivated';\n        this.userId = userId;\n        this.deactivatedBy = deactivatedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            deactivatedBy: this.deactivatedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserRoleChangedEvent extends BaseEntity {\n    constructor({ userId, oldRole, newRole, changedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'UserRoleChanged';\n        this.userId = userId;\n        this.oldRole = oldRole;\n        this.newRole = newRole;\n        this.changedBy = changedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            oldRole: this.oldRole,\n            newRole: this.newRole,\n            changedBy: this.changedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserProfileUpdatedEvent extends BaseEntity {\n    constructor({ userId, updatedFields, updatedBy, clock }) {\n        super({ clock });\n        this.eventType = 'UserProfileUpdated';\n        this.userId = userId;\n        this.updatedFields = updatedFields;\n        this.updatedBy = updatedBy;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            updatedFields: this.updatedFields,\n            updatedBy: this.updatedBy,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserPreferencesChangedEvent extends BaseEntity {\n    constructor({ userId, oldPreferences, newPreferences, changedBy, clock }) {\n        super({ clock });\n        this.eventType = 'UserPreferencesChanged';\n        this.userId = userId;\n        this.oldPreferences = oldPreferences;\n        this.newPreferences = newPreferences;\n        this.changedBy = changedBy;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            oldPreferences: this.oldPreferences,\n            newPreferences: this.newPreferences,\n            changedBy: this.changedBy,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserSecurityEvent extends BaseEntity {\n    constructor({ userId, eventType, details, severity, clock }) {\n        super({ clock });\n        this.eventType = eventType;\n        this.userId = userId;\n        this.details = details;\n        this.severity = severity || 'medium';\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            eventType: this.eventType,\n            details: this.details,\n            severity: this.severity,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class UserActivityEvent extends BaseEntity {\n    constructor({ userId, activityType, details, location, clock }) {\n        super({ clock });\n        this.eventType = 'UserActivity';\n        this.userId = userId;\n        this.activityType = activityType;\n        this.details = details;\n        this.location = location;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            userId: this.userId,\n            activityType: this.activityType,\n            details: this.details,\n            location: this.location,\n            timestamp: this.timestamp\n        };\n    }\n}\n","import { BaseEntity } from '../entities/BaseEntity.js';\n\nexport class TourCreatedEvent extends BaseEntity {\n    constructor({ tourId, title, city, country, creatorId, category, clock }) {\n        super({ clock });\n        this.eventType = 'TourCreated';\n        this.tourId = tourId;\n        this.title = title;\n        this.city = city;\n        this.country = country;\n        this.creatorId = creatorId;\n        this.category = category;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            title: this.title,\n            city: this.city,\n            country: this.country,\n            creatorId: this.creatorId,\n            category: this.category,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourPublishedEvent extends BaseEntity {\n    constructor({ tourId, publishedBy, publishedAt, clock }) {\n        super({ clock });\n        this.eventType = 'TourPublished';\n        this.tourId = tourId;\n        this.publishedBy = publishedBy;\n        this.publishedAt = publishedAt || clock.now();\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            publishedBy: this.publishedBy,\n            publishedAt: this.publishedAt,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourUnpublishedEvent extends BaseEntity {\n    constructor({ tourId, unpublishedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'TourUnpublished';\n        this.tourId = tourId;\n        this.unpublishedBy = unpublishedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            unpublishedBy: this.unpublishedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourArchivedEvent extends BaseEntity {\n    constructor({ tourId, archivedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'TourArchived';\n        this.tourId = tourId;\n        this.archivedBy = archivedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            archivedBy: this.archivedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourUpdatedEvent extends BaseEntity {\n    constructor({ tourId, updatedFields, updatedBy, clock }) {\n        super({ clock });\n        this.eventType = 'TourUpdated';\n        this.tourId = tourId;\n        this.updatedFields = updatedFields;\n        this.updatedBy = updatedBy;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            updatedFields: this.updatedFields,\n            updatedBy: this.updatedBy,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourContentAddedEvent extends BaseEntity {\n    constructor({ tourId, contentType, contentId, addedBy, clock }) {\n        super({ clock });\n        this.eventType = 'TourContentAdded';\n        this.tourId = tourId;\n        this.contentType = contentType; // 'poi', 'audio', 'image'\n        this.contentId = contentId;\n        this.addedBy = addedBy;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            contentType: this.contentType,\n            contentId: this.contentId,\n            addedBy: this.addedBy,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourContentRemovedEvent extends BaseEntity {\n    constructor({ tourId, contentType, contentId, removedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'TourContentRemoved';\n        this.tourId = tourId;\n        this.contentType = contentType;\n        this.contentId = contentId;\n        this.removedBy = removedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            contentType: this.contentType,\n            contentId: this.contentId,\n            removedBy: this.removedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourStatusChangedEvent extends BaseEntity {\n    constructor({ tourId, oldStatus, newStatus, changedBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'TourStatusChanged';\n        this.tourId = tourId;\n        this.oldStatus = oldStatus;\n        this.newStatus = newStatus;\n        this.changedBy = changedBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            oldStatus: this.oldStatus,\n            newStatus: this.newStatus,\n            changedBy: this.changedBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourFeaturedEvent extends BaseEntity {\n    constructor({ tourId, featuredBy, reason, clock }) {\n        super({ clock });\n        this.eventType = 'TourFeatured';\n        this.tourId = tourId;\n        this.featuredBy = featuredBy;\n        this.reason = reason;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            featuredBy: this.featuredBy,\n            reason: this.reason,\n            timestamp: this.timestamp\n        };\n    }\n}\n\nexport class TourPopularityChangedEvent extends BaseEntity {\n    constructor({ tourId, oldPopularity, newPopularity, changedBy, clock }) {\n        super({ clock });\n        this.eventType = 'TourPopularityChanged';\n        this.tourId = tourId;\n        this.oldPopularity = oldPopularity;\n        this.newPopularity = newPopularity;\n        this.changedBy = changedBy;\n        this.timestamp = clock.now();\n    }\n    \n    getEventData() {\n        return {\n            tourId: this.tourId,\n            oldPopularity: this.oldPopularity,\n            newPopularity: this.newPopularity,\n            changedBy: this.changedBy,\n            timestamp: this.timestamp\n        };\n    }\n}\n"],"names":[],"mappings":"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"}