Files
kan/packages/db/src/schema/users.ts
LovelessCodes 75e89f118f feat: implement Trello integration with OAuth and user fields (#48)
* feat: implement Trello integration with OAuth and user fields

* feat: migrate Trello integration to new integrations table

* refactor: migrate Trello integration to use new integration system

* refactor: migrate Trello integration to use new integrations table

* fix: add loading check for Trello integration and update VSCode settings

* feat: enhance import boards UI with dynamic integration providers and local storage config

* feat: add select/unselect all buttons and loading state to board import form

* feat: add Trello import env vars on README

* docs: update Trello import guide to use OAuth flow instead of API keys

* feat: add integrations table for OAuth token management

* feat: connect trello from import modal

* refactor: consolidate Trello integration endpoints into unified integration router

* fix: trello import again

* refactor: generalize integration authorization flow and improve error handling

* refactor: update Trello API endpoints and tags for better organization

* feat: add Integrations tag to OpenAPI specification

* refactor: update Trello auth endpoint to use generic integration provider param

* refactor: move Trello integration logic from trello.ts to import.ts router

* refactor: consolidate Trello integration endpoints and fix API URL

* chore: remove debug logs

---------

Co-authored-by: Henry <henry_ball@hotmail.co.uk>
2025-06-10 19:24:18 +01:00

87 lines
2.4 KiB
TypeScript

import { relations, sql } from "drizzle-orm";
import {
boolean,
pgTable,
timestamp,
uuid,
varchar,
} from "drizzle-orm/pg-core";
import { apikey } from "./auth";
import { boards } from "./boards";
import { cards } from "./cards";
import { imports } from "./imports";
import { lists } from "./lists";
import { workspaceMembers, workspaces } from "./workspaces";
import { integrations } from "./integrations";
export const users = pgTable("user", {
id: uuid("id")
.notNull()
.primaryKey()
.default(sql`uuid_generate_v4()`),
name: varchar("name", { length: 255 }),
email: varchar("email", { length: 255 }).notNull().unique(),
emailVerified: boolean("emailVerified").notNull(),
image: varchar("image", { length: 255 }),
createdAt: timestamp("createdAt").notNull().defaultNow(),
updatedAt: timestamp("updatedAt").notNull().defaultNow(),
stripeCustomerId: varchar("stripeCustomerId", { length: 255 }),
}).enableRLS();
export const usersRelations = relations(users, ({ many }) => ({
deletedBoards: many(boards, {
relationName: "boardDeletedByUser",
}),
boards: many(boards, {
relationName: "boardCreatedByUser",
}),
deletedCards: many(cards, {
relationName: "cardsDeletedByUser",
}),
cards: many(cards, {
relationName: "cardsCreatedByUser",
}),
imports: many(imports),
deletedLists: many(lists, {
relationName: "listsDeletedByUser",
}),
lists: many(lists, {
relationName: "listsCreatedByUser",
}),
deletedWorkspaces: many(workspaces, {
relationName: "workspaceDeletedByUser",
}),
workspaces: many(workspaces, {
relationName: "workspaceCreatedByUser",
}),
apiKeys: many(apikey),
integrations: many(integrations),
}));
export const usersToWorkspacesRelations = relations(
workspaceMembers,
({ one }) => ({
addedBy: one(users, {
fields: [workspaceMembers.createdBy],
references: [users.id],
relationName: "usersToWorkspacesAddedByUser",
}),
deletedBy: one(users, {
fields: [workspaceMembers.deletedBy],
references: [users.id],
relationName: "usersToWorkspacesDeletedByUser",
}),
user: one(users, {
fields: [workspaceMembers.userId],
references: [users.id],
relationName: "usersToWorkspacesUser",
}),
workspace: one(workspaces, {
fields: [workspaceMembers.workspaceId],
references: [workspaces.id],
relationName: "usersToWorkspacesWorkspace",
}),
}),
);