Skip to content

Commit d1d92b3

Browse files
committed
Migrate payload related fields to jsonb field type
1 parent 707430c commit d1d92b3

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

packages/nextjs/services/database/config/schema.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { relations } from "drizzle-orm";
2-
import { boolean, pgEnum, pgTable, serial, text, timestamp, varchar } from "drizzle-orm/pg-core";
2+
import { boolean, jsonb, pgEnum, pgTable, serial, text, timestamp, varchar } from "drizzle-orm/pg-core";
33

44
export const reviewActionEnum = pgEnum("review_action_enum", ["REJECTED", "ACCEPTED", "SUBMITTED"]);
55
export const eventTypeEnum = pgEnum("event_type_enum", ["challenge.submit", "challenge.autograde", "user.create"]);
@@ -45,11 +45,9 @@ export const events = pgTable("events", {
4545
userAddress: varchar("user_address", { length: 42 })
4646
.notNull()
4747
.references(() => users.userAddress),
48-
challengeId: varchar("challenge_id", { length: 255 }).references(() => challenges.id),
49-
frontendUrl: varchar("frontend_url", { length: 255 }),
50-
contractUrl: varchar("contract_url", { length: 255 }),
51-
reviewAction: reviewActionEnum("review_action"),
52-
reviewMessage: text("review_message"),
48+
payload: jsonb("payload")
49+
.notNull()
50+
.$defaultFn(() => ({})), // Flexible event payload stored as JSONB
5351
});
5452

5553
export const usersRelations = relations(users, ({ many }) => ({
@@ -78,8 +76,4 @@ export const eventsRelations = relations(events, ({ one }) => ({
7876
fields: [events.userAddress],
7977
references: [users.userAddress],
8078
}),
81-
challenge: one(challenges, {
82-
fields: [events.challengeId],
83-
references: [challenges.id],
84-
}),
8579
}));

packages/nextjs/services/database/seed.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,17 @@ interface EventPayload {
3737
challengeId?: string;
3838
contractUrl?: string;
3939
frontendUrl?: string;
40-
userAddress: string;
4140
autograding?: boolean;
4241
reviewAction?: "ACCEPTED" | "REJECTED";
4342
reviewMessage?: string;
43+
[key: string]: any; // Allow for additional fields in the payload
4444
}
4545

4646
interface Event {
47-
payload: EventPayload;
47+
payload: {
48+
userAddress: string; // This is in the original Firebase data
49+
[key: string]: any;
50+
};
4851
signature: string;
4952
timestamp: number;
5053
type: "challenge.submit" | "challenge.autograde" | "user.create";
@@ -208,18 +211,22 @@ async function seed() {
208211
// Insert events
209212
console.log("Inserting events...");
210213
for (const event of typedSeedData.events) {
214+
// Create a new payload without userAddress
215+
const { userAddress, ...payloadWithoutUser } = event.payload;
216+
const eventPayload = {
217+
...payloadWithoutUser,
218+
// Convert reviewAction to proper enum value if present
219+
reviewAction: event.payload.reviewAction as "ACCEPTED" | "REJECTED" | undefined,
220+
};
221+
211222
await db
212223
.insert(events)
213224
.values({
214225
eventType: event.type,
215226
eventAt: createValidDate(event.timestamp),
216227
signature: event.signature,
217-
userAddress: event.payload.userAddress,
218-
challengeId: event.payload.challengeId,
219-
frontendUrl: event.payload.frontendUrl,
220-
contractUrl: event.payload.contractUrl,
221-
reviewAction: event.payload.reviewAction,
222-
reviewMessage: event.payload.reviewMessage,
228+
userAddress: userAddress, // Use the extracted userAddress
229+
payload: eventPayload,
223230
})
224231
.execute();
225232
}

0 commit comments

Comments
 (0)