From 9d60c747323ea1d36b8f24c2040832e8cbac5349 Mon Sep 17 00:00:00 2001 From: Nate Kelley Date: Wed, 17 Sep 2025 17:22:26 -0600 Subject: [PATCH] Added additional enum fixes --- .../services/shortcut-permissions.ts | 8 +- packages/database/src/schema-types/asset.ts | 1 + packages/server-shared/.cursor/global.mdc | 25 -- .../server-shared/src/chats/chat.types.ts | 2 - .../src/organization/organization.types.ts | 8 +- .../src/organization/roles.types.ts | 23 +- .../src/organization/status.types.ts | 18 +- .../src/organization/user.types.ts | 4 +- .../src/reports/example-markdown.md | 89 ------ packages/server-shared/src/reports/example.ts | 293 ------------------ packages/server-shared/src/reports/index.ts | 1 - .../src/reports/report-elements.ts | 17 - .../server-shared/src/security/requests.ts | 4 +- .../server-shared/src/security/responses.ts | 4 +- packages/server-shared/src/share/assets.ts | 19 +- .../src/share/share-interfaces.types.ts | 41 +-- .../src/share/verification.types.ts | 19 +- .../server-shared/src/slack/requests.types.ts | 20 +- .../src/slack/responses.types.ts | 29 +- .../server-shared/src/teams/teams.types.ts | 12 +- packages/server-shared/src/user/index.ts | 1 - .../src/user/organization-user.types.ts | 6 +- .../server-shared/src/user/request.types.ts | 10 +- .../server-shared/src/user/responses.types.ts | 4 +- .../server-shared/src/user/roles.types.ts | 22 -- .../src/user/sharing-setting.types.ts | 15 +- .../src/user/suggested-prompts.types.ts | 2 +- .../server-shared/src/user/users.types.ts | 2 +- 28 files changed, 54 insertions(+), 645 deletions(-) delete mode 100644 packages/server-shared/src/reports/example-markdown.md delete mode 100644 packages/server-shared/src/reports/example.ts delete mode 100644 packages/server-shared/src/reports/report-elements.ts delete mode 100644 packages/server-shared/src/user/roles.types.ts diff --git a/apps/server/src/api/v2/shortcuts/services/shortcut-permissions.ts b/apps/server/src/api/v2/shortcuts/services/shortcut-permissions.ts index 2a2341820..806bea0fb 100644 --- a/apps/server/src/api/v2/shortcuts/services/shortcut-permissions.ts +++ b/apps/server/src/api/v2/shortcuts/services/shortcut-permissions.ts @@ -1,12 +1,6 @@ import type { User } from '@buster/database'; import type { Shortcut } from '@buster/server-shared/shortcuts'; - -export type UserOrganizationRole = - | 'workspace_admin' - | 'data_admin' - | 'querier' - | 'restricted_querier' - | 'viewer'; +import type { UserOrganizationRole } from '@buster/server-shared/user'; export interface UserOrganization { organizationId: string; diff --git a/packages/database/src/schema-types/asset.ts b/packages/database/src/schema-types/asset.ts index 5f9178808..e2ff3b54e 100644 --- a/packages/database/src/schema-types/asset.ts +++ b/packages/database/src/schema-types/asset.ts @@ -19,4 +19,5 @@ export const AssetPermissionRoleSchema = z.enum([ 'can_edit', 'full_access', ]); + export type AssetPermissionRole = z.infer; diff --git a/packages/server-shared/.cursor/global.mdc b/packages/server-shared/.cursor/global.mdc index 494bb2e1b..ce24de810 100644 --- a/packages/server-shared/.cursor/global.mdc +++ b/packages/server-shared/.cursor/global.mdc @@ -61,32 +61,7 @@ organization/ └── user.types.ts ``` -### Enum Pattern for Database Parity -When creating enums that mirror database enums, use frozen objects to maintain type safety: - -```typescript -import type { userOrganizationRoleEnum } from '@buster/database'; - -type OrganizationRoleBase = (typeof userOrganizationRoleEnum.enumValues)[number]; - -// Create a frozen object that mirrors the database enum -export const OrganizationRoleEnum: Record = - Object.freeze({ - viewer: 'viewer', - workspace_admin: 'workspace_admin', - data_admin: 'data_admin', - querier: 'querier', - restricted_querier: 'restricted_querier', - }); - -// Create Zod schema from the enum -export const OrganizationRoleSchema = z.enum( - Object.values(OrganizationRoleEnum) as [OrganizationRoleBase, ...OrganizationRoleBase[]] -); - -export type OrganizationRole = z.infer; -``` ### Database Type Parity diff --git a/packages/server-shared/src/chats/chat.types.ts b/packages/server-shared/src/chats/chat.types.ts index 558506505..8346b97de 100644 --- a/packages/server-shared/src/chats/chat.types.ts +++ b/packages/server-shared/src/chats/chat.types.ts @@ -67,8 +67,6 @@ export const CancelChatParamsSchema = z.object({ chat_id: z.string().uuid(), }); -// Infer types from schemas -export type AssetPermissionRole = z.infer; export type ChatWithMessages = z.infer; export type ChatCreateRequest = z.infer; export type ChatCreateHandlerRequest = z.infer; diff --git a/packages/server-shared/src/organization/organization.types.ts b/packages/server-shared/src/organization/organization.types.ts index fe1d873fb..bca1c3d00 100644 --- a/packages/server-shared/src/organization/organization.types.ts +++ b/packages/server-shared/src/organization/organization.types.ts @@ -1,7 +1,5 @@ -import type { organizations } from '@buster/database'; import { z } from 'zod'; -import type { Equal, Expect } from '../type-utilities'; -import { OrganizationRoleSchema } from './roles.types'; +import { UserOrganizationRoleSchema } from './roles.types'; // Hex color validation schema for 3 or 6 digit hex codes const HexColorSchema = z @@ -33,12 +31,10 @@ export const OrganizationSchema = z.object({ paymentRequired: z.boolean(), domains: z.array(z.string()).nullable(), restrictNewUserInvitations: z.boolean(), - defaultRole: OrganizationRoleSchema, + defaultRole: UserOrganizationRoleSchema, organizationColorPalettes: OrganizationColorPaletteSchema, }); export type Organization = z.infer; export type OrganizationColorPalette = z.infer; export type ColorPalette = z.infer; - -type _OrganizationEqualityCheck = Expect>; diff --git a/packages/server-shared/src/organization/roles.types.ts b/packages/server-shared/src/organization/roles.types.ts index 423246083..0bab902a8 100644 --- a/packages/server-shared/src/organization/roles.types.ts +++ b/packages/server-shared/src/organization/roles.types.ts @@ -1,21 +1,6 @@ -import type { userOrganizationRoleEnum } from '@buster/database'; //we import as type to avoid postgres dependency in the frontend ☹️ -import { z } from 'zod'; +import { UserOrganizationRoleSchema } from '@buster/database/schema-types'; //we import as type to avoid postgres dependency in the frontend ☹️ +import type { z } from 'zod'; -type OrganizationRoleBase = (typeof userOrganizationRoleEnum.enumValues)[number]; +export { UserOrganizationRoleSchema }; -//We need this to avoid postgres dependency in the frontend ☹️ -export const OrganizationRoleEnum: Record = - Object.freeze({ - // Got rid of none becauase it's not a valid role. - viewer: 'viewer', - workspace_admin: 'workspace_admin', - data_admin: 'data_admin', - querier: 'querier', - restricted_querier: 'restricted_querier', - }); - -export const OrganizationRoleSchema = z.enum( - Object.values(OrganizationRoleEnum) as [OrganizationRoleBase, ...OrganizationRoleBase[]] -); - -export type OrganizationRole = z.infer; +export type UserOrganizationRole = z.infer; diff --git a/packages/server-shared/src/organization/status.types.ts b/packages/server-shared/src/organization/status.types.ts index f34f0c5ac..4858d4a9c 100644 --- a/packages/server-shared/src/organization/status.types.ts +++ b/packages/server-shared/src/organization/status.types.ts @@ -1,16 +1,6 @@ -import type { userOrganizationStatusEnum } from '@buster/database'; -import { z } from 'zod'; +import { UserOrganizationStatusSchema } from '@buster/database/schema-types'; +import type { z } from 'zod'; -type OrganizationStatusBase = (typeof userOrganizationStatusEnum.enumValues)[number]; +export { UserOrganizationStatusSchema }; -export const OrganizationStatusEnum: Record = - Object.freeze({ - active: 'active', - inactive: 'inactive', - pending: 'pending', - guest: 'guest', - }); - -export const OrganizationStatusSchema = z.enum( - Object.values(OrganizationStatusEnum) as [OrganizationStatusBase, ...OrganizationStatusBase[]] -); +export type UserOrganizationStatus = z.infer; diff --git a/packages/server-shared/src/organization/user.types.ts b/packages/server-shared/src/organization/user.types.ts index 8e926e6bf..5d806b9bf 100644 --- a/packages/server-shared/src/organization/user.types.ts +++ b/packages/server-shared/src/organization/user.types.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -import { OrganizationRoleSchema } from './roles.types'; +import { UserOrganizationRoleSchema } from './roles.types'; export const LineageUserItemTypeSchema = z.enum(['user', 'datasets', 'permissionGroups']); @@ -25,7 +25,7 @@ export const OrganizationUserSchema = z.object({ name: z.string(), avatar_url: z.string().nullable(), status: z.enum(['active', 'inactive']), - role: OrganizationRoleSchema, + role: UserOrganizationRoleSchema, datasets: z.array(OrganizationUserDatasetSchema), }); diff --git a/packages/server-shared/src/reports/example-markdown.md b/packages/server-shared/src/reports/example-markdown.md deleted file mode 100644 index 12b5c0cec..000000000 --- a/packages/server-shared/src/reports/example-markdown.md +++ /dev/null @@ -1,89 +0,0 @@ -# Welcome to the Plate Playground! - -Experience a modern rich-text editor built with [Slate](https://slatejs.org) and [React](https://reactjs.org). This playground showcases just a part of Plate's capabilities. [Explore the documentation](/docs) to discover more. - -## Collaborative Editing - -Review and refine content seamlessly. Use [](/docs/suggestion) or to . Discuss changes using [comments](/docs/comment) on many text segments. You can even have annotations! - -## AI-Powered Editing - -Boost your productivity with integrated [AI SDK](/docs/ai). Press ⌘+J or Space in an empty line to: - -* Generate content (continue writing, summarize, explain) -* Edit existing text (improve, fix grammar, change tone) - -## Rich Content Editing - -Structure your content with [headings](/docs/heading), [lists](/docs/list), and [quotes](/docs/blockquote). Apply [marks](/docs/basic-marks) like **bold**, _italic_, underline, ~~strikethrough~~, and `code`. Use [autoformatting](/docs/autoformat) for [Markdown](/docs/markdown)-like shortcuts (e.g., \* for lists, # for H1). - -> Blockquotes are great for highlighting important information. - -```javascript -function hello() { - console.info('Code blocks are supported!'); -} -``` - -Create [links](/docs/link), [@mention](/docs/mention) users like [Alice](mention:Alice), or insert [emojis](/docs/emoji) ✨. Use the [slash command](/docs/slash-command) (/) for quick access to elements. - -​ - -* Check -* [ ] Check 2 -* [ ] Check 3 - -​ - - - This is a good callout - - -​ - - - - Column 1 - - - - Column 2 - - - - Column 3 - - - -### How Plate Compares - -Plate offers many features out-of-the-box as free, open-source plugins. - -| **Feature** | **Plate (Free & OSS)** | **Tiptap** | -| ------------------- | ---------------------- | --------------------- | -| AI | ✅ | Paid Extension | -| Comments | ✅ | Paid Extension | -| Suggestions | ✅ | Paid (Comments Pro) | -| Emoji Picker | ✅ | Paid Extension | -| Table of Contents | ✅ | Paid Extension | -| Drag Handle | ✅ | Paid Extension | -| Collaboration (Yjs) | ✅ | Hocuspocus (OSS/Paid) | - -### Images and Media - -Embed rich media like images directly in your content. Supports [Media uploads](/docs/media) and [drag & drop](/docs/dnd) for a smooth experience. - -![](https://images.unsplash.com/photo-1712688930249-98e1963af7bd?q=80\&w=600\&auto=format\&fit=crop\&ixlib=rb-4.0.3\&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D) - - - -