Skip to content

Commit ad4865c

Browse files
committed
feat(next/api): [intelligent operation] dry run
1 parent 12eb67b commit ad4865c

File tree

1 file changed

+26
-21
lines changed
  • next/api/src/integration/intelligent-operation

1 file changed

+26
-21
lines changed

next/api/src/integration/intelligent-operation/index.ts

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,11 @@ async function createTicketLogs(tickets: Ticket[]) {
5252
const categoryPath = await firstTicket.loadCategoryPath();
5353
const category = _.last(categoryPath);
5454

55-
const fieldVariantMap: Record<string, TicketFieldVariant> = {};
55+
let fieldVariants: TicketFieldVariant[] = [];
5656
if (category && category.formId) {
5757
const form = await TicketForm.find(category.formId, { useMasterKey: true });
5858
if (form) {
59-
const fieldVariants = await form.getFieldVariants();
60-
for (const variant of fieldVariants) {
61-
fieldVariantMap[variant.fieldId] = variant;
62-
}
59+
fieldVariants = await form.getFieldVariants();
6360
}
6461
}
6562

@@ -78,8 +75,8 @@ async function createTicketLogs(tickets: Ticket[]) {
7875
};
7976

8077
const fieldValue = ticketFieldValueByTicketId[ticket.id];
81-
if (fieldValue) {
82-
await fillFields(log, fieldVariantMap, fieldValue);
78+
if (fieldVariants.length && fieldValue) {
79+
await fillFields(log, fieldVariants, fieldValue);
8380
}
8481

8582
await fillReplies(log, ticket);
@@ -117,18 +114,19 @@ function getHumanReadableFieldValue(
117114

118115
async function fillFields(
119116
log: TicketLog,
120-
fieldVariants: Record<string, TicketFieldVariant>,
117+
fieldVariants: TicketFieldVariant[],
121118
fieldValue: TicketFieldValue
122119
) {
123-
fieldValue.values.forEach((value) => {
124-
const variant = fieldVariants[value.field];
125-
if (variant && variant.field) {
126-
const humanReadableValue = getHumanReadableFieldValue(variant.field, variant, value);
120+
const fieldValueMap = _.keyBy(fieldValue.values, (v) => v.field);
121+
fieldVariants.forEach((variant) => {
122+
const fieldValue = fieldValueMap[variant.fieldId];
123+
if (fieldValue !== undefined && variant.field) {
124+
const humanReadableValue = getHumanReadableFieldValue(variant.field, variant, fieldValue);
127125
if (humanReadableValue !== undefined) {
128126
log.fields.push({
129-
id: value.field,
127+
id: fieldValue.field,
130128
title: variant.title,
131-
value: value.value,
129+
value: fieldValue.value,
132130
});
133131
}
134132
}
@@ -149,13 +147,13 @@ async function fillReplies(log: TicketLog, ticket: Ticket) {
149147
});
150148
}
151149

152-
let writeLogs: (logs: TicketLog[]) => Promise<any> = async () => {
150+
let writeLogs: (logs: TicketLog[], dryRun?: boolean) => Promise<any> = async () => {
153151
throw new Error('writeLogs is undefined');
154152
};
155153

156-
async function processTickets(tickets: Ticket[]) {
154+
async function processTickets(tickets: Ticket[], dryRun = false) {
157155
const logs = await createTicketLogs(tickets);
158-
await writeLogs(logs);
156+
await writeLogs(logs, dryRun);
159157
}
160158

161159
type JobData = {
@@ -164,11 +162,12 @@ type JobData = {
164162
endTime?: string;
165163
size?: number;
166164
delay?: number;
165+
dryRun?: boolean;
167166
};
168167

169168
async function processJob(job: Job<JobData>) {
170169
const {
171-
data: { startTime, endTime, size = 50, delay = 1000 },
170+
data: { startTime, endTime, size = 50, delay = 1000, dryRun },
172171
} = job;
173172

174173
const query = Ticket.queryBuilder();
@@ -186,11 +185,11 @@ async function processJob(job: Job<JobData>) {
186185
return;
187186
}
188187

189-
await processTickets(tickets);
188+
await processTickets(tickets, dryRun);
190189

191190
const firstTicket = tickets[0];
192191
const lastTicket = tickets[tickets.length - 1];
193-
console.log(`[Intelligent Operation] ${tickets.length} tickets synced, `, {
192+
console.log(`[Intelligent Operation] ${tickets.length} tickets synced,`, {
194193
startTime: firstTicket.createdAt,
195194
endTime: lastTicket.createdAt,
196195
});
@@ -230,7 +229,7 @@ export default async function (install: Function) {
230229
apiVersion: '2015-06-01',
231230
});
232231

233-
writeLogs = async (ticketLogs) => {
232+
writeLogs = async (ticketLogs, dryRun) => {
234233
const time = Math.floor(Date.now() / 1000);
235234
const logs = ticketLogs.map((ticketLog) => {
236235
const contents = Object.entries(ticketLog).map(([key, value]) => ({
@@ -246,6 +245,12 @@ export default async function (install: Function) {
246245
logGroup: { logs },
247246
};
248247

248+
if (dryRun) {
249+
console.log('[Intelligent Operation] Put logs param:');
250+
console.dir(param, { depth: 5 });
251+
return;
252+
}
253+
249254
return new Promise((resolve, reject) => {
250255
sls.putLogs(param, (err: any, data: any) => {
251256
if (err) {

0 commit comments

Comments
 (0)