feat(settings): devise configurable pour budget, courses et dashboard
Résumé
Ajouter une préférence devise du foyer (ISO 4217) dans les paramètres
utilisateur, et l’utiliser pour afficher tous les montants de l’application
(budget, liste de courses, tableau de bord).
Aujourd’hui, l’euro est codé en dur ; les foyers hors zone euro ne peuvent pas
adapter l’affichage à leur contexte.
Contributeurs : issue adaptée à une PR ciblée (UI + API légère + migration).
Motivation
- Cohérence : aujourd’hui mélange de
€, EUR et formatCurrency figé sur
EUR / fr-FR.
- Accessibilité internationale : familles en USD, GBP, CHF, XOF, etc.
- Les montants en base restent des nombres (
DECIMAL) ; une devise par
compte suffit en v1.
Comportement attendu
- Dans Paramètres, l’utilisateur choisit une devise (liste ISO 4217 :
EUR, USD, GBP, CHF, XOF, CAD, …).
- Tous les montants affichés utilisent cette devise (symbole, séparateurs,
position du symbole via Intl.NumberFormat).
- La préférence est persistée et conservée après reconnexion.
- Les comptes existants gardent EUR par défaut (aucune régression).
État actuel (références code)
| Zone |
Fichier |
Problème |
| Utilitaire |
client/src/lib/utils.ts |
formatCurrency → currency: 'EUR' fixe |
| Budget |
client/src/pages/Budget.tsx |
toFixed(2) + '€', labels « Montant (€) » |
| Courses |
client/src/pages/ShoppingList.tsx |
suffixe EUR en dur |
| Dashboard |
client/src/pages/Dashboard.tsx |
suffixe € en dur |
| Paramètres |
client/src/pages/Settings.tsx |
pas de préférences d’affichage |
| Schéma |
server/schema.sql |
table users sans colonne currency |
Périmètre proposé
Interface
- Sélecteur « Devise du foyer » sur
/settings, avec courte explication
(modules concernés).
- Libellés de champs sans symbole monétaire en dur.
API / données
- Stocker
currency (VARCHAR(3), défaut EUR) sur users ou table
user_preferences.
- Exposer la valeur sur le profil utilisateur courant ; endpoint
PATCH pour
la modifier (validation code ISO 4217).
- Inclure
currency dans l’export/import JSON si les données du foyer sont
transférées.
Client
- Étendre
formatCurrency(amount, currency?, locale?).
- Contexte ou hook partagé (
useCurrency / CurrencyProvider).
- Refactor des 3 écrans listés ci-dessus pour supprimer tout formatage manuel.
Critères d’acceptation
Hors périmètre (v1)
- Conversion de devises / taux de change
- Devise différente par entrée budget ou par article de courses
Fichiers concernés (indicatif)
client/src/lib/utils.ts, client/src/pages/Settings.tsx,
client/src/pages/Budget.tsx, client/src/pages/ShoppingList.tsx,
client/src/pages/Dashboard.tsx, server/schema.sql, routes auth/profil,
export/import données.
Effort
M — migration DB simple, un endpoint, refactor d’affichage sur 3 pages.
Pour les contributeurs
- Commenter sur l’issue : « Je prends cette issue »
- Branche :
feat/user-currency-preference
- PR vers
main avec Closes #<numéro>
Résumé
Ajouter une préférence devise du foyer (ISO 4217) dans les paramètres
utilisateur, et l’utiliser pour afficher tous les montants de l’application
(budget, liste de courses, tableau de bord).
Aujourd’hui, l’euro est codé en dur ; les foyers hors zone euro ne peuvent pas
adapter l’affichage à leur contexte.
Motivation
€,EURetformatCurrencyfigé surEUR/fr-FR.DECIMAL) ; une devise parcompte suffit en v1.
Comportement attendu
EUR, USD, GBP, CHF, XOF, CAD, …).
position du symbole via
Intl.NumberFormat).État actuel (références code)
client/src/lib/utils.tsformatCurrency→currency: 'EUR'fixeclient/src/pages/Budget.tsxtoFixed(2) + '€', labels « Montant (€) »client/src/pages/ShoppingList.tsxEURen durclient/src/pages/Dashboard.tsx€en durclient/src/pages/Settings.tsxserver/schema.sqluserssans colonnecurrencyPérimètre proposé
Interface
/settings, avec courte explication(modules concernés).
API / données
currency(VARCHAR(3), défautEUR) surusersou tableuser_preferences.PATCHpourla modifier (validation code ISO 4217).
currencydans l’export/import JSON si les données du foyer sonttransférées.
Client
formatCurrency(amount, currency?, locale?).useCurrency/CurrencyProvider).Critères d’acceptation
EURpour les installations existantesformatCurrency(minimum EUR + 1 autre devise)Hors périmètre (v1)
Fichiers concernés (indicatif)
client/src/lib/utils.ts,client/src/pages/Settings.tsx,client/src/pages/Budget.tsx,client/src/pages/ShoppingList.tsx,client/src/pages/Dashboard.tsx,server/schema.sql, routes auth/profil,export/import données.
Effort
M — migration DB simple, un endpoint, refactor d’affichage sur 3 pages.
Pour les contributeurs
feat/user-currency-preferencemainavecCloses #<numéro>