Sub-task EP-09-T02-S03 Kritik 09_auth erpbom-backend

R__ seed: root org + organization_settings + system texnik useri (R49)

Bajarildi
Status:

Tavsif

**№7 — root `organizations`:** `parent_id IS NULL` qatori **yo'q bo'lsa** yaratiladi, `name` = **`ERP_COMPANY_NAME`** env. Bor bo'lsa **tegilmaydi** (nom keyin `organization.edit` bilan o'zgaradi). **№8 — `organization_settings` default kalitlar:** `ON CONFLICT (key) DO NOTHING`. Kalitlar ro'yxatining yagona manbai — **CROSS_CUTTING N** (shu fayldan o'qib olinadi). **№9 — `system` texnik useri (R49):** `username='system'`, `status='blocked'`, `password_hash` = **sentinel** (mas. `'!'` — hech qanday parol tekshiruvi mos kelmaydi), `user_type='internal'`, `full_name='Tizim'`, `created_by_user_id=NULL`, `deleted_at` doim `NULL`; `ON CONFLICT (username) DO NOTHING`. 🔴 U fon jarayonlari yaratgan qatorlarning `created_by_user_id` muallifi bo'ladi. Yangi ustun **qo'shilmaydi** (`is_system` bayrog'i — R49 e bo'yicha ataylab yo'q). 🔴 **`system` nomi zahiralangan:** odam useri bu nomni ololmaydi (yaratish/rename'da rad) — tekshiruv T05-S01 da.

Qabul mezonlari (DoD)

4 / 4 bajarildi

  • Bo'sh bazada root org `ERP_COMPANY_NAME` nomi bilan yaratiladi; ikkinchi yurishda ikkinchi root yaratilmaydi va nom qayta yozilmaydi

    qa-ep-09-t02-s03 · 2 о аввал

  • `system` useri `status='blocked'` va parol sentineli bilan yaratiladi; u bilan login urinishi HECH QANDAY holatda muvaffaqiyatli bo'lmaydi — AC46

    qa-ep-09-t02-s03 · 2 о аввал

  • `system` useri hech qanday `permission_group` yoki `user_permissions` qatoriga ega emas

    qa-ep-09-t02-s03 · 2 о аввал

  • `organization_settings` default kalitlari CROSS_CUTTING N ro'yxatiga mos

    qa-ep-09-t02-s03 · 2 о аввал

O'zgargan fayllar

6 ta

  • modified src/test/java/uz/erpbom/auth/OrganizationsMigrationTest.java
  • modified deploy/docker-compose.yml
  • modified deploy/.env.example
  • modified src/main/resources/application.yml
  • created src/test/java/uz/erpbom/auth/OrganizationAndSystemUserSeedMigrationTest.java
  • created src/main/resources/db/migration/R__organization_and_system_user_seed.sql

Izoh qoldirish

Tarix

