I'm building a discord bot that's hooked up to Convex database but having issues
Having issues deploying the schema changes to Convex locally and in production. There's really aren't very helpful logs to see what's going on
1 Reply
Here is my schema for reference
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
focusEntries: defineTable({
guildId: v.string(),
messageId: v.string(),
userId: v.string(),
text: v.string(),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_messageId", ["messageId"])
.index("by_userId", ["guildId", "userId"])
.index("by_guildId", ["guildId"]),
taskEntries: defineTable({
guildId: v.string(),
contributor: v.string(),
joint: v.string(),
text: v.string(),
createdAt: v.number(),
})
.index("by_contributor", ["guildId", "contributor"])
.index("by_joint", ["guildId", "joint"])
.index("by_guildId", ["guildId"]),
weeklyPlanningGuilds: defineTable({
guildId: v.string(),
focusChannelId: v.string(),
teamRoleId: v.string(),
createdAt: v.number(),
updatedAt: v.number(),
}).index("by_guildId", ["guildId"]),
weeklyPlanningPacks: defineTable({
guildId: v.string(),
channelId: v.string(),
roleId: v.string(),
leadId: v.string(),
name: v.string(),
value: v.string(),
joints: v.array(v.string()),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_name", ["guildId", "name"]),
weeklyPlanningReviewThreads: defineTable({
guildId: v.string(),
userId: v.string(),
name: v.string(),
threadId: v.string(),
remove: v.optional(v.boolean()),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_userId", ["guildId", "userId"]),
apicultureConfigs: defineTable({
guildId: v.string(),
adminRoleId: v.string(),
artistRoleId: v.string(),
unclaimedReminderHours: v.number(),
dueSoonHours: v.number(),
adminNotificationChannelId: v.string(),
artistThreads: v.optional(v.array(v.object({
userId: v.string(),
threadId: v.string(),
name: v.optional(v.string()),
}))),
createdAt: v.number(),
updatedAt: v.number(),
}).index("by_guildId", ["guildId"]),
apicultureProjects: defineTable({
guildId: v.string(),
projectId: v.string(),
name: v.string(),
requestChannelId: v.string(),
isActive: v.boolean(),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_projectId", ["guildId", "projectId"]),
apicultureAssignments: defineTable({
assignmentId: v.optional(v.string()),
guildId: v.string(),
projectId: v.string(),
type: v.string(),
prompt: v.string(),
dimensions: v.string(),
outputFileType: v.string(),
dueDate: v.number(),
priorityRank: v.number(),
status: v.string(),
createdAt: v.number(),
createdBy: v.string(),
claimedBy: v.optional(v.string()),
claimedAt: v.optional(v.number()),
proofLink: v.optional(v.string()),
notes: v.optional(v.string()),
styleReference: v.optional(v.string()),
memeReference: v.optional(v.string()),
graphicCopy: v.optional(v.string()),
lastReminderAt: v.optional(v.number()),
threadId: v.optional(v.string()),
threadMessageId: v.optional(v.string()),
infoMessageId: v.optional(v.string()),
updatedAt: v.number(),
audit: v.optional(
v.array(
v.object({
at: v.number(),
action: v.string(),
actorId: v.string(),
notes: v.optional(v.string()),
})
)
),
})
.index("by_guildId", ["guildId"])
.index("by_guild_status", ["guildId", "status"])
.index("by_guild_due", ["guildId", "dueDate"]),
});
import { defineSchema, defineTable } from "convex/server";
import { v } from "convex/values";
export default defineSchema({
focusEntries: defineTable({
guildId: v.string(),
messageId: v.string(),
userId: v.string(),
text: v.string(),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_messageId", ["messageId"])
.index("by_userId", ["guildId", "userId"])
.index("by_guildId", ["guildId"]),
taskEntries: defineTable({
guildId: v.string(),
contributor: v.string(),
joint: v.string(),
text: v.string(),
createdAt: v.number(),
})
.index("by_contributor", ["guildId", "contributor"])
.index("by_joint", ["guildId", "joint"])
.index("by_guildId", ["guildId"]),
weeklyPlanningGuilds: defineTable({
guildId: v.string(),
focusChannelId: v.string(),
teamRoleId: v.string(),
createdAt: v.number(),
updatedAt: v.number(),
}).index("by_guildId", ["guildId"]),
weeklyPlanningPacks: defineTable({
guildId: v.string(),
channelId: v.string(),
roleId: v.string(),
leadId: v.string(),
name: v.string(),
value: v.string(),
joints: v.array(v.string()),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_name", ["guildId", "name"]),
weeklyPlanningReviewThreads: defineTable({
guildId: v.string(),
userId: v.string(),
name: v.string(),
threadId: v.string(),
remove: v.optional(v.boolean()),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_userId", ["guildId", "userId"]),
apicultureConfigs: defineTable({
guildId: v.string(),
adminRoleId: v.string(),
artistRoleId: v.string(),
unclaimedReminderHours: v.number(),
dueSoonHours: v.number(),
adminNotificationChannelId: v.string(),
artistThreads: v.optional(v.array(v.object({
userId: v.string(),
threadId: v.string(),
name: v.optional(v.string()),
}))),
createdAt: v.number(),
updatedAt: v.number(),
}).index("by_guildId", ["guildId"]),
apicultureProjects: defineTable({
guildId: v.string(),
projectId: v.string(),
name: v.string(),
requestChannelId: v.string(),
isActive: v.boolean(),
createdAt: v.number(),
updatedAt: v.number(),
})
.index("by_guildId", ["guildId"])
.index("by_guildId_projectId", ["guildId", "projectId"]),
apicultureAssignments: defineTable({
assignmentId: v.optional(v.string()),
guildId: v.string(),
projectId: v.string(),
type: v.string(),
prompt: v.string(),
dimensions: v.string(),
outputFileType: v.string(),
dueDate: v.number(),
priorityRank: v.number(),
status: v.string(),
createdAt: v.number(),
createdBy: v.string(),
claimedBy: v.optional(v.string()),
claimedAt: v.optional(v.number()),
proofLink: v.optional(v.string()),
notes: v.optional(v.string()),
styleReference: v.optional(v.string()),
memeReference: v.optional(v.string()),
graphicCopy: v.optional(v.string()),
lastReminderAt: v.optional(v.number()),
threadId: v.optional(v.string()),
threadMessageId: v.optional(v.string()),
infoMessageId: v.optional(v.string()),
updatedAt: v.number(),
audit: v.optional(
v.array(
v.object({
at: v.number(),
action: v.string(),
actorId: v.string(),
notes: v.optional(v.string()),
})
)
),
})
.index("by_guildId", ["guildId"])
.index("by_guild_status", ["guildId", "status"])
.index("by_guild_due", ["guildId", "dueDate"]),
});