Assalomu aleykum mening bu loyiham imtihon uchun microservicelar bilan ishlash va o'rgangan yangiliklarimizni projectda qo'llash edi. Mega imtihon uchun qilish kerak bo'lgan projectlar 4 ta edi: 1.University, 2.School, 3.Cadastre, 4.Jamoat Transporti
Hozir ketma-ketligida bu projectlarni tanishtirishni boshlayman.
University.Domain qismida bizning CustomAttributelarimiz,Dtolarimiz,entitylar,Enumalar va Custom Exceptionlar mavjud
Bu projectda ishlatilgan Entitylarni tepadagi rasmda ko'rib olishingiz mumkin shu bilan Domain qismi tugaydi. Endi esa University.DataAccess qismiga o'tamiz Bu yerda bizning DataBasega Connect qilish qismi va Migrationlarimiz,EntityTypeConfiguratsiyalar turadi va shunga o'xshash databasega oid narsalar shu yerda joylashagan bo'ladi
ApplicationDbContext clasi ichiga kirib ko'rsak siz DbContext va IApplicationDbContext interfacesida inheritance qilinganini ko'rishingiz mumkin
shu kabi nega bunday deb aytadigan bo'lsak bizning University.Service Layerida ApplicationDbContextdan emas balki IApplicationDbContext interfacesi yordamida databazaga querylar jo'natishimizni ko'rishingiz mumkin va shu bilan DataAccess qismi ham o'z nihoyasiga yetdi,
Endi sizlar University.Serviec Layerini tanishtirib o'taman bu Layerda bizning nimalarimiz joylashadi shularni aytib o'taman ->
Abstractions -> ichida bizning interfacelarimiz va shunga o'xshash mavhum narsalar saqlanadi IApplicationDbContext ham shu yerda joylashgan shu ko'rinishda bo'ladi. Securtity -> papkasi ichida bizning PasswordHashlash uchun algoritmimiz joylashga. Password Hashlash uchun Hash512 Algoritmi bo'yicha Passwordlarimiz Hashlangan Va bu yerda BackGround Service dan ham foydalanilgan Vazifasini aytib o'tadigan bo'lsam -> har 10 sekundda bizning studentlar joylashgan keshni yangilab turish uchun yozilgan UseCases qismida bizning asosiy logikalar joylashgan yani bu yerda barcha Crud lar bazaga yozish o'chirish o'qish yangilash kabi vazifalarni bajaradi bu amallarni bajarish uchun men MediatR design Patternida foydalanilganman, Har bitta Modelni Commandi,Queryi va Handleri bo'ladi Commands qimida -> bazaga yozish,o'chirish,yangilash kabi amallarning Commandi yoziladi yanada tushunarli qilib aytadigan bo'lsam Dto vazifasini o'taydi bizga shu command kirib keladi userdan va bu Comman IRequest<> interfacedan inheritance olgan bo'lishi kerak bo'ladi
Shu kabi bo'ladi IRequest bu generic interface bo'lib genericiga biz type berib yuboramiz va o'sha tipda ma'lumot qaytarish kerak bo'ladi
Queries qismiga keladigan bo'lsak bu yerda bizning faqatgina Get operatsiyamiz bajariladi faatgina get ->
shu kabi bo'ladi bu ham huddi commanga o'hashydi
Endi esa eng asosiy qismi Handler qismi -> bu qismida bizning bu command va querylarning realizatsiya bo'ladi haqiqiy bazaga murojatlar shu yerda bo'ladi
Bu GetAdminByIdQueryHandler clasimiz IRequestHandler<> generic classdan inheritance olgan bo'lishi kerak bo'ladi va birinchi paramertiga command yoki query beriladi yani qaysi command yoki queryning realzatisya bo'layotganligi aytib o'tiladi ikkinchi parametriga esa qaytuvchi tipi beriladi bu interfaceni birgina Handle methodi mavjud shu qismda logikani bosaveramiz.
Menimcha sizga oz bo'lsada mediatrR ning ishlash jarayonini tushuntira oldim deb o'ylayman ha aytgancha agarda siz mediatR ni dasturingizda implement qilmoqchi bo'lsangiz quyidagi packeglarni o'rnatishingiz kerak bo'ladi shu ikkisni va Program.cs da buning registrationdan o'tkazib qo'yish kerak bo'ladi
Shu bilan bizning Service Layerimiz o'z nihoyasiga yetdi keyingi qism University.Api qismi bo'ladi bu Layerda Faqat Controller mavjud endi bu yerda bizning yozgan servicelarimizni yani ishlatib ko'ramiz yani MediatRni ishlatib ko'ramiz birinchi navbatda Controllerning Constructida register qilib olamiz
Birinchi bo'lib GetById ni ishlatishni ko'rib o'tamiz
Get All
Post Async
shu kabi mediatR ishlaydi _mediatorga.Send() qilaveramiz bu esa bergan command yoki query bo'yicha uzi topib boradi
Yana bir ajoyib jihatlardan biri biz barcha biz FileServicedan foydalanilganmiz bunda user o'zining imagelarini yuklab uni swaggerda ko'rishi mumkin, bu service qanday ishlaydi? user uzining imagesini post qilganda unga Guid qilib uniue name yaratib beradi -> bu nom image nomi uchun va bazada shu userNing imagePath i saqlanadi rasming haqiqiy shakli esa localda joylashgan bo'ladi hozir buni ham ishlatib ko'rmiz Apilarimiz orasida GetImageNomli api ham mavjud
Bu Api ni hozir ishlatib ko'ramiz
Man ko'rib turganingizdek 3 idlink Studentning rasmini chiqarib berdi
endi siz bilan buning logikasini ko'rib chiqamiz
bu imagening upload qilish jarayoni
bu esa imageni Get qilib olish jarayoni
controllerga imageni byte[] qilib berib yuboradi Controller esa
shu kabi swaggerga chiqarib beradi.
Shu bilan University.Api ham o'z nihoyasiga yetdi va Projectham o'z nihoyasiga yetdi
Yana bir qo'shgan o'zgarishlardan biri School.Projectdiga hohlagan bir Modelgan siz malumot Add,Update va Delete bo'lsa Telegram.Bot ga ma'lumot yuboib turuvchi qilingan u botga ma'lumot qanday boradi
Cadastre Database
School Database
Transport Database
Va ApiGetaway ham yozilgan
shu ko'rinishda va Globalniy Avtorization qo'shilgan va University Platform uchun sql Serverda Triggerlar qo'llanilgan. shu bilan Documentation o'z nihoyasiga yetdi e'tiboringiz uchun raxmat.
Agar dasturni run qilmoqchi bo'lsangiz.
- Redisni ishga tushurish
- Barcha Platformdagi appsettings.jsondagi connectionStringlarni o'zgartirish kerak bo'ladi
- Barcha Platformdagi migrationlarni o'chirish va qaytatdan Migration qilish kerak bo'ladi -> update-database
- Telegram bot da o'zingizni TelegramBot Tokeningiz va o'zingizning ChatId yingizni yozishingiz kerak bo'ladi
- Imagelarni ishlatish uchun C:\Users\...\AppData\Roaming\ ga kirib media papkasini ochamiz va media papkasi ichida 3 ta papka avatars,files,images papkasini ochish talab etiladi agar sizda Users\ ning ichida appData papkasi yashirin bo'lib qolgan bo'lishi mumkin u holda uni skritniydan ochib qo'yishingiz kerak bo'ladi yoki Windows Terminal orqali kirib papkalarni ochishingiz mumkin.
- Dasturni run qilishdan oldin multipleProject qilib run qilish kerak bo'ladi barcha Apilarni run qilib olish kerak bo'ladi