dt-common-device
Version:
A secure and robust device management library for IoT applications
178 lines (177 loc) • 9.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IssueServiceExample = void 0;
const IssueBuilder_1 = require("../entities/IssueBuilder");
const issue_types_1 = require("../../../types/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%", "system", 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", "firmware-manager", 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")
};
// This still works with the updated createIssue method
const issue = await this.issueService.createIssue(issueData);
return issue;
}
}
exports.IssueServiceExample = IssueServiceExample;