Files
Avtex/app/server/api/git/repository/[canvasId].get.ts
T

55 lines
1.6 KiB
TypeScript

import { requireAuth } from '~/server/utils/auth'
import { resolveRepo } from '~/server/utils/giteaApi'
import { prisma } from '~/server/utils/prisma'
export default defineEventHandler(async (event) => {
const user = requireAuth(event)
const canvasId = getRouterParam(event, 'canvasId')
if (!canvasId) {
throw createError({ statusCode: 400, message: 'Canvas ID is required' })
}
const canvas = await prisma.canvas.findUnique({ where: { id: canvasId } })
const opts = canvas
? { username: user.username, groupId: canvas.groupId, isPublic: canvas.isPublic }
: { username: user.username }
const { owner, repo } = resolveRepo(opts)
const config = useRuntimeConfig()
const { giteaUrl: url, giteaToken: token } = config
try {
const res = await $fetch<any>(`${url}/api/v1/repos/${owner}/${repo}`, {
headers: {
'Authorization': `token ${token}`,
'Accept': 'application/json'
}
})
return {
success: true,
repository: {
id: res.id,
name: res.name,
owner: res.owner.login,
url: res.html_url,
cloneUrl: res.clone_url,
isPrivate: res.private,
type: 'personal',
ownerId: user.id,
createdAt: res.created_at,
updatedAt: res.updated_at
}
}
} catch (error: any) {
if (error.response?.status === 404) {
return { success: false, repository: null, message: 'Repository not found' }
}
console.error('Failed to fetch repository:', error)
throw createError({ statusCode: 500, message: 'Failed to fetch repository details from Gitea' })
}
})