You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.3 KiB
36 lines
1.3 KiB
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,
|
|
});
|
|
});
|
|
|