CoreCRUD · Kullanıcı ve Proje İşlemleri için Katmanlı API
Kullanıcı-proje atamalarını EF Core, Repository/Unit of Work ve LINQ join ile DTO’ya dönüştüren erken dönem ASP.NET Core backend çalışması.
CoreCRUD, ASP.NET Core 3.1 ve Entity Framework Core ile hazırlanmış bir kullanıcı ve proje yönetimi örneği. API, kullanıcı kaydının eklenmesi, okunması, güncellenmesi ve silinmesi için ayrı uç noktalar sunuyor. Proje tarafında ise proje oluşturma, bir kullanıcıyı projeyle ilişkilendirme ve proje için oluşturulan ilişkileri listeleme akışına odaklanıyor.
Bir kullanıcıyı projeye bağlamak
Küçük bir ekip için görev takibi ekranı düşünelim. Önce AddUser ile kullanıcı, AddProject ile proje kaydı oluşturuluyor. Ardından AddProjectRole çağrısına bu iki kaydın kimlikleri veriliyor. ProjectRoles modeli, ilişkiyi kendi kimliğiyle birlikte Projectid ve Userid alanlarında tutuyor. Böylece bir proje için hangi kullanıcıların ilişkilendirildiği, kullanıcı ve proje kayıtlarından ayrı olarak listelenebiliyor. Bu örnekte rol kaydı, proje ve kullanıcı kimliklerinden oluşan bir ilişkiyi temsil ediyor.
GetProjectRoles, istenen proje kimliğiyle rol kayıtlarını filtreliyor ve LINQ ile Project tablosuna birleştiriyor. Sorgu sonucu ProjectRoleDto olarak dönüyor. Her satır ilişki kimliğini, proje kimliğini, kullanıcı kimliğini ve proje adını taşıyor. Bu çıktıdan, örneğin bir proje detay ekranında proje adıyla birlikte ilişkili kullanıcı kimlikleri gösterilebilir.
Repository ve Unit of Work görevleri
Data projesi modelleri, DTO’ları ve MasterContext sınıfını içeriyor. Bağlamın veri sağlayıcısı MySQL ve depoda üç tabloyu oluşturan bir EF Core migration’ı bulunuyor. DataAccess tarafındaki Repository<T>, aynı ekleme, arama, güncelleme ve silme kodunu farklı varlık tipleriyle kullanmaya imkân veriyor. UnitOfWork, ilgili repository’yi elindeki DbContext ile oluşturuyor ve değişiklikleri SaveChanges çağrısıyla kaydediyor.
SetUser akışında denetleyici, önce DTO’daki kimlikle kullanıcıyı buluyor. Ad, kullanıcı adı ve parola alanlarını nesneye aktarıyor. Ardından repository kaydı değiştirilmiş olarak işaretliyor ve UnitOfWork değişikliği veritabanına gönderiyor. Burada denetleyiciler MasterContext örneğini doğrudan oluşturuyor. Kullanıcıyı kimliğiyle okuma ve proje ilişkilerini listeleme işlemleri de veriye erişmenin iki yolunu yan yana gösteriyor. İlki repository ile tek bir varlık getiriyor, ikincisi bağlam üzerinde birden fazla tablodan yanıtı oluşturuyor.
Kullanıcı işlemleri ve proje sorgularının kapsamı
Kullanıcı denetleyicisinde AddUser, GetUser, SetUser ve DeleteUser işlemleri var. Yazma işlemleri kısa metin yanıtları kullanıyor. Proje denetleyicisinde ise AddProject, AddProjectRole ve GetProjectRoles yer alıyor. Bu kapsam, kullanıcı CRUD işlemlerini ve ilişki listelemeyi aynı çözümde okumayı mümkün kılıyor. Özellikle birincil anahtarla tek bir kaydı bulmak ile ilişkili tablolardan ekrana uygun bir DTO üretmek arasındaki fark, iki denetleyiciyi birlikte inceleyince görülebiliyor.