Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions src/payment/models/buy-crypto/entities/buy-crypto.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,9 +196,18 @@ export class BuyCrypto extends IEntity {
}

get translationKey(): string {
return this.inputReferenceAsset === this.outputReferenceAsset
? 'mail.payment.deposit.buyCryptoCrypto'
: 'mail.payment.deposit.buyCryptoFiat';
if (this.amlCheck === AmlCheck.PASS) {
return this.inputReferenceAsset === this.outputReferenceAsset
? 'mail.payment.deposit.buyCryptoCrypto'
: 'mail.payment.deposit.buyCryptoFiat';
} else if (this.amlCheck === AmlCheck.PENDING) {
if (this.amlReason === AmlReason.DAILY_LIMIT) return 'mail.payment.pending.dailyLimit';
if (this.amlReason === AmlReason.ANNUAL_LIMIT) return 'mail.payment.pending.annualLimit';
} else if (this.amlCheck === AmlCheck.FAIL) {
return 'mail.payment.deposit.paybackInitiated';
}

throw new Error(`Tried to send a mail for BuyCrypto ${this.id} in invalid state`);
}

get user(): User {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { Injectable } from '@nestjs/common';
import { MailService } from 'src/shared/services/mail.service';
import { IsNull, Not } from 'typeorm';
import { In, IsNull, Not } from 'typeorm';
import { BuyCryptoRepository } from '../repositories/buy-crypto.repository';
import { BuyCryptoBatchStatus } from '../entities/buy-crypto-batch.entity';
import { Util } from 'src/shared/util';
import { Blockchain, BlockchainExplorerUrls } from 'src/blockchain/shared/enums/blockchain.enum';
import { AmlCheck } from '../enums/aml-check.enum';
import { I18nService } from 'nestjs-i18n';
import { AmlReason } from '../enums/aml-reason.enum';

@Injectable()
export class BuyCryptoNotificationService {
Expand All @@ -19,13 +20,13 @@ export class BuyCryptoNotificationService {
async sendNotificationMails(): Promise<void> {
await this.buyCryptoConfirmed();
await this.paybackToAddressInitiated();
await this.pendingBuyCrypto();
}

async buyCryptoConfirmed(): Promise<void> {
try {
const txOutput = await this.buyCryptoRepo.find({
where: {
recipientMail: IsNull(),
mailSendDate: IsNull(),
txId: Not(IsNull()),
isComplete: true,
Expand Down Expand Up @@ -113,7 +114,7 @@ export class BuyCryptoNotificationService {
if (entity.user.userData.mail) {
await this.mailService.sendTranslatedMail({
userData: entity.user.userData,
translationKey: 'mail.payment.deposit.paybackInitiated',
translationKey: entity.translationKey,
params: {
inputAmount: entity.inputAmount,
inputAsset: entity.inputAsset,
Expand All @@ -132,4 +133,46 @@ export class BuyCryptoNotificationService {
}
}
}

async pendingBuyCrypto(): Promise<void> {
const entities = await this.buyCryptoRepo.find({
where: {
mailSendDate: IsNull(),
outputAmount: IsNull(),
chargebackDate: IsNull(),
chargebackBankTx: IsNull(),
amlReason: In([AmlReason.DAILY_LIMIT, AmlReason.ANNUAL_LIMIT]),
amlCheck: AmlCheck.PENDING,
},
relations: [
'buy',
'buy.user',
'buy.user.userData',
'cryptoInput',
'cryptoRoute',
'cryptoRoute.user',
'cryptoRoute.user.userData',
],
});

entities.length > 0 && console.log(`Sending ${entities.length} 'pending' email(s)`);

for (const entity of entities) {
try {
if (entity.user.userData.mail) {
await this.mailService.sendTranslatedMail({
userData: entity.user.userData,
translationKey: entity.translationKey,
params: {
hashLink: `https://payment.dfx.swiss/kyc?code=${entity.user.userData.kycHash}`,
},
});
}

await this.buyCryptoRepo.update(...entity.confirmSentMail());
} catch (e) {
console.error(e);
}
}
}
}
12 changes: 12 additions & 0 deletions src/shared/i18n/de/mail.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@
}
},
"payment": {
"pending": {
"dailyLimit": {
"salutation": "Du hast dein tägliches Volumenlimit überschritten",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Bitte verifiziere dich, um dein Limit zu erhöhen.</td></tr><tr><td colspan=\"3\" align=\"center\">Nach der vollständigen Verifizierung wird deine Transaktion weiter bearbeitet.</td></tr><tr><td colspan=\"3\" align=\"center\">Limit erhöhen mit Verizfierung?</td></tr><tr><td colspan=\"3\" align=\"center\">Klicke bitte <a style=\"color:white\" href=\"{hashLink}\">hier</a> um dich zu verifizieren.</td></tr><tr><td colspan=\"3\" align=\"center\">Alternativ kannst du auch über die DFX App auf deiner Paymentseite <br> bei \"Dein Limit\" auf den roten Pfeil klicken <br> und die Verifizierung starten.</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Herzlichen Dank für dein entgegengebrachtes Vertrauen</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Dein freundliches DFX Team</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Tägliches Limit überschritten"
},
"annualLimit": {
"salutation": "Du hast dein jährliches Volumenlimit überschritten",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Bitte beantrage daher ein neues Jahreslimit</td></tr><tr><td colspan=\"3\" align=\"center\">Sobald das neue Limit genehmigt wurde, <br> wird deine Transaktion weiter bearbeitet.</td></tr><tr><td colspan=\"3\" align=\"center\">Limit erhöhen?</td></tr><tr><td colspan=\"3\" align=\"center\">In der DFX App per \"Staking\" die Paymentseite aufrufen.</td></tr><tr><td colspan=\"3\" align=\"center\">Bei \"Dein Limit\" auf den roten Pfeil gehen und <br> ein neues gewünschtes Limit beantragen.</td></tr><tr><td colspan=\"3\" align=\"center\">Fragen? - Kontaktiere bitte support@dfx.swiss</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Herzlichen Dank für dein entgegengebrachtes Vertrauen</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Dein freundliches DFX Team</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Jährliches Limit überschritten"
}
},
"deposit": {
"buyCryptoFiat": {
"salutation": "Deine Einzahlung wurde erfolgreich bearbeitet",
Expand Down
12 changes: 12 additions & 0 deletions src/shared/i18n/en/mail.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@
}
},
"payment": {
"pending": {
"dailyLimit": {
"salutation": "You have exceeded your daily volume limit",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Please verify yourself by KYC (know your customer) to increase your limit.</td></tr><tr><td colspan=\"3\" align=\"center\">After a successful KYC we proceed with your transaction. </td></tr><tr><td colspan=\"3\" align=\"center\">Increase the limit by KYC?</td></tr><tr><td colspan=\"3\" align=\"center\">Click <a style=\"color:white\" href=\"{hashLink}\">here</a> to start the KYC process.</td></tr><tr><td colspan=\"3\" align=\"center\">Alternatively, you can also use the DFX app on your payment page,<br> click on the red arrow next to \"Your limit\"<br> and start the verification.</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Thank you very much for your trust</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Your DFX Team</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Daily limit exceeded"
},
"annualLimit": {
"salutation": "You have exceeded your yearly volume limit",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Please apply for a new annual limit.</td></tr><tr><td colspan=\"3\" align=\"center\">Once the new limit has been approved,<br> we proceed with your transaction.</td></tr><tr><td colspan=\"3\" align=\"center\">Increase the limit?</td></tr><tr><td colspan=\"3\" align=\"center\">Open the payment page via \"Staking\" in the DFX App.</td></tr><tr><td colspan=\"3\" align=\"center\">Go to the red arrow under \"Your limit\" and<br> request a new desired limit.</td></tr><tr><td colspan=\"3\" align=\"center\">Questions? - Please contact support@dfx.swiss</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Thank you very much for your trust</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Your DFX Team</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Annual limit exceeded"
}
},
"deposit": {
"buyCryptoFiat": {
"salutation": "Your deposit has been successfully processed",
Expand Down
12 changes: 12 additions & 0 deletions src/shared/i18n/es/mail.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@
}
},
"payment": {
"pending": {
"dailyLimit": {
"salutation": "Has excedido el límite de volumen diario",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Por favor, verificate a través de KYC (conoce a tu cliente) para incrementar tu límite.</td></tr><tr><td colspan=\"3\" align=\"center\">Después de que pases el KYC empezaremos con tu transacción.</td></tr><tr><td colspan=\"3\" align=\"center\">¿Quieres incrementar el límite a través del KYC?</td></tr><tr><td colspan=\"3\" align=\"center\">Aprieta <a style=\"color:white\" href=\"{hashLink}\">aquí</a> para empezar el proceso KYC.</td></tr><tr><td colspan=\"3\" align=\"center\">Alternativamente, puedes usar la app DFX en la página de pago,<br> apretar la flecha roja al lado de \"Tu límite\"<br> y empieza la verificación.</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Muchas gracias por tu confianza</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Tu Equipo DFX</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Límite diario excedido"
},
"annualLimit": {
"salutation": "Has excedido tu límite de volumen anual",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Por favor, registra tu interés para un límite anual nuevo.</td></tr><tr><td colspan=\"3\" align=\"center\">Una vez el nuevo límite anual de haya aprobado,<br> empezaremos con tu transacción.</td></tr><tr><td colspan=\"3\" align=\"center\">¿Quieres incrementar el límite?</td></tr><tr><td colspan=\"3\" align=\"center\">Abre la aplicación DFX a través de la página de pago en \"Staking\".</td></tr><tr><td colspan=\"3\" align=\"center\">Ves a la flecha roja debajo de \"Tu límite\" y<br> pide un límite nuevo.</td></tr><tr><td colspan=\"3\" align=\"center\">¿Alguna pregunta? Por favor ponte en contacto con support@dfx.swiss</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Muchas gracias por tu confianza</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Tu Equipo DFX</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Has excedido el límite anual"
}
},
"deposit": {
"buyCryptoFiat": {
"salutation": "Tu deposito se ha procesado satisfactoriamente",
Expand Down
12 changes: 12 additions & 0 deletions src/shared/i18n/fr/mail.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@
}
},
"payment": {
"pending": {
"dailyLimit": {
"salutation": "Vous avez dépassé votre volume journalier",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Veuillez vous faire vérifier par le KYC (know your customer) pour augmenter votre limite.</td></tr><tr><td colspan=\"3\" align=\"center\">Nous traiterons votre transaction après la réussite du KYC.</td></tr><tr><td colspan=\"3\" align=\"center\">Augmenter la limite par un KYC ?</td></tr><tr><td colspan=\"3\" align=\"center\">Cliquer <a style=\"color:white\" href=\"{hashLink}\">here</a> pour commencer la procédure de KYC.</td></tr><tr><td colspan=\"3\" align=\"center\">Autrement, vous pouvez aussi utiliser l'appli DFX sur votre page de paiement,<br> cliquer sur la flèche rouge en face de \"Votre limite\"<br> et commencer la vérification.</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Merci beaucoup pour votre confiance</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Votre équipe DFX</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Limite journalière dépassée"
},
"annualLimit": {
"salutation": "Vous avez dépassé votre volume annuel",
"body": "<table style=\"font-family:Open Sans,Helvetica,Arial,sans-serif;width:60%;padding:8px;font-size:85%\" align=\"center\"><tr><td colspan=\"3\" align=\"center\">Veuillez demander une nouvelle limite annuelle.</td></tr><tr><td colspan=\"3\" align=\"center\">Nous traiterons votre transaction après<br> l'augmentation de votre limite.</td></tr><tr><td colspan=\"3\" align=\"center\">Augmenter la limite ?</td></tr><tr><td colspan=\"3\" align=\"center\">Ouvrez la page de paiement via le bouton \"Staking\" dans l'appli DFX.</td></tr><tr><td colspan=\"3\" align=\"center\">Rendez-vous sur la flèche rouge sous \"Votre limite\" et<br> demandez une nouvelle limite.</td></tr><tr><td colspan=\"3\" align=\"center\">Des questions ? Veuillez contacter support@dfx.swiss</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Merci beaucoup pour votre confiance</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"font-family:Open Sans,Helvetica,Arial,sans-serif\"><td colspan=\"3\" align=\"center\">Votre équipe DFX</td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr style=\"padding:1px\"><td colspan=\"3\"> </td></tr><tr><td colspan=\"3\" align=\"center\"><span style=\"font-family:Zapfino\">Bitcoiners by heart ♥️</span></td></tr></table>",
"title": "Limite annuelle dépassée"
}
},
"deposit": {
"buyCryptoFiat": {
"salutation": "Votre dépôt a été effectué avec succès",
Expand Down
Loading