feat(media): add reference-aware S3 image delivery
This commit is contained in:
+25
-9
@@ -8,6 +8,7 @@ import {
|
||||
characters,
|
||||
dataSources,
|
||||
dataSourceVersions,
|
||||
media,
|
||||
pageDataSources,
|
||||
pages,
|
||||
slugAliases,
|
||||
@@ -307,11 +308,18 @@ export async function getMediaVisibility(mediaId: string): Promise<{
|
||||
retained: boolean;
|
||||
}> {
|
||||
const db = getDb();
|
||||
const referencedBlocks = await db
|
||||
.select({ block: blocks, page: pages, character: characters })
|
||||
.from(blocks)
|
||||
.innerJoin(pages, eq(pages.id, blocks.pageId))
|
||||
.innerJoin(characters, eq(characters.id, pages.characterId));
|
||||
const [referencedBlocks, portraitCharacters, [mediaRecord]] = await Promise.all([
|
||||
db
|
||||
.select({ block: blocks, page: pages, character: characters })
|
||||
.from(blocks)
|
||||
.innerJoin(pages, eq(pages.id, blocks.pageId))
|
||||
.innerJoin(characters, eq(characters.id, pages.characterId)),
|
||||
db
|
||||
.select({ character: characters })
|
||||
.from(characters)
|
||||
.where(eq(characters.portraitMediaId, mediaId)),
|
||||
db.select().from(media).where(eq(media.id, mediaId)).limit(1),
|
||||
]);
|
||||
|
||||
const hasMediaId = (value: unknown): boolean => {
|
||||
if (Array.isArray(value)) return value.some(hasMediaId);
|
||||
@@ -325,9 +333,17 @@ export async function getMediaVisibility(mediaId: string): Promise<{
|
||||
hasMediaId(block.config),
|
||||
);
|
||||
return {
|
||||
public: references.some(
|
||||
({ page, character }) => page.visible && character.visible,
|
||||
),
|
||||
retained: references.length > 0,
|
||||
public:
|
||||
references.some(
|
||||
({ page, character }) => page.visible && character.visible,
|
||||
) || portraitCharacters.some(({ character }) => character.visible),
|
||||
retained:
|
||||
references.length > 0 ||
|
||||
portraitCharacters.length > 0 ||
|
||||
Boolean(
|
||||
mediaRecord &&
|
||||
(mediaRecord.currentReferenceCount > 0 ||
|
||||
mediaRecord.revisionReferenceCount > 0),
|
||||
),
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user