Files
e2b-dev--e2b/pages/api/project.ts
T
2023-04-23 19:28:57 +00:00

153 lines
3.3 KiB
TypeScript

import { createServerSupabaseClient } from '@supabase/auth-helpers-nextjs'
import { NextApiRequest, NextApiResponse } from 'next'
import { PostProjectBody } from 'pages/new'
import { prisma } from 'db/prisma'
import { serverCreds } from 'db/credentials'
async function postProject(req: NextApiRequest, res: NextApiResponse) {
const {
id,
state,
} = req.body as PostProjectBody
try {
const supabase = createServerSupabaseClient({ req, res }, serverCreds)
const { data: { session } } = await supabase.auth.getSession()
if (!session) {
return res.status(401).json({
error: 'not_authenticated',
description: 'The user does not have an active session or is not authenticated',
})
}
const user = await prisma.auth_users.findUnique({
where: {
id: session.user.id,
},
include: {
users_teams: {
include: {
teams: true,
}
}
},
})
if (!user) {
return res.status(401).json({
error: 'invalid_user',
})
}
const defaultTeam = user.users_teams.find(t => t.teams.is_default)
if (!defaultTeam) {
return res.status(401).json({
error: 'invalid_default_team',
})
}
const project = await prisma.projects.create({
data: {
id,
data: { state } as any,
teams: {
connect: {
id: defaultTeam.teams.id,
},
},
name: id,
},
select: {
created_at: false,
id: true,
}
})
res.status(200).json(project)
} catch (err: any) {
console.error(err)
res.status(500).json({ statusCode: 500, message: err.message })
}
}
async function deleteProject(req: NextApiRequest, res: NextApiResponse) {
const { id } = req.body as PostProjectBody
try {
const supabase = createServerSupabaseClient({ req, res }, serverCreds)
const { data: { session } } = await supabase.auth.getSession()
if (!session) {
return res.status(401).json({
error: 'not_authenticated',
description: 'The user does not have an active session or is not authenticated',
})
}
const project = await prisma.projects.findFirst({
where: {
AND: [
{
id: {
equals: id,
}
},
{
teams: {
users_teams: {
some: {
user_id: {
equals: session.user.id,
},
},
},
},
},
],
},
})
if (!project) {
res.status(404).json({})
return
}
await prisma.deployments.deleteMany({
where: {
project_id: id,
},
})
await prisma.projects.delete({
where: {
id,
},
})
res.status(200).json({})
} catch (err: any) {
console.error(err)
res.status(500).json({ statusCode: 500, message: err.message })
}
}
async function handler(
req: NextApiRequest,
res: NextApiResponse,
) {
if (req.method === 'POST') {
await postProject(req, res)
return
}
if (req.method === 'DELETE') {
await deleteProject(req, res)
return
}
res.setHeader('Allow', 'POST')
res.status(405).json({ statusCode: 405, message: 'Method Not Allowed' })
return
}
export default handler