56 lines
1.6 KiB
Markdown
56 lines
1.6 KiB
Markdown
# T16 Izveštaj: SSE auto-refresh dashboarda
|
|
|
|
**Agent:** coder
|
|
**Model:** Opus
|
|
**Datum:** 2026-02-20
|
|
|
|
---
|
|
|
|
## Šta je urađeno
|
|
|
|
Dashboard se automatski ažurira kad se stanje taskova promeni putem SSE.
|
|
|
|
### Novi fajlovi
|
|
|
|
| Fajl | Opis |
|
|
|------|------|
|
|
| `internal/server/events.go` | EventBroker, polling (2s), hashTaskState, SSE handler |
|
|
|
|
### Izmenjeni fajlovi
|
|
|
|
| Fajl | Izmena |
|
|
|------|--------|
|
|
| `internal/server/server.go` | events field, GET /events ruta, startPolling u Run() |
|
|
| `internal/server/render.go` | renderBoardFragment() za SSE updates |
|
|
| `internal/server/server_test.go` | 4 nova testa |
|
|
| `web/templates/layout.html` | initSSE(), isDragging flag, onStart handler |
|
|
| `web/templates/partials/column.html` | Uklonjen hx-trigger="every 5s" (zamenjeno SSE-om) |
|
|
|
|
### Kako radi
|
|
|
|
1. Server poluje TASKS/ svake 2s
|
|
2. Računa SHA-256 hash svih task ID:status parova
|
|
3. Ako se hash promenio → broadcast SSE event svim klijentima
|
|
4. Browser EventSource prima event → zameni board HTML
|
|
5. Tokom drag & drop — SSE update se ignoruje (isDragging flag)
|
|
|
|
### Endpoint
|
|
|
|
| Ruta | Opis |
|
|
|------|------|
|
|
| `GET /events` | SSE stream — event `taskUpdate` sa board HTML |
|
|
|
|
### Novi testovi — 4 PASS
|
|
|
|
```
|
|
TestSSE_EventsEndpoint PASS — proverava Content-Type text/event-stream
|
|
TestHashTaskState PASS — hash se menja kad se status menja, stabilan za isti set
|
|
TestSSE_BroadcastOnChange PASS — premesti fajl → broadcast event
|
|
TestSSE_NoBroadcastWithoutChange PASS — bez promene → bez eventa
|
|
```
|
|
|
|
### Ukupno projekat: 129 testova, svi prolaze
|
|
|
|
- `go vet ./...` — čist
|
|
- `go build ./...` — prolazi
|