1package homepage
2
3import (
4 "context"
5 "fmt"
6
7 "github.com/bnema/dumber/internal/application/port"
8 "github.com/bnema/dumber/internal/logging"
9)
10
11// Config holds dependencies for homepage handlers.
12type Config struct {
13 HistoryUC port.HomepageHistory
14 FavoritesUC port.HomepageFavorites
15}
16
17// RegisterHandlers registers all homepage message handlers with the router.
18func RegisterHandlers(ctx context.Context, router port.WebUIHandlerRouter, cfg Config) error {
19 log := logging.FromContext(ctx)
20 log.Debug().Msg("registering homepage message handlers")
21
22 handlers := Handlers(cfg)
23 for msgType, handler := range handlers {
24 if err := port.RegisterWebUIMessage(router, msgType, handler); err != nil {
25 return fmt.Errorf("failed to register handler %s: %w", msgType, err)
26 }
27 log.Debug().Str("type", msgType).Msg("registered homepage handler")
28 }
29
30 log.Info().Int("count", len(handlers)).Msg("homepage handlers registered")
31 return nil
32}
33
34// Handlers returns every homepage handler keyed by its WebUI message type.
35func Handlers(cfg Config) map[string]port.WebUIMessageHandler {
36 history := NewHistoryHandlers(cfg.HistoryUC)
37 favorites := NewFavoritesHandlers(cfg.FavoritesUC)
38 tags := NewTagHandlers(cfg.FavoritesUC)
39
40 return map[string]port.WebUIMessageHandler{
41 port.MsgHistoryTimeline: history.HandleTimeline(),
42 port.MsgHistoryTimelineByDomain: history.HandleTimelineByDomain(),
43 port.MsgHistoryTimelineWindow: history.HandleTimelineWindow(),
44 port.MsgHistorySearchFTS: history.HandleSearchFTS(),
45 port.MsgHistoryDeleteEntry: history.HandleDeleteEntry(),
46 port.MsgHistoryDeleteRange: history.HandleDeleteRange(),
47 port.MsgHistoryClearAll: history.HandleClearAll(),
48 port.MsgHistoryStats: history.HandleStats(),
49 port.MsgHistoryAnalytics: history.HandleAnalytics(),
50 port.MsgHistoryDomainStats: history.HandleDomainStats(),
51 port.MsgHistoryDeleteDomain: history.HandleDeleteDomain(),
52
53 port.MsgFavoriteList: favorites.HandleList(),
54 port.MsgFavoriteCreate: favorites.HandleCreate(),
55 port.MsgFavoriteUpdate: favorites.HandleUpdate(),
56 port.MsgFavoriteDelete: favorites.HandleDelete(),
57 port.MsgFavoriteSetShortcut: favorites.HandleSetShortcut(),
58 port.MsgFavoriteGetByShortcut: favorites.HandleGetByShortcut(),
59
60 port.MsgTagList: tags.HandleList(),
61 port.MsgTagCreate: tags.HandleCreate(),
62 port.MsgTagDelete: tags.HandleDelete(),
63 port.MsgTagUpdate: tags.HandleUpdate(),
64 port.MsgTagAssign: tags.HandleAssign(),
65 port.MsgTagRemove: tags.HandleRemove(),
66 }
67}