UNPKG

dt-common-device

Version:

A secure and robust device management library for IoT applications

207 lines (206 loc) 5.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AlertBuilder = void 0; const alert_types_1 = require("./alert.types"); /** * AlertBuilder - A builder pattern implementation for constructing CreateAlertData objects * * This builder provides a fluent interface for creating alert data with proper validation * and default values. It follows the Builder pattern which is a standard design pattern * in TypeScript for constructing complex objects. * * Usage example: * const alertData = new AlertBuilder() * .setCategory(AlertCategory.OPERATIONS) * .setPropertyId("prop123") * .setTitle("Device Offline") * .setDescription("Device has been offline for more than 5 minutes") * .setEntityId("device456") * .setEntityType(EntityType.DEVICE) * .setSeverity(AlertSeverity.HIGH) * .setCreatedBy("user789") * .build(); */ class AlertBuilder { constructor() { this.data = {}; } /** * Sets the alert category */ setCategory(category) { this.data.category = category; return this; } /** * Sets the property ID */ setPropertyId(propertyId) { if (!propertyId || propertyId.trim() === "") { throw new Error("Property ID is required and cannot be empty"); } this.data.propertyId = propertyId; return this; } /** * Sets the zone ID */ setZoneId(zoneId) { if (!zoneId || zoneId.trim() === "") { throw new Error("Zone ID is required and cannot be empty"); } this.data.zoneId = zoneId; return this; } /** * Sets the alert title */ setTitle(title) { if (!title || title.trim() === "") { throw new Error("Title is required and cannot be empty"); } this.data.title = title.trim(); return this; } /** * Sets the alert description */ setDescription(description) { if (!description || description.trim() === "") { throw new Error("Description is required and cannot be empty"); } this.data.description = description.trim(); return this; } /** * Sets the entity ID (optional) */ setEntityId(entityId) { if (entityId !== undefined) { this.data.entityId = entityId.trim() || undefined; } return this; } /** * Sets the entity type */ setEntityType(entityType) { this.data.entityType = entityType; return this; } /** * Sets the entity sub type */ setEntitySubType(entitySubType) { this.data.entitySubType = entitySubType; return this; } /** * Sets the alert severity (optional, defaults to LOW) */ setSeverity(severity) { if (severity !== undefined) { this.data.severity = severity; } return this; } /** * Sets the alert type (optional) */ setType(type) { if (type !== undefined) { this.data.type = type; } return this; } /** * Sets the user who created the alert (optional) */ setCreatedBy(createdBy) { if (createdBy !== undefined) { this.data.createdBy = createdBy.trim() || undefined; } return this; } /** * Sets the snooze until date (optional) */ setSnoozeUntil(snoozeUntil) { if (snoozeUntil !== undefined) { this.data.snoozeUntil = snoozeUntil; } return this; } /** * Validates that all required fields are present */ validate() { const requiredFields = [ "category", "propertyId", "zoneId", "title", "description", "entityType", "entityId", "type", ]; const missingFields = requiredFields.filter((field) => !this.data[field]); if (missingFields.length > 0) { throw new Error(`Missing required fields: ${missingFields.join(", ")}`); } } /** * Builds and returns the CreateAlertData object * @throws Error if required fields are missing */ build() { this.validate(); // Set default severity if not provided if (!this.data.severity) { this.data.severity = alert_types_1.AlertSeverity.LOW; } return this.data; } /** * Resets the builder to its initial state */ reset() { this.data = {}; return this; } static createOperationsAlert() { return new AlertBuilder() .setCategory(alert_types_1.AlertCategory.OPERATIONS) .setSeverity(alert_types_1.AlertSeverity.HIGH); } static createSecurityAlert() { return new AlertBuilder() .setCategory(alert_types_1.AlertCategory.SECURITY) .setSeverity(alert_types_1.AlertSeverity.CRITICAL); } static createEnergyAlert() { return new AlertBuilder() .setCategory(alert_types_1.AlertCategory.ENERGY) .setSeverity(alert_types_1.AlertSeverity.LOW); } /** * Creates a device-specific alert builder */ static createDeviceAlert(deviceId, propertyId) { return new AlertBuilder() .setEntityType(alert_types_1.EntityType.DEVICE) .setEntityId(deviceId) .setPropertyId(propertyId); } /** * Creates a hub-specific alert builder */ static createHubAlert(hubId, propertyId) { return new AlertBuilder() .setEntityType(alert_types_1.EntityType.HUB) .setEntityId(hubId) .setPropertyId(propertyId); } } exports.AlertBuilder = AlertBuilder;