3 changed files with 112 additions and 3 deletions
@ -0,0 +1,72 @@ |
|||||
|
// app/controllers/episode.ts
|
||||
|
// Copyright (C) 2025 DTP Technologies, LLC
|
||||
|
// All Rights Reserved
|
||||
|
|
||||
|
import { NextFunction, Request, Response } from "express"; |
||||
|
|
||||
|
import { WebServer, WebController } from "../../lib/dtplib.js"; |
||||
|
|
||||
|
import { EpisodeService } from "../services/episode.js"; |
||||
|
import { SidebarService } from "../services/sidebar.js"; |
||||
|
|
||||
|
export class EpisodeController extends WebController { |
||||
|
static get name(): string { |
||||
|
return "EpisodeController"; |
||||
|
} |
||||
|
static get slug(): string { |
||||
|
return "episode"; |
||||
|
} |
||||
|
|
||||
|
constructor(server: WebServer) { |
||||
|
super(server, EpisodeController); |
||||
|
} |
||||
|
|
||||
|
get route(): string { |
||||
|
return "/episode"; |
||||
|
} |
||||
|
|
||||
|
async start(): Promise<void> { |
||||
|
const sidebarService = this.getService<SidebarService>("sidebar"); |
||||
|
const sidebarMiddleware = sidebarService.middleware(); |
||||
|
|
||||
|
this.router.get("/:episodeId", sidebarMiddleware, this.getView.bind(this)); |
||||
|
this.router.get("/", sidebarMiddleware, this.getHome.bind(this)); |
||||
|
} |
||||
|
|
||||
|
async getView( |
||||
|
_req: Request, |
||||
|
res: Response, |
||||
|
next: NextFunction |
||||
|
): Promise<void> { |
||||
|
const episodeService = this.getService<EpisodeService>("episode"); |
||||
|
try { |
||||
|
res.locals.recommended = await episodeService.getRecommended(3, [ |
||||
|
res.locals.episode, |
||||
|
]); |
||||
|
res.render("episode/view"); |
||||
|
} catch (error) { |
||||
|
this.log.error("failed to present the view", { error }); |
||||
|
return next(error); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async getHome( |
||||
|
req: Request, |
||||
|
res: Response, |
||||
|
next: NextFunction |
||||
|
): Promise<void> { |
||||
|
const episodeService = this.getService<EpisodeService>("episode"); |
||||
|
try { |
||||
|
res.locals.pagination = this.getPaginationParameters(req, 20); |
||||
|
res.locals.episodeLibrary = await episodeService.getLive( |
||||
|
res.locals.pagination |
||||
|
); |
||||
|
return res.render("episode/home"); |
||||
|
} catch (error) { |
||||
|
this.log.error("failed to present the Home view", { error }); |
||||
|
return next(error); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export default EpisodeController; |
Loading…
Reference in new issue