Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 4x 4x 4x 4x 4x 59x 59x 1x 49x 9x 10x 2x 18x | export enum PriorityLevel {
LOW = 1,
MEDIUM = 2,
HIGH = 3,
CRITICAL = 4
}
export class TaskPriority {
private constructor(
private readonly level: PriorityLevel,
private readonly autoEscalationDate?: Date
) {}
static low(): TaskPriority {
return new TaskPriority(PriorityLevel.LOW);
}
static medium(): TaskPriority {
return new TaskPriority(PriorityLevel.MEDIUM);
}
static high(): TaskPriority {
return new TaskPriority(PriorityLevel.HIGH);
}
static critical(): TaskPriority {
return new TaskPriority(PriorityLevel.CRITICAL);
}
static fromLevel(level: PriorityLevel): TaskPriority {
return new TaskPriority(level);
}
static reconstitute(level: PriorityLevel, autoEscalationDate?: Date): TaskPriority {
return new TaskPriority(level, autoEscalationDate);
}
getLevel(): PriorityLevel {
return this.level;
}
escalate(): TaskPriority {
const newLevel = Math.min(this.level + 1, PriorityLevel.CRITICAL) as PriorityLevel;
return new TaskPriority(newLevel, new Date());
}
shouldEscalate(daysOld: number): boolean {
switch (this.level) {
case PriorityLevel.LOW:
return daysOld > 30;
case PriorityLevel.MEDIUM:
return daysOld > 14;
case PriorityLevel.HIGH:
return daysOld > 7;
case PriorityLevel.CRITICAL:
return false;
}
}
isHigherThan(other: TaskPriority): boolean {
return this.level > other.level;
}
equals(other: TaskPriority): boolean {
return this.level === other.level;
}
toString(): string {
return PriorityLevel[this.level];
}
toJSON() {
return {
level: this.level,
autoEscalationDate: this.autoEscalationDate?.toISOString()
};
}
}
|