refactor(backend): contributionEuro (Decimal) → contributionCents (Int) #217
Labels
No labels
component/backend
component/docs
component/e2e
component/frontend
component/infra
component/keycloak
prio/high
prio/low
prio/medium
type/bug
type/chore
type/feature
type/refactor
type/test
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
WompSchmiede/FamilienFeierPlaner#217
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
EventGuest.contributionEurovonDecimal(10,2)(Euro) aufInt(Cents) umstellen — konsistent zuFormFieldOption.price(bereits Cents).Dieser Refaktor MUSS vor Issue #16 (ZUGFeRD-Rechnungsmodul) durchgefuehrt werden, da der Invoice-Run mit
contributionCentsarbeitet.Betroffene Dateien (22 Files)
1.
backend/prisma/schema.prisma(Z. 171)2.
backend/prisma/migrations/— neue Migration3.
backend/prisma/seed.ts(Z. 259, 267)4.
backend/prisma/migrations/0001_full_schema/migration.sql(Z. 124)Einfach Überschreiben. Es gibt keinen alten Datenbestand.
5.
backend/src/routes/forms.tscontributionEuro: Number(guest.contributionEuro)→contributionCents: guest.contributionCentscalculateContribution():return totalCents / 100→return totalCentsconst contributionEuro = ...→const contributionCents = ...contributionEuro,→contributionCents,const contributionEuro = ...→const contributionCents = ...contributionEuro,→contributionCents,const contributionEuro = ...→const contributionCents = ...contributionEuro,→contributionCents,const contributionEuro = ...→const contributionCents = ...contributionEuro,→contributionCents,Number(guest.contributionEuro)→guest.contributionCents,newEuroVergleich +data: { contributionCents: newEuro }6.
backend/src/routes/guests.ts(Z. 11)7.
backend/src/routes/persons.tscontributionEuro: inv.contributionEuro,→contributionCents: inv.contributionCents,contributionEuro: inv.contributionEuro,→contributionCents: inv.contributionCents,8.
backend/openapi.yamlinvitations[].contributionEurotype: number, format: float→type: integer, minimum: 0contributionEurotype: number, format: float→type: integer, minimum: 0contributionEurotype: number, format: float→type: integer, minimum: 0recalculateContributions-descriptioncontributionEuro→contributionCentsDazu kommt: alle drei
contributionEuroheissen neucontributionCentsim Property-Key.9.
backend/src/__tests__/forms.test.tsAlle
contributionEuro: 25.0→contributionCents: 2500;0→0;50→5000.contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 0contributionCents: 0contributionEuro: 0contributionCents: 0contributionEuro: 0contributionCents: 0contributionEuro: 50contributionCents: 5000contributionEuro: 0contributionCents: 0contributionEuro: 0contributionCents: 0contributionEuro: 25.0contributionCents: 250010.
backend/src/__tests__/guests.test.tscontributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 0.0contributionCents: 0expect(res.json().contributionEuro).toBe(0.0)expect(res.json().contributionCents).toBe(0)11.
backend/src/__tests__/integration.test.tscontributionEuro: '0'contributionCents: '0'contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 2500contributionEuro: 25.0contributionCents: 250012.
backend/src/__tests__/persons.test.tscontributionEuro: 25.0contributionCents: 250013.
frontend/src/lib/api/generated.ts(4 Stellen)contributionEuro?: number;contributionCents?: number;contributionEuro?: number;contributionCents?: number;contributionEuro?: number;contributionCents?: number;* Berechnet contributionEuro fuer alle Gaeste ...contributionCentsHinweis: Wird nach OpenAPI-Aenderung via
npm run generate:api(Orval) regeneriert. Nicht manuell aendern.14.
frontend/src/routes/app/events/[eventId]/+page.svelte(selfGuest.contributionEuro ?? 0).toLocaleString(...)((selfGuest.contributionCents ?? 0) / 100).toLocaleString(...)(selfGuest.contributionEuro ?? 0).toLocaleString(...)((selfGuest.contributionCents ?? 0) / 100).toLocaleString(...){ key: 'contributionEuro', label: 'Beitrag', ... }{ key: 'contributionCents', label: 'Beitrag', ... }formatEuro((row as Guest).contributionEuro)formatEuroCent((row as Guest).contributionCents){ key: 'contributionEuro', label: 'Beitrag', ... }{ key: 'contributionCents', label: 'Beitrag', ... }formatEuro((row as Guest).contributionEuro)formatEuroCent((row as Guest).contributionCents)15.
frontend/src/routes/app/events/[eventId]/+page.server.ts(Z. 140-148)16.
frontend/src/tests/events.test.ts(Z. 234-235)17.
frontend/src/tests/guests.test.tscontributionEuro: 25.0contributionCents: 2500contributionEuro: 50.0contributionCents: 5000contributionEuro: 20.0contributionCents: 2000contributionEuro: 25.0contributionCents: 2500contributionEuro: '30'contributionCents: '3000'contributionEuro: '25'contributionCents: '2500'18.
frontend/src/tests/self-service.test.ts(Z. 9-10)19.
docs/design/02-datenmodell.md(Z. 76, 79)20.
PROJECT_STATE.md(Z. 51)Keine Aenderung noetig (referenziert nur Issue #184, nicht das Feld selbst).
Test-Validierung
Nach der Migration:
npm run test(Backend) — alle Tests muessen gruen seinnpm run test(Frontend) — alle Tests muessen gruen seinnpm run generate:api(Frontend) — Orval regeneriert generated.tsnpx prisma generatemuss fehlerfrei seinAbhaengigkeiten
Blockiert #16 (ZUGFeRD-Rechnungsmodul). Dieser Refaktor MUSS vor #16 gemergt werden.
Labels
component/backendcomponent/frontendtype/refactorprio/highImplementierung abgeschlossen auf Branch
issue-217.Commits:
0e6dfb1— Backend: Schema, Migration, Seed, Routes, openapi.yaml, Tests, Design-Dokumenteb2e31f— Frontend: Orval-Regeneration, page.svelte, page.server.ts, TestsPR #237 kann gemergt werden, sobald ein Actions-Runner verfuegbar ist oder manuell via Web-UI bei aufgehobenem Branch-Protection.