Merge branch 'worktree-agent-a02f88e8490625846'

# Conflicts:
#	GerbilManagerWebAPI/ApplicationContext.cs
#	GerbilManagerWebAPI/Program.cs
#	gerbil-manager-web/e2e/mock-data.ts
#	gerbil-manager-web/src/App.tsx
#	gerbil-manager-web/src/components/AppShell.tsx
#	gerbil-manager-web/src/strings/de.ts
This commit is contained in:
2026-06-22 23:07:22 +02:00
17 changed files with 2646 additions and 0 deletions

View File

@@ -706,6 +706,42 @@ export async function installMockApi(page: Page): Promise<MockDb> {
return json(route, 405)
}
// RÜCKNAHMEN: zurückgenommene Tiere (CRUD /returns, GET optional ?gerbilId=).
// Eigene Route (kein Gridify-Paging — die API liefert ein flaches Array).
const ret = path.match(/^\/returns(?:\/([^/]+))?$/)
if (ret) {
const retId = ret[1] ? decodeURIComponent(ret[1]) : null
if (!retId) {
if (method === 'GET') {
const gid = url.searchParams.get('gerbilId')
const rows = gid ? db.returns.filter((r) => r.gerbilId === gid) : db.returns
return json(route, 200, [...rows].reverse())
}
if (method === 'POST') {
const body = request.postDataJSON() as Row
if (!body.gerbilId && !body.gerbilName) {
return json(route, 400, 'Es muss ein Tier angegeben werden.')
}
const created = { id: newId('return'), ...body, createdAt: new Date().toISOString() }
db.returns.push(created)
return json(route, 201, created)
}
return json(route, 405)
}
const idx = db.returns.findIndex((r) => r.id === retId)
if (method === 'PUT') {
if (idx < 0) return json(route, 404, { title: 'Not Found' })
Object.assign(db.returns[idx], request.postDataJSON() as Row)
return json(route, 200, db.returns[idx])
}
if (method === 'DELETE') {
if (idx < 0) return json(route, 404, { title: 'Not Found' })
db.returns.splice(idx, 1)
return json(route, 204)
}
return json(route, 405)
}
// Generische Kollektionen: /<resource> und /<resource>/<id>
m = path.match(/^\/([a-z-]+)(?:\/([^/]+))?$/)
const col = m ? collections[m[1]] : undefined