3.7 KiB
3.7 KiB
Unit 6 Code Generation Summary
Overview
Unit 6 implements Profile, Settings, CMS placeholder, and error pages (403/404) for the CMS Frontend.
Migration Check
No EF Core migration required. All backend changes in Steps 1–5 operate on existing columns in the AspNetUsers table managed by ASP.NET Identity (UserName, NormalizedUserName, Email, NormalizedEmail, PasswordHash). No new DbSet<> entries or schema columns were introduced.
Files Created or Modified
Backend — Core
| File | Change |
|---|---|
src/SlpModularCms.Core/Identity/Models/IdentityRequests.cs |
Added UpdateProfileRequest and ChangePasswordRequest records |
src/SlpModularCms.Core/Identity/Services/IAuthService.cs |
Added ChangePasswordAsync method signature |
src/SlpModularCms.Core/Identity/Services/AuthService.cs |
Implemented ChangePasswordAsync using UserManager.ChangePasswordAsync |
Backend — Modules.Identity
| File | Change |
|---|---|
src/SlpModularCms.Modules.Identity/Controllers/AuthController.cs |
Added POST /api/v1/Auth/change-password endpoint |
src/SlpModularCms.Modules.Identity/Controllers/UsersController.cs |
Added PUT /api/v1/Users/me endpoint for profile self-update |
Frontend — API hooks
| File | Change |
|---|---|
frontend/src/api/useProfile.ts |
Created — useUpdateProfile() and useChangePassword() hooks |
frontend/src/api/useAvailability.ts |
Extended with useUpdateAvailability() mutation |
Frontend — MSW mocks
| File | Change |
|---|---|
frontend/src/mocks/users/handlers.ts |
Added PUT /api/v1/Users/me mock handler |
frontend/src/mocks/auth/handlers.ts |
Added POST /api/v1/Auth/change-password mock handler |
Frontend — i18n
| File | Change |
|---|---|
frontend/src/i18n/locales/en/translation.json |
Added profile, settings, cms, error key groups |
frontend/src/i18n/locales/nl/translation.json |
Added Dutch translations for all new key groups |
Frontend — Pages
| File | Change |
|---|---|
frontend/src/pages/ProfilePage.tsx |
Replaced stub — full implementation with ProfileInfoForm, RoleDisplay badge, ChangePasswordDialog |
frontend/src/pages/SettingsPage.tsx |
Replaced stub — full implementation with availability selector + 3 placeholder cards |
frontend/src/pages/CmsPage.tsx |
Replaced stub — enhanced placeholder with LayoutGrid icon |
frontend/src/pages/AccessDeniedPage.tsx |
Created — 403 page with ShieldOff icon and back button |
frontend/src/pages/NotFoundPage.tsx |
Created — 404 catch-all page with FileQuestion icon and back button |
Frontend — Router
| File | Change |
|---|---|
frontend/src/router.tsx |
Added /403 (accessDeniedRoute) and $ catch-all (notFoundRoute) routes |
Frontend — Tests
| File | Coverage |
|---|---|
frontend/src/pages/ProfilePage.test.tsx |
Renders, pre-fill, save disabled when pristine, save enabled after edit, save success, email validation, dialog open, wrong password error, auth redirect |
frontend/src/pages/SettingsPage.test.tsx |
Renders, status badge, mode buttons, mode selection, save success, save error, placeholder sections, auth redirect |
frontend/src/pages/CmsPage.test.tsx |
Renders title and placeholder, auth redirect |
frontend/src/pages/AccessDeniedPage.test.tsx |
Renders title, message, back button, navigation |
frontend/src/pages/NotFoundPage.test.tsx |
Renders for unknown routes, back button, navigation |
i18n Completeness
All t('...') calls in the new pages and hooks have corresponding keys in both en/translation.json and nl/translation.json. No orphaned keys.