`min_qty` sozlamasi + kam qoldiq ro'yxati
Tavsif
Qabul mezonlari (DoD)
4 / 4 bajarildi
-
`min_qty` upsert ikkinchi marta chaqirilganda dublikat qator yaratmaydi (UNIQUE testi)
qa-ep-04-t03-s02 · 1 о аввал
-
Kam qoldiq ro'yxati faqat `good` condition qoldig'i bo'yicha hisoblanadi — `defective` qoldiq natijaga ta'sir qilmaydi
qa-ep-04-t03-s02 · 1 о аввал
-
`min_qty = 0` bo'lgan variant kam qoldiq ro'yxatiga hech qachon tushmaydi
qa-ep-04-t03-s02 · 1 о аввал
-
Kodda `outbox` ga yozish yoki notification yuborish yo'q (grep 0 — qamrov chegarasi)
qa-ep-04-t03-s02 · 1 о аввал
O'zgargan fayllar
7 ta
-
modified
src/test/java/uz/erpbom/warehouse/controller/WarehouseVariantSettingControllerIntegrationTest.java -
modified
src/main/java/uz/erpbom/warehouse/service/WarehouseVariantSettingService.java -
modified
src/main/java/uz/erpbom/warehouse/repository/WarehouseVariantSettingRepository.java -
modified
src/main/java/uz/erpbom/warehouse/entity/WarehouseVariantSetting.java -
modified
src/main/java/uz/erpbom/warehouse/dto/WarehouseVariantSettingUpdateRequest.java -
modified
src/main/java/uz/erpbom/warehouse/dto/WarehouseVariantSettingResponse.java -
modified
src/main/java/uz/erpbom/warehouse/controller/WarehouseVariantSettingController.java
Izoh qoldirish
Tarix
23 yozuv
-
✎
finalize-ep-04 yangiladi
Yangilandi: commit_sha, pr_url
-
💬
team-lead izoh qoldirdi
TEAM LEAD QARORI — bir vaqtda ikki PUT poygasi (worker IZOH 2). Holat: `PUT /warehouses/{id}/variant-settings/{variantId}` find-then-save qiladi; ikki parallel PUT UNIQUE cheklovga urилиб 500 qaytaradi. Muzlatilgan kontraktda bu yo'l uchun 409 yo'q. Qaror: **kontrakt O'ZGARMAYDI, 409 qo'shilmaydi.** Sabab: bu yo'l — upsert. Bir xil resursga ikkita PUT poygasi mantiqan konfliktsiz: ikkalasi ham yakuniy holatga intiladi. To'g'ri xatti-harakat — serverda idempotent qilish: UNIQUE buzilishini ushlab, o'sha tranzaksiyada update sifatida qayta urinish (yoki `INSERT ... ON CONFLICT (warehouse_id, product_variant_id) DO UPDATE`). Foydalanuvchiga xato ko'rsatish shart emas. 500 qaytishi haqiqiy defekt (mijoz aybsiz poygada server xatosi), lekin chastotasi past (bitta ombor+variant `min_qty` sini bir vaqtda ikki admin tahrirlashi). Shu sababli T03 qayta ochilmaydi — bu **follow-up** sifatida qayd etiladi va EP-04 ning keyingi backend ishida yoki alohida texnik qarz taskida yopiladi. Bajarilishi kerak: `WarehouseVariantSettingService` dagi upsert ON CONFLICT / retry ga o'tkazilsin + parallel PUT testi. Kontraktga tegilmaydi.
-
💬
qa-ep-04-t03-s02 izoh qoldirdi
QA — mustaqil tekshiruv (4 mezon noldan qayta tasdiqlandi; oldingi `is_met` belgilariga ishonilmadi). MUTATSIYA TEKSHIRUVI — 4 joyda sinaldi, 4/4 ushlandi: - M1: UPSERT -> oddiy INSERT (WarehouseVariantSettingService.java:91) -> 2 test yiqildi (500, UNIQUE buzilishi). AC2443 haqiqiy. - M2: `condition='good'` olib tashlandi (StockQueryRepository.java:121) -> lowStockListIgnoresDefectiveConditionEntirely yiqildi (defective qoldiq ro'yxatga sizdi). AC2444 haqiqiy. - M3: `min_qty=0` saqlanmaydi (WarehouseVariantSettingService.java:98) -> minQtyZeroNeverAppearsInLowStockList... yiqildi. AC2445 yozish yo'li haqiqiy. - M4: chegara `<` -> `<=` (StockQueryRepository.java:122 + StockService.java:247) -> mavjud 9 testning HECH BIRI ushlamadi. BO'SHLIQ TOPILDI: fixture'larda `qty_on_hand == min_qty` holati umuman yo'q edi, qoida 31 esa "shundan PAST tushganda" deydi. Kod TO'G'RI (`<`), lekin test uni pinlamagan edi. BO'SHLIQ YOPILDI (commit f413c07, faqat test fayli, pathspec bilan): `lowStockUsesStrictBelowThresholdAndNeverFlagsZeroMinQty` — teng holat (10 = 10, tushmaydi) + `min_qty=0` va `qty_on_hand=0` (AC2445 "hech qachon" ning eng qiyin nuqtasi) + musbat nazorat (9 < 10, tushishi shart). Ro'yxat filtri va har qatordagi `is_low` bayrog'i birga tekshiriladi. M4 endi shu test bilan ushlanishi tasdiqlandi. TESTLAR (o'zim yugurtirdim, har safar bytecode tekshirilgan holda): WarehouseVariantSettingControllerIntegrationTest — 10/10 yashil (9 asl + 1 QA qo'shgan). StockControllerIntegrationTest — 13/13 yashil (regressiya toza: S02 ning yangi JPA entity'si S03 ning raw SQL LEFT JOIN o'qish yo'lini buzmagan). MUHIT OGOHLANTIRISHI: maven inkremental kompilyatsiyasi bu repo'da manba o'zgarishini bir necha marta O'TKAZIB YUBORDI — mutant `.class` eskirib qolib SOXTA natija berdi (avval "M4 survived" chiqqan edi, aslida mutant umuman kompilyatsiya bo'lmagan). Mutatsiya testi qilayotgan har kim: `strings target/classes/.../X.class` bilan bytecode'ni tasdiqlasin. AC2446: butun db/migration da `outbox` jadvali YO'Q; bargning 7 faylida outbox/notification/publishEvent/broker chaqiruvi YO'Q (faqat javadoc izohi). Qamrov chegarasi hurmat qilingan. CROSS-CUTTING: @Transactional (list — readOnly=true) OK · tenant_id yo'q, schema almashtirish yo'q (AR-1) OK · permission_code katalogga haqiqiy FK, `stock.view` va `warehouse_setting.edit` R__permissions seed da bor (AR-10) OK · snake_case, jadval ko'plikda, FK to'liq nomdan OK · min_qty numeric(18,4) + CHECK (min_qty >= 0) + UNIQUE(warehouse_id, product_variant_id) (V15) OK · fizik DELETE yo'q OK · log'da token/parol yo'q OK. KONTRAKT: openapi/v1/warehouse.yaml bilan aynan mos — yo'llar (GET list + PUT upsert; DELETE kontraktda YO'Q, kodda ham yo'q), maydon nomlari, min_qty decimal-string (JacksonConfig BigDecimal->String), 400/401/403/404. Kontrakt fayli O'ZGARTIRILMADI va commit qilinmadi (team lead staged holatida qoldi). Kichik kuzatuv (bloklamaydi, S02 mezoni emas): ikki klient bir vaqtda bir xil ombor×variant ga PUT qilsa find-then-save poygasi UNIQUE buzilishida 500 qaytaradi; kontraktda 409 yo'q, shuning uchun defekt deb hisoblanmadi. Verdikt: DONE.
-
⇄
qa-ep-04-t03-s02 statusni o'zgartirdi Review → Bajarildi
-
✓
qa-ep-04-t03-s02 qabul mezonini belgiladi
✓ Kodda `outbox` ga yozish yoki notification yuborish yo'q (grep 0 — qamrov chegarasi)
-
✓
qa-ep-04-t03-s02 qabul mezonini belgiladi
✓ `min_qty = 0` bo'lgan variant kam qoldiq ro'yxatiga hech qachon tushmaydi
-
✓
qa-ep-04-t03-s02 qabul mezonini belgiladi
✓ Kam qoldiq ro'yxati faqat `good` condition qoldig'i bo'yicha hisoblanadi — `defective` qoldiq natijaga ta'sir qilmaydi
-
✓
qa-ep-04-t03-s02 qabul mezonini belgiladi
✓ `min_qty` upsert ikkinchi marta chaqirilganda dublikat qator yaratmaydi (UNIQUE testi)
-
⇄
backend-1 statusni o'zgartirdi Ishlanyapti → Review
-
✎
backend-1 yangiladi
Yangilandi: branch, commit_sha
-
✓
backend-1 qabul mezonini belgiladi
✓ Kodda `outbox` ga yozish yoki notification yuborish yo'q (grep 0 — qamrov chegarasi)
-
✓
backend-1 qabul mezonini belgiladi
✓ `min_qty = 0` bo'lgan variant kam qoldiq ro'yxatiga hech qachon tushmaydi
-
✓
backend-1 qabul mezonini belgiladi
✓ Kam qoldiq ro'yxati faqat `good` condition qoldig'i bo'yicha hisoblanadi — `defective` qoldiq natijaga ta'sir qilmaydi
-
✓
backend-1 qabul mezonini belgiladi
✓ `min_qty` upsert ikkinchi marta chaqirilganda dublikat qator yaratmaydi (UNIQUE testi)
-
📄
backend-1 fayllarni qayd etdi
7 ta fayl qayd etildi
-
⇄
backend-1 statusni o'zgartirdi Tayyor → Ishlanyapti
Agent ishni boshladi
-
⚑
backend-1 ishga oldi
-
⇄
system statusni o'zgartirdi Ishlanyapti → Tayyor
Avtomatik bo'shatildi: 60 daqiqa signal yo'q
-
⚐
system bo'shatdi
Avtomatik bo'shatildi: 60 daqiqa signal yo'q
-
⇄
coder-ep-04-t03-s02 statusni o'zgartirdi Backlog → Ishlanyapti
Agent ishni boshladi
-
⚑
coder-ep-04-t03-s02 ishga oldi
-
🔗
pm-agent bog'liqlik qo'shdi
→ EP-04-T03-S01
-
✦
pm-agent yaratdi
`min_qty` sozlamasi + kam qoldiq ro'yxati
Ma'lumot
- Agent
- backend-1
- Olingan
- 1 о аввал
- Boshlandi
- 20.08.2026 20:22
- Tugadi
- 21.08.2026 01:00
- Baho
- 4 soat
- Spec
- erp/docs/modules/03_warehouse.md#2.13
- Branch
- feat/EP-04-erpbom-backend
- Commit
- b6685d9b9b72
Bog'liqliklar
Bundan oldin tugashi kerak
Agent uchun
Bu ishni AI agent quyidagicha oladi:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T03-S02/claim \ -H "X-Agent: backend-dev-1"
Tugatgach:
curl -s -X POST https://pmboard.ferp.uz/api/items/EP-04-T03-S02/status \
-H "X-Agent: backend-dev-1" \
-H "Content-Type: application/json" \
-d '{"status":"review","note":"..."}'