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
+6
View File
@@ -12,6 +12,7 @@ export interface NormalizedMovie {
year?: number
time?: string
episode?: string
episodeTotal?: string
quality?: string
lang?: string
type?: string
@@ -294,6 +295,7 @@ export function normalizeOphimMovie(movie: any, pathImage = OPHIM_IMAGE): Normal
year: Number(movie?.year) || undefined,
time: text(movie?.time),
episode: text(movie?.episode_current),
episodeTotal: movie?.episode_total ? String(movie.episode_total).trim() || undefined : undefined,
quality: text(movie?.quality),
lang: text(movie?.lang),
type: text(movie?.type),
@@ -316,6 +318,7 @@ export function normalizeKkphimMovie(movie: any, pathImage = KKPHIM_IMAGE): Norm
year: Number(movie?.year) || undefined,
time: text(movie?.time),
episode: text(movie?.episode_current),
episodeTotal: movie?.episode_total != null ? String(movie.episode_total).trim() || undefined : undefined,
quality: text(movie?.quality),
lang: text(movie?.lang),
type: text(movie?.type),
@@ -340,6 +343,9 @@ function normalizeNguoncMovie(movie: any): NormalizedMovie {
year: Number(movie?.year || movie?.release_year) || undefined,
time: text(movie?.time || movie?.duration),
episode: text(movie?.episode_current || movie?.current_episode),
episodeTotal: (movie?.episode_total || movie?.total_episodes) != null
? String(movie.episode_total || movie.total_episodes).trim() || undefined
: undefined,
quality: text(movie?.quality),
lang: text(movie?.language || movie?.lang),
type: text(movie?.type),