UNPKG

dt-common-device

Version:

A secure and robust device management library for IoT applications

180 lines (179 loc) 9.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IssueServiceExample = void 0; const constants_1 = require("../constants"); const IssueBuilder_1 = require("./IssueBuilder"); const issue_types_1 = require("./issue.types"); /** * Example usage of the updated IssueService with IssueBuilder integration * This file demonstrates various ways to use the IssueService with the new IssueBuilder */ class IssueServiceExample { constructor(issueService) { this.issueService = issueService; } /** * Example 1: Using the updated createIssue method with IssueBuilder */ async createIssueWithBuilder() { const issueBuilder = new IssueBuilder_1.IssueBuilder() .setCategory(issue_types_1.IssuesCategory.OPERATIONS) .setPropertyId("prop123") .setTitle("Device Maintenance Required") .setDescription("Device requires scheduled maintenance") .setEntityId("device456") .setEntityType(issue_types_1.EntityType.DEVICE) .setPriority(issue_types_1.IssuePriority.HIGH) .setAssignedTo("tech789") .setCreatedBy("user123") .setDueDate(new Date("2024-01-15")); // Pass the IssueBuilder directly to createIssue const issue = await this.issueService.createIssue(issueBuilder); return issue; } /** * Example 2: Using convenience methods for specific issue types */ async createSpecificIssues() { // Create a readiness issue const readinessIssue = await this.issueService.createReadinessIssue("prop123", "System Maintenance Required", "System maintenance is scheduled for tonight", "admin", "system456", issue_types_1.EntityType.PROPERTY, "maintenance-team", new Date("2024-01-20")); // Create an operations issue const operationsIssue = await this.issueService.createOperationsIssue("prop123", "Device Temperature High", "Device temperature exceeds normal operating range", "monitor", "device789", issue_types_1.EntityType.DEVICE, "tech-support", new Date("2024-01-10")); // Create a security issue const securityIssue = await this.issueService.createSecurityIssue("prop123", "Unauthorized Access Attempt", "Multiple failed login attempts detected", "security-system", "user123", issue_types_1.EntityType.USER, "security-team", new Date("2024-01-05")); // Create an energy issue const energyIssue = await this.issueService.createEnergyIssue("prop123", "High Energy Consumption", "Energy usage is 20% above normal levels", "energy-monitor", "zone456", issue_types_1.EntityType.COLLECTION, "energy-manager", new Date("2024-01-25")); return { readinessIssue, operationsIssue, securityIssue, energyIssue }; } /** * Example 3: Using device-specific issue methods */ async createDeviceIssues() { // Create a device issue with default category and priority const deviceIssue1 = await this.issueService.createDeviceIssue("device123", "prop456", "Device Battery Low", "Device battery level is below 20%", constants_1.Source.CLOUD_EVENT, undefined, // Use default category undefined, // Use default priority "maintenance-team", new Date("2024-01-12")); // Create a device issue with custom category and priority const deviceIssue2 = await this.issueService.createDeviceIssue("device789", "prop456", "Device Firmware Update Available", "New firmware version is available for installation", constants_1.Source.CLOUD_EVENT, issue_types_1.IssuesCategory.READINESS, issue_types_1.IssuePriority.MEDIUM, "admin", new Date("2024-01-20")); return { deviceIssue1, deviceIssue2 }; } /** * Example 4: Using hub-specific issue methods */ async createHubIssues() { // Create a hub issue with default settings const hubIssue1 = await this.issueService.createHubIssue("hub123", "prop456", "Hub Connection Lost", "Hub has lost connection to the network", "network-monitor", undefined, // Use default category undefined, // Use default priority "network-admin", new Date("2024-01-05")); // Create a hub issue with custom settings const hubIssue2 = await this.issueService.createHubIssue("hub789", "prop456", "Hub Maintenance Required", "Hub requires scheduled maintenance", "maintenance-system", issue_types_1.IssuesCategory.READINESS, issue_types_1.IssuePriority.LOW, "technician", new Date("2024-01-15")); return { hubIssue1, hubIssue2 }; } /** * Example 5: Using user-specific issue methods */ async createUserIssues() { // Create a user issue const userIssue = await this.issueService.createUserIssue("user456", "prop303", "User Access Review Required", "User access permissions need review", "access-control", issue_types_1.IssuesCategory.SECURITY, issue_types_1.IssuePriority.MEDIUM, "hr-admin", new Date("2024-01-30")); return { userIssue }; } /** * Example 6: Using maintenance and urgent issue methods */ async createMaintenanceAndUrgentIssues() { // Create a maintenance issue const maintenanceIssue = await this.issueService.createMaintenanceIssue("prop505", "Scheduled Device Maintenance", "Regular maintenance is scheduled for this device", "maintenance-scheduler", "device789", issue_types_1.EntityType.DEVICE, "technician", new Date("2024-01-12")); // Create an urgent issue const urgentIssue = await this.issueService.createUrgentIssue("prop606", "Critical Hub Failure", "Hub is experiencing critical failures", "monitoring-system", "hub123", issue_types_1.EntityType.HUB, "emergency-tech", new Date("2024-01-03")); return { maintenanceIssue, urgentIssue }; } /** * Example 7: Using static factory methods with IssueBuilder */ async createIssuesWithStaticMethods() { // Create a device issue using static factory method const deviceIssue = IssueBuilder_1.IssueBuilder.createDeviceIssue("device123", "prop456") .setCategory(issue_types_1.IssuesCategory.OPERATIONS) .setTitle("Device Offline") .setDescription("Device has been offline for more than 5 minutes") .setPriority(issue_types_1.IssuePriority.HIGH) .setAssignedTo("tech-support") .setCreatedBy("monitor") .setDueDate(new Date("2024-01-10")); const issue1 = await this.issueService.createIssue(deviceIssue); // Create a hub issue using static factory method const hubIssue = IssueBuilder_1.IssueBuilder.createHubIssue("hub789", "prop202") .setCategory(issue_types_1.IssuesCategory.SECURITY) .setTitle("Hub Security Breach") .setDescription("Unauthorized access attempt detected on hub") .setPriority(issue_types_1.IssuePriority.CRITICAL) .setAssignedTo("security-team") .setCreatedBy("security-system") .setDueDate(new Date("2024-01-05")); const issue2 = await this.issueService.createIssue(hubIssue); return { issue1, issue2 }; } /** * Example 8: Creating multiple issues efficiently */ async createMultipleIssues() { const issues = []; // Create multiple device issues efficiently const deviceIds = ["device1", "device2", "device3"]; const propertyId = "prop123"; for (const deviceId of deviceIds) { const issueBuilder = IssueBuilder_1.IssueBuilder.createDeviceIssue(deviceId, propertyId) .setCategory(issue_types_1.IssuesCategory.OPERATIONS) .setTitle(`Device ${deviceId} Status`) .setDescription(`Status check for device ${deviceId}`) .setPriority(issue_types_1.IssuePriority.MEDIUM) .setAssignedTo("batch-processor") .setCreatedBy("batch-processor") .setDueDate(new Date("2024-01-15")); const issue = await this.issueService.createIssue(issueBuilder); issues.push(issue); } return issues; } /** * Example 9: Creating issue with due date calculation */ async createIssueWithDueDate() { const dueDate = new Date(); dueDate.setDate(dueDate.getDate() + 7); // Due in 7 days const issueBuilder = new IssueBuilder_1.IssueBuilder() .setCategory(issue_types_1.IssuesCategory.READINESS) .setPropertyId("prop808") .setTitle("System Update Required") .setDescription("System requires critical security update") .setEntityType(issue_types_1.EntityType.PROPERTY) .setPriority(issue_types_1.IssuePriority.HIGH) .setAssignedTo("system-admin") .setCreatedBy("update-manager") .setDueDate(dueDate); const issue = await this.issueService.createIssue(issueBuilder); return issue; } /** * Example 10: Backward compatibility - still works with CreateIssueData */ async createIssueWithLegacyData() { const issueData = { category: issue_types_1.IssuesCategory.OPERATIONS, propertyId: "prop123", title: "Legacy Issue", description: "This issue was created using the old CreateIssueData format", entityId: "device456", entityType: issue_types_1.EntityType.DEVICE, priority: issue_types_1.IssuePriority.MEDIUM, assignedTo: "tech-support", createdBy: "legacy-system", dueDate: new Date("2024-01-20"), source: constants_1.Source.CLOUD_EVENT, }; // This still works with the updated createIssue method const issue = await this.issueService.createIssue(issueData); return issue; } } exports.IssueServiceExample = IssueServiceExample;