Files
tessera-ctl/apps/web/src/components/domains/order-status.ts
T
schalli d332246bde feat(domains): Domain registrieren mit Schutz vor Doppelbestellung, Aufträge, Changelog und Anleitung
- Verfügbarkeitsprüfung über DomainStudio, Entwurf mit Kontakten und Nameservern, Zusammenfassung mit System und Preis
- Verbindliches Abschicken: atomarer Anspruch DRAFT -> SUBMITTING vor dem Netzaufruf, genau ein POST /domain ohne Wiederholung, unklarer Ausgang als UNKNOWN, Bindung an das System
- Aufträge: Stand aus dem AutoDNS-Auftrag, Abgleich unklarer Aufträge, Verwerfen erst nach Abgleich
- Reiter Registrieren und Aufträge, Changelog, Anwender- und Administrationshandbuch, Mandantenschutz-Inventar

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 11:10:03 +02:00

63 lines
2.2 KiB
TypeScript

import type { DomainOrderStatus } from '@/lib/domains-api';
/**
* Darstellung des Auftragszustands (quick-261008-dts): Beschriftungsschluessel
* und Pillen-Klassen. Die Klassen stehen als vollstaendige Zeichenketten,
* damit Tailwind sie findet.
*/
export interface OrderLike {
status: DomainOrderStatus;
jobStatus: string | null;
lastCheckedAt: string | null;
}
export interface OrderStatusInfo {
/** Schluessel unter `domains.orders.status.*`. */
labelKey: string;
className: string;
}
const OK = 'bg-status-ok/12 text-status-ok-fg';
const WARN = 'bg-status-warn/12 text-status-warn-fg';
const DOWN = 'bg-status-down/12 text-status-down-fg';
const IDLE = 'bg-status-idle/12 text-status-idle-fg';
export function orderStatusInfo(order: OrderLike): OrderStatusInfo {
switch (order.status) {
case 'SUCCESS':
return { labelKey: 'SUCCESS', className: OK };
case 'FAILED':
return { labelKey: 'FAILED', className: DOWN };
case 'UNKNOWN':
return { labelKey: 'UNKNOWN', className: WARN };
case 'SUBMITTING':
return { labelKey: 'SUBMITTING', className: WARN };
case 'SUBMITTED':
// Eingriff bei InterNetX noetig: nicht "laeuft", sondern "Rueckfrage".
return order.jobStatus === 'SUPPORT'
? { labelKey: 'SUPPORT', className: WARN }
: { labelKey: 'SUBMITTED', className: WARN };
case 'CANCELED':
return { labelKey: 'CANCELED', className: IDLE };
default:
return { labelKey: 'DRAFT', className: IDLE };
}
}
/**
* Wird der Auftrag noch verfolgt? Dann lohnt der regelmaessige Abgleich. Ein
* unklarer Auftrag zaehlt nur, solange noch nie bei AutoDNS nachgesehen wurde —
* danach wartet er auf den Benutzer und soll nicht dauernd Anfragen ausloesen.
*/
export function isOpen(order: OrderLike): boolean {
if (order.status === 'SUBMITTING' || order.status === 'SUBMITTED') return true;
return order.status === 'UNKNOWN' && order.lastCheckedAt === null;
}
/** Darf der Auftrag verworfen werden? (Entwurf; unklar erst nach einem Abgleich.) */
export function isDiscardable(order: OrderLike): boolean {
if (order.status === 'DRAFT') return true;
return order.status === 'UNKNOWN' && order.lastCheckedAt !== null;
}