21 yozuv

  • ✎

    team-lead-ep-09 yangiladi

    Yangilandi: pr_url

  • 🔗

    team-lead-ep-09 bog'liqlik qo'shdi

    → EP-09-T02-S01

  • ✎

    team-lead-ep-09 yangiladi

    Yangilandi: estimate_hours

  • ⇄

    qa-ep-09-t02-s03 statusni o'zgartirdi Review → Bajarildi

  • 💬

    qa-ep-09-t02-s03 izoh qoldirdi

    QA OK. spec 09_auth.md#2.7.2 (band 7/8/9) + CROSS_CUTTING N tekshirildi. Kod: R__organization_and_system_user_seed.sql root org WHERE NOT EXISTS(parent_id IS NULL), system user ON CONFLICT(username) DO NOTHING (status=blocked, password_hash='!', created_by_user_id=NULL), organization_settings faqat 2 default kalit (additional_prices_enabled=false, payment_sod_required=true) ON CONFLICT(key) DO NOTHING - payment_approval_limit ataylab qatorsiz (NULL=limitsiz, N bandi bilan mos). Testlar: OrganizationAndSystemUserSeedMigrationTest (8/8 yashil) + OrganizationsMigrationTest (7/7 yashil), Testcontainers PG16, flock ostida yurgizildi. Mutatsiya tekshiruvi: additional_prices_enabled qiymatini true ga ozgartirib test yiqilishini tasdiqladim (organizationSettingsDefaultsMatchCrossCuttingN yiqildi), keyin git checkout bilan tikladim va qayta yashil ekanini tekshirdim - test yolgonni ushlaydi. deploy/.env.example, deploy/docker-compose.yml, application.yml ozgarishlari faqat ERP_COMPANY_NAME placeholder ulanishiga tegishli, boshqa ishga aloqasi yoq (diff tekshirildi). openapi/ ga tegishli emas (bu barg endpoint qoshmaydi). AC674-677 hammasi tasdiqlandi.

  • ✓

    qa-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `organization_settings` default kalitlari CROSS_CUTTING N ro'yxatiga mos

  • ✓

    qa-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `system` useri hech qanday `permission_group` yoki `user_permissions` qatoriga ega emas

  • ✓

    qa-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `system` useri `status='blocked'` va parol sentineli bilan yaratiladi; u bilan login urinishi HECH QANDAY holatda muvaffaqiyatli bo'lmaydi — AC46

  • ✓

    qa-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ Bo'sh bazada root org `ERP_COMPANY_NAME` nomi bilan yaratiladi; ikkinchi yurishda ikkinchi root yaratilmaydi va nom qayta yozilmaydi

  • ⇄

    coder-ep-09-t02-s03 statusni o'zgartirdi Ishlanyapti → Review

  • ✎

    coder-ep-09-t02-s03 yangiladi

    Yangilandi: branch, commit_sha

  • 💬

    coder-ep-09-t02-s03 izoh qoldirdi

    R__organization_and_system_user_seed.sql: root org (ERP_COMPANY_NAME, Flyway placeholder erpCompanyName) + system texnik user (R49) + organization_settings default 2 kalit (additional_prices_enabled=false, payment_sod_required=true). payment_approval_limit ATAYLAB seed qilinmadi: CROSS_CUTTING N default'i NULL='limitsiz', lekin organization_settings.value NOT NULL text (V2) — shu sabab kalit yo'qligi ilova qatlamida 'limitsiz' deb o'qiladi, soxta bo'sh matn yozilmadi. organization_settings.updated_by_user_id (NOT NULL FK) uchun system user ishlatildi (ijro tartibi: root org -> system user -> settings, hujjatdagi 7/8/9 raqamlanishidan ataylab farqli — sabab SQL faylida izohlangan). Texnik topilma: Flyway 11 placeholder almashtiruvi PostgreSQL dollar-quoted satr ($tag$...$tag$) ICHIGA kirmaydi — avval apostrof-xavfsizlik uchun dollar-quoting sinaldim, ishlamadi (sinovda tasdiqladim), oddiy '...' qatorga qaytdim; ERP_COMPANY_NAME da apostrof bo'lsa operator env'da ikkilantirib yozishi kerak (.env.example ga yozib qo'ydim). Yon ta'sir: OrganizationsMigrationTest.java (EP-09-T01-S01) V4 (EP-09-T01-S03) qo'shgan organization_settings.updated_by_user_id NOT NULL ustuniga moslashtirilmagan edi — test helper tuzatildi (endi system userga FK beradi), bu mening bargimga tegishli emas edi lekin regression sifatida ushlandi va tuzatildi. AC675 izohi: bu subtask faqat DB darajasini (status=blocked, password_hash sentinel, aynan bitta qator) tekshiradi — AC46 dagi to'liq 'login hech qachon muvaffaqiyatli bo'lmaydi' xatti-harakati login endpoint/service kod bilan (kelgusi subtask) tasdiqlanadi. Test: mvn -Dtest='uz.erpbom.auth.*MigrationTest' — 82/82 yashil (Testcontainers, PostgreSQL 16).

  • ✓

    coder-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `organization_settings` default kalitlari CROSS_CUTTING N ro'yxatiga mos

  • ✓

    coder-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `system` useri hech qanday `permission_group` yoki `user_permissions` qatoriga ega emas

  • ✓

    coder-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ `system` useri `status='blocked'` va parol sentineli bilan yaratiladi; u bilan login urinishi HECH QANDAY holatda muvaffaqiyatli bo'lmaydi — AC46

  • ✓

    coder-ep-09-t02-s03 qabul mezonini belgiladi

    ✓ Bo'sh bazada root org `ERP_COMPANY_NAME` nomi bilan yaratiladi; ikkinchi yurishda ikkinchi root yaratilmaydi va nom qayta yozilmaydi

  • 📄

    coder-ep-09-t02-s03 fayllarni qayd etdi

    6 ta fayl qayd etildi

  • ⇄

    coder-ep-09-t02-s03 statusni o'zgartirdi Backlog → Ishlanyapti

    Agent ishni boshladi

  • ⚑

    coder-ep-09-t02-s03 ishga oldi

  • 🔗

    pm-agent bog'liqlik qo'shdi

    → EP-09-T02-S01

  • ✦

    pm-agent yaratdi

    R__ seed: root org + organization_settings + system texnik useri (R49)

Ma'lumot

Agent
coder-ep-09-t02-s03
Olingan
2 о аввал
Boshlandi
17.08.2026 20:56
Tugadi
18.08.2026 05:02
Baho
4 soat
Spec
erp/docs/modules/09_auth.md#2.7.2
Branch
feat/EP-09-erpbom-backend
Commit
2c7e476a484f

Bog'liqliklar

Agent uchun

Bu ishni AI agent quyidagicha oladi:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-09-T02-S03/claim \
  -H "X-Agent: backend-dev-1"

Tugatgach:

curl -s -X POST https://pmboard.ferp.uz/api/items/EP-09-T02-S03/status \
  -H "X-Agent: backend-dev-1" \
  -H "Content-Type: application/json" \
  -d '{"status":"review","note":"..."}'