alfieqashwaA
Convex Community2y ago
14 replies
alfieqashwa

A company has many users, but a user

A company has many users, but a user only has one company. (one2many)

Here is my schema:

import { defineSchema, defineTable } from "convex/server"
import { Infer, v } from "convex/values"

export const roleValidation = v.union(
v.literal("DEWA"),
v.literal("ADMIN"),
v.literal("OWNER"),
v.literal("MANAGER"),
v.literal("CASHIER"),
v.literal("USER"),
)

export const companyValidation = v.object({
name: v.string(),
slug: v.optional(v.string()),
phone: v.string(),
logo: v.optional(v.string()),
isPublished: v.boolean(),
location: v.string(),
})

const userValidation = v.object({
clerkUser: v.any(), // this is UserJSON from @clerk/backend
email: v.string(),
role: roleValidation,
firstName: v.union(v.string(), v.null()),
lastName: v.union(v.string(), v.null()),
imageUrl: v.string(),
companyId: v.optional(v.id("companies")),
})

export default defineSchema(
{
companies: defineTable(companyValidation),

users: defineTable(userValidation)
.index("by_clerk_id", ["clerkUser.id"])
.index("email", ["email"])
.index("companyId", ["companyId"]),
},
)
Was this page helpful?