Zgoda na konkretną propozycję
Polecenie: użytkownik może zatwierdzić tylko aktualną wersję własnej propozycji. Niedozwolona osoba, stara wersja i powtórna zgoda mają zostać odrzucone. Zapisz dozwolone stany i przejścia.
Sprawdza: uprawnienia i kontrolę działania (w oryginale także typy TypeScript).
Stany: „czeka na zgodę → zatwierdzone → wykonane”, z wersją dokładnie określonej propozycji. Napisz approve(state, command), gdzie state to {status: 'pending', proposal}, a command to {version, actor, allowed}. Zwróć nowy stan approved albo rzuć błąd z komunikatem zawierającym state, forbidden lub stale.
To lokalna funkcja; nie implementuje bazy, podpisu, czasu ważności ani zdalnego zapisu. W produkcji zmiana stanu musi być chroniona również przed dwoma żądaniami naraz.
Dopytanie: co po kliknięciu starej karty Teams?
Przećwiczysz
- Zapisać stany i dozwolone przejścia
- Sprawdzić tożsamość i uprawnienia
- Odrzucić starą wersję i powtórną zgodę
Testy (1)
Testy przeniesione z reference.test.ts materiału źródłowego (node:test). W przeglądarce działają z tym samym zestawem asercji.
approval: kontrola tożsamości, wersji i podwójnego zatwierdzenia
const pending = { status: 'pending', proposal: { id: 'p', owner: 'u', version: 2, amount: 100 } };
assert.throws(() => approve(pending, { actor: 'other', allowed: true, version: 2 }), /forbidden/);
assert.throws(() => approve(pending, { actor: 'u', allowed: true, version: 1 }), /stale/);
const approved = approve(pending, { actor: 'u', allowed: true, version: 2 });
assert.equal(approved.status, 'approved');
assert.throws(() => approve(approved, { actor: 'u', allowed: true, version: 2 }), /state/);Powiązane pytania
Źródło: AI & Agents — ćwiczenia praktyczne — Autorskie ćwiczenie z programu nauki, nie potwierdzone zadanie rekrutacyjne.