Proje, İstemci (Web UI) ve Sunucu (Web API) olmak üzere iki ana katmandan oluşuyor ve RESTful yapısına uygun çalışıyor. Temel veritabanı işlemlerinin (CRUD) yanı sıra, projeye SignalR ile anlık iletişim ve OpenAI API kullanarak yapay zeka özellikleri de ekledim. OpenAI'ı; müşterinin yazmış olduğu mesaja karşılık cevap üretimi, yemek tarifi önerisi ve SignalR ile entegreli anlık mesajlaşma sistemlerinde kullandım.
Veritabanı kayıtları, veri alışverişi ve sistemin arka plandaki tüm işlemlerinin yapıldığı sunucu kısmıdır;
- Entity Framework Core: Veritabanı işlemlerini Code-First yaklaşımıyla, SQL yazmadan doğrudan C# nesneleri üzerinden güvenli bir şekilde yönetmek için ORM aracı olarak tercih ettim.
- AutoMapper: Veritabanı Entity'lerim ile dışarıya açtığım DTO'lar (Data Transfer Object) arasındaki dönüştürme (mapping) işlemlerini otomatize ederek kod tekrarının önüne geçtim.
- FluentValidation: Model sınıflarını Data Annotations ile kirletmeden, DTO'ların doğrulama (validation) işlemlerini temiz ve ayrı bir yapıda kurguladım.
- Swashbuckle(Swagger): Geliştirdiğim Web API endpointleri test edebilmek amacıyla projeye entegre ettim.
- Repository & Unit of Work Pattern: Veritabanı erişim katmanını soyutlamak (Generic Repository) ve tüm veritabanı işlemlerini tek bir işlem havuzunda (transaction) güvenle yönetmek için bu tasarım desenlerini uyguladım.
Kullanıcıların ve yöneticilerin sistemi kullandığı sayfalar;
- IHttpClientFactory: Web UI katmanının, Web API projemle ve OpenAI gibi dış servislerle haberleşmesini sağlayan HTTP isteklerini optimize etmek için kullandım.
- SignalR: Yöneticinin, projedeki yapay zeka (OpenAI) ile anlık olarak mesajlaşabilmek için sisteme ekledim.
- OpenAI API: Müşterilerin yazdığı mesajlara cevap üretmek, yemek tarifi önermek ve SignalR ile birlikte anlık mesajlaşma sistemini çalıştırmak için kullandım.
Projeyi, Separation of Concerns (Sorumlulukların Ayrılığı) prensibine sıkı sıkıya bağlı kalarak n-tier (çok katmanlı) bir yapıda tasarladım ve iki ana bağımsız projeye böldüm:
Tüm iş mantığını, doğrulama süreçlerini ve veritabanı işlemlerini yürüttüğüm API katmanıdır.
Context/: Veritabanı bağlantı (ApiContext) ayarlarını yapılandırdığım klasör.Entities/: Veritabanı tablolarının C# nesnesi olarak karşılıkları.DTOs/: İstemci ile sunucu arasında veri taşımak için oluşturduğum hafifletilmiş nesneler.Controllers/: Gelen HTTP isteklerini karşılayıp yanıt döndüğüm API uç noktaları.Repositories/veUnitOfWorks/: Veritabanı işlemlerini soyutlayarak yönettiğim katman.FluentValidation/: DTO nesneleri için yazdığım özel kural ve validasyon sınıfları.AutoMapper/: Entity ve DTO eşleştirme profillerini tuttuğum klasör.Migrations/: Code-First yaklaşımıyla oluşturduğum veritabanı yansımaları.
Son kullanıcının ve yöneticilerin etkileşime girdiği web arayüzünü bu katmanda MVC mimarisiyle kodladım.
Models/veDTOs/: UI tarafında kullandığım karşılama nesneleri.ViewComponents/: Kod tekrarını önlemek ve temiz proje yapısı için sayfa içerisinde tekrar kullanılabilir, kendi iş mantığı olan UI parçacıkları.Areas/: Yönetici (Admin) paneline ait modülleri, ana projeden bağımsız bir şekilde izole ettiğim klasör.ChatHub/SignalR: Sistemdeki anlık mesajlaşma ve bildirimleri yönettiğim sınıflar.