Skip to content

Commit f4b2534

Browse files
committed
Table to store the responses internally
1 parent 2c38a19 commit f4b2534

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/read-models/shared-state/state.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,34 @@ const createTrainingQuizTable = sql`
165165
)
166166
`;
167167

168+
export const troubleTicketResponsesTable = sqliteTable(
169+
'troubleTicketResponses',
170+
{
171+
responseSubmitted: integer('responseSubmitted', {
172+
mode: 'timestamp',
173+
}).notNull(),
174+
emailAddress: text('emailAddress'),
175+
whichEquipment: text('whichEquipment'), // FIXME - This should be the equipment_id if found
176+
submitterName: text('submitterName'),
177+
submitterMembershipNumber: integer('submitterMembershipNumber'),
178+
submittedResponse: text('submittedResponse', {mode: 'json'}),
179+
}
180+
);
181+
182+
// Using response_submitted, email_address, which_equipment as the unique key is temporary
183+
// for POC. In future we should probably use the row index or something from the trouble tickets sheet.
184+
const createTroubleTicketResponsesTable = sql`
185+
CREATE TABLE IF NOT EXISTS troubleTicketResponses (
186+
responseSubmitted INTEGER,
187+
emailAddress TEXT,
188+
whichEquipment TEXT,
189+
submitterName TEXT,
190+
submitterMembershipNumber INTEGER,
191+
submittedResponse TEXT,
192+
UNIQUE(responseSubmitted, emailAddress, whichEquipment)
193+
)
194+
`;
195+
168196
export const createTables = [
169197
createMembersTable,
170198
createEquipmentTable,
@@ -173,6 +201,7 @@ export const createTables = [
173201
createAreasTable,
174202
createOwnersTable,
175203
createTrainingQuizTable,
204+
createTroubleTicketResponsesTable,
176205
];
177206

178207
type Member = {

src/read-models/shared-state/update-state.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
trainedMemberstable,
1111
trainersTable,
1212
trainingQuizTable,
13+
troubleTicketResponsesTable,
1314
} from './state';
1415
import {BetterSQLite3Database} from 'drizzle-orm/better-sqlite3';
1516
import {and, eq, inArray} from 'drizzle-orm';
@@ -266,6 +267,25 @@ export const updateState =
266267
)
267268
.run();
268269
break;
270+
case 'TroubleTicketResponseSubmitted':
271+
db.insert(troubleTicketResponsesTable)
272+
.values({
273+
responseSubmitted: event.response_submitted,
274+
emailAddress: event.email_address,
275+
whichEquipment: event.which_equipment,
276+
submitterName: event.submitter_name,
277+
submitterMembershipNumber: event.submitter_membership_number,
278+
submittedResponse: event.submitted_response,
279+
})
280+
.onConflictDoNothing({
281+
target: [
282+
troubleTicketResponsesTable.responseSubmitted,
283+
troubleTicketResponsesTable.emailAddress,
284+
troubleTicketResponsesTable.whichEquipment,
285+
],
286+
})
287+
.run();
288+
break;
269289
default:
270290
break;
271291
}

0 commit comments

Comments
 (0)