Commit Graph

476 Commits

Author SHA1 Message Date
1bf94c2040 FEAT-6: fix main build - align FEAT-4 makeLitter test factory with FEAT-3 Litter type (expectedGoHomeDate, notes) 2026-06-06 00:27:09 +02:00
17879b1cfb FEAT-6: typed API clients for health-records, weight-records, gerbil photos (multipart upload) 2026-06-06 00:25:00 +02:00
f772464401 FEAT-6: add German strings for Tier-Detail-Tabs (Gesundheit/Gewicht/Fotos) 2026-06-06 00:24:30 +02:00
e12588c338 FEAT-3: extract reusable BreedingResultView from GenetikPage (no behavior change)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:23:53 +02:00
9c0a2fec56 FEAT-4: interactive Stammbaum viewer - foreignObject cards (photo slot, sex, Farbschlag chip, year), tap-to-re-root, lazy expand, zoom controls + CSS-grid print pedigree & Inzuchtkoeffizient slot
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:22:45 +02:00
61cfab046a FEAT-4: pedigree data module - depth-limited ancestor traversal, lazy expand, cycle guard, rd3t conversion (15 tests)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:17:49 +02:00
01923d1b87 FEAT-1b: add first test project (xUnit) for Inzuchtkoeffizient
GerbilManager.Tests (net10.0), added to slnx. Reference pedigrees verified
against textbook F: parent-offspring 0.25, full sibs 0.25, half sibs 0.125,
first cousins 0.0625, unknown 0, plus deep multi-path (0.375) and
generationsAvailable checks. 8/8 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:13:22 +02:00
caba259a28 FEAT-4: add Stammbaum button to animal detail head-actions
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:12:09 +02:00
5ef27a70d3 IDE: launch.json starts the full stack via Aspire AppHost from the VS Code play button 2026-06-06 00:11:32 +02:00
16d3cefe68 FEAT-2: wire /becken + /kontakte routes and nav (Kontakte supersedes Zuechter placeholder) 2026-06-06 00:11:11 +02:00
0c94a6ecd3 FEAT-1b: Inzuchtkoeffizient endpoints via Wright path method
- PedigreeCalculator: pure, EF-free Wright path-method engine (recursive F_A,
  per-common-ancestor contributions, generationsAvailable, cycle guards)
- InbreedingService: loads pedigree from ApplicationContext shadow FKs
  (Gerbils.LitterId, Litters.FatherId/MotherId) into in-memory maps
- InbreedingController: GET /gerbils/{id}/inbreeding-coefficient,
  POST /genetics/test-inbreeding (hypothetical pairing for Probeverpaarung)
- Injects ApplicationContext directly; no Program.cs change (Dwight owns it)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:10:19 +02:00
bca97ed10a FEAT-4: install react-d3-tree + /rennmaeuse/:id/stammbaum route (page scaffold)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:10:10 +02:00
92c930c165 FEAT-2: Kontakte pages - list (Gridify search+paging), detail w/ linked animals (Herkunft/Abnehmer), form, delete w/ 409 conflict message 2026-06-06 00:09:43 +02:00
d8e94f6d05 FEAT-5: Probeverpaarung entry point from animal detail (?parent=) + stored-vs-engine Farbschlag mismatch hint
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:09:22 +02:00
5ee4b9874b FEAT-2: Becken pages - list (Gridify search+paging), detail w/ occupancy, form, delete w/ 409 conflict message 2026-06-06 00:08:06 +02:00
16a0016de9 FEAT-5: add gender-filtered animal pickers to Probeverpaarung parents
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:07:32 +02:00
a1d02c0d4e FEAT-2: typed CRUD API clients for enclosures + contacts 2026-06-06 00:07:01 +02:00
12e787671c FEAT-2: add German strings for Becken + Kontakte sections (append-only de.ts) 2026-06-06 00:06:42 +02:00
5a6326a967 FEAT-5: Probeverpaarung page — free genotype entry, client-side breed(), Farbschlag cards + warnings
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:06:22 +02:00
f7ba1fa70e FEAT-5: add /genetik route + nav entry + German strings (page stub)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 00:04:03 +02:00
e077766cc5 FEAT-1: Tiere create/edit form (German labels, validation, GEN-1 genotype check) + nested routes
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:58:10 +02:00
e9f88b7889 ARCH-2b: add frontend (Vite) as Aspire resource with LAN wiring
- AppHost: AddViteApp(frontend) via Aspire.Hosting.JavaScript 13.4.2,
  WithReference(webapi)+WaitFor, inject VITE_API_BASE_URL=http://<lan-ip>:5179
  at launch (computed from the active physical adapter, follows DHCP)
- Pin proxyless ports: webapi http=5179 (matches SPA default), vite=5173,
  both bind 0.0.0.0 for LAN reachability
