Skip to content

Commit

Permalink
Pluggable services; > comms. dispatch as service.
Browse files Browse the repository at this point in the history
  • Loading branch information
pwalsh committed Dec 28, 2021
1 parent 1d44ce2 commit 7f8a41b
Show file tree
Hide file tree
Showing 12 changed files with 315 additions and 271 deletions.
18 changes: 9 additions & 9 deletions src/core/communications/event-handlers.ts
@@ -1,33 +1,33 @@
import type { ICommunicationRepository, JurisdictionAttributes, ServiceRequestAttributes } from '../../types';
import type { ICommunicationService, JurisdictionAttributes, ServiceRequestAttributes } from '../../types';

export async function serviceRequestCreateHandler(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes,
CommunicationRepository: ICommunicationRepository
dispatchHandler: ICommunicationService
): Promise<void> {
await CommunicationRepository.dispatchServiceRequestCreate(jurisdiction, serviceRequest);
await dispatchHandler.dispatchServiceRequestCreate(jurisdiction, serviceRequest);
}

export async function serviceRequestChangeStatusHandler(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes,
CommunicationRepository: ICommunicationRepository
dispatchHandler: ICommunicationService
): Promise<void> {
await CommunicationRepository.dispatchServiceRequestChangeStatus(jurisdiction, serviceRequest);
await dispatchHandler.dispatchServiceRequestChangeStatus(jurisdiction, serviceRequest);
}

export async function serviceRequestChangeAssignedToHandler(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes,
CommunicationRepository: ICommunicationRepository
dispatchHandler: ICommunicationService
): Promise<void> {
await CommunicationRepository.dispatchServiceRequestChangeAssignee(jurisdiction, serviceRequest);
await dispatchHandler.dispatchServiceRequestChangeAssignee(jurisdiction, serviceRequest);
}

export async function serviceRequestClosedHandler(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes,
CommunicationRepository: ICommunicationRepository
dispatchHandler: ICommunicationService
): Promise<void> {
await CommunicationRepository.dispatchServiceRequestClosed(jurisdiction, serviceRequest);
await dispatchHandler.dispatchServiceRequestClosed(jurisdiction, serviceRequest);
}
202 changes: 1 addition & 201 deletions src/core/communications/repositories.ts
@@ -1,12 +1,9 @@
import { inject, injectable } from 'inversify';
import _ from 'lodash';
import { appIds } from '../../registry/service-identifiers';
import type {
AppSettings, CommunicationAttributes, CommunicationCreateAttributes, CommunicationInstance,
ICommunicationRepository,
JurisdictionAttributes, Models, ServiceRequestAttributes
ICommunicationRepository, Models
} from '../../types';
import { dispatchMessageForPublicUser, dispatchMessageForStaffUser } from './helpers';

@injectable()
export class CommunicationRepository implements ICommunicationRepository {
Expand Down Expand Up @@ -34,201 +31,4 @@ export class CommunicationRepository implements ICommunicationRepository {
return [records as CommunicationInstance[], records.length];
}

async dispatchServiceRequestCreate(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes
): Promise<CommunicationAttributes[]> {
/* eslint-disable */
//@ts-ignore
const { StaffUser, Communication } = this.repositories;
// @ts-ignore
const { sendGridApiKey,
sendGridFromEmail,
appName,
appClientUrl,
appClientRequestsPath,
twilioAccountSid,
twilioAuthToken,
//@ts-ignore
twilioFromPhone } = this.settings;
/* eslint-enable */

const records: CommunicationAttributes[] = [];

const dispatchConfig = {
channel: serviceRequest.communicationChannel as string,
sendGridApiKey: sendGridApiKey as string,
toEmail: serviceRequest.email as string,
fromEmail: sendGridFromEmail as string,
twilioAccountSid: twilioAccountSid as string,
twilioAuthToken: twilioAuthToken as string,
fromPhone: twilioFromPhone as string,
toPhone: serviceRequest.phone as string
}
const templateConfig = {
name: 'service-request-new-public-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: serviceRequest.displayName as string
}
}
const record = await dispatchMessageForPublicUser(
serviceRequest, dispatchConfig, templateConfig, Communication
);
records.push(record);
/* eslint-disable */
const [staffUsers, staffUsersCount] = await StaffUser.findAll(serviceRequest.jurisdictionId);
/* eslint-enable */
const admins = _.filter(staffUsers, { isAdmin: true });
for (const admin of admins) {
const dispatchConfig = {
channel: 'email',
apiKey: sendGridApiKey as string,
toEmail: admin.email as string,
fromEmail: sendGridFromEmail as string,
}
const templateConfig = {
name: 'service-request-new-staff-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: admin.displayName as string
}
}
const record = await dispatchMessageForStaffUser(dispatchConfig, templateConfig, Communication);
records.push(record);
}
return records;
}

