Issue 184 Full Path added to DataCollection (#199)

Merge of Branch adds FullPath to the DataCollection() where each DataCollection is based on the folder. Thus, returning a [] DataCollection
This commit is contained in:
Danny 2022-06-14 17:09:02 -04:00 committed by GitHub
parent 88bc374208
commit e0199b6b26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 15 deletions

View File

@ -125,11 +125,11 @@ func buildFromMap(isKey bool, mapping map[string]string) []string {
// Assumption: User exists // Assumption: User exists
// TODO: https://github.com/alcionai/corso/issues/135 // TODO: https://github.com/alcionai/corso/issues/135
// Add iota to this call -> mail, contacts, calendar, etc. // Add iota to this call -> mail, contacts, calendar, etc.
func (gc *GraphConnector) ExchangeDataCollection(user string) (DataCollection, error) { func (gc *GraphConnector) ExchangeDataCollection(user string) ([]DataCollection, error) {
// TODO replace with completion of Issue 124: // TODO replace with completion of Issue 124:
collection := NewExchangeDataCollection(user, []string{gc.tenant, user})
//TODO: Retry handler to convert return: (DataCollection, error) //TODO: Retry handler to convert return: (DataCollection, error)
return gc.serializeMessages(user, collection) return gc.serializeMessages(user)
} }
// optionsForMailFolders creates transforms the 'select' into a more dynamic call for MailFolders. // optionsForMailFolders creates transforms the 'select' into a more dynamic call for MailFolders.
@ -201,7 +201,7 @@ func (gc *GraphConnector) restoreMessages(dc DataCollection) error {
// serializeMessages: Temp Function as place Holder until Collections have been added // serializeMessages: Temp Function as place Holder until Collections have been added
// to the GraphConnector struct. // to the GraphConnector struct.
func (gc *GraphConnector) serializeMessages(user string, dc ExchangeDataCollection) (DataCollection, error) { func (gc *GraphConnector) serializeMessages(user string) ([]DataCollection, error) {
options := optionsForMailFolders([]string{}) options := optionsForMailFolders([]string{})
response, err := gc.client.UsersById(user).MailFolders().GetWithRequestConfigurationAndResponseHandler(options, nil) response, err := gc.client.UsersById(user).MailFolders().GetWithRequestConfigurationAndResponseHandler(options, nil)
if err != nil { if err != nil {
@ -216,8 +216,10 @@ func (gc *GraphConnector) serializeMessages(user string, dc ExchangeDataCollecti
} }
// Time to create Exchange data Holder // Time to create Exchange data Holder
var byteArray []byte var byteArray []byte
collections := make([]DataCollection, 0)
var errs error var errs error
for _, aFolder := range folderList { for _, aFolder := range folderList {
result, err := gc.client.UsersById(user).MailFoldersById(aFolder).Messages().Get() result, err := gc.client.UsersById(user).MailFoldersById(aFolder).Messages().Get()
if err != nil { if err != nil {
errs = WrapAndAppend(user, err, errs) errs = WrapAndAppend(user, err, errs)
@ -233,6 +235,7 @@ func (gc *GraphConnector) serializeMessages(user string, dc ExchangeDataCollecti
continue continue
} }
objectWriter := kw.NewJsonSerializationWriter() objectWriter := kw.NewJsonSerializationWriter()
edc := NewExchangeDataCollection(user, []string{gc.tenant, user, aFolder})
callbackFunc := func(messageItem interface{}) bool { callbackFunc := func(messageItem interface{}) bool {
message, ok := messageItem.(models.Messageable) message, ok := messageItem.(models.Messageable)
@ -261,7 +264,7 @@ func (gc *GraphConnector) serializeMessages(user string, dc ExchangeDataCollecti
return true return true
} }
if byteArray != nil { if byteArray != nil {
dc.PopulateCollection(ExchangeData{id: *message.GetId(), message: byteArray}) edc.PopulateCollection(ExchangeData{id: *message.GetId(), message: byteArray})
} }
return true return true
} }
@ -270,11 +273,11 @@ func (gc *GraphConnector) serializeMessages(user string, dc ExchangeDataCollecti
if err != nil { if err != nil {
errs = WrapAndAppend(user, err, errs) errs = WrapAndAppend(user, err, errs)
} }
// Todo Retry Handler to be implemented
edc.FinishPopulation()
//fmt.Printf("Storing ExchangeDataColection with %d items\n", edc.Length())
collections = append(collections, &edc)
} }
fmt.Printf("Returning ExchangeDataColection with %d items\n", dc.Length()) return collections, errs
if errs != nil {
fmt.Printf("Errors: \n%s\n", errs.Error())
}
dc.FinishPopulation()
return &dc, errs
} }

View File

@ -63,12 +63,13 @@ func (suite *GraphConnectorIntegrationSuite) TestGraphConnector_ExchangeDataColl
if err := ctesting.RunOnAny(ctesting.CorsoCITests); err != nil { if err := ctesting.RunOnAny(ctesting.CorsoCITests); err != nil {
suite.T().Skip(err) suite.T().Skip(err)
} }
exchangeData, err := suite.connector.ExchangeDataCollection("lidiah@8qzvrj.onmicrosoft.com") collectionList, err := suite.connector.ExchangeDataCollection("lidiah@8qzvrj.onmicrosoft.com")
assert.NotNil(suite.T(), exchangeData) assert.NotNil(suite.T(), collectionList)
assert.Error(suite.T(), err) // TODO Remove after https://github.com/alcionai/corso/issues/140 assert.Error(suite.T(), err) // TODO Remove after https://github.com/alcionai/corso/issues/140
if err != nil { if err != nil {
suite.T().Logf("Missing Data: %s\n", err.Error()) suite.T().Logf("Missing Data: %s\n", err.Error())
} }
exchangeData := collectionList[0]
suite.T().Logf("Full PathData: %s\n", exchangeData.FullPath()) suite.T().Logf("Full PathData: %s\n", exchangeData.FullPath())
} }

View File

@ -57,13 +57,13 @@ func (bo *BackupOperation) Run(ctx context.Context) (*kopia.BackupStats, error)
return nil, errors.Wrap(err, "connecting to graph api") return nil, errors.Wrap(err, "connecting to graph api")
} }
c, err := gc.ExchangeDataCollection(bo.Targets[0]) cs, err := gc.ExchangeDataCollection(bo.Targets[0])
if err != nil { if err != nil {
return nil, errors.Wrap(err, "retrieving application data") return nil, errors.Wrap(err, "retrieving application data")
} }
// todo: utilize stats // todo: utilize stats
stats, err := bo.kopia.BackupCollections(ctx, []connector.DataCollection{c}) stats, err := bo.kopia.BackupCollections(ctx, cs)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "backing up application data") return nil, errors.Wrap(err, "backing up application data")
} }