import { POST_MEDIA_PUBLIC_PREFIX } from "#server/constants/media"; import { listUserMediaAssetsPage } from "#server/service/media"; import { parseMeMediaAssetsQuery } from "#server/utils/me-media-assets-query"; export default defineWrappedResponseHandler(async (event) => { const user = await event.context.auth.requireUser(); const q = getQuery(event); const searchRaw = Array.isArray(q.search) ? q.search[0] : q.search; const { page, pageSize, search } = parseMeMediaAssetsQuery({ page: typeof q.page === "string" ? q.page : undefined, pageSize: typeof q.pageSize === "string" ? q.pageSize : undefined, search: typeof searchRaw === "string" ? searchRaw : undefined, }); const { items, total } = await listUserMediaAssetsPage(user.id, page, pageSize, { userId: user.id, role: user.role, }, { search }); return R.success({ items: items.map((r) => ({ id: r.id, storageKey: r.storageKey, publicPath: `${POST_MEDIA_PUBLIC_PREFIX}${r.storageKey}`, mime: r.mime, sizeBytes: r.sizeBytes, createdAt: r.createdAt.toISOString(), refCount: r.refCount, userNote: r.userNote, refContexts: r.refContexts, canDelete: r.canDelete, deleteBlockedReason: r.deleteBlockedReason, deleteGraceExpiresAt: r.deleteGraceExpiresAt, })), total, }); });