diff --git a/src/common/emails/EmailBuilder.ts b/src/common/emails/EmailBuilder.ts index ee3926b6..bb41d029 100644 --- a/src/common/emails/EmailBuilder.ts +++ b/src/common/emails/EmailBuilder.ts @@ -1,7 +1,7 @@ import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; import { Documents } from "@prisma/client"; -import { Document } from "le-coffre-resources/dist/SuperAdmin"; +import User, { Document } from "le-coffre-resources/dist/SuperAdmin"; import { Service } from "typedi"; import { ETemplates } from "./Templates/EmailTemplates"; import MailchimpService from "@Services/common/MailchimpService/MailchimpService"; @@ -48,14 +48,14 @@ export default class EmailBuilder { }); } - public async sendRecapEmails(usersToEmail: [{email: string, civility: string, last_name: string}]){ + public async sendRecapEmails(usersToEmail: User[]){ usersToEmail.forEach(user => { - const to = user.email; - const civility = this.getCivility(user.civility); + const to = user.contact!.email; + const civility = this.getCivility(user.contact!.civility); const templateVariables = { civility: civility, - last_name: user.last_name, + last_name: user.contact!.last_name, link: this.variables.APP_HOST }; diff --git a/src/services/common/MailchimpService/MailchimpService.ts b/src/services/common/MailchimpService/MailchimpService.ts index 1b9833be..8f9f5f5e 100644 --- a/src/services/common/MailchimpService/MailchimpService.ts +++ b/src/services/common/MailchimpService/MailchimpService.ts @@ -1,17 +1,22 @@ import EmailRepository from "@Repositories/EmailRepository"; import BaseService from "@Services/BaseService"; -import { Emails, PrismaClient } from "@prisma/client"; +import { Emails } from "@prisma/client"; import { Service } from "typedi"; import MailchimpClient from "@mailchimp/mailchimp_transactional"; import { BackendVariables } from "@Common/config/variables/Variables"; +import UsersService from "@Services/super-admin/UsersService/UsersService"; import EmailBuilder from "@Common/emails/EmailBuilder"; -// import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; @Service() export default class MailchimpService extends BaseService { private static readonly from = "vincent.alamelle@smart-chain.fr"; - constructor(private emailRepository: EmailRepository, protected variables: BackendVariables, private emailBuilder: EmailBuilder) { + constructor( + private emailRepository: EmailRepository, + protected variables: BackendVariables, + private usersService: UsersService, + private emailBuilder: EmailBuilder, + ) { super(); } @@ -52,7 +57,7 @@ export default class MailchimpService extends BaseService { * @description : Function called by cron to send emails * @throws {Error} If email cannot be sent */ - public async sendEmails() { + public async sendEmails() { const emailsToSend = await this.get({ where: { sentAt: null } }); const currentDate = new Date(); let nextTrySendDate = null; @@ -85,8 +90,8 @@ export default class MailchimpService extends BaseService { } } - private async sendEmail(email: Emails) { - const apiKey = this.variables.MAILCHIMP_API_KEY; + private async sendEmail(email: Emails) { + const apiKey = this.variables.MAILCHIMP_API_KEY; const mailchimpApiClient = MailchimpClient(apiKey!); await mailchimpApiClient.messages.sendTemplate({ @@ -117,15 +122,8 @@ export default class MailchimpService extends BaseService { } public async sendRecapEmails() { - const prisma = new PrismaClient(); - const usersToEmail: [{email: string, civility: string, last_name: string}] = await prisma.$queryRaw - `SELECT DISTINCT c.email, c.civility, c.last_name - FROM Contacts c - JOIN Users u ON c.uid = u.contact_uid - JOIN office_folders of ON u.office_uid = of.office_uid - JOIN Documents d ON of.uid = d.folder_uid - WHERE d.document_status = 'DEPOSITED';` - + const usersToEmail = await this.usersService.get({ where: { office_folders: { some:{ documents: { some: { document_status: "DEPOSITED" } } }} }, distinct: ["uid"], include: { contact: true } }); + await this.emailBuilder.sendRecapEmails(usersToEmail); } }