diff --git a/packages/core/src/examples.ts b/packages/core/src/examples.ts index a96a3c66..4ef21c82 100644 --- a/packages/core/src/examples.ts +++ b/packages/core/src/examples.ts @@ -49,4 +49,11 @@ export namespace Examples { name: "Example App", redirectURI: "https://web.example.com/v1/callback", }; + + export const Member = { + id: Id("member"), + ownerID: User.id, + orgID: Organisation.id, + role: "admin" as const, + }; } diff --git a/packages/core/src/member/member.sql.ts b/packages/core/src/member/member.sql.ts new file mode 100644 index 00000000..8280fd86 --- /dev/null +++ b/packages/core/src/member/member.sql.ts @@ -0,0 +1,22 @@ +import { userTable } from "../user/user.sql.js"; +import { orgTable } from "../organisation/org.sql.js"; +import { pgEnum, pgTable } from "drizzle-orm/pg-core"; +import { id, ulid, timestamps } from "../drizzle/types.js"; + +export const MemberRole = pgEnum("role", ["admin", "member", "admin"]); + +export const memberTable = pgTable("members", { + ...id, + ...timestamps, + orgID: ulid("organisation_id") + .references(() => orgTable.id, { + onDelete: "cascade", + }) + .notNull(), + ownerID: ulid("owner_id") + .references(() => userTable.id, { + onDelete: "cascade", + }) + .notNull(), + role: MemberRole("role").notNull(), +}); diff --git a/packages/core/src/organisation/org.sql.ts b/packages/core/src/organisation/org.sql.ts index 3cc7a464..04e4c3c8 100644 --- a/packages/core/src/organisation/org.sql.ts +++ b/packages/core/src/organisation/org.sql.ts @@ -1,13 +1,15 @@ -import { id, timestamps, ulid } from "../drizzle/types.js"; -import { pgTable, varchar } from "drizzle-orm/pg-core"; import { userTable } from "../user/user.sql.js"; +import { pgTable, varchar } from "drizzle-orm/pg-core"; +import { id, timestamps, ulid } from "../drizzle/types.js"; export const orgTable = pgTable("organisations", { ...id, ...timestamps, - ownerID: ulid("owner_id").references(() => userTable.id, { - onDelete: "cascade", - }), + ownerID: ulid("owner_id") + .references(() => userTable.id, { + onDelete: "cascade", + }) + .notNull(), name: varchar("name", { length: 255 }).unique().notNull(), slug: varchar("slug", { length: 255 }).unique().notNull(), }); diff --git a/packages/core/src/steam/steam.sql.ts b/packages/core/src/steam/steam.sql.ts index 07604ee5..01411cb9 100644 --- a/packages/core/src/steam/steam.sql.ts +++ b/packages/core/src/steam/steam.sql.ts @@ -32,9 +32,11 @@ export type Limitations = z.infer; export const steamTable = pgTable("steam_accounts", { ...timestamps, id: varchar("id", { length: 255 }).primaryKey().notNull(), - ownerID: ulid("owner_id").references(() => userTable.id, { - onDelete: "cascade", - }), + ownerID: ulid("owner_id") + .references(() => userTable.id, { + onDelete: "cascade", + }) + .notNull(), memberSince: utc("member_since").notNull(), name: varchar("name", { length: 255 }).notNull(), lastSyncedAt: utc("last_synced_at").notNull(),