- vite.config: server.host=true so the dev server is LAN-visible

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:57:31 +02:00
0237f5de5e FEAT-1: Tiere detail page — Stammdaten, GEN-1 genotype+Farbschlag, placeholder tabs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:55:54 +02:00
9b586dd7fa FEAT-1: Tiere list page — Gridify filters (Status/Geschlecht/Farbschlag), sort, paging + German strings
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:54:44 +02:00
f162ef4fed FEAT-1: add typed gerbils/lookups API + useApi/useMutation hooks
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:52:39 +02:00
e04b69ce49 FEAT-1: add Gridify query builder + API DTO types
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:50:30 +02:00
3629e89e87 GEN-1: expose CATALOG seed view (Name/CanonicalGenotype/SortOrder) for DATA-2 + round-trip test
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:47:11 +02:00
3cf6413fcc ARCH-2b: permissive LAN CORS + bind API on 0.0.0.0, drop HTTPS redirect
- AddCors lan policy (AllowAnyOrigin/Header/Method) — trusted home LAN, no auth
- Widen ASPNETCORE_URLS host localhost/127.0.0.1 -> 0.0.0.0 (keep Aspire-assigned port)
- Remove dev HTTPS redirection so phones reach the API over plain HTTP

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:46:59 +02:00
0408a482cf GEN-1: export genotypeToFarbschlag for DATA-1 denormalization contract
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:45:07 +02:00
0553ceda66 GEN-1: add German genetics warning texts to de.ts (code -> text mapping)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:43:41 +02:00
3561b435d5 GEN-1: add vitest suite (worked example, SpSp renorm, wildcards) + erasable-enum fix
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:43:21 +02:00
2bee5caaa2 GEN-1: add Probeverpaarung API (breed) + public index
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:42:05 +02:00
d99294e30e GEN-1: add phenotype tokens + Farbschlag catalog (18 varieties + Schecke/Rex modifiers)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:41:34 +02:00
f641334982 ARCH-2: move Aspire resource service port 22112 -> 22113
ASUS ROGLiveService squats on 22112 on this machine.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:41:06 +02:00
ebc61acd18 GEN-1: add lethality rules + warning codes (SpSp lethal+renormalize, ReRe semi)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:40:06 +02:00
76d8380ea1 GEN-1: add Punnett engine (per-locus + full genotype distribution, wildcard support)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:39:31 +02:00
3fc430f1a0 GEN-1: add Genotype type + canonical serialization (JSON + display string)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:38:49 +02:00
9d5608f46e GEN-1: add locus/allele model (A C D E G P Sp Re, multi-allele C/E)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:38:18 +02:00
2b9a0cd648 GEN-1: add vitest + exact Fraction utility
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:37:53 +02:00
9b9cf2b35a ARCH-2: apply EF migrations on startup in Development
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:37:42 +02:00
cc589b13d0 ARCH-2: fresh Npgsql initial migration
uuid keys, text columns, Gender persisted as text via EnumToStringConverter,
Litter.Date as timestamptz. Replaces deleted SqlServer initialCreate (no prod data).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:37:21 +02:00
84de905469 ARCH-2: wire PostgreSQL through Aspire
- AppHost: AddPostgres(postgres).WithDataVolume() + AddDatabase(gerbilmanager),
  WebAPI project resource WithReference/WaitFor on the db (Aspire-generated credentials)
- WebAPI: AddNpgsqlDbContext<ApplicationContext>(gerbilmanager) replaces manual
  AddDbContext/UseNpgsql + appsettings connection string

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:36:06 +02:00
4d541fe9cd ARCH-2: add Aspire AppHost + ServiceDefaults (Aspire 13.4.2)
- New projects GerbilManager.AppHost / GerbilManager.ServiceDefaults (templates)
- Added both to GerbilManager.slnx
- WebAPI references ServiceDefaults; AddServiceDefaults + MapDefaultEndpoints wired

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:35:15 +02:00
8820cc7751 ARCH-2: swap EF provider to Npgsql, drop SqlServer migrations + conn strings
- Microsoft.EntityFrameworkCore.SqlServer -> Npgsql.EntityFrameworkCore.PostgreSQL 10.0.2
- UseSqlServer -> UseNpgsql (Aspire-injected gerbilmanager connection)
- Removed hardcoded sa connection strings from appsettings*.json
- Deleted SqlServer-flavored initial migration (fresh Npgsql one follows; no prod data)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:34:00 +02:00
b041d84b18 ARCH-2: bump TFM to net10.0, EF Core/OpenApi to 10.0.8, Swashbuckle to 10.2.1
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:32:47 +02:00
6ee85bc909 Replace Next.js app with Vite React app (gerbil-manager-web)
- Remove gerbil-manager-nextjs (unused scaffold; recoverable from history)
- Scaffold gerbil-manager-web: Vite + React 19 + TypeScript
- German-only UI (lang=de, central strings in src/strings/de.ts)
- Mobile-first shell: bottom tab bar on phones, sidebar on >=768px
- react-router with skeleton routes (Start, Rennmaeuse, Wuerfe, Zuechter)
- API client (src/api/client.ts) pointing at GerbilManagerWebAPI,
  configurable via VITE_API_BASE_URL (default http://localhost:5179)
- nginx-based Dockerfile with SPA fallback; docker-compose frontend
  service now builds gerbil-manager-web

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:30:34 +02:00
42a43ae24e Migrate GerbilManager.sln to slnx format
- Generated GerbilManager.slnx via dotnet sln migrate (SDK 10.0.300)
- Removed legacy GerbilManager.sln after verified build
- Updated .vscode/tasks.json references to the new file

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:24:42 +02:00
a7157a5a2e baseline before slnx migration
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 23:23:46 +02:00
74dee4a6e2 seperate frontend network from backend 2023-10-30 23:15:14 +01:00
47e2117325 Add frontend to backend dependency 2023-10-30 23:14:01 +01:00