diff --git a/Summarize.md b/Summarize.md index 1886309..15bd357 100644 --- a/Summarize.md +++ b/Summarize.md @@ -6,6 +6,50 @@ --- +### Aenderungen 2026-03-13 (6): Dashboard Home-Tab — Analoguhr, 3-Tage-Wetter, Spruch, kompakte Widgets + +#### Frontend +- `components/AnalogClock.tsx` + `AnalogClock.module.css` — Neue SVG-Analoguhr mit Stunden-/Minuten-/Sekundenzeiger (Gegengewicht), digitaler Zeit- und Datumsanzeige; aktualisiert jede Sekunde via setInterval +- `hooks/useWeather.ts` — Open-Meteo API um 3-Tage-Prognose erweitert (`&daily=weather_code,temperature_2m_max,temperature_2m_min&forecast_days=3`); `WeatherData` um `forecast: ForecastDay[]` ergaenzt; neues Interface `ForecastDay` +- `shell/DashboardPage.tsx` — Home-Tab vollstaendig ueberarbeitet: + - Spruch des Tages (35 dt. Zitate, deterministisch nach Tagesdatum) rechtsbuendig im Header neben dem Willkommensnamen + - 3-Spalten-Layout: Linke Spalte (240px): Analoguhr + WeatherWidget (aus Header verschoben) + 3-Tage-Prognose; Mittlere Spalte (flex:1): Kompakte Aufgaben + Kompakte E-Mails; Rechte Sidebar (300px, unveraendert): Messe-Ticker + Tagesagenda + - `HomeTasksWidget`: Top-8 offene Aufgaben (CRM + O365, gleiche Zusammenfuehrungs-Logik wie DashboardTasksTab), direkt erledigbar, „Alle →" schaltet auf Aufgaben-Tab + - `HomeEmailsWidget`: Posteingang-E-Mails der letzten 3 Tage (client-seitiger Filter), direkter Outlook-Link, „Alle →" schaltet auf E-Mail-Tab + - `role`-Parameter aus HomeTab entfernt (nicht mehr angezeigt) +- `shell/DashboardPage.module.css` — Neue CSS-Klassen: `.quoteOfDay`, `.homeLeft`, `.forecastStrip`, `.forecastDay*`, `.homeWidgetCard`, `.homeTaskRow*`, `.homeEmailRow*` u.a. (ca. 280 neue Zeilen) + +--- + +### Aenderungen 2026-03-13 (5): Erweiterte Profilfelder (analog O365) + Profilbild-Sync aus Microsoft 365 + +#### Backend: Core-Service +- `prisma/core.schema.prisma` — 4 neue optionale Felder im User-Modell: `jobTitle`, `department`, `companyName`, `officeLocation` (mit `@map` auf snake_case, `@db.VarChar`) +- `prisma/migrations/20260313_user_profile_extra_fields/migration.sql` — ALTER TABLE fuer die 4 neuen Spalten +- `core/users/dto/update-user.dto.ts` — Neue Felder mit `@IsOptional`, `@ValidateIf`, `@IsString`, `@MaxLength` +- `core/users/users.service.ts` — `findById()`, `update()`, `updateProfile()` um neue Felder erweitert + +#### Backend: CRM-Service +- `graph/graph.service.ts` — `M365UserProfile` um `department`, `companyName`, `officeLocation` erweitert; `getM365Profile()` `$select` erweitert; neue Methode `getM365Photo()`: Graph `/me/photos/96x96/$value` als ArrayBuffer → Base64 JPEG Data-URL; 404/400 → null +- `graph/office365.controller.ts` — Neuer Endpoint `GET /crm/office365/photo` + +#### Frontend +- `auth/AuthContext.tsx` — `User`-Interface: `jobTitle?`, `department?`, `companyName?`, `officeLocation?` +- `crm/types.ts` — `M365UserProfile` um `department`, `companyName`, `officeLocation` erweitert +- `crm/api.ts` — `office365Api.getM365Photo()` hinzugefuegt +- `profile/ProfilePage.tsx` — 4 neue State-Variablen, Organisations-Fieldset (2×2 Grid), `handleEnrichFromO365` ueberschreibt Profilfoto immer; Auto-Sync-Hook befuellt alle neuen Felder +- `hooks/useO365ProfileSync.ts` — Fetcht Profil + Foto parallel; Profilfoto nur gesetzt wenn `!user.avatar` + +--- + +### Aenderungen 2026-03-13 (4): O365-Profil-Auto-Sync beim Login (useO365ProfileSync) + +#### Frontend +- `hooks/useO365ProfileSync.ts` — Neuer Hook: synchronisiert INSIGHT-Profil einmalig pro Browser-Session aus Microsoft 365; sessionStorage-Flag (`o365_profile_synced`) verhindert Mehrfach-Sync; stille Ausfuehrmg (kein UI-Feedback); bei Fehler wird Flag entfernt fuer naechsten Retry; `PATCH /users/me` mit Kontaktfeldern (firstName, lastName, phone, mobile, city, street, postalCode) +- `shell/AppLayout.tsx` — `useO365ProfileSync()` direkt in der AppLayout-Komponente aufgerufen + +--- + ### Aenderungen 2026-03-13 (3): Dashboard Kalender-Tab — Monats-/Wochenansicht + Tages-Agenda #### Backend: CRM-Service