From 097ea1832019ac1bfecd8f6a38dd0d6d030cd58c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Mon, 8 Apr 2024 21:25:32 +0200 Subject: [PATCH] rename all db columns --- apps/api/src/utils/auth.ts | 2 +- .../events/event-conversions-list/index.tsx | 3 +- .../[projectId]/layout-menu.tsx | 2 +- .../[organizationId]/[projectId]/page.tsx | 8 +- .../settings/projects/list-projects.tsx | 2 +- .../[projectId]/settings/references/page.tsx | 2 +- .../app/(public)/share/overview/[id]/page.tsx | 4 +- .../src/app/api/clerk/webhook/route.ts | 10 +- .../components/overview/overview-share.tsx | 4 +- apps/dashboard/src/modals/Modal/Container.tsx | 5 +- apps/dashboard/src/trpc/api/routers/client.ts | 10 +- .../src/trpc/api/routers/dashboard.ts | 6 +- apps/dashboard/src/trpc/api/routers/event.ts | 6 +- .../src/trpc/api/routers/onboarding.ts | 19 +-- .../src/trpc/api/routers/organization.ts | 10 +- .../dashboard/src/trpc/api/routers/project.ts | 2 +- .../src/trpc/api/routers/reference.ts | 4 +- apps/dashboard/src/trpc/api/routers/report.ts | 12 +- apps/dashboard/src/trpc/api/routers/share.ts | 6 +- .../migration.sql | 97 +++++++++++++ .../migration.sql | 35 +++++ packages/db/prisma/schema.prisma | 132 +++++++++--------- packages/db/src/services/clients.service.ts | 34 ++--- packages/db/src/services/dashboard.service.ts | 15 +- packages/db/src/services/event.service.ts | 6 +- .../db/src/services/organization.service.ts | 19 +-- packages/db/src/services/project.service.ts | 44 ++---- packages/db/src/services/reference.service.ts | 20 +-- packages/db/src/services/reports.service.ts | 8 +- packages/db/src/services/share.service.ts | 8 ++ 30 files changed, 303 insertions(+), 232 deletions(-) create mode 100644 packages/db/prisma/migrations/20240408181306_rename_columns/migration.sql create mode 100644 packages/db/prisma/migrations/20240408184129_rename_colimns_2/migration.sql diff --git a/apps/api/src/utils/auth.ts b/apps/api/src/utils/auth.ts index ed648bc4..22814f9f 100644 --- a/apps/api/src/utils/auth.ts +++ b/apps/api/src/utils/auth.ts @@ -89,5 +89,5 @@ export async function validateSdkRequest( } } - return client.project_id; + return client.projectId; } diff --git a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/events/event-conversions-list/index.tsx b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/events/event-conversions-list/index.tsx index d5b5a97b..57bcee32 100644 --- a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/events/event-conversions-list/index.tsx +++ b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/events/event-conversions-list/index.tsx @@ -1,4 +1,3 @@ -import { Widget } from '@/components/widget'; import { escape } from 'sqlstring'; import { db, getEvents } from '@openpanel/db'; @@ -12,7 +11,7 @@ interface Props { export default async function EventConversionsListServer({ projectId }: Props) { const conversions = await db.eventMeta.findMany({ where: { - project_id: projectId, + projectId, conversion: true, }, }); diff --git a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/layout-menu.tsx b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/layout-menu.tsx index 6e0d0192..f5db083f 100644 --- a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/layout-menu.tsx +++ b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/layout-menu.tsx @@ -145,7 +145,7 @@ export default function LayoutMenu({ dashboards }: LayoutMenuProps) { } - href={`/${item.organization_slug}/${item.project_id}/dashboards/${item.id}`} + href={`/${item.organizationSlug}/${item.projectId}/dashboards/${item.id}`} /> ))} diff --git a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/page.tsx b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/page.tsx index 94eab5fb..f62eb71c 100644 --- a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/page.tsx +++ b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/page.tsx @@ -10,7 +10,7 @@ import OverviewTopGeo from '@/components/overview/overview-top-geo'; import OverviewTopPages from '@/components/overview/overview-top-pages'; import OverviewTopSources from '@/components/overview/overview-top-sources'; -import { db } from '@openpanel/db'; +import { getShareByProjectId } from '@openpanel/db'; import OverviewMetrics from '../../../../components/overview/overview-metrics'; import { StickyBelowHeader } from './layout-sticky-below-header'; @@ -26,11 +26,7 @@ interface PageProps { export default async function Page({ params: { organizationId, projectId }, }: PageProps) { - const share = await db.shareOverview.findUnique({ - where: { - project_id: projectId, - }, - }); + const share = await getShareByProjectId(projectId); return ( diff --git a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/settings/projects/list-projects.tsx b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/settings/projects/list-projects.tsx index cc25c480..4b58e987 100644 --- a/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/settings/projects/list-projects.tsx +++ b/apps/dashboard/src/app/(app)/[organizationId]/[projectId]/settings/projects/list-projects.tsx @@ -57,7 +57,7 @@ export default function ListProjects({ projects, clients }: ListProjectsProps) { {projects.map((project) => { const pClients = clients.filter( - (client) => client.project_id === project.id + (client) => client.projectId === project.id ); return ( diff --git a/apps/dashboard/src/app/api/clerk/webhook/route.ts b/apps/dashboard/src/app/api/clerk/webhook/route.ts index 0aa9adc3..2d42a9d8 100644 --- a/apps/dashboard/src/app/api/clerk/webhook/route.ts +++ b/apps/dashboard/src/app/api/clerk/webhook/route.ts @@ -12,9 +12,9 @@ export async function POST(request: Request) { data: access .filter((a): a is string => typeof a === 'string') .map((projectId) => ({ - organization_slug: payload.data.organization.slug!, - project_id: projectId, - user_id: payload.data.public_user_data.user_id, + organizationSlug: payload.data.organization.slug!, + projectId: projectId, + userId: payload.data.public_user_data.user_id, level: AccessLevel.read, })), }); @@ -23,8 +23,8 @@ export async function POST(request: Request) { if (payload.type === 'organizationMembership.deleted') { await db.projectAccess.deleteMany({ where: { - organization_slug: payload.data.organization.slug!, - user_id: payload.data.public_user_data.user_id, + organizationSlug: payload.data.organization.slug!, + userId: payload.data.public_user_data.user_id, }, }); } diff --git a/apps/dashboard/src/components/overview/overview-share.tsx b/apps/dashboard/src/components/overview/overview-share.tsx index 251d40cb..d10c7576 100644 --- a/apps/dashboard/src/components/overview/overview-share.tsx +++ b/apps/dashboard/src/components/overview/overview-share.tsx @@ -59,8 +59,8 @@ export function OverviewShare({ data }: OverviewShareProps) { onClick={() => { mutation.mutate({ public: false, - projectId: data?.project_id, - organizationId: data?.organization_slug, + projectId: data?.projectId, + organizationId: data?.organizationSlug, password: null, }); }} diff --git a/apps/dashboard/src/modals/Modal/Container.tsx b/apps/dashboard/src/modals/Modal/Container.tsx index 8b194791..25ca82f8 100644 --- a/apps/dashboard/src/modals/Modal/Container.tsx +++ b/apps/dashboard/src/modals/Modal/Container.tsx @@ -8,10 +8,11 @@ import { popModal } from '..'; interface ModalContentProps { children: React.ReactNode; + className?: string; } -export function ModalContent({ children }: ModalContentProps) { - return {children}; +export function ModalContent({ children, className }: ModalContentProps) { + return {children}; } interface ModalHeaderProps { diff --git a/apps/dashboard/src/trpc/api/routers/client.ts b/apps/dashboard/src/trpc/api/routers/client.ts index a6981a40..0d3543c4 100644 --- a/apps/dashboard/src/trpc/api/routers/client.ts +++ b/apps/dashboard/src/trpc/api/routers/client.ts @@ -3,7 +3,7 @@ import { createTRPCRouter, protectedProcedure } from '@/trpc/api/trpc'; import { z } from 'zod'; import { hashPassword, stripTrailingSlash } from '@openpanel/common'; -import { db, transformClient } from '@openpanel/db'; +import { db } from '@openpanel/db'; export const clientRouter = createTRPCRouter({ list: protectedProcedure @@ -15,7 +15,7 @@ export const clientRouter = createTRPCRouter({ .query(async ({ input: { organizationId } }) => { return db.client.findMany({ where: { - organization_slug: organizationId, + organizationSlug: organizationId, }, include: { project: true, @@ -67,8 +67,8 @@ export const clientRouter = createTRPCRouter({ const secret = randomUUID(); const client = await db.client.create({ data: { - organization_slug: input.organizationId, - project_id: input.projectId, + organizationSlug: input.organizationId, + projectId: input.projectId, name: input.name, secret: input.cors ? null : await hashPassword(secret), cors: input.cors ? stripTrailingSlash(input.cors) : '*', @@ -76,7 +76,7 @@ export const clientRouter = createTRPCRouter({ }); return { - ...transformClient(client), + ...client, secret: input.cors ? null : secret, }; }), diff --git a/apps/dashboard/src/trpc/api/routers/dashboard.ts b/apps/dashboard/src/trpc/api/routers/dashboard.ts index bef7ceb3..57a48638 100644 --- a/apps/dashboard/src/trpc/api/routers/dashboard.ts +++ b/apps/dashboard/src/trpc/api/routers/dashboard.ts @@ -28,8 +28,8 @@ export const dashboardRouter = createTRPCRouter({ return db.dashboard.create({ data: { id: await getId('dashboard', name), - project_id: projectId, - organization_slug: organizationSlug, + projectId: projectId, + organizationSlug: organizationSlug, name, }, }); @@ -63,7 +63,7 @@ export const dashboardRouter = createTRPCRouter({ if (forceDelete) { await db.report.deleteMany({ where: { - dashboard_id: id, + dashboardId: id, }, }); } diff --git a/apps/dashboard/src/trpc/api/routers/event.ts b/apps/dashboard/src/trpc/api/routers/event.ts index be4213f5..d3e728f7 100644 --- a/apps/dashboard/src/trpc/api/routers/event.ts +++ b/apps/dashboard/src/trpc/api/routers/event.ts @@ -22,12 +22,12 @@ export const eventRouter = createTRPCRouter({ .mutation(({ input: { projectId, name, icon, color, conversion } }) => { return db.eventMeta.upsert({ where: { - name_project_id: { + name_projectId: { name, - project_id: projectId, + projectId, }, }, - create: { project_id: projectId, name, icon, color, conversion }, + create: { projectId, name, icon, color, conversion }, update: { icon, color, conversion }, }); }), diff --git a/apps/dashboard/src/trpc/api/routers/onboarding.ts b/apps/dashboard/src/trpc/api/routers/onboarding.ts index 28ecc684..e1b71776 100644 --- a/apps/dashboard/src/trpc/api/routers/onboarding.ts +++ b/apps/dashboard/src/trpc/api/routers/onboarding.ts @@ -4,12 +4,7 @@ import { clerkClient } from '@clerk/nextjs'; import { z } from 'zod'; import { hashPassword, stripTrailingSlash } from '@openpanel/common'; -import { - db, - transformClient, - transformOrganization, - transformProject, -} from '@openpanel/db'; +import { db, transformOrganization } from '@openpanel/db'; export const onboardingRouter = createTRPCRouter({ organziation: protectedProcedure @@ -30,7 +25,7 @@ export const onboardingRouter = createTRPCRouter({ const project = await db.project.create({ data: { name: input.project, - organization_slug: org.slug, + organizationSlug: org.slug, }, }); @@ -38,19 +33,19 @@ export const onboardingRouter = createTRPCRouter({ const client = await db.client.create({ data: { name: `${project.name} Client`, - organization_slug: org.slug, - project_id: project.id, + organizationSlug: org.slug, + projectId: project.id, cors: input.cors ? stripTrailingSlash(input.cors) : '*', secret: input.cors ? null : await hashPassword(secret), }, }); return { - client: transformClient({ + client: { ...client, secret: input.cors ? null : secret, - }), - project: transformProject(project), + }, + project, organization: transformOrganization(org), }; } diff --git a/apps/dashboard/src/trpc/api/routers/organization.ts b/apps/dashboard/src/trpc/api/routers/organization.ts index 6c0f83e0..226ab997 100644 --- a/apps/dashboard/src/trpc/api/routers/organization.ts +++ b/apps/dashboard/src/trpc/api/routers/organization.ts @@ -77,15 +77,15 @@ export const organizationRouter = createTRPCRouter({ return db.$transaction([ db.projectAccess.deleteMany({ where: { - user_id: input.userId, - organization_slug: input.organizationSlug, + userId: input.userId, + organizationSlug: input.organizationSlug, }, }), db.projectAccess.createMany({ data: input.access.map((projectId) => ({ - user_id: input.userId, - organization_slug: input.organizationSlug, - project_id: projectId, + userId: input.userId, + organizationSlug: input.organizationSlug, + projectId: projectId, level: 'read', })), }), diff --git a/apps/dashboard/src/trpc/api/routers/project.ts b/apps/dashboard/src/trpc/api/routers/project.ts index a7868364..af562d90 100644 --- a/apps/dashboard/src/trpc/api/routers/project.ts +++ b/apps/dashboard/src/trpc/api/routers/project.ts @@ -44,7 +44,7 @@ export const projectRouter = createTRPCRouter({ return db.project.create({ data: { id: await getId('project', input.name), - organization_slug: input.organizationId, + organizationSlug: input.organizationId, name: input.name, }, }); diff --git a/apps/dashboard/src/trpc/api/routers/reference.ts b/apps/dashboard/src/trpc/api/routers/reference.ts index 3a03eb14..06571363 100644 --- a/apps/dashboard/src/trpc/api/routers/reference.ts +++ b/apps/dashboard/src/trpc/api/routers/reference.ts @@ -19,7 +19,7 @@ export const referenceRouter = createTRPCRouter({ data: { title, description, - project_id: projectId, + projectId, date: new Date(datetime), }, }); @@ -47,7 +47,7 @@ export const referenceRouter = createTRPCRouter({ const { startDate, endDate } = getChartStartEndDate(input); return getReferences({ where: { - project_id: projectId, + projectId, date: { gte: new Date(startDate), lte: new Date(endDate), diff --git a/apps/dashboard/src/trpc/api/routers/report.ts b/apps/dashboard/src/trpc/api/routers/report.ts index a5246802..b5a58ef7 100644 --- a/apps/dashboard/src/trpc/api/routers/report.ts +++ b/apps/dashboard/src/trpc/api/routers/report.ts @@ -20,14 +20,14 @@ export const reportRouter = createTRPCRouter({ }); return db.report.create({ data: { - project_id: dashboard.project_id, - dashboard_id: dashboardId, + projectId: dashboard.projectId, + dashboardId, name: report.name, events: report.events, interval: report.interval, breakdowns: report.breakdowns, - chart_type: report.chartType, - line_type: report.lineType, + chartType: report.chartType, + lineType: report.lineType, range: report.range, formula: report.formula, }, @@ -50,8 +50,8 @@ export const reportRouter = createTRPCRouter({ events: report.events, interval: report.interval, breakdowns: report.breakdowns, - chart_type: report.chartType, - line_type: report.lineType, + chartType: report.chartType, + lineType: report.lineType, range: report.range, formula: report.formula, }, diff --git a/apps/dashboard/src/trpc/api/routers/share.ts b/apps/dashboard/src/trpc/api/routers/share.ts index a365c397..17d40c82 100644 --- a/apps/dashboard/src/trpc/api/routers/share.ts +++ b/apps/dashboard/src/trpc/api/routers/share.ts @@ -12,12 +12,12 @@ export const shareRouter = createTRPCRouter({ .mutation(({ input }) => { return db.shareOverview.upsert({ where: { - project_id: input.projectId, + projectId: input.projectId, }, create: { id: uid.rnd(), - organization_slug: input.organizationId, - project_id: input.projectId, + organizationSlug: input.organizationId, + projectId: input.projectId, public: input.public, password: input.password || null, }, diff --git a/packages/db/prisma/migrations/20240408181306_rename_columns/migration.sql b/packages/db/prisma/migrations/20240408181306_rename_columns/migration.sql new file mode 100644 index 00000000..ea81f8c5 --- /dev/null +++ b/packages/db/prisma/migrations/20240408181306_rename_columns/migration.sql @@ -0,0 +1,97 @@ +-- Project +-- organization_slug -> organizationSlug +ALTER TABLE + IF EXISTS "projects" RENAME COLUMN "organization_slug" TO "organizationSlug"; + +-- ProjectAccess +-- project_id -> projectId +-- organization_slug -> organizationSlug +-- user_id -> userId +ALTER TABLE + IF EXISTS "project_access" RENAME COLUMN "project_id" TO "projectId"; + +ALTER TABLE + IF EXISTS "project_access" RENAME COLUMN "organization_slug" TO "organizationSlug"; + +ALTER TABLE + IF EXISTS "project_access" RENAME COLUMN "user_id" TO "userId"; + +-- Event +-- project_id -> projectId +-- profile_id -> profileId +ALTER TABLE + IF EXISTS "events" RENAME COLUMN "project_id" TO "projectId"; + +ALTER TABLE + IF EXISTS "events" RENAME COLUMN "profile_id" TO "profileId"; + +-- Profile +-- external_id -> externalId +-- first_name -> firstName +-- last_name -> lastName +-- project_id -> projectId +ALTER TABLE + IF EXISTS "profiles" RENAME COLUMN "external_id" TO "externalId"; + +ALTER TABLE + IF EXISTS "profiles" RENAME COLUMN "first_name" TO "firstName"; + +ALTER TABLE + IF EXISTS "profiles" RENAME COLUMN "last_name" TO "lastName"; + +ALTER TABLE + IF EXISTS "profiles" RENAME COLUMN "project_id" TO "projectId"; + +-- Client +-- project_id -> projectId +-- organization_slug -> organizationSlug +ALTER TABLE + IF EXISTS "clients" RENAME COLUMN "project_id" TO "projectId"; + +ALTER TABLE + IF EXISTS "clients" RENAME COLUMN "organization_slug" TO "organizationSlug"; + +-- Dashboard +-- organization_slug -> organizationSlug +-- project_id -> projectId +ALTER TABLE + IF EXISTS "dashboards" RENAME COLUMN "organization_slug" TO "organizationSlug"; + +ALTER TABLE + IF EXISTS "dashboards" RENAME COLUMN "project_id" TO "projectId"; + +-- Report +-- chart_type -> chartType +-- line_type -> lineType +-- project_id -> projectId +-- dashboard_id -> dashboardId +ALTER TABLE + IF EXISTS "reports" RENAME COLUMN "chart_type" TO "chartType"; + +ALTER TABLE + IF EXISTS "reports" RENAME COLUMN "line_type" TO "lineType"; + +ALTER TABLE + IF EXISTS "reports" RENAME COLUMN "project_id" TO "projectId"; + +ALTER TABLE + IF EXISTS "reports" RENAME COLUMN "dashboard_id" TO "dashboardId"; + +-- ShareOverview +-- project_id -> projectId +-- organization_slug -> organizationSlug +ALTER TABLE + IF EXISTS "shares" RENAME COLUMN "project_id" TO "projectId"; + +ALTER TABLE + IF EXISTS "shares" RENAME COLUMN "organization_slug" TO "organizationSlug"; + +-- EventMeta (ta bort constraint) +-- project_id -> projectId +ALTER TABLE + IF EXISTS "event_meta" RENAME COLUMN "project_id" TO "projectId"; + +-- Reference +-- project_id -> projectId +ALTER TABLE + IF EXISTS "references" RENAME COLUMN "project_id" TO "projectId"; \ No newline at end of file diff --git a/packages/db/prisma/migrations/20240408184129_rename_colimns_2/migration.sql b/packages/db/prisma/migrations/20240408184129_rename_colimns_2/migration.sql new file mode 100644 index 00000000..d48e7702 --- /dev/null +++ b/packages/db/prisma/migrations/20240408184129_rename_colimns_2/migration.sql @@ -0,0 +1,35 @@ +-- RenameForeignKey +ALTER TABLE "clients" RENAME CONSTRAINT "clients_project_id_fkey" TO "clients_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "dashboards" RENAME CONSTRAINT "dashboards_project_id_fkey" TO "dashboards_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "event_meta" RENAME CONSTRAINT "event_meta_project_id_fkey" TO "event_meta_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "events" RENAME CONSTRAINT "events_project_id_fkey" TO "events_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "profiles" RENAME CONSTRAINT "profiles_project_id_fkey" TO "profiles_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "project_access" RENAME CONSTRAINT "project_access_project_id_fkey" TO "project_access_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "references" RENAME CONSTRAINT "references_project_id_fkey" TO "references_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "reports" RENAME CONSTRAINT "reports_dashboard_id_fkey" TO "reports_dashboardId_fkey"; + +-- RenameForeignKey +ALTER TABLE "reports" RENAME CONSTRAINT "reports_project_id_fkey" TO "reports_projectId_fkey"; + +-- RenameForeignKey +ALTER TABLE "shares" RENAME CONSTRAINT "shares_project_id_fkey" TO "shares_projectId_fkey"; + +-- RenameIndex +ALTER INDEX "event_meta_name_project_id_key" RENAME TO "event_meta_name_projectId_key"; + +-- RenameIndex +ALTER INDEX "shares_project_id_key" RENAME TO "shares_projectId_key"; diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma index 0adb4fc1..77cdf9dd 100644 --- a/packages/db/prisma/schema.prisma +++ b/packages/db/prisma/schema.prisma @@ -11,23 +11,23 @@ datasource db { } model Project { - id String @id @default(dbgenerated("gen_random_uuid()")) - name String - organization_slug String - events Event[] - eventsCount Int @default(0) - profiles Profile[] - clients Client[] + id String @id @default(dbgenerated("gen_random_uuid()")) + name String + organizationSlug String + eventsCount Int @default(0) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt + events Event[] + profiles Profile[] + clients Client[] reports Report[] dashboards Dashboard[] share ShareOverview? - EventMeta EventMeta[] - Reference Reference[] + meta EventMeta[] + references Reference[] + access ProjectAccess[] - access ProjectAccess[] + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt @@map("projects") } @@ -39,14 +39,14 @@ enum AccessLevel { } model ProjectAccess { - id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid - project_id String - project Project @relation(fields: [project_id], references: [id]) - organization_slug String - user_id String - level AccessLevel - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + projectId String + project Project @relation(fields: [projectId], references: [id]) + organizationSlug String + userId String + level AccessLevel + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt @@map("project_access") } @@ -55,10 +55,10 @@ model Event { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String properties Json - project_id String - project Project @relation(fields: [project_id], references: [id]) + projectId String + project Project @relation(fields: [projectId], references: [id]) - profile_id String? + profileId String? createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt @@ -75,29 +75,29 @@ model Salt { } model Profile { - id String @id - external_id String? - first_name String? - last_name String? - email String? - avatar String? - properties Json - project_id String - project Project @relation(fields: [project_id], references: [id]) - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt + id String @id + externalId String? + firstName String? + lastName String? + email String? + avatar String? + properties Json + projectId String + project Project @relation(fields: [projectId], references: [id]) + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt @@map("profiles") } model Client { - id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid - name String - secret String? - project_id String - project Project @relation(fields: [project_id], references: [id]) - organization_slug String - cors String @default("*") + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + name String + secret String? + projectId String + project Project @relation(fields: [projectId], references: [id]) + organizationSlug String + cors String @default("*") createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt @@ -124,12 +124,12 @@ enum ChartType { } model Dashboard { - id String @id @default(dbgenerated("gen_random_uuid()")) - name String - organization_slug String - project_id String - project Project @relation(fields: [project_id], references: [id]) - reports Report[] + id String @id @default(dbgenerated("gen_random_uuid()")) + name String + organizationSlug String + projectId String + project Project @relation(fields: [projectId], references: [id]) + reports Report[] createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt @@ -149,19 +149,19 @@ model Report { name String interval Interval range String @default("1m") - chart_type ChartType - line_type String @default("monotone") + chartType ChartType + lineType String @default("monotone") breakdowns Json events Json formula String? unit String? metric Metric @default(sum) - project_id String - project Project @relation(fields: [project_id], references: [id]) + projectId String + project Project @relation(fields: [projectId], references: [id]) previous Boolean @default(false) - dashboard_id String - dashboard Dashboard @relation(fields: [dashboard_id], references: [id]) + dashboardId String + dashboard Dashboard @relation(fields: [dashboardId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt @@ -180,14 +180,14 @@ model Waitlist { } model ShareOverview { - id String @unique - project_id String @unique - project Project @relation(fields: [project_id], references: [id]) - organization_slug String - public Boolean @default(false) - password String? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt + id String @unique + projectId String @unique + project Project @relation(fields: [projectId], references: [id]) + organizationSlug String + public Boolean @default(false) + password String? + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt @@map("shares") } @@ -198,13 +198,13 @@ model EventMeta { conversion Boolean? color String? icon String? - project_id String - project Project @relation(fields: [project_id], references: [id]) + projectId String + project Project @relation(fields: [projectId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt - @@unique([name, project_id]) + @@unique([name, projectId]) @@map("event_meta") } @@ -213,8 +213,8 @@ model Reference { title String description String? date DateTime @default(now()) - project_id String - project Project @relation(fields: [project_id], references: [id]) + projectId String + project Project @relation(fields: [projectId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @default(now()) @updatedAt diff --git a/packages/db/src/services/clients.service.ts b/packages/db/src/services/clients.service.ts index 417d3df2..60a39626 100644 --- a/packages/db/src/services/clients.service.ts +++ b/packages/db/src/services/clients.service.ts @@ -1,38 +1,20 @@ -import type { Client } from '../prisma-client'; +import type { Client, Prisma } from '../prisma-client'; import { db } from '../prisma-client'; -import { transformProject } from './project.service'; -import type { IServiceProject } from './project.service'; -export type IServiceClient = ReturnType; -export type IServiceClientWithProject = IServiceClient & { - project: Exclude; -}; - -export function transformClient({ organization_slug, ...client }: Client) { - return { - ...client, - organizationSlug: organization_slug, +export type IServiceClient = Client; +export type IServiceClientWithProject = Prisma.ClientGetPayload<{ + include: { + project: true; }; -} +}>; export async function getClientsByOrganizationId(organizationId: string) { - const clients = await db.client.findMany({ + return db.client.findMany({ where: { - organization_slug: organizationId, + organizationSlug: organizationId, }, include: { project: true, }, }); - - return clients - .map((client) => { - return { - ...transformClient(client), - project: transformProject(client.project), - }; - }) - .filter( - (client): client is IServiceClientWithProject => client.project !== null - ); } diff --git a/packages/db/src/services/dashboard.service.ts b/packages/db/src/services/dashboard.service.ts index 16f4e65e..58afcf9e 100644 --- a/packages/db/src/services/dashboard.service.ts +++ b/packages/db/src/services/dashboard.service.ts @@ -1,15 +1,18 @@ +import type { Dashboard, Prisma } from '../prisma-client'; import { db } from '../prisma-client'; -export type IServiceDashboard = Awaited>; -export type IServiceDashboards = Awaited< - ReturnType ->; +export type IServiceDashboard = Dashboard; +export type IServiceDashboards = Prisma.DashboardGetPayload<{ + include: { + project: true; + }; +}>[]; export async function getDashboardById(id: string, projectId: string) { const dashboard = await db.dashboard.findUnique({ where: { id, - project_id: projectId, + projectId, }, include: { project: true, @@ -26,7 +29,7 @@ export async function getDashboardById(id: string, projectId: string) { export function getDashboardsByProjectId(projectId: string) { return db.dashboard.findMany({ where: { - project_id: projectId, + projectId, }, include: { project: true, diff --git a/packages/db/src/services/event.service.ts b/packages/db/src/services/event.service.ts index 203a9522..a4e074a7 100644 --- a/packages/db/src/services/event.service.ts +++ b/packages/db/src/services/event.service.ts @@ -144,7 +144,7 @@ export async function getEvents( name: { in: names, }, - project_id: events[0]?.project_id, + projectId: events[0]?.project_id, }, select: options.meta === true ? undefined : options.meta, }); @@ -265,7 +265,7 @@ export async function getEventList({ sb.where.projectId = `project_id = ${escape(projectId)}`; if (profileId) { - sb.where.deviceId = `device_id IN (SELECT device_id as did FROM openpanel.events WHERE profile_id = ${escape(profileId)} group by did)`; + sb.where.deviceId = `device_id IN (SELECT device_id as did FROM events WHERE profile_id = ${escape(profileId)} group by did)`; } if (events && events.length > 0) { @@ -357,7 +357,7 @@ export function createBotEvent({ export function getConversionEventNames(projectId: string) { return db.eventMeta.findMany({ where: { - project_id: projectId, + projectId, conversion: true, }, }); diff --git a/packages/db/src/services/organization.service.ts b/packages/db/src/services/organization.service.ts index cb0821c9..9dba8edd 100644 --- a/packages/db/src/services/organization.service.ts +++ b/packages/db/src/services/organization.service.ts @@ -11,7 +11,7 @@ import { db } from '../prisma-client'; export type IServiceOrganization = ReturnType; export type IServiceInvite = ReturnType; export type IServiceMember = ReturnType; -export type IServiceProjectAccess = ReturnType; +export type IServiceProjectAccess = ProjectAccess; export function transformOrganization(org: Organization) { return { @@ -21,15 +21,6 @@ export function transformOrganization(org: Organization) { }; } -export function transformAccess(access: ProjectAccess) { - return { - projectId: access.project_id, - userId: access.user_id, - level: access.level, - organizationSlug: access.organization_slug, - }; -} - export async function getCurrentOrganizations() { const session = auth(); const organizations = await clerkClient.users.getOrganizationMembershipList({ @@ -53,7 +44,7 @@ export async function getOrganizationByProjectId(projectId: string) { }); return clerkClient.organizations.getOrganization({ - slug: project.organization_slug, + slug: project.organizationSlug, }); } @@ -110,7 +101,7 @@ export async function getMembers(organizationSlug: string) { }), db.projectAccess.findMany({ where: { - organization_slug: organizationSlug, + organizationSlug, }, }), ]); @@ -118,11 +109,11 @@ export async function getMembers(organizationSlug: string) { return members .map((member) => { const projectAccess = access.filter( - (item) => item.user_id === member.publicUserData?.userId + (item) => item.userId === member.publicUserData?.userId ); return { ...member, - access: projectAccess.map(transformAccess), + access: projectAccess, }; }) .map(transformMember); diff --git a/packages/db/src/services/project.service.ts b/packages/db/src/services/project.service.ts index 1c82d38e..24042c28 100644 --- a/packages/db/src/services/project.service.ts +++ b/packages/db/src/services/project.service.ts @@ -1,17 +1,9 @@ import { auth } from '@clerk/nextjs'; -import { project } from 'ramda'; import type { Project } from '../prisma-client'; import { db } from '../prisma-client'; -export type IServiceProject = ReturnType; - -export function transformProject({ organization_slug, ...project }: Project) { - return { - organizationSlug: organization_slug, - ...project, - }; -} +export type IServiceProject = Project; export async function getProjectById(id: string) { const res = await db.project.findUnique({ @@ -24,46 +16,32 @@ export async function getProjectById(id: string) { return null; } - return transformProject(res); + return res; } -export async function getProjectsByOrganizationSlug(slug: string) { - const res = await db.project.findMany({ +export async function getProjectsByOrganizationSlug(organizationSlug: string) { + return db.project.findMany({ where: { - organization_slug: slug, + organizationSlug, }, orderBy: { createdAt: 'desc', }, }); - - return res.map(transformProject); } -export async function getCurrentProjects(slug: string) { +export async function getCurrentProjects(organizationSlug: string) { const session = auth(); if (!session.userId) { return []; } - const access = await db.projectAccess.findMany({ + return db.project.findMany({ where: { - organization_slug: slug, - user_id: session.userId, + organizationSlug, + }, + include: { + access: true, }, }); - - const res = await db.project.findMany({ - where: { - organization_slug: slug, - }, - }); - - if (access.length === 0) { - return res.map(transformProject); - } - - return res - .filter((project) => access.some((a) => a.project_id === project.id)) - .map(transformProject); } diff --git a/packages/db/src/services/reference.service.ts b/packages/db/src/services/reference.service.ts index 043a6cc0..951fe5b4 100644 --- a/packages/db/src/services/reference.service.ts +++ b/packages/db/src/services/reference.service.ts @@ -1,19 +1,7 @@ import type { Prisma, Reference } from '../prisma-client'; import { db } from '../prisma-client'; -export type IServiceReference = Omit & { - projectId: string; -}; - -export function transformReference({ - project_id, - ...item -}: Reference): IServiceReference { - return { - ...item, - projectId: project_id, - }; -} +export type IServiceReference = Reference; export async function getReferenceById(id: string) { const reference = await db.reference.findUnique({ @@ -26,7 +14,7 @@ export async function getReferenceById(id: string) { return null; } - return transformReference(reference); + return reference; } export async function getReferences({ @@ -38,11 +26,9 @@ export async function getReferences({ take?: number; skip?: number; }) { - const references = await db.reference.findMany({ + return db.reference.findMany({ where, take: take ?? 50, skip, }); - - return references.map(transformReference); } diff --git a/packages/db/src/services/reports.service.ts b/packages/db/src/services/reports.service.ts index 86703076..b33fb950 100644 --- a/packages/db/src/services/reports.service.ts +++ b/packages/db/src/services/reports.service.ts @@ -45,11 +45,11 @@ export function transformReport( ): IChartInput & { id: string } { return { id: report.id, - projectId: report.project_id, + projectId: report.projectId, events: (report.events as IChartEvent[]).map(transformReportEvent), breakdowns: report.breakdowns as IChartBreakdown[], - chartType: report.chart_type, - lineType: (report.line_type as IChartLineType) ?? lineTypes.monotone, + chartType: report.chartType, + lineType: (report.lineType as IChartLineType) ?? lineTypes.monotone, interval: report.interval, name: report.name || 'Untitled', range: (report.range as IChartRange) ?? timeRanges['1m'], @@ -64,7 +64,7 @@ export function getReportsByDashboardId(dashboardId: string) { return db.report .findMany({ where: { - dashboard_id: dashboardId, + dashboardId, }, }) .then((reports) => reports.map(transformReport)); diff --git a/packages/db/src/services/share.service.ts b/packages/db/src/services/share.service.ts index ba527388..a1149f52 100644 --- a/packages/db/src/services/share.service.ts +++ b/packages/db/src/services/share.service.ts @@ -10,3 +10,11 @@ export function getShareOverviewById(id: string) { }, }); } + +export function getShareByProjectId(projectId: string) { + return db.shareOverview.findUnique({ + where: { + projectId, + }, + }); +}