feat(shared): contrato Zod PingResponse em @sar/api-interface (Frente C)

Primeiro contrato compartilhado API↔Web. Lib stays framework-free:
nestjs-zod (createZodDto) fica fora — Web vai consumir esta mesma lib
e não pode arrastar dependência backend.

- PingResponseSchema + type PingResponse (z.infer) em ping.contract.ts
- 6 testes vitest (1 happy + 5 rejeições: status, uuid, uptime, datetime, workspaceId)
- ping.controller importa PingResponse via @sar/api-interface
- placeholders Nx api-interface.{ts,spec.ts} removidos
- design-log atualizado com decisão arquitetural e pegadinhas da sessão

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-27 18:51:35 +00:00
parent 055f9f98f0
commit ce5494aa8b
9 changed files with 104 additions and 22 deletions

View File

@@ -1,21 +1,13 @@
import { Controller, Get } from '@nestjs/common';
import { ClsService } from 'nestjs-cls';
import type { PingResponse } from '@sar/api-interface';
import type { WorkspaceClsStore } from '../workspace/workspace.types';
// Endpoint de verificação de fundação:
// - confirma que CLS está populando workspaceId + requestId;
// - serve como alvo do healthcheck do docker compose / smoke test;
// - usado pela Web (Frente B) para validar conectividade real.
interface PingResponse {
status: 'ok';
service: string;
version: string;
workspaceId: string;
requestId: string;
uptimeSeconds: number;
now: string;
}
// Contrato: @sar/api-interface · PingResponseSchema (zod).
@Controller({ path: 'ping' })
export class PingController {