O que aconteceu?
Escolha a ação desta etapa. O resultado aparece aqui depois do seu clique.
Ver explicação técnica e código desta passagem
A simulação mantém produtos, pedidos e pagamentos em memória. GET lê; POST pode criar registros.
/** Contratos do exemplo. O servidor ainda valida entradas: tipos TS não protegem uma API real. */
export type OrderBody = {
readonly productId: string;
readonly quantity: number;
readonly delivery: boolean;
};
export type PaymentBody = { readonly orderId: string; readonly token: 'demo-token' };
export interface BakeryRequest {
readonly method: 'GET' | 'POST';
readonly path: string;
readonly body?: Readonly<Record<string, string | number | boolean>>;
// Aqui a chave representa um header de requisição, não um campo do pagamento.
readonly idempotencyKey?: string;
}
export interface BakeryResponse {
readonly status: 200 | 201 | 400 | 404 | 409 | 500;
readonly body: unknown;
readonly headers?: Readonly<Record<string, string>>;
}Inspecionar os registros antes e depois
Estes registros mostram a simulação em cada momento. Rever uma passagem muda o estado observado; agir a partir dela substitui o caminho que vinha depois.
Estado anterior
{
"products": [
{
"id": "bread",
"priceCredits": 3,
"stock": 8
},
{
"id": "cake",
"priceCredits": 5,
"stock": 5
}
],
"orders": [],
"payments": [],
"paymentKeys": {},
"request": null,
"response": null,
"phase": "idle",
"failure": "none"
}Estado observado
{
"products": [
{
"id": "bread",
"priceCredits": 3,
"stock": 8
},
{
"id": "cake",
"priceCredits": 5,
"stock": 5
}
],
"orders": [],
"payments": [],
"paymentKeys": {},
"request": null,
"response": null,
"phase": "idle",
"failure": "none"
}
