sequenceDiagram actor Admin participant UI as Web UI React participant TRPC as tRPC Client participant API as domainsRouter participant DB as PostgreSQL/Drizzle participant Checker as domain-check module participant DNS as DNS Resolver Admin->>UI: Isi form domain dan pilih service UI->>TRPC: domains.create({ serviceId, name, expectedServerIp? }) TRPC->>API: Kirim request create domain API->>DB: Validasi service dan server parent API->>DB: Insert domain, default expected IP dari server parent jika kosong DB-->>API: Domain berhasil dibuat API-->>TRPC: Data domain baru TRPC-->>UI: Data domain baru UI->>TRPC: domains.check({ id: created.id }) otomatis TRPC->>API: Kirim request DNS check API->>DB: Ambil domain berdasarkan id API->>Checker: runAndPersistDomainCheck(...) Checker->>DNS: resolve4(domain.name) DNS-->>Checker: Daftar IPv4 atau error Checker->>DB: Update resolutionStatus dan hasil check DB-->>Checker: Domain terbaru Checker-->>API: { domain, result } API-->>TRPC: { domain, check } TRPC-->>UI: Hasil DNS check UI->>UI: Invalidate domains.list, navigate detail, tampilkan toast