ReCapProject - Araç Kiralama Sistemi

primeDrive Bu repo Yazılım Geliştirici Yetiştirme Kampı'nda yapılan çalışmaları kapsayan Araç Kiralama Projesi'ni içerir.

📌Getting Started

EntityFramework kullanılarak gerçekleştirilen ve CRUD işlemlerini içeren, araç kiralama iş yerleri için tasarlanmış N-Katmanlı bir mimariye sahip bu projede, Entities, DataAccess, Business, Core ve WebAPI katmanları bulunmaktadır.

📚Layers

entities

Entities Layer

Veritabanı nesneleri için oluşturulmuş Entities Katmanı'nda, projemizde üç farklı klasör bulunmaktadır: Abstract, Concrete ve DTOs. Abstract klasörü soyut nesneleri, Concrete klasörü somut nesneleri ve DTOs klasörü de veri transfer nesnelerini tutmak için oluşturulmuştur.

📁Abstract
      :page_facing_up: IEntity.cs (Ortak Kod Olduğu İçin Core Katmanına Aktarıldı.)

📁Concrete
      :page_facing_up: Brand.cs
      :page_facing_up: Car.cs
      :page_facing_up: CarImage.cs
      :page_facing_up: Color.cs
      :page_facing_up: Customer.cs
      :page_facing_up: Payment.cs
      :page_facing_up: Rental.cs

📁DTOs
      :page_facing_up: CarDetailDTO.cs
      :page_facing_up: CarsByBrandIdDto.cs
      :page_facing_up: CarsByCarImageDto.cs
      :page_facing_up: CarsByColorIdDto.cs
      :page_facing_up: PasswordUpdateDto.cs
      :page_facing_up: RentalDetailDto.cs
      :page_facing_up: UpdateUserDto.cs
      :page_facing_up: UserForLoginDto.cs
      :page_facing_up: UserForRegisterDto.cs

dal

Data Access Layer

Veritabanı CRUD işlemlerini gerçekleştirmek amacıyla oluşturulan Data Access Katmanı'nda, soyut ve somut nesneleri ayrı tutmak için iki adet klasör bulunmaktadır. Soyut nesneleri içeren klasör Abstract olarak adlandırılmış ve içinde bulunan interface'leri, Concrete klasörü altında yer alan EntityFramework klasöründeki sınıflar uygulamaktadır.

📁Abstract
      :page_facing_up: IBrandDal.cs
      :page_facing_up: ICarDal.cs
      :page_facing_up: ICarImageDal.cs
      :page_facing_up: IColorDal.cs
      :page_facing_up: ICustomerDal.cs
      :page_facing_up: IPaymentDal.cs
      :page_facing_up: IRentalDal.cs
      :page_facing_up: IUserDal.cs

📁Concrete
        :file_folder: EntityFramework
             :page_facing_up: EfBrandDal.cs
             :page_facing_up: EfCarDal.cs
             :page_facing_up: EfCarImageDal.cs
             :page_facing_up: EfColorDal.cs
             :page_facing_up: EfCustomerDal.cs
             :page_facing_up: EfPaymentDal.cs
             :page_facing_up: EfRentalDal.cs
             :page_facing_up: EfUserDal.cs
             :page_facing_up: RentACarContext.cs

business

Business Layer

Sunum katmanından gelen bilgileri işlemek veya denetlemek amacıyla oluşturulan Business Katmanı'nda, projemde altı ana klasör bulunmaktadır. Bunlar şu şekildedir: Abstract, BusinessAspects, Concrete, Constants, DependencyResolvers ve ValidationRules. Abstract klasörü soyut nesneleri, Concrete klasörü somut nesneleri tutmak için oluşturulmuştur. BusinessAspects klasörü, işlemleri yönetmek ve güvenlik, yetkilendirme gibi konulara odaklanan işlemleri içermektedir. Constants klasörü, sabit değerleri içermektedir. DependencyResolvers klasörü, bağımlılık çözümleme işlemlerini içermektedir. ValidationRules klasörü ise doğrulama işlemlerinin gerçekleştiği classları içermektedir.

📁Abstract
      :page_facing_up: IAuthService.cs
      :page_facing_up: IBrandService.cs
      :page_facing_up: ICarImageService.cs
      :page_facing_up: ICarService.cs
      :page_facing_up: IColorService.cs
      :page_facing_up: ICustomerService.cs
      :page_facing_up: IPaymentService.cs
      :page_facing_up: IRentalService.cs

📁BusinessAspects
        :file_folder: Autofac
             :page_facing_up: SecuredOperation.cs

📁Concrete
      :page_facing_up: AuthManager.cs
      :page_facing_up: BrandManager.cs
      :page_facing_up: CarImageManager.cs
      :page_facing_up: CarManager.cs
      :page_facing_up: ColorManager.cs
      :page_facing_up: CustomerManager.cs
      :page_facing_up: PaymentManager.cs
      :page_facing_up: RentalManager.cs

📁Constans
      :page_facing_up: Messages.cs
      :page_facing_up: PathConstants.cs

📁DependencyResolvers
           :file_folder: Autofac
                :page_facing_up: AutofacBusinessModule.cs

📁ValidationRules
        :file_folder: FluentValidation
             :page_facing_up: BrandValidator.cs
             :page_facing_up: CarImageValidator.cs
             :page_facing_up: CarValidator.cs
             :page_facing_up: ColorValidator.cs
             :page_facing_up: CustomerValidator.cs
             :page_facing_up: PasswordUpdateValidator.cs
             :page_facing_up: RentalValidator.cs
             :page_facing_up: UserLoginValidator.cs
             :page_facing_up: UserRegisterValidator.cs
             :page_facing_up: UserValidator.cs

