Skip to content

This project is PayCore bootcamp final project. This project developed with onion architecture. And also used RabbitMq, Redis Cache, Authorization with Jwt Token and Md5 used for creating hash password.

Notifications You must be signed in to change notification settings

195-Patika-Dev-Paycore-Net-Bootcamp/GuvenBarisCakanFinalProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PayCore & Patika.dev .Net Core Bootcamp

Bitirme Projesi

Bu proje temel olarak iki ana projenin birleşmesinden oluşmaktadır. Bunlar;

  • WebAPI
  • Consumer

İçindekiler

Bu projede Onion Architecture katmanlı mimarisi kullanıldı. Bu mimari temel olarak dört kısımdan oluşmaktadır. Projenin klasör yapılanması aşağıdaki gibidir.

Folder Structure

Proje Çalıştırılması

Projeyi çalıştırmak için Multiple Startup'ı seçmemiz gerekiyor Solution Properties'lerinden. Burada WebAPI,Consumer sırası ile start verilmelidir.

Projeye start verilmelidir. Kullanıcı arayüzünde işlemler yapabilmesi için kullanıcının login olması gerekmektedir. Register olunabilir daha sonra tekrardan login olması gerekir. Token alabilmesi için register olan kullanıcının login işlemini gerçekleştirmesi gerekmektedir.

Controller'lara istek atılabilmesi için login olunması gerekmektedir.

Postman Collection; Postman üzerinden import edilerek, Api'ye istek atılabilir methodlar tetiklenebilir(Detaylar için bkz.)

Domain

Uygulamamızın database tablolarına karşılık gelen classları oluşturduğumuz katmandır. Nhibernate code-first yaklaşımı kullanılmıştır. Class'ları yani Entity'leri oluşturup daha sonra database kısmına aktarılmıştır.

Domain Class Library

domain

Application

Bu katman da soyutlama işlemleri yapılmaktadır. Uygulamanın geneline hitap edecek tüm nesneler bu katmanda tanımlanır. Burada tanımlı olan interfaceler diğer katmanlarda somut nesnelere dönüşmektedir.

Application Class Library

application

Interfaces : Soyutlama işlemlerini yaptığımız kısımdır.
Utilities : Base yapıların olduğu ve projenin genelinde kullandığımız nesnelerdir. Models : Entitylerimizi kullanıcıya gereksiz kısımları göstermemek için oluşturduğumuz ara nesnelerdir.
DependencyContainers : Application katmanının bağımlılık çözümleyici kısmıdır. WebAPI ye eklenmesi gerekir.

Infrastructure

Database'e erişimi olan tek katmandır. Database erişim bu katman üzerinden sağlanır. Application katmanında tanımladığımız soyut kavramlar(Interfaces) bu katman da karşılıkları oluşturularak database işlemleri yapılır.

infrastructure

Mapping : Database de ki tablolarımızın nasıl oluşacağını belirlediğimiz nesnelerdir. Burada belirlediğimiz ayarlar ile database tablolarımız oluşur.
DependencyContainers : Infrastructure katmanının bağımlılık çözümleyici kısmıdır. WebAPI ye eklenmesi gerekir.
Sessions : Application katmanın da ki modellere özgü Interface'lerin karşılıklarının olduğu kısımdır.
UnitOfWork : Unit Of Work design pattern, Session nesnelerinin tek bir yerden yönetilebilmesini sağlamak amacıyla kullanılmıştır.

Persistence

Sisteme eklenecek dış/external yapılanmalar bu katmanda dahil edilir.

persistence

DependencyContainers : Infrastructure katmanının bağımlılık çözümleyici kısmıdır. WebAPI ye eklenmesi gerekir.
Services Dışa bağımlılık kuracağımız service'ler burada tanımlanır. RabbitMQ kuyruk yapısı ve mail servis tanımlanmıştır.

Service

Uygulamanın iş mantığını kurguladığımız katmandır. Bu katmanda iş kurallarımıza bağlı olarak servicelerimizi yapılandırırız.

service

Cache : Cacheleme işlemlerini kontrol ettiğimiz service'dir. DependencyContainers : Service katmanının bağımlılık çözümleyici kısmıdır. HelperServices : Database'e bağımlı olmayan projede diğer service'lere inject edilerek kullanılan servicelerdir. Services : Entitylerimizin database ile ilişkilerinin iş mantığı kuralları çerçevesinde gerçekleştirilmesini sağlayan servicelerdir.

WebAPI

Uygulamamıza gelen kullanıcının isteklerini karşıladığımız ve bunlara gerekli cevabı döndüğümüz arayüzdür. WebAPI sunum katmanının içerisinde yer alır. WebAPI'yi istenilen başka her hangi bir uygulamaya da servis edebiliriz.

WebApi

Controller : Yapılan isteğin türüne göre HTTP verblerinden(Get,Put,Delete,Post) uygun olan fonksiyonun içeriği çalışacaktır. Çalışan bu kısım istekte bulunan clienta(isteği atan) response döndürecektir.
Middlewares : Custom Excepstion Middleware yazılmıştır. Request gelip response dönene kadar herhangi bir hata olması durumunda hata loglanacak ve de kullanıcı kısmına daha okunabilir hata yansıtmamızı sağlayacaktır.

Consumer

Console uygulamasıdır. RabbitMQ service'nin kuyruğa eklenen emailleri okuyup gönderilmesi gereken mail adresine gönderme işlemini yapmaktadır.

Unit Test

Unit Test, bir sistemde mantıksal olarak izole edilebilecek en küçük kod parçası olan bir birimi test etmenin bir yoludur. Bütün methodlara unit test yazılmıştır.

UnitTest

Controllers

AuthController

Kullanıcı login ve register işlemlerini yapabilmektedir.

Auth Controller

AccountDetails

Kullanıcı kendi ürünlerine gelen teklifleri listeleyebilir(GetUserProductOffers()). Ayrıca teklif yaptığı ürünleri de listeleyebilir(GetUserOffersOnProducts()).

AccountDetails Controller

ProductsController

Ürün ekleme, güncelleme, silme, listeleme ve ürün satma apileri bulunmaktadır.

Product Controller

OffersController

Teklif verme, güncelleme, silme, listeleme, teklif onaylama ve teklifi reddetme işlemleri yapılabilmektedir.

Offer Controller

CategoriesController

Kategori ekleme, güncelleme, silme ve listeleme işlemleri yapılabilmektedir.

Category Controller

BrandsController

Marka ekleme, güncelleme, silme ve listeleme işlemleri yapılabilmektedir.

Brand Controller

ColorsController

Renk ekleme, güncelleme, silme ve listeleme işlemleri yapılabilmektedir.

Color Controller

About

This project is PayCore bootcamp final project. This project developed with onion architecture. And also used RabbitMq, Redis Cache, Authorization with Jwt Token and Md5 used for creating hash password.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages