Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/lib/prisma/prisma-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ export default function getPrismaClient(): PrismaClient {
return global.prismaClient
}

export { getPrismaClient as usePrisma }
export { getPrismaClient as usePrisma }
export { getPrismaClient as useDB }
97 changes: 49 additions & 48 deletions src/lib/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -8,84 +8,85 @@ datasource db {
}

model user {
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
ghLogin String @unique
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
ghLogin String @unique

name String
defaultTeam String
bio String?
name String
defaultTeam String
bio String?

teams teamMember[]
result result[]
teams teamMember[]
result result[]
}

model team {
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
name String @unique
avatarUrl String?
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
name String @unique
avatarUrl String?

members teamMember[]
projects project[]
members teamMember[]
projects project[]
}

model teamMember {
createdAt DateTime? @default(now()) @db.Timestamptz(6)
member user @relation(fields: [userId], references: [id])
team team @relation(fields: [teamId], references: [id])
userId Int
teamId Int
createdAt DateTime? @default(now()) @db.Timestamptz(6)
member user @relation(fields: [userId], references: [id])
team team @relation(fields: [teamId], references: [id])
userId Int
teamId Int

@@id([userId, teamId])
}

model project {
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
name String
description String?
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
name String
description String?

projectOwner team @relation(fields: [projectOwnerName], references: [name])
projectOwnerName String
projectOwner team @relation(fields: [projectOwnerName], references: [name])
projectOwnerName String

repos repo[]

repos repo[]
@@unique(fields: [name, projectOwnerName], name: "name_projectOwnerName")
}

model repo {
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
owner String
repo String
description String?
parentProject Int
project project? @relation(fields: [parentProject], references: [id], onDelete: NoAction, onUpdate: NoAction)
tests test[]
id Int @id @default(autoincrement())
createdAt DateTime? @default(now()) @db.Timestamptz(6)
owner String
repo String
description String?
parentProjectId Int

tests test[]
project project? @relation(fields: [parentProjectId], references: [id], onDelete: NoAction, onUpdate: NoAction)

@@unique(fields: [repo, parentProject], name: "repo_project")
@@unique(fields: [repo, parentProjectId], name: "repo_project")
}

model test {
id Int @id @default(autoincrement())
path String
name String
repo repo @relation(fields: [repoId], references: [id])
repoId Int
results result[]
id Int @id @default(autoincrement())
path String
name String
repo repo @relation(fields: [repoId], references: [id])
repoId Int
results result[]

@@unique(fields: [path, repoId], name: "test_repo")
}

model result {
id Int @id @default(autoincrement())
timestamp DateTime @default(now()) @db.Timestamptz(6)
test test @relation(fields: [testId], references: [id])
testId Int
data String?
user user @relation(fields: [ghLogin], references: [ghLogin])
ghLogin String
id Int @id @default(autoincrement())
timestamp DateTime @default(now()) @db.Timestamptz(6)
test test @relation(fields: [testId], references: [id])
testId Int
data String?
user user @relation(fields: [ghLogin], references: [ghLogin])
ghLogin String

@@unique(fields: [id, testId], name: "result_test")
}
31 changes: 16 additions & 15 deletions src/pages/api/projects/index.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
import getPrismaClient from '@prismaClient'
import { NextApiRequest } from 'next'
import { useDB } from '@prismaClient'
import type { NextApiRequest, NextApiResponse } from 'next'

