`warehouses` (+immutable trigger), `warehouse_variant_settings`, `exchange_rates`
Tavsif
Qabul mezonlari (DoD)
5 / 5 bajarildi
-
Bir org-node'da ikkinchi faol `raw` ombor yaratishga urinish partial unique bilan rad etiladi; birinchisi soft-o'chirilgach yangisi muammosiz ochiladi
qa-ep-04-t01-s01 · 1 о аввал
-
Mavjud `warehouses` qatorining `organization_id` ini UPDATE qilishga urinish trigger bilan rad etiladi (`warehouse org binding is immutable`), boshqa ustunlar (name/location/active) muammosiz yangilanadi
qa-ep-04-t01-s01 · 1 о аввал
-
`warehouse_variant_settings` ga bir xil (warehouse, variant) juftini ikkinchi marta kiritish unique violation beradi
qa-ep-04-t01-s01 · 1 о аввал
-
`exchange_rates` ga bir xil (currency_code, date) ikkinchi marta kiritilsa rad etiladi; mavjud bo'lmagan `currency_code` FK bilan rad etiladi
qa-ep-04-t01-s01 · 1 о аввал
-
Uchala jadvalda `tenant_id` yo'q; `warehouse_variant_settings` va `exchange_rates` da `organization_id` ham yo'q (information_schema testi)
qa-ep-04-t01-s01 · 1 о аввал
O'zgargan fayllar
2 ta
-
modified
src/test/java/uz/erpbom/warehouse/WarehousesAndExchangeRatesMigrationTest.java -
modified
src/main/resources/db/migration/V15__warehouses_and_exchange_rates.sql
Izoh qoldirish
Tarix
19 yozuv
-
✎
finalize-ep-04 yangiladi
Yangilandi: commit_sha, pr_url
-
⇄
qa-ep-04-t01-s01 statusni o'zgartirdi Review → Bajarildi
-
💬
qa-ep-04-t01-s01 izoh qoldirdi
QA (qa-EP-04-T01-S01) — QABUL QILINDI. Test: `mvn -Dtest=WarehousesAndExchangeRatesMigrationTest test` → Tests run: 10, Failures: 0, Errors: 0 (Testcontainers postgres:16, Flyway 19 migratsiya, v15). Migratsiya ↔ board tavsifi bir-bir solishtirildi (V15__warehouses_and_exchange_rates.sql): - warehouses: id / organization_id (FK organizations, ON DELETE klauzulasiz = default RESTRICT — V12/V13/V14 konvensiyasi, postgresql skill §4) / name NOT NULL / warehouse_type varchar(20) + CHECK (raw|semi_finished|finished) / location null / active bool DEFAULT true / created_at / updated_at / deleted_at. Ortiqcha yoki yetishmagan ustun yo'q. - uq_warehouses_organization_id_warehouse_type — HAQIQATAN partial (`WHERE deleted_at IS NULL`). - trg_warehouses_enforce_immutable_organization — BEFORE UPDATE, `NEW.organization_id IS DISTINCT FROM OLD.organization_id` sharti; name/location/active va soft-delete UPDATE'lari bloklanmaydi. - warehouse_variant_settings: organization_id YO'Q; min_qty numeric(18,4) NOT NULL DEFAULT 0 + CHECK >= 0; UNIQUE(warehouse_id, product_variant_id). - exchange_rates: organization_id YO'Q; currency_code varchar(3) FK→currencies.code (AR-10, oddiy FK); rate numeric(18,6) + CHECK > 0; date date; created_by_user_id FK→users; UNIQUE(currency_code, date). - Uchala jadvalda tenant_id yo'q (AR-1), schema ajratish/tenant almashtirish mexanikasi yo'q. - Har FK ustunida indeks bor: idx_warehouses_organization_id, idx_warehouse_variant_settings_product_variant_id, idx_exchange_rates_created_by_user_id; warehouse_id va currency_code tegishli UNIQUE indekslarning yetakchi ustuni sifatida qamrab olingan. - Nomlash snake_case, jadvallar ko'plikda, FK/CHECK/indeks nomlari to'liq. Kontrakt (openapi/v1/warehouse.yaml, o'zgartirilmadi): WarehouseType enum [raw, semi_finished, finished] = CHECK; WarehouseVariantSetting.min_qty = numeric(18,4); ExchangeRateResponse (currency_code + date → rate numeric(18,6)) = jadval maydonlari. Chetlanish yo'q. Migratsiya tozaligi: `git show --stat 7e92ded` — faqat 2 yangi fayl, V1..V14 tegilmagan, V15 raqami band emas edi. MUTATSIYA TEKSHIRUVI (har mutatsiyadan keyin `git checkout --` bilan tiklandi, ish daraxti toza): - M1 `WHERE deleted_at IS NULL` olib tashlandi → AC2406 testi YIQILDI (reopen INSERT, test:109). Partial xatti-harakat haqiqatan tekshiriladi. - M2 trigger sharti `IS NOT DISTINCT FROM` ga teskarilandi → AC2407 negativ yo'li YIQILDI ("Expecting code to raise a throwable", test:125). - M3 trigger `IF true` (doim rad etadi) → AC2407 IJOBIY yo'li YIQILDI (name/location/active UPDATE, test:133) va soft-delete yo'li ham. Ya'ni test faqat "exception tashlandi" bilan qanoatlanmaydi. - M4 ikkala UNIQUE indeks oddiy indeksga aylantirildi + exchange_rates.tenant_id / warehouse_variant_settings.organization_id qo'shildi → AC2408, AC2409, AC2410 testlari uchalasi YIQILDI. Tautologik yoki assert'siz test topilmadi. AC 2406–2410 — hammasi tasdiqlandi.
-
✓
qa-ep-04-t01-s01 qabul mezonini belgiladi
✓ Uchala jadvalda `tenant_id` yo'q; `warehouse_variant_settings` va `exchange_rates` da `organization_id` ham yo'q (information_schema testi)
-
✓
qa-ep-04-t01-s01 qabul mezonini belgiladi
✓ `exchange_rates` ga bir xil (currency_code, date) ikkinchi marta kiritilsa rad etiladi; mavjud bo'lmagan `currency_code` FK bilan rad etiladi
-
✓
qa-ep-04-t01-s01 qabul mezonini belgiladi
✓ `warehouse_variant_settings` ga bir xil (warehouse, variant) juftini ikkinchi marta kiritish unique violation beradi
-
✓
qa-ep-04-t01-s01 qabul mezonini belgiladi
✓ Mavjud `warehouses` qatorining `organization_id` ini UPDATE qilishga urinish trigger bilan rad etiladi (`warehouse org binding is immutable`), boshqa ustunlar (name/location/active) muammosiz yangilanadi
-
✓
qa-ep-04-t01-s01 qabul mezonini belgiladi
✓ Bir org-node'da ikkinchi faol `raw` ombor yaratishga urinish partial unique bilan rad etiladi; birinchisi soft-o'chirilgach yangisi muammosiz ochiladi
-
⇄
coder-ep-04-t01-s01 statusni o'zgartirdi Ishlanyapti → Review
-
✎
coder-ep-04-t01-s01 yangiladi
Yangilandi: branch, commit_sha
-
✓
coder-ep-04-t01-s01 qabul mezonini belgiladi
✓ Uchala jadvalda `tenant_id` yo'q; `warehouse_variant_settings` va `exchange_rates` da `organization_id` ham yo'q (information_schema testi)
-
✓
coder-ep-04-t01-s01 qabul mezonini belgiladi
✓ `exchange_rates` ga bir xil (currency_code, date) ikkinchi marta kiritilsa rad etiladi; mavjud bo'lmagan `currency_code` FK bilan rad etiladi
-
✓
coder-ep-04-t01-s01 qabul mezonini belgiladi
✓ `warehouse_variant_settings` ga bir xil (warehouse, variant) juftini ikkinchi marta kiritish unique violation beradi
-
✓
coder-ep-04-t01-s01 qabul mezonini belgiladi
✓ Mavjud `warehouses` qatorining `organization_id` ini UPDATE qilishga urinish trigger bilan rad etiladi (`warehouse org binding is immutable`), boshqa ustunlar (name/location/active) muammosiz yangilanadi
-
✓
coder-ep-04-t01-s01 qabul mezonini belgiladi
✓ Bir org-node'da ikkinchi faol `raw` ombor yaratishga urinish partial unique bilan rad etiladi; birinchisi soft-o'chirilgach yangisi muammosiz ochiladi
-
📄
coder-ep-04-t01-s01 fayllarni qayd etdi
2 ta fayl qayd etildi
-
⇄
coder-ep-04-t01-s01 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-04-t01-s01 ishga oldi
-
✦
pm-agent yaratdi
`warehouses` (+immutable trigger), `warehouse_variant_settings`, `exchange_rates`
Ma'lumot
- Agent
- coder-ep-04-t01-s01
- Olingan
- 1 о аввал
- Boshlandi
- 20.08.2026 09:24
- Tugadi
- 20.08.2026 09:43
- Baho
- 4 soat
- Spec
- erp/docs/modules/03_warehouse.md#2.1
- Branch
- feat/EP-04-erpbom-backend
- Commit
- b6685d9b9b72
Bog'liqliklar
Bundan oldin tugashi kerak
Yo'q — bu ish mustaqil.
Buni kutayotganlar
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T01-S01/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T01-S01/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'