Головна/Рецепти (Cookbook)/Керуйте default-записами ENУКРРУС API-довідник (ReDoc) ↗

Керуйте default-записами

Два ключі, один default — перемкніть його атомарно, потім вимкніть із заміною в одній транзакції.

Прапорець default вирішує, який із ваших ключів віддає resolve. Цей сценарій проганяє весь його інваріант: рівно один активний default, атомарні перемикання і хід «disable із заміною».

Мета

Тримати два credentials для одного провайдера, перемкнути default між ними й вимкнути default, підвищивши інший — жодного разу не спостерігши нуль чи два default по дорозі.

Передумови

  • Один активний default-credential (назвімо його A) зі сценарію 02.

Кроки

1. Додайте другий ключ — default сам не рухається

Створіть credential B для того самого провайдера без make_default. Очікуване 201 з is_default: false, а перечитаний A досі тримає прапор — автоматично default-ом стає лише перший credential власника.

Створення з прапором перебирає default атомарно

Create з make_default: true натомість деградував би A і прийшов новим default-ом в одній транзакції — те саме перемикання, що в кроці 2, тільки злите зі створенням. Задокументований 409 DEFAULT_CREDENTIAL_ALREADY_EXISTS — лише тайбрейк, коли два таких create біжать наввипередки.

2. Перемкніть default на B

Викличте POST /v1/credentials/{B}/make-default з версією B:

curl -s -X POST "$CREDS_BASE/v1/credentials/$B_ID/make-default" \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"version": 1}'

Очікуване 200 з is_default: true. Перечитайте A: його прапорець зник — перемикання відбулося в одній транзакції.

3. Вимкніть B, тим самим подихом підвищивши A

Викличте POST /v1/credentials/{B}/disable з поточною версією B та replacement_default_id:

r = httpx.post(f"{CREDS_BASE}/v1/credentials/{b_id}/disable", headers=headers, json={
    "version": b_version,
    "replacement_default_id": a_id,
})
assert r.status_code == 200
assert r.json()["status"] == "disabled" and r.json()["is_default"] is False

Очікувано: B — disabled і без прапорця; A — active і знову default — одна транзакція, жодного проміжку без default.

4. Увімкніть B знову — прапорець не повертається

Викличте POST /v1/credentials/{B}/enable. Очікуване 200, status: "active", але is_default: false — enable ніколи не відновлює default; підвищення лишається явним.

Перевірено тестом test_s04_manage_defaults.