Add genre column to entries

Include genre data in entry search results and show it
in the entries table layout.

Signed-off-by: codex@lucy.xalior.com
This commit is contained in:
2026-01-10 21:53:31 +00:00
parent 5130a72641
commit 84dee2710c
2 changed files with 212 additions and 103 deletions

View File

@@ -74,6 +74,8 @@ export interface SearchResultItem {
id: number;
title: string;
isXrated: number;
genreId: number | null;
genreName?: string | null;
machinetypeId: number | null;
machinetypeName?: string | null;
languageId: string | null;
@@ -199,12 +201,15 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(whereExpr ?? sql`true`)
@@ -239,12 +244,15 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(sql`${entries.id} in (select entry_id from (${union}) as matches)`)
@@ -273,6 +281,8 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
@@ -280,6 +290,7 @@ export async function searchEntries(params: SearchParams): Promise<PagedResult<S
})
.from(searchByTitles)
.innerJoin(entries, eq(entries.id, searchByTitles.entryId))
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(like(searchByTitles.entryTitle, pattern))
@@ -1170,6 +1181,8 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
@@ -1177,6 +1190,7 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
})
.from(authors)
.innerJoin(entries, eq(entries.id, authors.entryId))
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(eq(authors.labelId, labelId))
@@ -1200,6 +1214,8 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
@@ -1207,6 +1223,7 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont
})
.from(authors)
.innerJoin(entries, eq(entries.id, authors.entryId))
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
@@ -1236,6 +1253,8 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
@@ -1243,6 +1262,7 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
})
.from(publishers)
.innerJoin(entries, eq(entries.id, publishers.entryId))
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(eq(publishers.labelId, labelId))
@@ -1266,6 +1286,8 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
@@ -1273,6 +1295,7 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon
})
.from(publishers)
.innerJoin(entries, eq(entries.id, publishers.entryId))
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
@@ -1409,12 +1432,15 @@ export async function entriesByGenre(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(eq(entries.genretypeId, genreId))
@@ -1435,12 +1461,15 @@ export async function entriesByGenre(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(and(eq(entries.genretypeId, genreId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
@@ -1470,12 +1499,15 @@ export async function entriesByLanguage(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(eq(entries.languageId, langId))
@@ -1496,12 +1528,15 @@ export async function entriesByLanguage(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(and(eq(entries.languageId, langId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))
@@ -1531,12 +1566,15 @@ export async function entriesByMachinetype(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(eq(entries.machinetypeId, mtId))
@@ -1557,12 +1595,15 @@ export async function entriesByMachinetype(
id: entries.id,
title: entries.title,
isXrated: entries.isXrated,
genreId: entries.genretypeId,
genreName: genretypes.name,
machinetypeId: entries.machinetypeId,
machinetypeName: machinetypes.name,
languageId: entries.languageId,
languageName: languages.name,
})
.from(entries)
.leftJoin(genretypes, eq(genretypes.id, entries.genretypeId))
.leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId))
.leftJoin(languages, eq(languages.id, entries.languageId))
.where(and(eq(entries.machinetypeId, mtId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`))