Код IT Загрузка примера кода…

TypeScript main.ts
import type { Request, Response } from "express";
import type { CreateUserDto } from "./types/dto.js";

type ApiOk<T> = { ok: true; data: T };
type ApiErr = { ok: false; error: string };
type ApiResponse<T> = ApiOk<T> | ApiErr;

function isCreateUserDto(body: unknown): body is CreateUserDto {
  if (typeof body !== "object" || body === null) return false;
  const o = body as Record<string, unknown>;
  return typeof o.email === "string" && typeof o.name === "string";
}

export async function postUser(
  req: Request,
  res: Response<ApiResponse<User>>,
): Promise<void> {
  if (!isCreateUserDto(req.body)) {
    res.status(400).json({ ok: false, error: "Invalid body" });
    return;
  }
  const result = createUser(req.body, new Set());
  if (!result.ok) {
    const status = result.error === "conflict" ? 409 : 400;
    res.status(status).json({ ok: false, error: result.error });
    return;
  }
  res.status(201).json({ ok: true, data: result.value });
}
import type { Request, Response } from "express";
import type { CreateUserDto } from "./types/dto.js";

type ApiOk<T> = { ok: true; data: T };
type ApiErr = { ok: false; error: string };
type ApiResponse<T> = ApiOk<T> | ApiErr;

function isCreateUserDto(body: unknown): body is CreateUserDto {
  if (typeof body !== "object" || body === null) return false;
  const o = body as Record<string, unknown>;
  return typeof o.email === "string" && typeof o.name === "string";
}

export async function postUser(
  req: Request,
  res: Response<ApiResponse<User>>,
): Promise<void> {
  if (!isCreateUserDto(req.body)) {
    res.status(400).json({ ok: false, error: "Invalid body" });
    return;
  }
  const result = createUser(req.body, new Set());
  if (!result.ok) {
    const status = result.error === "conflict" ? 409 : 400;
    res.status(status).json({ ok: false, error: result.error });
    return;
  }
  res.status(201).json({ ok: true, data: result.value });
}