Files
portabase/src/db/schema/03_organization.ts
T

45 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-11-09 16:47:58 +01:00
import { pgTable, text, uuid } from "drizzle-orm/pg-core";
2025-05-16 15:54:17 +02:00
import { relations } from "drizzle-orm";
import { project } from "./06_project";
2025-05-16 15:54:17 +02:00
import { createSelectSchema } from "drizzle-zod";
import { z } from "zod";
import {invitation, OrganizationInvitation} from "@/db/schema/05_invitation";
import {member, OrganizationMember} from "@/db/schema/04_member";
import {User} from "@/db/schema/02_user";
import {timestamps} from "@/db/schema/00_common";
2025-11-09 16:47:58 +01:00
import {organizationNotificationChannel} from "@/db/schema/09_notification-channel";
2025-05-16 15:54:17 +02:00
export const organization = pgTable("organization", {
id: uuid("id").defaultRandom().primaryKey(),
name: text("name").notNull(),
slug: text("slug").unique().notNull(),
logo: text("logo"),
metadata: text("metadata"),
...timestamps
2025-05-16 15:54:17 +02:00
});
export const organizationRelations = relations(organization, ({ many }) => ({
members: many(member),
invitations: many(invitation),
projects: many(project),
2025-11-09 16:47:58 +01:00
notificationChannels: many(organizationNotificationChannel),
2025-05-16 15:54:17 +02:00
}));
export const organizationSchema = createSelectSchema(organization);
export type Organization = z.infer<typeof organizationSchema>;
2025-07-26 14:43:59 +02:00
export type OrganizationWithMembers = Organization & {
members: OrganizationMember[];
};
export type MemberWithUser = OrganizationMember & {
user: User;
};
export type OrganizationWithMembersAndUsers = Organization & {
members: MemberWithUser[];
invitations: OrganizationInvitation[];
};