Repository navigation
feat: dépenses récurrentes - #5
Merged
Merged
Conversation
…ically Recurrence model + migration 0008 (partial unique index one expense per échéance), shared calendar maths in src/lib/recurrence.ts (Europe/Paris), daily Cron Trigger 5 23,5,11 * * * with idempotent D1 batches, /recurring-expenses API (create/list/get/update/deactivate/reactivate/soft delete), UI: repeat block in the expense form, collapsible « Récurrences » card, recurrence detail, ↻ glyph, « Récurrentes » filter.
Every toast shares one neutral surface, only the icon takes a hue (success/info Steady Blue, warning amber, error red), actions always Steady Blue; rule recorded in DESIGN.md and the impeccable sidecar.
|
🚀 Preview deployed! |
- formatRecurrenceNote: replace the vague « Les mois plus courts… » with explicit per-day notes - Day 31: last day of the month for 30-day months and February - Day 30: 28 or 29 in February - Day 29 monthly and 29 February yearly: 28 February on non-leap years - RecurrenceFields: frequency label « An » → « Année » (read as truncated) - Update design brief and quickstart to match
…ions - ExpenseForm, ExpenseDetail, RecurrenceDetail: dialog height capped to the viewport - Header and action buttons stay fixed, the body scrolls - ExpenseDetail actions row wraps, « Supprimer » no longer overflows at 320 px
sylvainDNS
force-pushed
the
003-recurring-expenses
branch
from
September 30, 2026 16:16
03241f6 to
623a9c7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Résumé
Nouvelle notion de récurrence : on décrit une dépense une fois avec sa fréquence, et l'app ajoute toute seule une dépense ordinaire à chaque échéance. Version 0.3.0.
5 23,5,11 * * *(23:05 UTC est toujours après minuit à Paris, 05:05 et 11:05 servent de relances). Une échéance manquée est rattrapée avec sa date d'origine ; jamais de doublon (index unique partiel + lot D1 transactionnel), une dépense générée supprimée n'est jamais recréée. Si l'échéance tombe le jour de la création, la dépense est ajoutée tout de suite.Autres commits de la PR :
style(toasts): Quiet Toast Rule (DESIGN.md + sidecar impeccable) : tous les toasts partagent une surface neutre, seule l'icône prend une couleur (succès et info en bleu, avertissement ambre, erreur rouge), les actions sont toujours bleues. Plus aucun toast vert : le vert reste réservé aux soldes.SegmentedControlpartagé : libellé accessible par item (« lun. » affiché, « lundi » lu), tailles compactessm/xspour tenir à 320 px, état désactivé.docs(specs): spec, design brief, plan, contrat API, quickstart et tâches dansspecs/003-recurring-expenses/.Migration
drizzle/migrations/0008_recurring_expenses.sql(additive) : tablesrecurring_expensesetrecurring_expense_participants, colonnes nullablesexpenses.recurring_expense_id/recurrence_due_dateet index unique partieluq_expenses_recurrence_due.Vérifications
pnpm test: 374 tests (calcul des dates, validation, planification de la tâche, invariant somme des soldes = 0, routes Hono viaapp.request(), composants)tsc --noEmitetpnpm lint(aucune erreur, avertissements existants inchangés)pnpm buildetwrangler deploy --dry-run --env production(le worker exportefetchetscheduled)wrangler dev --test-scheduled+/cdn-cgi/handler/scheduled) : rattrapage, idempotence, dépense supprimée non recréée, pause sautéeisValidet somme = 0prefers-reduced-motionnon testés manuellement5 23,5,11 * * *visible dans le dashboard Workers et une lignerecurring_expenses.rundans les logs