sse + ocr replanish

This commit is contained in:
m
2026-07-29 18:56:26 +02:00
parent 68a4beef37
commit 397803fb96
14 changed files with 386 additions and 26 deletions
+34
View File
@@ -0,0 +1,34 @@
package handler
import (
"fmt"
"io"
"github.com/gin-gonic/gin"
"github.com/vaultdrop/backend/internal/service"
)
type EventHandler struct {
broker *service.EventBroker
}
func NewEventHandler(broker *service.EventBroker) *EventHandler {
return &EventHandler{broker: broker}
}
func (h *EventHandler) Stream(c *gin.Context) {
c.Header("Content-Type", "text/event-stream")
c.Header("Cache-Control", "no-cache")
c.Header("Connection", "keep-alive")
ch, _ := h.broker.Subscribe(c.Request.Context())
c.Stream(func(w io.Writer) bool {
event, ok := <-ch
if !ok {
return false
}
_, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", event.Type, event.Data)
return err == nil
})
}
+3
View File
@@ -13,6 +13,7 @@ type Handler struct {
Share *ShareHandler
Device *DeviceHandler
Sync *SyncHandler
Events *EventHandler
}
func New(
@@ -24,6 +25,7 @@ func New(
rebacSvc *service.RebacService,
placementSvc *service.PlacementService,
syncSvc *service.SyncService,
eventBroker *service.EventBroker,
) *Handler {
return &Handler{
Resource: &ResourceHandler{
@@ -38,5 +40,6 @@ func New(
Share: &ShareHandler{rebac: rebacSvc},
Device: &DeviceHandler{placement: placementSvc},
Sync: &SyncHandler{sync: syncSvc},
Events: NewEventHandler(eventBroker),
}
}
+6 -2
View File
@@ -43,10 +43,14 @@ func (h *ResourceHandler) Upload(c *gin.Context) {
return
}
h.ocr.Enqueue(result.ID, result.Path)
if err := h.ocr.Enqueue(result.ID, result.Path); err != nil {
log.Printf("WARN %v", err)
}
if service.IsConvertible(result.MimeType) {
h.conversion.Enqueue(result.ID, result.Path, result.MimeType)
if err := h.conversion.Enqueue(result.ID, result.Path, result.MimeType); err != nil {
log.Printf("WARN %v", err)
}
}
results = append(results, gin.H{
+3
View File
@@ -38,6 +38,9 @@ func SetupRoutes(r *gin.Engine, h *Handler, authMiddleware *auth.AuthService) {
// Variants
protected.GET("/resources/:id/variants", h.Resource.GetVariants)
// Events (SSE)
protected.GET("/events", h.Events.Stream)
// Dedup
protected.POST("/resources/dedup-check", h.Resource.CheckDuplicates)