diff --git a/src/commands/poll.ts b/src/commands/poll.ts index 1a994450..35f0db08 100644 --- a/src/commands/poll.ts +++ b/src/commands/poll.ts @@ -258,7 +258,7 @@ export const run: CommandFunction = async (_client, message, args, context) => { await additionalMessageData.upsertForMessage( pollMessage, "DELAYED_POLL", - delayedPollData, + JSON.stringify(delayedPollData), ); delayedPolls.push(delayedPollData); } diff --git a/src/storage/additionalMessageData.ts b/src/storage/additionalMessageData.ts index 69449e8d..fd5142ee 100644 --- a/src/storage/additionalMessageData.ts +++ b/src/storage/additionalMessageData.ts @@ -1,8 +1,6 @@ import type { Message, Snowflake } from "discord.js"; -import { sql } from "kysely"; import type { AdditionalMessageData, DataUsage } from "./model.js"; -import type { JsonObject } from "../types.js"; import db from "./db.js"; export async function getForMessage( @@ -15,22 +13,19 @@ export async function getForMessage( "Cannot associate data with message outside of a guild", ); } - const res = await ctx + + return await ctx .selectFrom("additionalMessageData") .where("messageId", "=", message.id) .where("usage", "=", usage) .selectAll() .executeTakeFirst(); - - return res === undefined - ? undefined - : { ...res, customData: JSON.parse(res.payload) as JsonObject }; } export async function upsertForMessage( message: Message, usage: DataUsage, - payload: JsonObject, + payload: string, ctx = db(), ) { if (!message.guild) { @@ -46,11 +41,11 @@ export async function upsertForMessage( channelId: message.channelId, messageId: message.id, usage, - payload: JSON.stringify(payload), + payload, }) .onConflict(oc => oc.columns(["guildId", "channelId", "messageId"]).doUpdateSet({ - payload: JSON.stringify(payload), + payload, }), ) .execute(); diff --git a/src/storage/migrations/01-message-data-tag.ts b/src/storage/migrations/01-message-data-tag.ts index 14350e2f..0ebaf2d4 100644 --- a/src/storage/migrations/01-message-data-tag.ts +++ b/src/storage/migrations/01-message-data-tag.ts @@ -10,7 +10,7 @@ export async function up(db: Kysely): Promise { .addColumn("channelId", "text", c => c.notNull()) .addColumn("messageId", "text", c => c.notNull()) .addColumn("usage", "integer", c => c.notNull()) - .addColumn("payload", "json", c => c.notNull()) + .addColumn("payload", "text", c => c.notNull()) .addColumn("createdAt", "timestamp", c => c.notNull().defaultTo(sql`CURRENT_TIMESTAMP`), ) diff --git a/src/storage/model.ts b/src/storage/model.ts index b5d9556f..6294e3a9 100644 --- a/src/storage/model.ts +++ b/src/storage/model.ts @@ -259,8 +259,9 @@ export interface AdditionalMessageDataTable { channelId: Snowflake; messageId: Snowflake; usage: DataUsage; - // TODO: JSON types are currently not supported by the DB driver - payload: ColumnType; // JsonObject; + + /** Just a string, so the specific use-case can decide on how to save the data. */ + payload: string; createdAt: ColumnType; updatedAt: ColumnType;