chore(root): rename organizationSlug to organizationId (#91)
This commit is contained in:
committed by
GitHub
parent
0221948aab
commit
cd16ac878d
@@ -74,13 +74,12 @@ model Member {
|
||||
}
|
||||
|
||||
model Project {
|
||||
id String @id @default(dbgenerated("gen_random_uuid()"))
|
||||
name String
|
||||
organizationSlug String
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId String?
|
||||
eventsCount Int @default(0)
|
||||
types ProjectType[] @default([])
|
||||
id String @id @default(dbgenerated("gen_random_uuid()"))
|
||||
name String
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
eventsCount Int @default(0)
|
||||
types ProjectType[] @default([])
|
||||
|
||||
events Event[]
|
||||
profiles Profile[]
|
||||
@@ -108,17 +107,16 @@ enum AccessLevel {
|
||||
}
|
||||
|
||||
model ProjectAccess {
|
||||
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
|
||||
projectId String
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
organizationSlug String
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId String?
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
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])
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
level AccessLevel
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @default(now()) @updatedAt
|
||||
|
||||
@@map("project_access")
|
||||
}
|
||||
@@ -169,17 +167,16 @@ enum ClientType {
|
||||
}
|
||||
|
||||
model Client {
|
||||
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
|
||||
name String
|
||||
secret String?
|
||||
type ClientType @default(write)
|
||||
projectId String?
|
||||
project Project? @relation(fields: [projectId], references: [id])
|
||||
organizationSlug String
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId String?
|
||||
cors String?
|
||||
crossDomain Boolean @default(false)
|
||||
id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
|
||||
name String
|
||||
secret String?
|
||||
type ClientType @default(write)
|
||||
projectId String?
|
||||
project Project? @relation(fields: [projectId], references: [id])
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
cors String?
|
||||
crossDomain Boolean @default(false)
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @default(now()) @updatedAt
|
||||
@@ -208,14 +205,13 @@ enum ChartType {
|
||||
}
|
||||
|
||||
model Dashboard {
|
||||
id String @id @default(dbgenerated("gen_random_uuid()"))
|
||||
name String
|
||||
organizationSlug String
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId String?
|
||||
projectId String
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
reports Report[]
|
||||
id String @id @default(dbgenerated("gen_random_uuid()"))
|
||||
name String
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
projectId String
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
reports Report[]
|
||||
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @default(now()) @updatedAt
|
||||
@@ -269,16 +265,15 @@ model Waitlist {
|
||||
}
|
||||
|
||||
model ShareOverview {
|
||||
id String @unique
|
||||
projectId String @unique
|
||||
project Project @relation(fields: [projectId], references: [id])
|
||||
organizationSlug String
|
||||
organization Organization? @relation(fields: [organizationId], references: [id])
|
||||
organizationId 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])
|
||||
organization Organization @relation(fields: [organizationId], references: [id])
|
||||
organizationId String
|
||||
public Boolean @default(false)
|
||||
password String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @default(now()) @updatedAt
|
||||
|
||||
@@map("shares")
|
||||
}
|
||||
|
||||
@@ -8,10 +8,10 @@ export type IServiceClientWithProject = Prisma.ClientGetPayload<{
|
||||
};
|
||||
}>;
|
||||
|
||||
export async function getClientsByOrganizationSlug(organizationSlug: string) {
|
||||
export async function getClientsByOrganizationId(organizationId: string) {
|
||||
return db.client.findMany({
|
||||
where: {
|
||||
organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
include: {
|
||||
project: true,
|
||||
|
||||
@@ -66,10 +66,10 @@ export async function getOrganizationByProjectId(projectId: string) {
|
||||
return transformOrganization(project.organization);
|
||||
}
|
||||
|
||||
export async function getInvites(organizationSlug: string) {
|
||||
export async function getInvites(organizationId: string) {
|
||||
return db.member.findMany({
|
||||
where: {
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
userId: null,
|
||||
},
|
||||
include: {
|
||||
@@ -78,11 +78,11 @@ export async function getInvites(organizationSlug: string) {
|
||||
});
|
||||
}
|
||||
|
||||
export async function getMembers(organizationSlug: string) {
|
||||
export async function getMembers(organizationId: string) {
|
||||
const [members, access] = await Promise.all([
|
||||
db.member.findMany({
|
||||
where: {
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
userId: {
|
||||
not: null,
|
||||
},
|
||||
@@ -93,7 +93,7 @@ export async function getMembers(organizationSlug: string) {
|
||||
}),
|
||||
db.projectAccess.findMany({
|
||||
where: {
|
||||
organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
}),
|
||||
]);
|
||||
@@ -104,10 +104,10 @@ export async function getMembers(organizationSlug: string) {
|
||||
}));
|
||||
}
|
||||
|
||||
export async function getMember(organizationSlug: string, userId: string) {
|
||||
export async function getMember(organizationId: string, userId: string) {
|
||||
return db.member.findFirst({
|
||||
where: {
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
userId,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -44,10 +44,10 @@ export async function getProjectWithClients(id: string) {
|
||||
return res;
|
||||
}
|
||||
|
||||
export async function getProjectsByOrganizationSlug(organizationSlug: string) {
|
||||
export async function getProjectsByOrganizationId(organizationId: string) {
|
||||
return db.project.findMany({
|
||||
where: {
|
||||
organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'desc',
|
||||
@@ -55,7 +55,7 @@ export async function getProjectsByOrganizationSlug(organizationSlug: string) {
|
||||
});
|
||||
}
|
||||
|
||||
export async function getCurrentProjects(organizationSlug: string) {
|
||||
export async function getCurrentProjects(organizationId: string) {
|
||||
const session = auth();
|
||||
if (!session.userId) {
|
||||
return [];
|
||||
@@ -64,7 +64,7 @@ export async function getCurrentProjects(organizationSlug: string) {
|
||||
const [projects, members, access] = await Promise.all([
|
||||
db.project.findMany({
|
||||
where: {
|
||||
organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
orderBy: {
|
||||
eventsCount: 'desc',
|
||||
@@ -73,13 +73,13 @@ export async function getCurrentProjects(organizationSlug: string) {
|
||||
db.member.findMany({
|
||||
where: {
|
||||
userId: session.userId,
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
}),
|
||||
db.projectAccess.findMany({
|
||||
where: {
|
||||
userId: session.userId,
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
},
|
||||
}),
|
||||
]);
|
||||
|
||||
@@ -12,7 +12,7 @@ export async function getProjectAccess({
|
||||
try {
|
||||
// Check if user has access to the project
|
||||
const project = await getProjectById(projectId);
|
||||
if (!project?.organizationSlug) {
|
||||
if (!project?.organizationId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -20,12 +20,12 @@ export async function getProjectAccess({
|
||||
db.projectAccess.findMany({
|
||||
where: {
|
||||
userId,
|
||||
organizationId: project.organizationSlug,
|
||||
organizationId: project.organizationId,
|
||||
},
|
||||
}),
|
||||
db.member.findFirst({
|
||||
where: {
|
||||
organizationId: project.organizationSlug,
|
||||
organizationId: project.organizationId,
|
||||
userId,
|
||||
},
|
||||
}),
|
||||
|
||||
@@ -46,7 +46,7 @@ export const clientRouter = createTRPCRouter({
|
||||
z.object({
|
||||
name: z.string(),
|
||||
projectId: z.string(),
|
||||
organizationSlug: z.string(),
|
||||
organizationId: z.string(),
|
||||
cors: z.string().nullable(),
|
||||
crossDomain: z.boolean().optional(),
|
||||
type: z.enum(['read', 'write', 'root']).optional(),
|
||||
@@ -55,8 +55,7 @@ export const clientRouter = createTRPCRouter({
|
||||
.mutation(async ({ input }) => {
|
||||
const secret = `sec_${crypto.randomBytes(10).toString('hex')}`;
|
||||
const data: Prisma.ClientCreateArgs['data'] = {
|
||||
organizationSlug: input.organizationSlug,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
projectId: input.projectId,
|
||||
name: input.name,
|
||||
type: input.type ?? 'write',
|
||||
|
||||
@@ -50,7 +50,6 @@ export const dashboardRouter = createTRPCRouter({
|
||||
data: {
|
||||
id: await getId('dashboard', input.name),
|
||||
projectId: input.projectId,
|
||||
organizationSlug: project.organizationId!,
|
||||
organizationId: project.organizationId,
|
||||
name: input.name,
|
||||
},
|
||||
|
||||
@@ -13,8 +13,8 @@ async function createOrGetOrganization(
|
||||
input: z.infer<typeof zOnboardingProject>,
|
||||
userId: string,
|
||||
) {
|
||||
if (input.organizationSlug) {
|
||||
return await getOrganizationBySlug(input.organizationSlug);
|
||||
if (input.organizationId) {
|
||||
return await getOrganizationBySlug(input.organizationId);
|
||||
}
|
||||
|
||||
if (input.organization) {
|
||||
@@ -92,7 +92,6 @@ export const onboardingRouter = createTRPCRouter({
|
||||
data: {
|
||||
id: await getId('project', input.project),
|
||||
name: input.project,
|
||||
organizationSlug: organization.id,
|
||||
organizationId: organization.id,
|
||||
types,
|
||||
},
|
||||
@@ -102,7 +101,6 @@ export const onboardingRouter = createTRPCRouter({
|
||||
const client = await db.client.create({
|
||||
data: {
|
||||
name: `${project.name} Client`,
|
||||
organizationSlug: organization.id,
|
||||
organizationId: organization.id,
|
||||
projectId: project.id,
|
||||
type: 'write',
|
||||
|
||||
@@ -42,7 +42,7 @@ export const organizationRouter = createTRPCRouter({
|
||||
.mutation(async ({ input, ctx }) => {
|
||||
const access = await getOrganizationAccess({
|
||||
userId: ctx.session.userId,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
});
|
||||
|
||||
if (access?.role !== 'org:admin') {
|
||||
@@ -72,7 +72,7 @@ export const organizationRouter = createTRPCRouter({
|
||||
return db.member.create({
|
||||
data: {
|
||||
email,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
role: input.role,
|
||||
invitedById: ctx.session.userId,
|
||||
meta: {
|
||||
@@ -175,7 +175,7 @@ export const organizationRouter = createTRPCRouter({
|
||||
.input(
|
||||
z.object({
|
||||
userId: z.string(),
|
||||
organizationSlug: z.string(),
|
||||
organizationId: z.string(),
|
||||
access: z.array(z.string()),
|
||||
}),
|
||||
)
|
||||
@@ -186,7 +186,7 @@ export const organizationRouter = createTRPCRouter({
|
||||
|
||||
const access = await getOrganizationAccess({
|
||||
userId: ctx.session.userId,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
});
|
||||
|
||||
if (access?.role !== 'org:admin') {
|
||||
@@ -197,14 +197,13 @@ export const organizationRouter = createTRPCRouter({
|
||||
db.projectAccess.deleteMany({
|
||||
where: {
|
||||
userId: input.userId,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
},
|
||||
}),
|
||||
db.projectAccess.createMany({
|
||||
data: input.access.map((projectId) => ({
|
||||
userId: input.userId,
|
||||
organizationSlug: input.organizationSlug,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
projectId: projectId,
|
||||
level: 'read',
|
||||
})),
|
||||
|
||||
@@ -4,7 +4,7 @@ import {
|
||||
db,
|
||||
getId,
|
||||
getProjectByIdCached,
|
||||
getProjectsByOrganizationSlug,
|
||||
getProjectsByOrganizationId,
|
||||
} from '@openpanel/db';
|
||||
|
||||
import { getProjectAccess } from '../access';
|
||||
@@ -15,12 +15,12 @@ export const projectRouter = createTRPCRouter({
|
||||
list: protectedProcedure
|
||||
.input(
|
||||
z.object({
|
||||
organizationSlug: z.string().nullable(),
|
||||
organizationId: z.string().nullable(),
|
||||
}),
|
||||
)
|
||||
.query(async ({ input: { organizationSlug } }) => {
|
||||
if (organizationSlug === null) return [];
|
||||
return getProjectsByOrganizationSlug(organizationSlug);
|
||||
.query(async ({ input: { organizationId } }) => {
|
||||
if (organizationId === null) return [];
|
||||
return getProjectsByOrganizationId(organizationId);
|
||||
}),
|
||||
|
||||
update: protectedProcedure
|
||||
@@ -54,15 +54,14 @@ export const projectRouter = createTRPCRouter({
|
||||
.input(
|
||||
z.object({
|
||||
name: z.string().min(1),
|
||||
organizationSlug: z.string(),
|
||||
organizationId: z.string(),
|
||||
}),
|
||||
)
|
||||
.mutation(async ({ input: { name, organizationSlug } }) => {
|
||||
.mutation(async ({ input: { name, organizationId } }) => {
|
||||
return db.project.create({
|
||||
data: {
|
||||
id: await getId('project', name),
|
||||
organizationSlug: organizationSlug,
|
||||
organizationId: organizationSlug,
|
||||
organizationId,
|
||||
name: name,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -17,8 +17,7 @@ export const shareRouter = createTRPCRouter({
|
||||
},
|
||||
create: {
|
||||
id: uid.rnd(),
|
||||
organizationSlug: input.organizationSlug,
|
||||
organizationId: input.organizationSlug,
|
||||
organizationId: input.organizationId,
|
||||
projectId: input.projectId,
|
||||
public: input.public,
|
||||
password: input.password || null,
|
||||
|
||||
@@ -88,17 +88,6 @@ const enforceAccess = t.middleware(async ({ ctx, next, rawInput }) => {
|
||||
}
|
||||
}
|
||||
|
||||
if (has('organizationSlug', rawInput)) {
|
||||
const access = await getOrganizationAccessCached({
|
||||
userId: ctx.session.userId!,
|
||||
organizationId: rawInput.organizationSlug as string,
|
||||
});
|
||||
|
||||
if (!access) {
|
||||
throw TRPCAccessError('You do not have access to this organization');
|
||||
}
|
||||
}
|
||||
|
||||
return next();
|
||||
});
|
||||
|
||||
|
||||
@@ -88,13 +88,13 @@ export const zReportInput = zChartInput.extend({
|
||||
|
||||
export const zInviteUser = z.object({
|
||||
email: z.string().email(),
|
||||
organizationSlug: z.string(),
|
||||
organizationId: z.string(),
|
||||
role: z.enum(['org:admin', 'org:member']),
|
||||
access: z.array(z.string()),
|
||||
});
|
||||
|
||||
export const zShareOverview = z.object({
|
||||
organizationSlug: z.string(),
|
||||
organizationId: z.string(),
|
||||
projectId: z.string(),
|
||||
password: z.string().nullable(),
|
||||
public: z.boolean(),
|
||||
@@ -110,7 +110,7 @@ export const zCreateReference = z.object({
|
||||
export const zOnboardingProject = z
|
||||
.object({
|
||||
organization: z.string().optional(),
|
||||
organizationSlug: z.string().optional(),
|
||||
organizationId: z.string().optional(),
|
||||
project: z.string().min(3),
|
||||
domain: z.string().url().or(z.literal('').or(z.null())),
|
||||
website: z.boolean(),
|
||||
@@ -118,7 +118,7 @@ export const zOnboardingProject = z
|
||||
backend: z.boolean(),
|
||||
})
|
||||
.superRefine((data, ctx) => {
|
||||
if (!data.organization && !data.organizationSlug) {
|
||||
if (!data.organization && !data.organizationId) {
|
||||
ctx.addIssue({
|
||||
code: 'custom',
|
||||
message: 'Organization is required',
|
||||
@@ -127,7 +127,7 @@ export const zOnboardingProject = z
|
||||
ctx.addIssue({
|
||||
code: 'custom',
|
||||
message: 'Organization is required',
|
||||
path: ['organizationSlug'],
|
||||
path: ['organizationId'],
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user