core

Core Layer

Bir framework katmanı olarak tasarlanmış olup projemin temel bileşenlerini içerir. Bu katmanda bulunan klasörler, projemin genelinde ortak kullanılan kodları gruplamak ve organizasyonu sağlamak için oluşturulmuştur. Core Katmanı'nda Aspects, CrossCuttingConcerns, DataAccess, DependencyResolvers, Entities, Extensions ve Utilities olmak üzere 7 adet klasör bulunmaktadır.
Aspects Klasörü, Aspect (yön) odaklı konuları içerir. Özellikle, Autofac klasörü, projede kullanılan Autofac IOC container'ını barındırır.
CrossCuttingConcerns Klasörü'nde Caching klasörü önbellekleme işlemlerini, Validation klasörü ise doğrulama işlemlerini içerir.
DataAccess Klasörü, veri erişim nesnelerini içerir. EntityFramework klasörü, projede kullanılan Entity Framework ORM aracını barındırır.
DependencyResolvers Klasörü, bağımlılık çözümleme işlemlerini ele alır ve projede kullanılan IOC container'ının konfigürasyonunu içerir.
Entities Klasörü, temel nesneleri içerir. Abstract ve Concrete klasörleri, soyut ve somut nesneleri gruplar.
Extensions Klasörü, genel amaçlı genişletme (extension) metodlarını içerir. Bu metodlar, projede kullanılan nesneleri genişletmek ve farklı işlevselliği sağlamak amacıyla kullanılır.
Utilities Klasörü, genel amaçlı yardımcı kodları içerir. Business, Helpers, Interceptors, IoC, Results ve Security klasörleri, iş mantığı, yardımcı fonksiyonlar, interceptorlar, IOC konfigürasyonu, sonuç sınıfları ve güvenlikle ilgili kodları içerir.

⚠ Core Katmanı, diğer katmanları referans almaz.

📁Aspects
        :file_folder: Autofac
               :file_folder: Caching
                   :page_facing_up: CacheAspect.cs
                   :page_facing_up: CacheRemoveAspect.cs
               :file_folder: Performance
                   :page_facing_up: PerformanceAspect.cs
               :file_folder: Transaction
                   :page_facing_up: TransactionScopeAspect.cs
               :file_folder: Validation
                   :page_facing_up: ValidationAspect.cs


📁CrossCuttingConcerns
        :file_folder: Caching
               :file_folder: Microsoft
                    :page_facing_up: MemoryCacheManager.cs
               :page_facing_up: ICacheManager.cs
        :file_folder: Validation
               :page_facing_up: ValidationTool.cs


📁DataAccess
        :file_folder: EntityFramework
                    :page_facing_up: EfEntityRepositoryBase.cs
        :page_facing_up: IEntityRepository.cs


📁DependencyResolvers
       :page_facing_up: CoreModule.cs


📁Entities
        :file_folder: Abstract
               :page_facing_up: IDto.cs
               :page_facing_up: IEntity.cs
        :file_folder: Concrete
               :page_facing_up: OperationClaim.cs
               :page_facing_up: User.cs
               :page_facing_up: UserOperationClaim.cs


📁Extensions
      :page_facing_up: ClaimExtensions.cs
      :page_facing_up: ClaimsPrincipalExtensions.cs
      :page_facing_up: ErrorDetails.cs
      :page_facing_up: ExceptionMiddleware.cs
      :page_facing_up: ExceptionMiddlewareExtensions.cs
      :page_facing_up: ServiceCollectionExtensions.cs


📁Utilities
        :file_folder: Business
               :page_facing_up: BusinessRules.cs
        :file_folder: Helpers
               :file_folder: FileHelper
                    :page_facing_up: FileHelperManager.cs
                    :page_facing_up: IFileHelper.cs
               :file_folder: GuidHelper
                    :page_facing_up: GuidHelper.cs
        :file_folder: Interceptors
               :page_facing_up: AspectInterceptorSelector.cs
               :page_facing_up: MethodInterception.cs
               :page_facing_up: MethodInterceptionBaseAttribute.cs
        :file_folder: IoC
               :page_facing_up: ICoreModule.cs
               :page_facing_up: ServiceTool.cs
        :file_folder: Results
               :page_facing_up: DataResult.cs
               :page_facing_up: ErrorDataResult.cs
               :page_facing_up: ErrorResult.cs
               :page_facing_up: IDataResult.cs
               :page_facing_up: IResult.cs
               :page_facing_up: Result.cs
               :page_facing_up: SuccessDataResult.cs
               :page_facing_up: SuccessResult.cs
        :file_folder: Security
               :file_folder: Encryption
                    :page_facing_up: SecurityKeyHelper.cs
                    :page_facing_up: SigningCredentialsHelper.cs
               :file_folder: Hashing
                    :page_facing_up: HashingHelper.cs
               :file_folder: Jwt
                    :page_facing_up: AccessToken.cs
                    :page_facing_up: JwtHelper.cs
                    :page_facing_up: TokenOptions.cs
               :page_facing_up: ITokenHelper.cs

💻ScreenShots

Projenin ekran görüntüleri


homePage

carFilterByBrandAndColor

login

carDetail

rentalAdd

pay

userUpdate

passwordUpdate

✏️Authors

Enes Pehlivan - EnesPehlivan