export const ISSUE_STATUSES = [ { name: 'Open', alias: 'OPEN', color: 'surface-light' }, { name: 'In progress', alias: 'IN_PROGRESS', color: 'warning' }, { name: 'Done', alias: 'DONE', color: 'success' }, { name: 'Cancelled', alias: 'CANCELLED', color: 'primary' }, ] as const; export type IssueStatusValue = (typeof ISSUE_STATUSES)[number]['alias']; const ISSUE_STATUS_ALIASES = ISSUE_STATUSES.map((status) => status.alias); export class IssueStatus { private constructor(private readonly _value: IssueStatusValue) {} static create(value: string): IssueStatus { if (!ISSUE_STATUS_ALIASES.includes(value as IssueStatusValue)) { throw new Error(`Недопустимый статус задачи: "${value}". Разрешены: ${ISSUE_STATUS_ALIASES.join(', ')}`); } return new IssueStatus(value as IssueStatusValue); } static open(): IssueStatus { return new IssueStatus('OPEN'); } get value(): IssueStatusValue { return this._value; } equals(other: IssueStatus): boolean { return this._value === other.value; } }