async dispatchServiceRequestChangeStatus(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes
): Promise<CommunicationAttributes> {
/* eslint-disable */
//@ts-ignore
const { StaffUser, Communication } = this.repositories;
// @ts-ignore
/* eslint-enable */
/* eslint-disable */
//@ts-ignore
const { sendGridApiKey, sendGridFromEmail, appName, appClientUrl, appClientRequestsPath } = this.settings;
/* eslint-enable */
const staffUser = await StaffUser.findOne(serviceRequest.jurisdictionId, serviceRequest.assignedTo);
const dispatchConfig = {
channel: 'email',
apiKey: sendGridApiKey as string,
toEmail: staffUser.email as string,
fromEmail: sendGridFromEmail as string,
}
const templateConfig = {
name: 'service-request-changed-status-staff-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: staffUser.displayName as string
}
}
const record = await dispatchMessageForStaffUser(dispatchConfig, templateConfig, Communication);
return record;
}

async dispatchServiceRequestChangeAssignee(
jurisdiction: JurisdictionAttributes,
serviceRequest: ServiceRequestAttributes
): Promise<CommunicationAttributes> {
/* eslint-disable */
//@ts-ignore
const { StaffUser, Communication } = this.repositories;
// @ts-ignore
/* eslint-enable */
/* eslint-disable */
//@ts-ignore
const { sendGridApiKey, sendGridFromEmail, appName, appClientUrl, appClientRequestsPath } = this.settings;
const staffUser = await StaffUser.findOne(serviceRequest.jurisdictionId, serviceRequest.assignedTo);
const dispatchConfig = {
channel: 'email',
apiKey: sendGridApiKey as string,
toEmail: staffUser.email as string,
fromEmail: sendGridFromEmail as string,
}
const templateConfig = {
name: 'service-request-changed-assignee-staff-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: staffUser.displayName as string
}
}
const record = await dispatchMessageForStaffUser(dispatchConfig, templateConfig, Communication);
return record;
}

async dispatchServiceRequestClosed(jurisdiction: JurisdictionAttributes, serviceRequest: ServiceRequestAttributes): Promise<CommunicationAttributes[]> {
/* eslint-disable */
//@ts-ignore
const { StaffUser, Communication } = this.repositories;
// @ts-ignore
// @ts-ignore
const { sendGridApiKey, sendGridFromEmail, appName, appClientUrl, appClientRequestsPath } = this.settings;
/* eslint-enable */
const records: CommunicationAttributes[] = [];

const dispatchConfig = {
channel: serviceRequest.communicationChannel as string,
apiKey: sendGridApiKey as string,
toEmail: serviceRequest.email as string,
fromEmail: sendGridFromEmail as string,
}
const templateConfig = {
name: 'service-request-closed-public-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: serviceRequest.displayName as string
}
}
const record = await dispatchMessageForPublicUser(
serviceRequest, dispatchConfig, templateConfig, Communication
);
records.push(record);
/* eslint-disable */
const [staffUsers, staffUsersCount] = await StaffUser.findAll(
/* eslint-enable */
serviceRequest.jurisdictionId
);
const admins = _.filter(staffUsers, { isAdmin: true });
for (const admin of admins) {
const dispatchConfig = {
channel: 'email',
apiKey: sendGridApiKey as string,
toEmail: admin.email as string,
fromEmail: sendGridFromEmail as string,
}
const templateConfig = {
name: 'service-request-closed-staff-user',
context: {
appName,
appRequestUrl: `${appClientUrl}${appClientRequestsPath}/${serviceRequest.id}`,
serviceRequestStatus: serviceRequest.status,
jurisdictionName: jurisdiction.id,
recipientName: admin.displayName as string
}
}
const record = await dispatchMessageForStaffUser(dispatchConfig, templateConfig, Communication);
records.push(record);
}
return records;
}
}

0 comments on commit 7f8a41b

Please sign in to comment.