Files
Sharepoint-Toolbox/.planning/milestones/v1.0-phases/04-bulk-operations-and-provisioning/04-05-SUMMARY.md
Dev 655bb79a99
All checks were successful
Release zip package / release (push) Successful in 10s
chore: complete v1.0 milestone
Archive 5 phases (36 plans) to milestones/v1.0-phases/.
Archive roadmap, requirements, and audit to milestones/.
Evolve PROJECT.md with shipped state and validated requirements.
Collapse ROADMAP.md to one-line milestone summary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 09:15:14 +02:00

6.1 KiB

phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, duration, completed
phase plan subsystem tags requires provides affects tech-stack key-files key-decisions duration completed
04-bulk-operations-and-provisioning 05 bulk-site-creation
pnp-framework
bulk-operations
sharepoint-site-creation
team-site
communication-site
phase provides
04-01 IBulkSiteService, BulkSiteRow, BulkOperationRunner
phase provides
01-foundation ExecuteQueryRetryHelper for throttle-safe CSOM calls
BulkSiteService implementing IBulkSiteService via PnP Framework CreateSiteAsync
Team site creation with alias + owners array via TeamSiteCollectionCreationInformation
Communication site creation with auto-generated URL via CommunicationSiteCollectionCreationInformation
Member/owner assignment post-creation via CSOM AssociatedMemberGroup/AssociatedOwnerGroup
SanitizeAlias helper: removes special chars, replaces spaces with dashes, lowercases
04-09
04-10
added patterns
BulkSiteService.CreateSingleSiteAsync — type dispatch (Team vs Communication) before PnP call
Communication site URL construction: https://{tenantHost}/sites/{alias}
Post-creation member add: EnsureUser + AssociatedMemberGroup.Users.AddUser per email
ParseEmails: Split(',', RemoveEmptyEntries | TrimEntries) from comma-separated CSV field
SanitizeAlias: keep letters/digits/spaces/dashes, replace space with dash, lowercase
created modified
SharepointToolbox/Services/BulkSiteService.cs
SharepointToolbox.Tests/Services/BulkSiteServiceTests.cs
SharepointToolbox/Services/BulkMemberService.cs
BulkSiteService uses SharepointToolbox.Core.Helpers.ExecuteQueryRetryHelper (not Infrastructure.Auth) — plan had wrong using; correct namespace is Core.Helpers (established pattern from Phase 2/3 services)
Communication site URL built from adminCtx.Url host — ensures correct tenant hostname without hardcoding
6min 2026-04-03

Phase 04 Plan 05: BulkSiteService Implementation Summary

BulkSiteService implements IBulkSiteService using PnP Framework CreateSiteAsync for Team and Communication site bulk creation with per-site error handling

Performance

  • Duration: 6 min
  • Started: 2026-04-03T07:57:03Z
  • Completed: 2026-04-03T08:02:15Z
  • Tasks: 2 (both committed together)
  • Files modified: 3

Accomplishments

  • Implemented BulkSiteService with full IBulkSiteService contract
  • Team site creation via TeamSiteCollectionCreationInformation with Alias, DisplayName, IsPublic=false, and Owners[]
  • Communication site creation via CommunicationSiteCollectionCreationInformation with auto-generated URL from adminCtx.Url host
  • Post-creation member/owner assignment via EnsureUser + AssociatedMemberGroup/OwnerGroup.Users.AddUser
  • Per-site error handling delegates to BulkOperationRunner.RunAsync with continue-on-error semantics
  • ParseEmails helper splits comma-separated owner/member CSV fields
  • SanitizeAlias generates URL-safe aliases from display names
  • 3 passing tests (interface check, default values, CSV field inspection) + 3 skipped (live SP required)

Task Commits

  1. Task 1+2: Implement BulkSiteService + BulkSiteServiceTests - b0956ad (feat)

Files Created/Modified

  • SharepointToolbox/Services/BulkSiteService.cs — Full IBulkSiteService implementation with PnP Framework
  • SharepointToolbox.Tests/Services/BulkSiteServiceTests.cs — 3 passing + 3 skipped unit tests
  • SharepointToolbox/Services/BulkMemberService.cs — Fixed pre-existing Group type ambiguity (Rule 1)

Decisions Made

  • BulkSiteService imports SharepointToolbox.Core.Helpers not SharepointToolbox.Infrastructure.Auth — plan listed wrong using directive; ExecuteQueryRetryHelper lives in Core.Helpers as established by all Phase 2/3 services
  • Communication site URL is constructed from adminCtx.Url hostname to ensure tenant-correct URLs without hardcoding

Deviations from Plan

Auto-fixed Issues

1. [Rule 1 - Bug] Fixed wrong using directive in BulkSiteService

  • Found during: Task 1 (implementation)
  • Issue: Plan code had using SharepointToolbox.Infrastructure.Auth;ExecuteQueryRetryHelper is in SharepointToolbox.Core.Helpers
  • Fix: Replaced using SharepointToolbox.Infrastructure.Auth; with using SharepointToolbox.Core.Helpers;
  • Files modified: SharepointToolbox/Services/BulkSiteService.cs
  • Commit: b0956ad

2. [Rule 1 - Bug] Fixed BulkMemberService.cs Group type ambiguity

  • Found during: Task 1 (build verification)
  • Issue: Group? targetGroup = null; on line 164 was ambiguous between Microsoft.SharePoint.Client.Group and Microsoft.Graph.Models.Group — CS0104 compile error
  • Fix: Linter auto-applied using SpGroup = Microsoft.SharePoint.Client.Group; alias + used SpGroup?
  • Files modified: SharepointToolbox/Services/BulkMemberService.cs
  • Commit: b0956ad

Total deviations: 2 auto-fixed (2 x Rule 1 - compile bugs) Impact: Both fixes were required for compilation. No scope creep. BulkMemberService fix is out-of-scope (from a previous plan) but was blocking the build entirely.

Issues Encountered

The WPF temp project build lock (MainWindow.g.cs locked by another process) prevented dotnet build SharepointToolbox.slnx from completing. The test project build (dotnet build SharepointToolbox.Tests) succeeds normally and was used for verification.

User Setup Required

None — no external service configuration required.

Next Phase Readiness

  • BulkSiteService is ready for use by BulkSiteViewModel (Plan 04-09) and BulkSiteView (Plan 04-10)
  • All 3 non-skip tests pass; live integration tests remain skipped pending live SP admin context
  • Build: dotnet build SharepointToolbox.Tests succeeds with 0 errors, 0 warnings

Self-Check: PASSED

  • BulkSiteService.cs: FOUND at SharepointToolbox/Services/BulkSiteService.cs
  • BulkSiteServiceTests.cs: FOUND at SharepointToolbox.Tests/Services/BulkSiteServiceTests.cs
  • 04-05-SUMMARY.md: FOUND (this file)
  • Commit b0956ad: FOUND

Phase: 04-bulk-operations-and-provisioning Completed: 2026-04-03