diff --git a/src/app/services/sidebar.ts b/src/app/services/sidebar.ts index f7ae53b..a2b4595 100644 --- a/src/app/services/sidebar.ts +++ b/src/app/services/sidebar.ts @@ -4,6 +4,12 @@ import { Request, Response, NextFunction, RequestHandler } from "express"; +import { IBroadcastShow } from "../models/broadcast-show.js"; +import { IEpisode } from "../models/episode.js"; + +import { BroadcastShowService } from "./broadcast-show.js"; +import { EpisodeService } from "./episode.js"; + import { DtpPlatform, DtpService } from "../../lib/dtplib.js"; export class SidebarService extends DtpService { @@ -19,15 +25,30 @@ export class SidebarService extends DtpService { } middleware(): RequestHandler { + const showService = this.getService("broadcastShow"); + const episodeService = this.getService("episode"); return async ( _req: Request, - _res: Response, + res: Response, next: NextFunction ): Promise => { + res.locals.sidebar = res.locals.sidebar || {}; try { - /* - * Populate sidebar content here - */ + const showExclusions: Array = []; + const episodeExclusions: Array = []; + + if (res.locals.show) { + showExclusions.push(res.locals.show); + } + if (res.locals.episode) { + episodeExclusions.push(res.locals.episode); + } + + res.locals.sidebar.recommendations = { + shows: await showService.getRecommended(3, showExclusions), + episodes: await episodeService.getRecommended(3, episodeExclusions), + }; + return next(); } catch (error) { this.log.error("Failed to populate sidebar content", { error }); diff --git a/src/lib/web/view-model.ts b/src/lib/web/view-model.ts index 78cdc34..13ad878 100644 --- a/src/lib/web/view-model.ts +++ b/src/lib/web/view-model.ts @@ -5,9 +5,14 @@ import { IUser } from "../../app/models/user.js"; import { WebPaginationParameters } from "./pagination-parameters"; +export type SidebarView = { + [key: string]: unknown; +}; + export type WebViewModel = { [key: string]: unknown; + sidebar?: SidebarView; pagination?: WebPaginationParameters | null; user?: IUser | null;