Code-quality reviewer flagged stylistic divergence from auth's pattern: - All 3 blog use cases now have // ── Input ──... / ── Output ──... / ── Use case ──... section dividers (consistent with auth Task 3 + plan template §4.1). - Removed inline comment in get-articles controller's presenter that appeared in only 1 of 3 controllers; identity presenters are self-explanatory.
24 lines
787 B
TypeScript
24 lines
787 B
TypeScript
import { InputParseError } from "../../entities/errors/common";
|
|
import {
|
|
getArticlesInputSchema,
|
|
type GetArticlesOutput,
|
|
type IGetArticlesUseCase,
|
|
} from "../../application/use-cases/get-articles.use-case";
|
|
|
|
function presenter(value: GetArticlesOutput) {
|
|
return value;
|
|
}
|
|
|
|
export type IGetArticlesController = ReturnType<typeof getArticlesController>;
|
|
|
|
export const getArticlesController =
|
|
(getArticlesUseCase: IGetArticlesUseCase) =>
|
|
async (input: unknown): Promise<ReturnType<typeof presenter>> => {
|
|
const parsed = getArticlesInputSchema.safeParse(input);
|
|
if (!parsed.success) {
|
|
throw new InputParseError("Invalid get-articles input", { cause: parsed.error });
|
|
}
|
|
const result = await getArticlesUseCase(parsed.data);
|
|
return presenter(result);
|
|
};
|