51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { eq, sql } from 'drizzle-orm';
|
|
import useDatabase from '~/composables/useDatabase';
|
|
import { projectFilesTable } from '~/db/schema';
|
|
|
|
export default defineCachedEventHandler(async (e) => {
|
|
const id = getRouterParam(e, "id") ?? '';
|
|
|
|
if(!id)
|
|
{
|
|
setResponseStatus(e, 404);
|
|
return;
|
|
}
|
|
|
|
const db = useDatabase();
|
|
|
|
const content = db.select({
|
|
'id': projectFilesTable.id,
|
|
'path': projectFilesTable.path,
|
|
'owner': projectFilesTable.owner,
|
|
'title': projectFilesTable.title,
|
|
'type': projectFilesTable.type,
|
|
'navigable': projectFilesTable.navigable,
|
|
'private': projectFilesTable.private,
|
|
}).from(projectFilesTable).where(eq(projectFilesTable.id, sql.placeholder('id'))).prepare().get({ id });
|
|
|
|
if(content !== undefined)
|
|
{
|
|
const session = await getUserSession(e);
|
|
|
|
if(content.private && (!session || !session.user))
|
|
{
|
|
setResponseStatus(e, 404);
|
|
return;
|
|
}
|
|
if(session && session.user && content.private && session.user.id !== content.owner)
|
|
{
|
|
setResponseStatus(e, 404);
|
|
return;
|
|
}
|
|
|
|
return {
|
|
path: content.path,
|
|
owner: content.owner,
|
|
title: content.title,
|
|
type: content.type,
|
|
};
|
|
}
|
|
|
|
setResponseStatus(e, 404);
|
|
return;
|
|
}, { getKey: (e) => getRouterParam(e, "id") ?? '', }); |