Payment Methods¶
Contrôleur HTTP qui gère les comptes bancaires (IBAN) utilisés pour les retraits Lemonway de l'investisseur. Source : payment-methods.controller.ts.
Tous les endpoints requièrent un JWT investisseur valide (JwtAuthGuard) et le rôle CUSTOMER (UserRoleGuard). La création (POST) impose en plus une validation 2FA.
GET /payment-methods¶
Renvoie les comptes bancaires actifs de l'investisseur utilisables pour un retrait.
Pré-conditions¶
- JWT investisseur valide
- Rôle
CUSTOMER
Response¶
Tableau de PaymentMethodDto (entité PaymentMethod sans customerId). Filtre :
kind = IBAN_WITHDRAWlemonwayBankAccountStatus ≠ Desactivated
Source : PaymentMethodsService.getActiveBankAccountForWithdrawal.
POST /payment-methods¶
Crée (ou réactive) un compte bancaire IBAN pour les retraits, et upload côté Lemonway le RIB associé.
Pré-conditions¶
- JWT investisseur valide
- Rôle
CUSTOMER - Code 2FA valide (
CheckCustomer2FACode) — headertfarequis, code stocké dans Redis sous la clé2FA_<code>_<customerId>. Le code est invalidé après usage parTFAInterceptor. - BIC non interdit (
businessRules.withdraw.forbiddenBankBICs) CustomerProfilecomplet (nom + prénom pourindividual, raison sociale pourbusiness)
Request body¶
multipart/form-data (interceptor FileInterceptor('file')) :
iban— IBAN valide (ibanValidator)bic— BIC valide (bicValidator)file— fichier RIB (PDF/image), uploadé chez Lemonway en tant que documentproofOfBankInformationouotherDocumentsX
Validation du body via httpValidate(bankAccountCreationPayload).
Logique¶
PaymentMethodsService.createBankAccountForWithdrawal :
- Recherche d'un
PaymentMethodexistant (même IBAN, soft-deleted inclus)- Si trouvé → délègue à
manageExistingBankAccount(réactivation Lemonway et/ou interne, ou re-upload du RIB selon le statut Lemonway)
- Si trouvé → délègue à
- Sinon : upload du RIB chez Lemonway, création du compte Lemonway (
createMoneyOutIban), persistance d'un nouveauPaymentMethodavec statut Lemonway initial
Response¶
Le PaymentMethod créé (ou la valeur de retour du flow de réactivation).
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
2fa-code.invalid |
403 | Code 2FA absent ou incorrect |
paymentMethods.bank-account.bic-not-allowed |
400 | BIC dans la liste interdite |
paymentMethods.bank-account.holder-not-found |
400 | Profil incomplet (pas de holder calculable) |
paymentMethods.bank-account.iban-of-another-customer |
400 | IBAN déjà rattaché à un autre customer |
paymentMethods.bank-account.no-action-available-for-existing-account |
400 | Compte existant déjà actif côté Lemonway, aucune action possible |
paymentMethods.too-many-ibans |
400 | Plus de slots de documents disponibles (≥7 IBAN existants) |
paymentMethods.document.<reason> |
400 | Erreur business retournée par l'upload Lemonway |
| (aucun) | 500 | Échec de création du compte bancaire chez Lemonway, ou échec d'upload de document non-business |
DELETE /payment-methods/:paymentMethodId¶
Désactive (soft-delete) un compte bancaire de l'investisseur.
Path param¶
paymentMethodId— UUID
Pré-conditions¶
- JWT investisseur valide
- Rôle
CUSTOMER - Le
PaymentMethoddoit appartenir à l'investisseur courant (filtrecustomerId) - Aucun retrait en attente (
WalletTransactionsStatuses.WAITING+kind = WITHDRAWAL) ne doit pointer vers cepaymentMethodId
Response¶
Type StatusReturnDto.
Erreurs¶
| Code | Statut | Cause |
|---|---|---|
| (aucun) | 404 | PaymentMethod introuvable ou n'appartenant pas à l'investisseur |
paymentMethods.bank-account.has-waiting-withdraws |
400 | Un retrait en attente utilise ce compte |
Liens¶
- Service :
payment-methods.service.ts - DTO :
payment-method.dto.ts - Types :
payment-methods.types.ts - Guard 2FA :
check-2fa-code.guard.ts - Interceptor 2FA :
2fa.interceptor.ts