55 lines
1.6 KiB
TypeScript
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' })
|
|
}
|
|
})
|