From 760dee41591e326c649ce949f37c5f47a84bc80c Mon Sep 17 00:00:00 2001 From: Martin MacDonald <79853687+mmacdo54@users.noreply.github.com> Date: Mon, 3 Jun 2024 12:50:13 +0100 Subject: [PATCH] feat: delete memo comments when memo is deleted (#3491) * Added logic to delete memo relation and memo comments recursively when a memo is deleted * Fixed logic to only target comment types and added removing of broken references * Fixed linting errors --------- Co-authored-by: Martin MacDonald --- server/router/api/v1/memo_service.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server/router/api/v1/memo_service.go b/server/router/api/v1/memo_service.go index e40e4bad9..fd895762b 100644 --- a/server/router/api/v1/memo_service.go +++ b/server/router/api/v1/memo_service.go @@ -352,6 +352,11 @@ func (s *APIV1Service) DeleteMemo(ctx context.Context, request *v1pb.DeleteMemoR return nil, status.Errorf(codes.Internal, "failed to delete memo") } + // Delete memo relation + if err := s.Store.DeleteMemoRelation(ctx, &store.DeleteMemoRelation{MemoID: &id}); err != nil { + return nil, status.Errorf(codes.Internal, "failed to delete memo relations") + } + // Delete related resources. resources, err := s.Store.ListResources(ctx, &store.FindResource{MemoID: &id}) if err != nil { @@ -363,6 +368,24 @@ func (s *APIV1Service) DeleteMemo(ctx context.Context, request *v1pb.DeleteMemoR } } + // Delete memo comments + commentType := store.MemoRelationComment + relations, err := s.Store.ListMemoRelations(ctx, &store.FindMemoRelation{RelatedMemoID: &id, Type: &commentType}) + if err != nil { + return nil, status.Errorf(codes.Internal, "failed to list memo comments") + } + for _, relation := range relations { + if _, err := s.DeleteMemo(ctx, &v1pb.DeleteMemoRequest{Name: fmt.Sprintf("%s%d", MemoNamePrefix, relation.MemoID)}); err != nil { + return nil, status.Errorf(codes.Internal, "failed to delete memo comment") + } + } + + // Delete memo references + referenceType := store.MemoRelationReference + if err := s.Store.DeleteMemoRelation(ctx, &store.DeleteMemoRelation{RelatedMemoID: &id, Type: &referenceType}); err != nil { + return nil, status.Errorf(codes.Internal, "failed to delete memo references") + } + return &emptypb.Empty{}, nil }