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