diff --git a/cmd/recordcollector/main.go b/cmd/recordcollector/main.go index 816642f..c6b6823 100644 --- a/cmd/recordcollector/main.go +++ b/cmd/recordcollector/main.go @@ -246,6 +246,40 @@ func (h *handler) addLabel(ctx context.Context, did, label string) error { return nil } +func (h *handler) removeLabel(ctx context.Context, did, label string) error { + key := fmt.Sprintf("recordcollector_%s_%s", did, label) + + eventLabel := toolsozone.ModerationDefs_ModEventLabel{ + CreateLabelVals: []string{}, + NegateLabelVals: []string{label}, + } + input := &toolsozone.ModerationEmitEvent_Input{ + CreatedBy: RecordCollectorDid, + Event: &toolsozone.ModerationEmitEvent_Input_Event{ + ModerationDefs_ModEventLabel: &eventLabel, + }, + Subject: &toolsozone.ModerationEmitEvent_Input_Subject{ + AdminDefs_RepoRef: &comatproto.AdminDefs_RepoRef{ + Did: did, + }, + }, + } + + _, err := toolsozone.ModerationEmitEvent(ctx, h.client, input) + if err != nil { + h.logger.Error("failed to remove label", "err", err) + return fmt.Errorf("failed to remove label: %w", err) + } + h.logger.Info("removing label", "did", did, "label", label) + + if err := h.redis.Del(ctx, key).Err(); err != nil { + h.logger.Error("failed to delete redis key", "err", err, "key", key) + // Don't return error -- label was removed + } + + return nil +} + func (h *handler) HandleEvent(ctx context.Context, event *models.Event) error { h.lk.Lock() defer h.lk.Unlock() @@ -254,6 +288,22 @@ func (h *handler) HandleEvent(ctx context.Context, event *models.Event) error { return nil } + collection := event.Commit.Collection + + // if a delete comes in for a non-expiry label, issue a negation + if event.Commit.Operation == models.CommitOperationDelete { + for prefix, label := range labelPrefixes { + nonExpiry := nonExpiryPrefixes[label] + if strings.HasPrefix(collection, prefix) && nonExpiry { + if err := h.removeLabel(ctx, event.Did, label); err != nil { + return err + } + } + } + + return nil + } + if event.Commit.Operation != models.CommitOperationCreate { return nil } @@ -270,7 +320,6 @@ func (h *handler) HandleEvent(ctx context.Context, event *models.Event) error { } } - collection := event.Commit.Collection for _, prefix := range ignorePrefixes { if strings.HasPrefix(collection, prefix) { return nil