GC: Sharepoint: Pages info extended (#2461)
## Description SharePoint details has a field `ParentPath`. This PR populates that field. Requires an additional call per collection to retrieve the Site's webURL. <!-- Insert PR description--> ## Does this PR need a docs update or release note? - [x] ⛔ No ## Type of change - [x] 🧹 Tech Debt/Cleanup ## Test Plan <!-- How will this be tested prior to merging.--> - [x] 💪 Manual
This commit is contained in:
parent
b1dce98710
commit
9793d81670
@ -19,6 +19,8 @@ import (
|
|||||||
D "github.com/alcionai/corso/src/internal/diagnostics"
|
D "github.com/alcionai/corso/src/internal/diagnostics"
|
||||||
"github.com/alcionai/corso/src/pkg/backup/details"
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
"github.com/alcionai/corso/src/pkg/fault"
|
"github.com/alcionai/corso/src/pkg/fault"
|
||||||
|
msmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
|
||||||
|
mssites "github.com/microsoftgraph/msgraph-sdk-go/sites"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetSitePages retrieves a collection of Pages related to the give Site.
|
// GetSitePages retrieves a collection of Pages related to the give Site.
|
||||||
@ -81,6 +83,23 @@ func GetSitePages(
|
|||||||
return col, et.Err()
|
return col, et.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetSite returns a minimal Site with the SiteID and the WebURL
|
||||||
|
func GetSite(ctx context.Context, gs graph.Servicer, siteID string) (msmodels.Siteable, error) {
|
||||||
|
// resp *sites.SiteItemRequestBuilderresp *sites.SiteItemRequestBuilde
|
||||||
|
options := &mssites.SiteItemRequestBuilderGetRequestConfiguration{
|
||||||
|
QueryParameters: &mssites.SiteItemRequestBuilderGetQueryParameters{
|
||||||
|
Select: []string{"webUrl"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := gs.Client().SitesById(siteID).Get(ctx, options)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
// fetchPages utility function to return the tuple of item
|
// fetchPages utility function to return the tuple of item
|
||||||
func FetchPages(ctx context.Context, bs *discover.BetaService, siteID string) ([]NameID, error) {
|
func FetchPages(ctx context.Context, bs *discover.BetaService, siteID string) ([]NameID, error) {
|
||||||
var (
|
var (
|
||||||
|
|||||||
@ -288,6 +288,13 @@ func (sc *Collection) retrievePages(
|
|||||||
return metrics, clues.New("beta service required").WithClues(ctx)
|
return metrics, clues.New("beta service required").WithClues(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parent, err := sapi.GetSite(ctx, sc.service, sc.fullPath.ResourceOwner())
|
||||||
|
if err != nil {
|
||||||
|
return metrics, err
|
||||||
|
}
|
||||||
|
|
||||||
|
root := ptr.Val(parent.GetWebUrl())
|
||||||
|
|
||||||
pages, err := sapi.GetSitePages(ctx, betaService, sc.fullPath.ResourceOwner(), sc.jobs, errs)
|
pages, err := sapi.GetSitePages(ctx, betaService, sc.fullPath.ResourceOwner(), sc.jobs, errs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return metrics, err
|
return metrics, err
|
||||||
@ -316,7 +323,7 @@ func (sc *Collection) retrievePages(
|
|||||||
sc.data <- &Item{
|
sc.data <- &Item{
|
||||||
id: *pg.GetId(),
|
id: *pg.GetId(),
|
||||||
data: io.NopCloser(bytes.NewReader(byteArray)),
|
data: io.NopCloser(bytes.NewReader(byteArray)),
|
||||||
info: sapi.PageInfo(pg, size),
|
info: sharePointPageInfo(pg, root, size),
|
||||||
modTime: ptr.OrNow(pg.GetLastModifiedDateTime()),
|
modTime: ptr.OrNow(pg.GetLastModifiedDateTime()),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
48
src/internal/connector/sharepoint/pageInfo.go
Normal file
48
src/internal/connector/sharepoint/pageInfo.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package sharepoint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/graph/betasdk/models"
|
||||||
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
|
)
|
||||||
|
|
||||||
|
// sharePointPageInfo propagates metadata from the SharePoint Page data type
|
||||||
|
// into searchable content.
|
||||||
|
// Page Details: https://learn.microsoft.com/en-us/graph/api/resources/sitepage?view=graph-rest-beta
|
||||||
|
func sharePointPageInfo(page models.SitePageable, root string, size int64) *details.SharePointInfo {
|
||||||
|
var (
|
||||||
|
name, prefix, webURL string
|
||||||
|
created, modified time.Time
|
||||||
|
)
|
||||||
|
|
||||||
|
if page.GetTitle() != nil {
|
||||||
|
name = *page.GetTitle()
|
||||||
|
}
|
||||||
|
|
||||||
|
if page.GetWebUrl() != nil {
|
||||||
|
if len(root) > 0 {
|
||||||
|
prefix = root + "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
webURL = prefix + *page.GetWebUrl()
|
||||||
|
}
|
||||||
|
|
||||||
|
if page.GetCreatedDateTime() != nil {
|
||||||
|
created = *page.GetCreatedDateTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
if page.GetLastModifiedDateTime() != nil {
|
||||||
|
modified = *page.GetLastModifiedDateTime()
|
||||||
|
}
|
||||||
|
|
||||||
|
return &details.SharePointInfo{
|
||||||
|
ItemType: details.SharePointItem,
|
||||||
|
ItemName: name,
|
||||||
|
ParentPath: root,
|
||||||
|
Created: created,
|
||||||
|
Modified: modified,
|
||||||
|
WebURL: webURL,
|
||||||
|
Size: size,
|
||||||
|
}
|
||||||
|
}
|
||||||
48
src/internal/connector/sharepoint/pageInfo_test.go
Normal file
48
src/internal/connector/sharepoint/pageInfo_test.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package sharepoint
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/graph/betasdk/models"
|
||||||
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (suite *SharePointInfoSuite) TestSharePointInfo_Pages() {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
pageAndDeets func() (models.SitePageable, *details.SharePointInfo)
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Empty Page",
|
||||||
|
pageAndDeets: func() (models.SitePageable, *details.SharePointInfo) {
|
||||||
|
deets := &details.SharePointInfo{ItemType: details.SharePointItem}
|
||||||
|
return models.NewSitePage(), deets
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Only Name",
|
||||||
|
pageAndDeets: func() (models.SitePageable, *details.SharePointInfo) {
|
||||||
|
title := "Blank Page"
|
||||||
|
sPage := models.NewSitePage()
|
||||||
|
sPage.SetTitle(&title)
|
||||||
|
deets := &details.SharePointInfo{
|
||||||
|
ItemType: details.SharePointItem,
|
||||||
|
ItemName: title,
|
||||||
|
}
|
||||||
|
|
||||||
|
return sPage, deets
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
suite.T().Run(test.name, func(t *testing.T) {
|
||||||
|
paged, expected := test.pageAndDeets()
|
||||||
|
info := sharePointPageInfo(paged, "", 0)
|
||||||
|
assert.Equal(t, expected.ItemType, info.ItemType)
|
||||||
|
assert.Equal(t, expected.ItemName, info.ItemName)
|
||||||
|
assert.Equal(t, expected.WebURL, info.WebURL)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user