35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { bigint, mysqlTable, primaryKey, uniqueIndex, varchar } from "drizzle-orm/mysql-core"
|
|
import { timestamps, ulid, utc, workspaceColumns } from "../drizzle/types"
|
|
import { workspaceIndexes } from "./workspace.sql"
|
|
|
|
export const ReferralCodeTable = mysqlTable(
|
|
"referral_code",
|
|
{
|
|
workspaceID: ulid("workspace_id").notNull(),
|
|
code: varchar("code", { length: 10 }).notNull(),
|
|
...timestamps,
|
|
},
|
|
(table) => [primaryKey({ columns: [table.workspaceID] }), uniqueIndex("code").on(table.code)],
|
|
)
|
|
|
|
export const ReferralTable = mysqlTable(
|
|
"referral",
|
|
{
|
|
...workspaceColumns,
|
|
...timestamps,
|
|
inviteeAccountID: ulid("invitee_account_id").notNull(),
|
|
},
|
|
(table) => [...workspaceIndexes(table), uniqueIndex("invitee_account_id").on(table.inviteeAccountID)],
|
|
)
|
|
|
|
export const ReferralRewardTable = mysqlTable(
|
|
"referral_reward",
|
|
{
|
|
workspaceID: ulid("workspace_id").notNull(),
|
|
referralID: ulid("referral_id").notNull(),
|
|
...timestamps,
|
|
amount: bigint("amount", { mode: "number" }).notNull(),
|
|
timeApplied: utc("time_applied"),
|
|
},
|
|
(table) => [primaryKey({ columns: [table.workspaceID, table.referralID] })],
|
|
)
|