2024 – 2025

Middle, keyin yetakchi front-end dasturchi, Bepro-Devhub

Angular 14 → 17, standalone komponentlar, OnPush, OpenAPI/Swagger, IndexedDB, Docker Swarm, Bitbucket Pipelines

medinfocom.uz/meddata-saas

edent.uz

Klinikalarni to‘xtatmasdan MedData va EDentni modernizatsiya qilish

Kontekst

MedData shifoxona jarayonlarini, bemorlarni boshqarishni va tibbiy ma’lumotlarni qayta ishlashni avtomatlashtiradi; EDent stomatologiya klinikalarini boshqaradi: bemorlar, jadvallar, davolash va hisob-kitob. Ikkalasi bitta katta korporativ Angular ilovasida ishlaydi va O‘zbekiston bo‘ylab klinikalar tomonidan har kuni ishlatiladi.

Muammo

Kod bazasi Angular 14 da edi, texnik qarz o‘sib borardi, build sekin edi. Har bir deploy muhiti o‘zining statik environment.*.ts fayliga va shuning uchun alohida buildga muhtoj edi. API klientlari qo‘lda yozilib, backenddan ajralib ketardi. Sekin internetli klinikalar kamdan-kam o‘zgaradigan ma’lumotnoma ma’lumotlari uchun har bir ekranda API ga murojaat qilardi.

Cheklovlar

Har kuni klinik foydalanishdagi ishlab chiqarish tizimi: keskin qayta yozish yo‘q, to‘xtab qolish yo‘q, migratsiya davomida yangi funksiyalarni muzlatish yo‘q.

Nima qildim

Ilovani Angular 14 dan 17 ga bosqichma-bosqich, modulma-modul o‘tkazdim, standalone komponentlar va OnPush o‘zgarishlarni aniqlashga o‘tdim, yo‘l-yo‘lakay asosiy bog‘liqliklarni yangiladim. Statik muhit fayllarini runtime konfiguratsiya bilan almashtirdim: konteyner ishga tushganda Docker Swarm kiritgan o‘zgaruvchilardan config.json yozadi, APP_INITIALIZER uni yuklaydi, shuning uchun bitta build barcha muhitlarga xizmat qiladi. OpenAPI/Swagger generatorini integratsiya qildim, endi TypeScript API klientlari qo‘lda yuritilmaydi, backend shartnomasidan generatsiya qilinadi. Ma’lumotnoma ma’lumotlari uchun IndexedDB keshini qurdim, keshlangan ekranlar API ga murojaat qilmaydi va sekin ulanishlarda ham tez ishlaydi. Backend va DevOps jamoalari bilan Bitbucket Pipelines dagi reliz jarayoni ustida ishladim.

Docker Swarm secret
ishga tushganda config.json
APP_INITIALIZER
bitta build, barcha muhitlar
Runtime konfiguratsiya yo‘li. Avval: har bir deploy uchun bitta environment.*.ts, har biriga alohida build.

Natija

Endi bitta build barcha muhitlarga xizmat qiladi; deploy uchun alohida muhit fayllari yo‘q. Backend o‘zgarganda API klientlari OpenAPI spetsifikatsiyasidan qayta generatsiya qilinadi, shuning uchun shartnoma o‘zgarishi bir kunlik tahrir emas, qayta generatsiya. IndexedDB keshi ostidagi ekranlar ma’lumotnoma ma’lumotlari uchun API ga murojaat qilmaydi va sekin internetli klinikalarda sezilarli tezroq ochiladi. Klinikalar har bir bosqichda ishlashda davom etdi.