docs: finalize report assets and polish dashboard UI

This commit is contained in:
Syahdan 2026-05-07 00:35:17 +07:00
parent 441e709193
commit a6edf804b4
42 changed files with 1084 additions and 406 deletions

View file

@ -0,0 +1,37 @@
flowchart LR
subgraph Trigger[Trigger]
A[Create / Update Domain]
B[Manual Check List / Detail]
end
subgraph UI[Web UI]
C[Submit form domain]
D[Call domains.check]
E[Invalidate query + toast]
end
subgraph API[tRPC domainsRouter]
F[Save / load domain]
G[Run domain check]
end
subgraph DNS[DNS Check]
H[Resolve IPv4 A record]
I{Expected IP found?}
end
subgraph Result[Persisted Status]
J[MATCH]
K[MISMATCH]
L[UNRESOLVED]
end
A --> C --> F --> D
B --> D
D --> G --> H --> I
I -- Ya --> J
I -- Tidak --> K
H -- Lookup gagal --> L
J --> E
K --> E
L --> E

BIN
docs/diagrams/activity.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

61
docs/diagrams/class.mmd Normal file
View file

@ -0,0 +1,61 @@
classDiagram
direction LR
class Server {
+string id
+string name
+string primaryIpAddress
+string secondaryIpAddress
+string operatingSystem
+string location
+string provider
+string description
+server_status status
+Date createdAt
+Date updatedAt
}
class Service {
+string id
+string serverId
+string name
+service_type type
+int internalPort
+int externalPort
+service_protocol protocol
+service_status status
+string description
+Date createdAt
+Date updatedAt
}
class Domain {
+string id
+string serviceId
+string name
+string expectedServerIp
+string lastResolvedIp
+string[] lastResolvedIps
+domain_resolution_status resolutionStatus
+Date lastCheckedAt
+string remarks
+string lastCheckMessage
+Date createdAt
+Date updatedAt
}
class Catatan {
+string id
+string serverId
+string title
+string content
+string category
+Date createdAt
+Date updatedAt
}
Server "1" o-- "0..*" Service : memiliki
Server "1" o-- "0..*" Catatan : memiliki
Service "1" o-- "0..*" Domain : memiliki
note for Domain "resolutionStatus: MATCH, MISMATCH, atau UNRESOLVED"

BIN
docs/diagrams/class.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

View file

@ -0,0 +1,29 @@
graph TD
Admin[Admin]
Auth[Auth + Protected Route]
UI[Dashboard Pages]
Query[TanStack Query]
TRPC[tRPC Client]
Router[Protected Routers]
DomainRouter[domainsRouter]
Checker[DNS Check Module]
DB[(PostgreSQL / Drizzle)]
DNS[node:dns resolve4]
Toast[Toast]
subgraph Client[Client Side]
Auth --> UI --> Query --> TRPC
UI --> Toast
end
subgraph Server[Server Side]
Router --> DB
Router --> DomainRouter
DomainRouter --> Checker
Checker --> DNS
Checker --> DB
end
Admin --> Auth
TRPC --> Router
Router --> TRPC

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -0,0 +1,29 @@
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

BIN
docs/diagrams/sequence.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

View file

@ -0,0 +1,10 @@
stateDiagram-v2
[*] --> UNRESOLVED
state "Checking DNS" as CHECKING
UNRESOLVED --> CHECKING : create/update/manual check
MATCH --> CHECKING : re-check
MISMATCH --> CHECKING : re-check
CHECKING --> MATCH : expected IP ditemukan
CHECKING --> MISMATCH : resolved IP berbeda
CHECKING --> UNRESOLVED : DNS lookup gagal

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,25 @@
flowchart LR
Admin([Admin])
Login((Sign in))
Protected((Akses Dashboard Terproteksi))
Dashboard((Melihat Dashboard Summary))
Server((CRUD Server))
Service((CRUD Service))
Domain((CRUD Domain))
AutoDns((Auto DNS Check saat Create/Update Domain))
ManualDns((Manual DNS Check dari List/Detail Domain))
Note((CRUD Catatan))
Detail((Melihat Catatan pada Detail Server))
Logout((Sign out))
Admin --> Login
Login --> Protected
Protected --> Dashboard
Protected --> Server
Protected --> Service
Protected --> Domain
Protected --> Note
Domain --> AutoDns
Domain --> ManualDns
Server --> Detail
Admin --> Logout

BIN
docs/diagrams/use-case.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB