feat: add episode total handling and display across movie pages

- Implemented `getEpisodeDisplay` function to format episode information for movies.
- Updated movie display components to show episode information using the new function.
- Added `episodeTotal` field to the movies schema and updated related API endpoints to handle this new field.
- Enhanced movie synchronization process to fetch and store episode totals from external sources.
- Created a new error page component for better user experience on 404 errors.
- Added migration scripts to update the database schema for episode totals.
This commit is contained in:
ngthanhvu
2026-07-23 02:56:24 -04:00
parent a35403a5b9
commit f42dff9b0a
19 changed files with 983 additions and 124 deletions
+17 -2
View File
@@ -19,7 +19,9 @@ export default defineEventHandler(async (event) => {
.where(and(eq(movies.slug, slug), eq(movies.source, source), eq(movies.active, true)))
.limit(1)
if (!existing.length) {
let recordToUpdate = existing.length ? existing[0] : null
if (!recordToUpdate) {
const fallback = await db
.select()
.from(movies)
@@ -29,9 +31,22 @@ export default defineEventHandler(async (event) => {
if (!fallback.length) {
throw createError({ statusCode: 404, statusMessage: 'Phim không tồn tại hoặc đã bị ẩn' })
}
recordToUpdate = fallback[0]
}
const refs = parseSourceRefs(query.sources || query.srcs, query.source, slug)
return await getMovieDetailGroup(refs)
const detail = await getMovieDetailGroup(refs)
if (detail.episodeTotal && recordToUpdate) {
try {
await db
.update(movies)
.set({ episodeTotal: detail.episodeTotal })
.where(eq(movies.id, recordToUpdate.id))
} catch {
}
}
return detail
})