/**
* !todo: clean up cause it's a mess
* !todo: add middleware to parse json body cause it's cringe that that is not done for us
* Ko6a projects API
*/
export default async function handler(req: NextApiRequest, res) {
const prisma = getPrismaClient()

if (req.method === 'GET') {
const projects = await prisma.project.findMany({ include: { repos: true } })
if (projects) {
res.json(projects)
} else {
return res.status(404).json({ error: 'No projects found' })
export default async function projectsApi(req: NextApiRequest, res: NextApiResponse) {
const { project } = useDB()

switch (req.method) {
case 'GET': {
const projects = await project.findMany({ include: { repos: true } })
if (projects) {
return res.json(projects)
} else {
return res.status(404).json({ error: 'Project not found' })
}
}
} else {
return res.status(405).json({ error: 'Method not allowed' })
default:
return res.status(405).end()
}
}
29 changes: 29 additions & 0 deletions src/pages/api/repos/[repoName].ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { useDB } from '@prismaClient'
import type { NextApiRequest, NextApiResponse } from 'next'

export default async function repoAPI(req: NextApiRequest, res: NextApiResponse) {
const { repoName, team, project }: any = req.query
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const { repoName, team, project }: any = req.query
const { repoName, team, project } : any = req.query

const { repo } = useDB()

switch (req.method) {
case 'GET': {
const repoData = await repo.findFirst({
where: {
repo: repoName,
project: {
name: project,
projectOwner: {
name: team
}
}
}
})

repoData
? res.status(200).json(repoData)
: res.status(404).json({ message: 'Repo not found' })
}
default:
return res.status(405)
}
}
9 changes: 9 additions & 0 deletions src/pages/api/repos/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { useDB } from '@prismaClient'
import type { NextApiRequest, NextApiResponse } from 'next'

export default function reposAPI(req: NextApiRequest, res: NextApiResponse) {

// currently need to be able to get a list of repos for a given project
// and a single repo

}
3 changes: 3 additions & 0 deletions src/pages/api/results/[id].ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { NextApiRequest } from 'next'
import { usePrisma } from '@prismaClient'

/**
* Ko6a test results API
*/
export default async function handler(req: NextApiRequest, res) {
const { method } = req
const { result } = usePrisma()
Expand Down
3 changes: 2 additions & 1 deletion src/pages/api/teams/[team]/projects/[project]/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import getPrismaClient from '@prismaClient'
import { NextApiRequest, NextApiResponse } from 'next'

// project API for a given team
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
const { team, project }: any = req.query
const prisma = getPrismaClient()
Expand Down Expand Up @@ -28,7 +29,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)

// if project is found, delete all child repos
if (projectToDelete) {
await prisma.repo.deleteMany({ where: { parentProject: projectToDelete.id } })
await prisma.repo.deleteMany({ where: { parentProjectId: projectToDelete.id } })
}
const deletedProject = await prisma.project.delete({ where: { id: projectToDelete.id } })
if (deletedProject) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export interface Repo {
parentProject: string
}

// endpoint handler that returns a list of repos for a project
// this returns a list of repos for a project under a given team
export default async function repos(req: NextApiRequest, res: NextApiResponse) {
const { project, team }: any = req.query
const prisma = getPrismaClient()
Expand All @@ -28,7 +28,7 @@ export default async function repos(req: NextApiRequest, res: NextApiResponse) {
owner,
repo,
description,
parentProject: projectData.id
parentProjectId: projectData.id
}})
res.status(201).json({ message: 'Repo created!', repo: newRepo })
}
Expand Down
3 changes: 3 additions & 0 deletions src/pages/api/tests/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { NextApiRequest } from 'next'
import { usePrisma } from '@prismaClient'

/**
* Ko6a tests API
*/
export default async function handler(req: NextApiRequest, res) {
const { method } = req
const { test, result } = usePrisma()
Expand Down
3 changes: 3 additions & 0 deletions src/pages/projects/[project].js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ export default function Project({ ...props }) {
const { data: project, error } = useSWR(projectName && `/api/teams/${currentTeam}/projects/${projectName}`)
const { isOpen: newRepoModalIsOpen, onOpen: onNewRepoModalOpen, onClose: onNewRepoModalClose } = useDisclosure()

const { data, _error } = useSWR('/api/repos/ko6a?projectName=beanteam-proj')
// console.log("🚀 ~ file: [project].js ~ line 20 ~ Project ~ data", data)

if (error) return 'scawy :('
if (!project) return null

Expand Down
10 changes: 7 additions & 3 deletions src/pages/projects/[project]/[repo].js
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import { useContext } from 'react'
import useSWR from 'swr'
import { useRouter } from 'next/router'
import { Explorer } from '@components/projects/explorer'
import useSWR from 'swr'
import { TeamContext } from '@components/contexts/team-context'

export default function RepoPage({ ...props }) {
export default function RepoPage() {
const router = useRouter()
const { project, repo } = router?.query
const { currentTeam } = useContext(TeamContext)

const { data: repoData, error } = useSWR(project && currentTeam && `/api/teams/${currentTeam}/projects/${project}/repos/${repo}`)
const canFetch = project && currentTeam && repo
const repoQueryUrl = `/api/repos/${repo}?team=${currentTeam}&project=${project}`
const { data: repoData, error } = useSWR(canFetch && repoQueryUrl)

console.log("🚀 ~ file: [repo].js ~ line 15 ~ RepoPage ~ repoData", repoData)

if (error) {
console.log(error)
Expand Down
3 changes: 2 additions & 1 deletion src/pages/projects/[project]/[repo]/[...file].js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ export default function FilePage({ ...props }) {
const { currentTeam } = useContext(TeamContext)

const canFetch = project && currentTeam && repo
const { data: repoData, error } = useSWR(canFetch && `/api/teams/${currentTeam}/projects/${project}/repos/${repo}`)
const repoQueryUrl = `/api/repos/${repo}?team=${currentTeam}&project=${project}`
const { data: repoData, error } = useSWR(canFetch && repoQueryUrl)

if (error) {
console.log(error)
Expand Down