/CarRentalProject

Primary LanguageC#MIT LicenseMIT

Car Rental Project - Araç Kiralama Sistemi

📌 Getting Started

N-Katmanlı mimari yapısı ile hazırlanan, EntitiyFramework kullanılarak CRUD işlemlerinin yapıldığı, Console ve WebAPI arayüzü ile çalışan, Araç Kiralama iş yerlerine yönelik örnek bir projedir.


📚 Layers

Entities Layer

Veritabanı tablolarının projede kullanılması için oluşturulmuş Entities Katmanı'nda Abstract ve Concrete olmak üzere iki adet ana klasör ve bunların dışında veritabanında olmayan ama projede linq sorguları için kullanılan DTOs klasörü bulunmaktadır.Abstract klasörü soyut nesneleri, Concrete klasörü somut nesneleri tutmak için oluşturulmuştur.


Data Access Layer

Veritabanı CRUD işlemleri gerçekleştirmek için oluşturulan Data Access Katmanı'nda Abstract ve Concrete olmak üzere iki adet klasör bulunmaktadır.Abstract klasörü soyut nesneleri, Concrete klasörü somut nesneleri tutmak için oluşturulmuştur. Concrete Klasöründe farklı veritabanları ile çalışabilmek için alt klasörlere ayrılmıştır. Biz bu projemizde öncelikle InMemory'de çalıştık, daha sonra projeyi geliştirerek EntityFramework'e geçiş yaptık.

Business Layer

Bu katmanda projeye ait iş kurallarımız bulunmaktadır. Sunum katmanından gelen bilgileri gerekli koşullara göre işlemek veya denetlemek için oluşturulan Business Katmanı'nda Abstract, Concrete, BusinessAspects, Constants, DependencyResolvers ve ValidationRules klasörlerimiz bulunmaktadır.


Core Layer

Bir framework katmanı olan Core Katmanı'nda proje bağımsız tüm projelere entegre edebilmemizi sağlayan alt yapıyı kurmuş bulunuyoruz. Bu katmanda Aspects, CrossCuttingConcerns, DependencyResolvers, DataAccess, Entities, Utilities ve Extensions olmak üzere 7 adet klasör bulunmaktadır. Core katmanının .Net Core ile hiçbir bağlantısı yoktur.Oluşturulan core katmanında ortak kodlar tutulur. Core katmanı ile, kurumsal bir yapıda, alt yapı ekibi ilgilenir.


Console UI Layer

Test ortamıdır. WebAPI tarafına geçmeden önce uygulamanın ne şekilde çalıştığı ve oluşturulan katmanların doğru çalışıp çalışmadı test edilir.


WebAPI Layer

Projenin kullanıcı arayüzleri ile irtibata geçtiği katmandır. Front-end geliştiriciler bu API yapısını kullanarak projenin dış dünyaya sunumunu yapabilirler.


Tables

Veritabanı tablolarınızı manuel de oluşturabilirsiniz. Gerekli bilgiler ekteki gibidir.

CREATE TABLE [dbo].[BodyTypes] (
    [Id]           SMALLINT      IDENTITY (1, 1) NOT NULL,
    [BodyTypeName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[Brands] (
    [Id]        INT           IDENTITY (1, 1) NOT NULL,
    [BrandName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[CarImages] (
    [Id]              INT            IDENTITY (1, 1) NOT NULL,
    [CarId]           INT            NULL,
    [ImagePath]       NVARCHAR (MAX) NULL,
    [ImageUploadDate] DATETIME       NULL
);


CREATE TABLE [dbo].[Cars] (
    [Id]          INT            IDENTITY (1, 1) NOT NULL,
    [CarModelId]  INT            NULL,
    [DailyPrice]  DECIMAL (5, 2) NULL,
    [Description] NVARCHAR (50)  NULL
);


CREATE TABLE [dbo].[Colors] (
    [Id]        INT           IDENTITY (1, 1) NOT NULL,
    [ColorName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[Customers] (
    [Id]          INT           IDENTITY (1, 1) NOT NULL,
    [UserId]      INT           NULL,
    [CompanyName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[FuelTypes] (
    [Id]           SMALLINT      IDENTITY (1, 1) NOT NULL,
    [FuelTypeName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[GearTypes] (
    [Id]           SMALLINT      IDENTITY (1, 1) NOT NULL,
    [GearTypeName] NVARCHAR (50) NULL
);


CREATE TABLE [dbo].[Models] (
    [Id]         INT           IDENTITY (1, 1) NOT NULL,
    [BrandId]    INT           NULL,
    [ModelName]  NVARCHAR (50) NULL,
    [ModelYear]  INT           NULL,
    [ColorId]    INT           NULL,
    [BodyTypeId] SMALLINT      NULL,
    [FuelTypeId] SMALLINT      NULL,
    [GearTypeId] SMALLINT      NULL
);


CREATE TABLE [dbo].[OperationClaims] (
    [Id]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (250) NOT NULL
);


CREATE TABLE [dbo].[Rentals] (
    [Id]         INT  IDENTITY (1, 1) NOT NULL,
    [CarId]      INT  NULL,
    [CustomerId] INT  NULL,
    [RentDate]   DATE NULL,
    [ReturnDate] DATE NULL
);


CREATE TABLE [dbo].[Rentals] (
    [Id]         INT  IDENTITY (1, 1) NOT NULL,
    [CarId]      INT  NULL,
    [CustomerId] INT  NULL,
    [RentDate]   DATE NULL,
    [ReturnDate] DATE NULL
);


CREATE TABLE [dbo].[Users] (
    [Id]           INT             IDENTITY (1, 1) NOT NULL,
    [FirstName]    NVARCHAR (50)   NOT NULL,
    [LastName]     NVARCHAR (50)   NOT NULL,
    [Email]        NVARCHAR (50)   NOT NULL,
    [PasswordHash] VARBINARY (500) NOT NULL,
    [PasswordSalt] VARBINARY (500) NOT NULL,
    [Status]       BIT             NOT NULL
);

NuGet

Autofac Version="6.1.0"
Autofac.Extensions.DependencyInjection Version="7.1.0"
Autofac.Extras.DynamicProxy Version="6.0.0"
FluentValidation Version="9.5.1"
Microsoft.AspNetCore.Http Version="2.2.2"
Microsoft.AspNetCore.Http.Features Version="5.0.3"
Microsoft.AspNetCore.Http.Abstractions Version="2.2.0"
Microsoft.EntityFrameworkCore.SqlServer Version="3.1.1"
Microsoft.IdentityModel.Tokens Version="6.8.0"
System.IdentityModel.Tokens.Jwt Version="6.8.0"

✏️Authors