Upsert personalOrg when listing orgs

This commit is contained in:
David Corbitt
2023-08-08 12:07:18 -07:00
parent 6188f55569
commit 49c68fdbf2
4 changed files with 42 additions and 43 deletions

View File

@@ -113,24 +113,34 @@ export default function Settings() {
</VStack>
<CopiableCode code={`OPENPIPE_API_KEY=${apiKey}`} />
<Divider />
<VStack alignItems="flex-start">
<Subtitle color="red.600">Danger Zone</Subtitle>
<Text fontSize="sm">
Permanently delete your project and all of its data. This action cannot be undone.
</Text>
<HStack
as={Button}
isDisabled={selectedOrg?.role !== "ADMIN"}
colorScheme="red"
variant="outline"
borderRadius={4}
mt={2}
onClick={deleteProjectOpen.onOpen}
>
<Icon as={BsTrash} />
<Text>Delete {selectedOrg?.name}</Text>
</HStack>
</VStack>
{selectedOrg?.personalOrgUserId ? (
<VStack alignItems="flex-start">
<Subtitle>Personal Project</Subtitle>
<Text fontSize="sm">
This project is {selectedOrg?.personalOrgUser?.name}'s personal project. It cannot be
deleted.
</Text>
</VStack>
) : (
<VStack alignItems="flex-start">
<Subtitle color="red.600">Danger Zone</Subtitle>
<Text fontSize="sm">
Permanently delete your project and all of its data. This action cannot be undone.
</Text>
<HStack
as={Button}
isDisabled={selectedOrg?.role !== "ADMIN"}
colorScheme="red"
variant="outline"
borderRadius={4}
mt={2}
onClick={deleteProjectOpen.onOpen}
>
<Icon as={BsTrash} />
<Text>Delete {selectedOrg?.name}</Text>
</HStack>
</VStack>
)}
</VStack>
</VStack>
</AppShell>

View File

@@ -5,6 +5,7 @@ import { z } from "zod";
import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc";
import { prisma } from "~/server/db";
import { generateApiKey } from "~/server/utils/generateApiKey";
import userOrg from "~/server/utils/userOrg";
import {
requireCanModifyOrganization,
requireCanViewOrganization,
@@ -33,30 +34,8 @@ export const organizationsRouter = createTRPCRouter({
});
if (!organizations.length) {
const newOrgId = uuidv4();
const [newOrg] = await prisma.$transaction([
prisma.organization.create({
data: {
id: newOrgId,
personalOrgUserId: userId,
},
}),
prisma.organizationUser.create({
data: {
userId,
organizationId: newOrgId,
role: "ADMIN",
},
}),
prisma.apiKey.create({
data: {
name: "Default API Key",
organizationId: newOrgId,
apiKey: generateApiKey(),
},
}),
]);
organizations.push(newOrg);
// TODO: We should move this to a separate endpoint that is called on sign up
await userOrg(userId);
}
return organizations;
@@ -70,6 +49,7 @@ export const organizationsRouter = createTRPCRouter({
},
include: {
apiKeys: true,
personalOrgUser: true,
},
}),
prisma.organizationUser.findFirst({

View File

@@ -1,4 +1,5 @@
import { prisma } from "~/server/db";
import { generateApiKey } from "./generateApiKey";
export default async function userOrg(userId: string) {
return await prisma.organization.upsert({
@@ -14,6 +15,14 @@ export default async function userOrg(userId: string) {
role: "ADMIN",
},
},
apiKeys: {
create: [
{
name: "Default API Key",
apiKey: generateApiKey(),
},
],
},
},
});
}