From 58db915775f2ebc458a1573aa7b36afe293bb1f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Duffeck?= Date: Mon, 9 Mar 2026 15:14:37 +0100 Subject: [PATCH] Emit events when favorites are added/removed --- services/graph/pkg/service/v0/follow.go | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/services/graph/pkg/service/v0/follow.go b/services/graph/pkg/service/v0/follow.go index 3372c56fa2..8f3ba93a4f 100644 --- a/services/graph/pkg/service/v0/follow.go +++ b/services/graph/pkg/service/v0/follow.go @@ -6,7 +6,9 @@ import ( rpc "github.com/cs3org/go-cs3apis/cs3/rpc/v1beta1" provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" "github.com/opencloud-eu/opencloud/services/graph/pkg/errorcode" + revaCtx "github.com/opencloud-eu/reva/v2/pkg/ctx" revactx "github.com/opencloud-eu/reva/v2/pkg/ctx" + "github.com/opencloud-eu/reva/v2/pkg/events" ) // FollowDriveItem marks a drive item as favorite. @@ -73,6 +75,20 @@ func (g Graph) FollowDriveItem(w http.ResponseWriter, r *http.Request) { return } + if g.eventsPublisher != nil { + ev := events.FavoriteAdded{ + Ref: &provider.Reference{ + ResourceId: &itemID, + Path: ".", + }, + UserID: u.Id, + Executant: revaCtx.ContextMustGetUser(r.Context()).Id, + } + if err := events.Publish(r.Context(), g.eventsPublisher, ev); err != nil { + g.logger.Error().Err(err).Msg("Failed to publish FavoriteAdded event") + } + } + w.WriteHeader(http.StatusCreated) } @@ -125,5 +141,19 @@ func (g Graph) UnfollowDriveItem(w http.ResponseWriter, r *http.Request) { return } + if g.eventsPublisher != nil { + ev := events.FavoriteRemoved{ + Ref: &provider.Reference{ + ResourceId: &itemID, + Path: ".", + }, + UserID: u.Id, + Executant: revaCtx.ContextMustGetUser(r.Context()).Id, + } + if err := events.Publish(r.Context(), g.eventsPublisher, ev); err != nil { + g.logger.Error().Err(err).Msg("Failed to publish FavoriteRemoved event") + } + } + w.WriteHeader(http.StatusNoContent) }