proca
Version:
132 lines (115 loc) • 3.53 kB
JavaScript
import { Flags } from "@oclif/core";
import Command from "#src/procaCommand.mjs";
import { FragmentMtt } from "#src/queries/campaign.mjs";
import { gql, mutation } from "#src/urql.mjs";
export default class CampaignMtt extends Command {
static args = this.multiid();
static description = "set the mail to target (mtt) params";
static examples = [
"<%= config.bin %> <%= command.id %> -n <test-mtt-campaign>",
];
static flags = {
...this.flagify({ multiid: true }),
from: Flags.string({
description: "start date (yyyy-mm-dd)",
required: false,
}),
to: Flags.string({
description: "end date (yyyy-mm-dd)",
required: false,
}),
template: Flags.string({
description: "mtt template to use",
}),
period: Flags.string({
description: "period of the day (HH:HH-HH:HH)",
default: "09:09-18:18",
}),
email: Flags.string({
description: "test email address",
}),
cc: Flags.string({
description: "comma-separated list of CC email addresses",
}),
sender: Flags.boolean({
description: "add sender to CC",
default: false,
}),
drip: Flags.boolean({
description: "drip delivery or deliver as fast as possible",
default: false,
}),
};
updateMtt = async (flags) => {
const Query = gql`
mutation (
$id: Int,
$name: String
$mtt: CampaignMttInput!
) {
updateCampaign (id:$id, name: $name, input: { mtt: $mtt }) {
id, name
...Mtt
}
${FragmentMtt}
}
`;
const testEmail = flags.email || `campaign+${flags.name}@proca.app`;
const [startPeriod, endPeriod] = flags.period.split("-");
const [startHour, startMinute] = startPeriod.split(":");
const [endHour, endMinute] = endPeriod.split(":");
const mtt = {
testEmail,
};
if (flags.template) mtt.messageTemplate = flags.template;
if (flags.email) mtt.testEmail = testEmail;
if (flags.cc) mtt.ccContacts = flags.cc.split(",").map((e) => e.trim());
if (flags.sender) mtt.ccSender = flags.sender;
if (flags.from) {
const startAt = new Date(flags.from);
startAt.setHours(startHour, startMinute, 0, 0);
mtt.startAt = startAt.toISOString();
}
if (flags.to) {
const endAt = new Date(flags.to);
endAt.setHours(endHour, endMinute, 0, 0);
mtt.endAt = endAt.toISOString();
}
const result = await mutation(Query, {
id: flags.id,
name: flags.name,
mtt,
});
return result.updateCampaign;
};
simplify = (d) => {
const result = { id: d.id, Name: d.name };
const hhmm = (date) =>
new Date(date).toLocaleTimeString(undefined, {
hour: "2-digit",
minute: "2-digit",
hour12: false,
});
if (d.mtt.startAt && d.mtt.endAt) {
result.from = d.mtt.startAt.substring(0, 10);
result.to = d.mtt.endAt.substring(0, 10);
result.period = `${hhmm(d.mtt.startAt)}↔${hhmm(d.mtt.endAt)}`;
}
result["test email"] = d.mtt.testEmail;
result["mtt template"] = d.mtt.messageTemplate;
if (d.mtt.ccContacts?.length)
result["cc contacts"] = d.mtt.ccContacts.join(", ");
if (typeof d.mtt.ccSender !== "undefined") {
result["cc sender"] = d.mtt.ccSender ? "yes" : "no";
}
return result;
};
table = (r) => {
super.table(r, null, null);
};
async run() {
const { args, flags } = await this.parse();
const result = await this.updateMtt(flags);
this.output(result);
}
}