46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { defineSchema, defineTable } from 'convex/server';
|
|
import { v } from 'convex/values';
|
|
export default defineSchema(
|
|
{
|
|
users: defineTable({
|
|
clerkUser: v.object({
|
|
id: v.string(),
|
|
object: v.string(),
|
|
username: v.union(v.string(), v.null()),
|
|
first_name: v.string(),
|
|
last_name: v.string(),
|
|
gender: v.string(),
|
|
birthday: v.string(),
|
|
profile_image_url: v.string(),
|
|
image_url: v.string(),
|
|
has_image: v.boolean(),
|
|
primary_email_address_id: v.boolean(),
|
|
primary_phone_number_id: v.union(v.string(), v.null()),
|
|
primary_web3_wallet_id: v.union(v.string(), v.null()),
|
|
password_enabled: v.boolean(),
|
|
totp_enabled: v.boolean(),
|
|
backup_code_enabled: v.boolean(),
|
|
two_factor_enabled: v.boolean(),
|
|
banned: v.boolean(),
|
|
email_addresses: v.any(),
|
|
phone_numbers: v.any(),
|
|
web3_wallets: v.any(),
|
|
external_accounts: v.any(),
|
|
external_id: v.union(v.string(), v.null()),
|
|
last_sign_in_at: v.union(v.number(), v.null()),
|
|
public_metadata: v.any(),
|
|
private_metadata: v.any(),
|
|
unsafe_metadata: v.any(),
|
|
created_at: v.number(),
|
|
updated_at: v.number(),
|
|
}),
|
|
}).index('by_clerk_id', ['clerkUser.id']),
|
|
posts: defineTable({
|
|
parentPostId: v.optional(v.id('posts')),
|
|
userId: v.id('users'),
|
|
content: v.array(v.string()),
|
|
}).index('by_user_id', ['userId']),
|
|
},
|
|
{ schemaValidation: false }
|
|
);
|