From 6e7335cc4d84a1053bcf7e544fa1a3c36dc67aa0 Mon Sep 17 00:00:00 2001 From: Danny Date: Tue, 23 Aug 2022 16:30:46 -0400 Subject: [PATCH] Gc restore multi framework (#639) * Abstraction extended to restore. Application logic moved to service_functions.go --- .../connector/exchange/service_functions.go | 31 +++++++++++++++++++ src/internal/connector/graph_connector.go | 13 +++----- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/internal/connector/exchange/service_functions.go b/src/internal/connector/exchange/service_functions.go index c18322673..2090c20ec 100644 --- a/src/internal/connector/exchange/service_functions.go +++ b/src/internal/connector/exchange/service_functions.go @@ -258,6 +258,37 @@ func GetCopyRestoreFolder(service graph.Service, user string) (*string, error) { return isFolder, nil } +func RestoreExchangeObject( + ctx context.Context, + bits []byte, + category string, + policy control.CollisionPolicy, + service graph.Service, + destination, user string, +) error { + var setting optionIdentifier + switch category { + case mailCategory: + setting = messages + case contactsCategory: + setting = contacts + default: + return fmt.Errorf("type: %s not supported for exchange restore", category) + } + + switch setting { + case messages: + switch policy { + case control.Copy: + return RestoreMailMessage(ctx, bits, service, control.Copy, destination, user) + default: + return fmt.Errorf("restore policy: %s not supported", policy) + } + default: + return fmt.Errorf("type: %s not supported for exchange restore", category) + } +} + // RestoreMailMessage utility function to place an exchange.Mail // message into the user's M365 Exchange account. // @param bits - byte array representation of exchange.Message from Corso backstore diff --git a/src/internal/connector/graph_connector.go b/src/internal/connector/graph_connector.go index 92eb0f141..c8d6e586f 100644 --- a/src/internal/connector/graph_connector.go +++ b/src/internal/connector/graph_connector.go @@ -278,14 +278,11 @@ func (gc *GraphConnector) RestoreMessages(ctx context.Context, dcs []data.Collec errs = support.WrapAndAppend(itemData.UUID(), err, errs) continue } - switch policy { - case control.Copy: - err = exchange.RestoreMailMessage(ctx, buf.Bytes(), &gc.graphService, control.Copy, *folderID, user) - if err != nil { - errs = support.WrapAndAppend(itemData.UUID(), err, errs) - } - default: - errs = support.WrapAndAppend(itemData.UUID(), errors.New("restore policy not supported"), errs) + category := dc.FullPath()[2] + err = exchange.RestoreExchangeObject(ctx, buf.Bytes(), category, policy, &gc.graphService, *folderID, user) + + if err != nil { + errs = support.WrapAndAppend(itemData.UUID(), err, errs) continue } successes++