import { eq, sql } from 'drizzle-orm'; import useDatabase from '~/composables/useDatabase'; import { explorerContentTable } from '~/db/schema'; import { convertContentFromText } from '~/shared/general.utils'; export default defineEventHandler(async (e) => { const path = decodeURIComponent(getRouterParam(e, "path") ?? ''); const query = getQuery(e); if(!path) { setResponseStatus(e, 404); return; } const db = useDatabase(); const content = db.select({ 'content': sql`cast(${explorerContentTable.content} as TEXT)`.as('content'), 'private': explorerContentTable.private, 'type': explorerContentTable.type, 'owner': explorerContentTable.owner, 'visit': explorerContentTable.visit, }).from(explorerContentTable).where(eq(explorerContentTable.path, sql.placeholder('path'))).prepare().get({ path }); if(content !== undefined) { const session = await getUserSession(e); if(!session || !session.user || session.user.id !== content.owner) { if(content.private) { setResponseStatus(e, 404); return; } else { content.content = content.content.replace(/%%(.+)%%/g, ""); } } if(query.type === 'view') { db.update(explorerContentTable).set({ visit: content.visit + 1 }).where(eq(explorerContentTable.path, path)).run(); } if(query.type === 'editing') { content.content = convertFromStorableLinks(content.content); } return convertContentFromText(content.type, content.content); } setResponseStatus(e, 404); return; }); export function convertFromStorableLinks(content: string): string { /*return content.replaceAll(/!?\[\[([^\[\]\|\#]+)?(#+[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/g, (e: string, a1?: string, a2?: string , a3?: string) => { const parsed = parsePath(a1 ?? '%%%%----%%%%----%%%%'); const replacer = path.find(e => e.endsWith(parsed)) ?? parsed; const value = `[[${replacer}${a2 ?? ''}${(!a3 && replacer !== parsed ? '|' + a1 : a3) ?? ''}]]`; return value; });*/ return content; }