docs(11-04): complete logo management commands plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
99
.planning/phases/11-html-export-branding/11-04-SUMMARY.md
Normal file
99
.planning/phases/11-html-export-branding/11-04-SUMMARY.md
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
phase: 11-html-export-branding
|
||||
plan: 04
|
||||
subsystem: ui
|
||||
tags: [wpf, mvvm, graph-api, entra, branding, logo]
|
||||
|
||||
requires:
|
||||
- phase: 10-branding-data-foundation
|
||||
provides: IBrandingService, BrandingService, ProfileService, LogoData, GraphClientFactory
|
||||
provides:
|
||||
- UpdateProfileAsync on ProfileService for persisting profile changes
|
||||
- ImportLogoFromBytesAsync on IBrandingService for raw byte validation
|
||||
- BrowseMspLogoCommand and ClearMspLogoCommand on SettingsViewModel
|
||||
- BrowseClientLogoCommand, ClearClientLogoCommand, AutoPullClientLogoCommand on ProfileManagementViewModel
|
||||
affects: [phase-12-logo-ui-preview]
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [auto-pull-entra-branding, logo-command-pattern]
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- SharepointToolbox.Tests/ViewModels/SettingsViewModelLogoTests.cs
|
||||
- SharepointToolbox.Tests/ViewModels/ProfileManagementViewModelLogoTests.cs
|
||||
modified:
|
||||
- SharepointToolbox/Services/ProfileService.cs
|
||||
- SharepointToolbox/Services/IBrandingService.cs
|
||||
- SharepointToolbox/Services/BrandingService.cs
|
||||
- SharepointToolbox/ViewModels/Tabs/SettingsViewModel.cs
|
||||
- SharepointToolbox/ViewModels/ProfileManagementViewModel.cs
|
||||
|
||||
key-decisions:
|
||||
- "GraphClientFactory is not mockable (non-virtual) — tests use real instance without calling CreateClientAsync"
|
||||
- "ImportLogoAsync refactored to delegate to ImportLogoFromBytesAsync — eliminates code duplication"
|
||||
- "Type alias AppGraphClientFactory used to disambiguate from Microsoft.Graph.GraphClientFactory"
|
||||
|
||||
patterns-established:
|
||||
- "Logo command pattern: browse → ImportLogoAsync → persist; clear → null + persist"
|
||||
- "Auto-pull pattern: Graph API org branding → ImportLogoFromBytesAsync → persist to profile"
|
||||
|
||||
requirements-completed: [BRAND-04, BRAND-05]
|
||||
|
||||
duration: 12min
|
||||
completed: 2026-04-08
|
||||
---
|
||||
|
||||
# Plan 11-04: Logo Management Commands + Service Extensions Summary
|
||||
|
||||
**MSP and client logo browse/clear/auto-pull commands on ViewModels, with ProfileService.UpdateProfileAsync and BrandingService.ImportLogoFromBytesAsync**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** ~12 min
|
||||
- **Tasks:** 2
|
||||
- **Files modified:** 8
|
||||
|
||||
## Accomplishments
|
||||
- ProfileService.UpdateProfileAsync persists profile changes (find-by-name, replace, save)
|
||||
- BrandingService.ImportLogoFromBytesAsync validates raw bytes via magic byte detection, reuses compression logic
|
||||
- ImportLogoAsync now delegates to ImportLogoFromBytesAsync (no duplication)
|
||||
- SettingsViewModel exposes BrowseMspLogoCommand, ClearMspLogoCommand, MspLogoPreview property
|
||||
- ProfileManagementViewModel exposes BrowseClientLogoCommand, ClearClientLogoCommand, AutoPullClientLogoCommand
|
||||
- Auto-pull fetches squareLogo from Entra branding API, handles 404 gracefully
|
||||
- All commands gated on SelectedProfile != null (CanExecute)
|
||||
|
||||
## Task Commits
|
||||
|
||||
1. **Task 1: UpdateProfileAsync + ImportLogoFromBytesAsync** - `9e850b0` (feat)
|
||||
2. **Task 2: Logo management commands on ViewModels** - `b02b75e` (feat)
|
||||
|
||||
## Files Created/Modified
|
||||
- `SharepointToolbox/Services/ProfileService.cs` - Added UpdateProfileAsync
|
||||
- `SharepointToolbox/Services/IBrandingService.cs` - Added ImportLogoFromBytesAsync
|
||||
- `SharepointToolbox/Services/BrandingService.cs` - Implemented ImportLogoFromBytesAsync, refactored ImportLogoAsync
|
||||
- `SharepointToolbox/ViewModels/Tabs/SettingsViewModel.cs` - Added IBrandingService injection, MSP logo commands
|
||||
- `SharepointToolbox/ViewModels/ProfileManagementViewModel.cs` - Added branding/graph injection, client logo commands
|
||||
- `SharepointToolbox.Tests/ViewModels/SettingsViewModelLogoTests.cs` - 4 tests for MSP logo commands
|
||||
- `SharepointToolbox.Tests/ViewModels/ProfileManagementViewModelLogoTests.cs` - 7 tests for client logo commands
|
||||
|
||||
## Decisions Made
|
||||
- GraphClientFactory cannot be mocked with Moq (non-virtual methods) — used real instance in tests, auto-pull not tested E2E
|
||||
- Used type alias `AppGraphClientFactory` to avoid conflict with Microsoft.Graph.GraphClientFactory
|
||||
|
||||
## Deviations from Plan
|
||||
None - plan executed as specified.
|
||||
|
||||
## Issues Encountered
|
||||
- Agent hit permission wall during test file creation; completed manually by orchestrator.
|
||||
|
||||
## User Setup Required
|
||||
None - no external service configuration required.
|
||||
|
||||
## Next Phase Readiness
|
||||
- SettingsViewModel and ProfileManagementViewModel ready for Phase 12 UI integration
|
||||
- All logo management commands exercisable without View
|
||||
|
||||
---
|
||||
*Phase: 11-html-export-branding*
|
||||
*Completed: 2026-04-08*
|
||||
Reference in New Issue
Block a user