142 lines
6.2 KiB
TypeScript
142 lines
6.2 KiB
TypeScript
/**
|
||
* QA-1: Seed-Daten für den Mock-Modus — geformt exakt nach dem DATA-2-Vertrag
|
||
* (camelCase-DTOs, Gridify-paged Listen). Datensatz angelehnt an Kellys
|
||
* FEAT-4-Verifikationsdaten (mehrgenerationiger Stammbaum inkl. gemeinsamem
|
||
* Vorfahren Anton), erweitert um Becken/Kontakte/Gesundheit/Gewicht für die
|
||
* FEAT-2/FEAT-6-Flüsse.
|
||
*/
|
||
import type { Contact, Enclosure, Gerbil, Litter } from '../src/api/types'
|
||
|
||
export interface HealthRecordRow {
|
||
id: string
|
||
gerbilId: string
|
||
date: string
|
||
type: string
|
||
description: string
|
||
veterinarian: string | null
|
||
createdAt: string
|
||
}
|
||
|
||
export interface WeightRecordRow {
|
||
id: string
|
||
gerbilId: string
|
||
date: string
|
||
weightGrams: number
|
||
notes: string | null
|
||
}
|
||
|
||
export interface MockDb {
|
||
gerbils: Gerbil[]
|
||
litters: Litter[]
|
||
enclosures: Enclosure[]
|
||
contacts: Contact[]
|
||
colorVarieties: { id: string; name: string; canonicalGenotype: string | null; sortOrder: number }[]
|
||
healthRecords: HealthRecordRow[]
|
||
weightRecords: WeightRecordRow[]
|
||
}
|
||
|
||
function gerbil(
|
||
id: string,
|
||
name: string,
|
||
gender: 'male' | 'female',
|
||
dateOfBirth: string,
|
||
litterId: string | null,
|
||
colorVarietyId: string | null,
|
||
genotype: string | null = null,
|
||
): Gerbil {
|
||
return {
|
||
id,
|
||
name,
|
||
gender,
|
||
status: 'Active',
|
||
dateOfBirth,
|
||
dateOfDeath: null,
|
||
causeOfDeath: null,
|
||
goHomeDate: null,
|
||
litterId,
|
||
enclosureId: null,
|
||
colorVarietyId,
|
||
originContactId: null,
|
||
receiverContactId: null,
|
||
genotype,
|
||
notes: null,
|
||
}
|
||
}
|
||
|
||
/** Frischer, unabhängiger Datenbestand pro Test. */
|
||
export function seedDb(): MockDb {
|
||
const gerbils: Gerbil[] = [
|
||
{
|
||
...gerbil('kruemel', 'Krümel', 'female', '2025-03-12', 'w-kruemel', 'cv-agouti', 'Aa CC DD EE GG Pp spsp rere'),
|
||
enclosureId: 'enc-gross',
|
||
originContactId: 'con-meier',
|
||
},
|
||
{ ...gerbil('fridolin', 'Fridolin', 'male', '2023-05-01', 'w-fridolin', 'cv-schwarz', 'aa CC DD EE GG PP spsp rere'), enclosureId: 'enc-gross' },
|
||
gerbil('luna', 'Luna', 'female', '2023-08-15', 'w-luna', 'cv-gold', 'AA CC DD EE GG pp spsp rere'),
|
||
gerbil('balu', 'Balu', 'male', '2021-04-20', 'w-balu', 'cv-agouti'),
|
||
gerbil('maja', 'Maja', 'female', '2021-06-11', null, 'cv-schwarz-schecke', 'aa CC DD EE GG PP Spsp rere'),
|
||
gerbil('karlsson', 'Karlsson', 'male', '2022-02-02', 'w-karlsson', 'cv-blau'),
|
||
gerbil('smilla', 'Smilla', 'female', '2022-09-30', null, 'cv-himalaya'),
|
||
gerbil('anton', 'Anton', 'male', '2019-07-07', 'w-anton', 'cv-agouti'),
|
||
gerbil('greta', 'Greta', 'female', '2019-05-23', null, 'cv-schwarz'),
|
||
gerbil('frieda', 'Frieda', 'female', '2020-01-18', null, 'cv-gold'),
|
||
gerbil('emil', 'Emil', 'male', '2017-03-03', 'w-emil', 'cv-agouti'),
|
||
gerbil('hilde', 'Hilde', 'female', '2017-11-11', null, 'cv-schwarz'),
|
||
gerbil('max', 'Max', 'male', '2015-08-08', null, 'cv-agouti'),
|
||
// Statistik: Verstorbene + Abgegebene für Verluste/Bestandskurve
|
||
{ ...gerbil('willi', 'Willi', 'male', '2019-09-09', null, 'cv-schwarz'), status: 'Deceased', dateOfDeath: '2022-04-04' },
|
||
{ ...gerbil('rosa', 'Rosa', 'female', '2020-02-02', null, 'cv-gold'), status: 'Deceased', dateOfDeath: '2023-08-15' },
|
||
{ ...gerbil('pauli', 'Pauli', 'male', '2023-05-01', null, 'cv-himalaya'), status: 'GivenAway', goHomeDate: '2023-07-15', receiverContactId: 'con-huber' },
|
||
]
|
||
|
||
const litters: Litter[] = [
|
||
{ id: 'w-kruemel', name: 'Wurf K', date: '2025-03-12', totalBorn: 5, expectedGoHomeDate: '2025-04-16', notes: null, fatherId: 'fridolin', motherId: 'luna' },
|
||
{ id: 'w-fridolin', name: 'Wurf F', date: '2023-05-01', totalBorn: 4, expectedGoHomeDate: null, notes: null, fatherId: 'balu', motherId: 'maja' },
|
||
{ id: 'w-luna', name: 'Wurf L', date: '2023-08-15', totalBorn: 6, expectedGoHomeDate: null, notes: null, fatherId: 'karlsson', motherId: 'smilla' },
|
||
{ id: 'w-balu', name: 'Wurf B', date: '2021-04-20', totalBorn: 3, expectedGoHomeDate: null, notes: null, fatherId: 'anton', motherId: 'greta' },
|
||
// Anton ist auch Karlssons Vater -> gemeinsamer Vorfahre (Inzucht-Demo)
|
||
{ id: 'w-karlsson', name: 'Wurf C', date: '2022-02-02', totalBorn: 5, expectedGoHomeDate: null, notes: null, fatherId: 'anton', motherId: 'frieda' },
|
||
{ id: 'w-anton', name: 'Wurf A', date: '2019-07-07', totalBorn: 4, expectedGoHomeDate: null, notes: null, fatherId: 'emil', motherId: 'hilde' },
|
||
{ id: 'w-emil', name: 'Wurf E', date: '2017-03-03', totalBorn: 2, expectedGoHomeDate: null, notes: null, fatherId: 'max', motherId: null },
|
||
]
|
||
|
||
const enclosures: Enclosure[] = [
|
||
{ id: 'enc-gross', name: 'Großbecken', notes: '120×50 cm' },
|
||
{ id: 'enc-leer', name: 'Quarantänebecken', notes: null },
|
||
]
|
||
|
||
const contacts: Contact[] = [
|
||
{ id: 'con-meier', name: 'Zoohandlung Meier', contactInfo: 'meier@example.de', notes: null },
|
||
{ id: 'con-huber', name: 'Familie Huber', contactInfo: '0151 2345678', notes: null },
|
||
{ id: 'con-frei', name: 'Züchterin Frei', contactInfo: null, notes: 'unverknüpft' },
|
||
]
|
||
|
||
const colorVarieties = [
|
||
{ id: 'cv-agouti', name: 'Agouti', canonicalGenotype: 'AA CC DD EE GG PP spsp rere', sortOrder: 1 },
|
||
{ id: 'cv-schwarz', name: 'Schwarz', canonicalGenotype: 'aa CC DD EE GG PP spsp rere', sortOrder: 2 },
|
||
{ id: 'cv-gold', name: 'Gold', canonicalGenotype: 'AA CC DD EE GG pp spsp rere', sortOrder: 3 },
|
||
{ id: 'cv-blau', name: 'Blau', canonicalGenotype: 'aa CC dd EE GG PP spsp rere', sortOrder: 4 },
|
||
{ id: 'cv-himalaya', name: 'Himalaya', canonicalGenotype: 'AA chch DD EE GG PP spsp rere', sortOrder: 5 },
|
||
{ id: 'cv-schwarz-schecke', name: 'Schwarz Schecke', canonicalGenotype: 'aa CC DD EE GG PP Spsp rere', sortOrder: 6 },
|
||
]
|
||
|
||
const healthRecords: HealthRecordRow[] = [
|
||
{
|
||
id: 'hr-1',
|
||
gerbilId: 'kruemel',
|
||
date: '2026-01-15',
|
||
type: 'Vaccination',
|
||
description: 'Jahresimpfung',
|
||
veterinarian: 'Dr. Vogel',
|
||
createdAt: '2026-01-15T10:00:00Z',
|
||
},
|
||
]
|
||
|
||
const weightRecords: WeightRecordRow[] = [
|
||
{ id: 'wr-1', gerbilId: 'kruemel', date: '2026-05-01', weightGrams: 78, notes: null },
|
||
{ id: 'wr-2', gerbilId: 'kruemel', date: '2026-05-20', weightGrams: 82, notes: null },
|
||
]
|
||
|
||
return { gerbils, litters, enclosures, contacts, colorVarieties, healthRecords, weightRecords }
|
||
}
|