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>
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user