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.
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.