Compare commits

...

2 Commits

Author SHA1 Message Date
beo3000 d6519f7f73 upd 2026-03-17 17:01:32 +01:00
beo3000 af96f7c234 upd mem 2026-03-03 10:04:10 +01:00
6 changed files with 76 additions and 4 deletions

View File

@ -5,7 +5,8 @@
"Bash(get-childitem:*)",
"WebFetch(domain:geminicli.com)",
"WebFetch(domain:google-gemini.github.io)",
"Bash(Get-ChildItem \"C:\\\\work\\\\claude-meta\\\\home-claude\")"
"Bash(Get-ChildItem \"C:\\\\work\\\\claude-meta\\\\home-claude\")",
"Bash(npx:*)"
]
}
}

View File

@ -50,10 +50,36 @@
],
"defaultMode": "acceptEdits"
},
"model": "sonnet",
"enabledPlugins": {
"csharp-lsp@claude-plugins-official": true
"csharp-lsp@claude-plugins-official": true,
"frontend-design@claude-plugins-official": true,
"superpowers@claude-plugins-official": true,
"code-review@claude-plugins-official": true,
"code-simplifier@claude-plugins-official": true,
"playwright@claude-plugins-official": true,
"claude-md-management@claude-plugins-official": true
},
"language": "German",
"alwaysThinkingEnabled": true,
"effortLevel": "low",
"model": "sonnet"
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--browser",
"chromium",
"--headed"
]
},
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://krah:krah_dev_pw@localhost:5432/krah_prodb"
]
}
}
}

View File

@ -0,0 +1,31 @@
# AIMS Project Memory
## Razor Pages Migration (Branch: feat/razor-pages-migration)
- Dashboard (`/`) and Goals List (`/goals`) migrated to Razor Pages
- Blazor `@page` directives removed from `Dashboard.razor` and `GoalsList.razor`
- NavMenu.razor: `ForceLoad="true"` on Dashboard and Ziele links
- MainLayout.razor: `ToggleDarkMode` now writes `aims-dark-mode` cookie via JS Interop
### Key gotchas
- `<option @(ternary)>` → RZ1031 error; use `asp-items="Model.SelectList"` instead
- `Page` property in PageModel conflicts with `PageModel.Page()` method → use `new` keyword: `public new int Page`
- Static methods in PageModel not accessible from Razor view via bare `IndexModel.Method()` → qualify fully: `AIMS.Web.Pages.Goals.IndexModel.MakeUrl(...)`
- Razor Pages `_Layout.cshtml` lives at `Pages/Shared/`, ViewComponents at `Views/Shared/Components/{Name}/Default.cshtml`
- `MapRazorPages()` must come BEFORE `MapRazorComponents<App>()` in Program.cs to claim routes
### File locations
- Layout: `src/AIMS.Web/Pages/Shared/_Layout.cshtml`
- NavMenu ViewComponent: `src/AIMS.Web/ViewComponents/NavMenuViewComponent.cs`
+ View: `src/AIMS.Web/Views/Shared/Components/NavMenu/Default.cshtml`
- CSS: `src/AIMS.Web/wwwroot/css/material.css`
- JS: `src/AIMS.Web/wwwroot/js/aims-pages.js`
- Dashboard: `src/AIMS.Web/Pages/Dashboard/Index.cshtml[.cs]`
- Goals List: `src/AIMS.Web/Pages/Goals/Index.cshtml[.cs]`
- Goals Tree partial: `src/AIMS.Web/Pages/Goals/_TreeNode.cshtml`
- HTMX endpoint: `src/AIMS.Web/Pages/Goals/Hierarchy.cshtml[.cs]` @ `/goals/hierarchy`
## Key DTOs
- `GoalSummaryDto`: Id, Name, CompanyName, DepartmentName, GoalType, CurrentActualValue, CurrentTargetValue, TargetValue, AchievementPercentage (decimal), Status, TagNames, LatestValuePeriodName, Unit
- `GoalHierarchyNodeDto`: same + Level, ParentGoalId, HasChildren, ChildCount, Children, ValueSource
- `YearDto`: Id, YearNumber (int), Status, IsEditable
- `GoalFilterDto`: CompanyId, DepartmentId, YearId, Status, TagId, SearchTerm, ChildFilterMode, Page, PageSize, IsRootGoal

View File

@ -2,11 +2,19 @@
## Feature-Session Workflow
When user says `Feature [topic]` at session start:
**TRIGGER** (any phrasing at session start that references a feature/topic):
- `Feature [topic]`
- `zum Feature [topic]`
- `wir arbeiten an [topic]`
- any similar phrasing indicating a feature or topic context
**ACTION — always execute immediately on trigger:**
1. Look for `docs/feature-[topic].md` in project root (case-insensitive match)
2. If found: read it, confirm context loaded, summarize key points briefly
3. If not found: inform user that no feature doc exists yet, suggest creating one
**CRITICAL: Do NOT wait to be explicitly asked. Load the feature doc proactively.**
When user says `aktualisiere deine Feature-Beschreibung` at session end:
1. Locate the relevant `docs/feature-[topic].md`
2. Update it with key insights, decisions, and findings from the current session

View File

@ -29,6 +29,9 @@
- `ILongRunningJobService` is for services like AD sync, Hydra — they have dedicated JobType enum entries
## Naming
- App is called **"KRAH-App"** internally (not "KBS" — that's only the technical project name)
## HydraArchiveData
- Entity: HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId, DecimalValue
- Covering index: (HydraArchiveReloadId, AcquisitionTime, PdatrefPparamDatasupId)

View File

@ -73,6 +73,9 @@ for (var i = 0; i < itResult.RowCount; i++) {
- Inherits `GrpcClientBase<ISapOrderService>`
- Constructor: `(GrpcChannel, ServiceRegistry, IServiceScopeFactory)`
- Methods: `return Client?.MethodName(request);`
- **NOT registered in DI** — resolved via `ServiceRegistry.GetClient<T>()` (async)
- To use in a service: inject `ServiceRegistry`, then `var client = await serviceRegistry.GetClient<SapListServiceClient>()`
- Never inject a `*Client` class directly via constructor DI — it will throw at startup
### Microservice → Server (IApiComposer callback)
- **Interface:** `GrpcProtos/GrpcServices/Contracts/Server/IApiComposer.cs`