Skip to content

Bu proje, kullanıcıların kolaylıkla araç kiralayabileceği, çeşitli özellikler sunan kapsamlı bir araç kiralama sistemidir. Projemiz, araç kiralama sürecini daha hızlı ve güvenli bir deneyim haline getirmeyi hedefler.

Notifications You must be signed in to change notification settings

Fatmabirel/AutoGO-Backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AutoGO: Araç Kiralama Sistemi 🚗

Bu proje, kullanıcıların kolaylıkla araç kiralayabileceği, çeşitli özellikler sunan kapsamlı bir araç kiralama sistemidir.

📌Projenin frontend kısmına buradan ulaşabilirsiniz.

GEREKSİNİMLER 🛠

  • Web projesi: Asp.NET Web API
  • Veri tabanı: MsSQL Server
  • Dökümantasyon için: Postman Swagger

PROJEDE KULLANILAN TEKNOLOJİLER VE KÜTÜPHANELER 🛠️

C# .NET Entity Framework FluentValidation JWT

📫 NASIL BİR PROJE OLUŞTURDUK?

Projemiz, kullanıcıların kolaylıkla araç kiralayabileceği, çeşitli özellikler sunan kapsamlı bir araç kiralama sistemidir. Bu proje, kullanıcı deneyimini ön planda tutarak, araç kiralama sürecini hem hızlı hem de verimli hale getirmeyi amaçlamaktadır.

PROJE DETAYLARI📝

Projemiz, .Net ve Angular teknolojilerini içeren modern bir web uygulamasıdır. Projemizde MsSQL kullanılmış olup, dökümantasyon için Swagger entegrasyonu sağlanmıştır.

Projemizde veritabanı işlemleri için Entity Framework kullanılmış ve Database First yaklaşımı benimsenmiştir.

Ek olarak, projede şu önemli kütüphaneler ve araçlar kullanılmaktadır:

  • FluentValidation: Veri doğrulama süreçlerini yönetmek için.
  • JWT (JSON Web Token): Kimlik doğrulama ve yetkilendirme işlemlerini güvenli bir şekilde gerçekleştirmek için.

Bu sayede, projemiz yüksek performanslı, kolay yönetilebilir ve güvenli bir mimariye sahip olmuştur.

🎯Projede veri tabanı bağlantı yolu RentACarContext içinde yazılmıştır.

  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("Server=DESKTOP-Q270QVE\\SQLEXPRESS;Database=ReCap;Trusted_Connection=True;TrustServerCertificate=True;");
}

🔒 Projemizin katmanları aşağıda gösterilmiştir:
image


🌱ENTITY KATMANI

✎ Entityler Entity katmanında oluşturulmuştur. Aşağıda örnek olarak Brand Entity dosyasını görebilirsiniz. Her class için gereksiz kod tekrarını önlemek adına base class olan Entity sınıfından miras alır. Diğer entityleri projenin içerisinde inceleyebilirsiniz.

Oluşturulan Entityler

  • ⚡Brand, marka bilgilerini tutar.
  • ⚡Car, araba bilgilerini tutar.
  • ⚡CarImage, araba resimleri bilgilerini tutar.
  • ⚡Color, renk bilgilerini tutar.
  • ⚡Customer, müşteri bilgilerini tutar.
  • ⚡OperationClaim, rol bilgilerini tutar.
  • ⚡Rental, araba kiralama bilgilerini tutar.
  • ⚡User, kullanıcı bilgilerini tutar.
  • ⚡UserOperationClaim, kullanıcı rol bilgilerini tutar.
 public class Brand : IEntity
 {
     public int Id { get; set; }
     public string Name { get; set; }
 }

🌱DATA ACCESS KATMANI

Data Access katmanı, uygulamanın veri tabanı ile olan etkileşimini düzenleyerek, veri saklama işlemlerinin güvenli ve etkili bir şekilde yönetilmesini sağlayan katmandır.

image

✎ Data Access katmanında, oluşturulan Entity sınıflarını veri tabanı modellerine karşılık gelecek olan tabloların oluşturulması için RentACarContext sınıfı bulunmaktadır. Ayrıca bu katmanda veri tabanı işlemlerini gerçekleştirmek için oluşturulan repository sınıfları bulunmaktadır.

📌 Aşağıda RentACarContext sınıfı örnek olarak verilmiştir. Diğer sınıfları projeden inceleyebilirsiniz.

public class RentACarContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server=DESKTOP-Q270QVE\\SQLEXPRESS;Database=ReCap;Trusted_Connection=True;TrustServerCertificate=True;");
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>()
            .HasKey(c => c.Id);
    }

    public DbSet<Car> Cars { get; set; }
    public DbSet<Brand> Brands { get; set; }
    public DbSet<Color> Colors { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Customer> Customers { get; set; }
    public DbSet<Rental> Rentals { get; set; }
    public DbSet<CarImage> CarImages { get; set; }
    public DbSet<OperationClaim> OperationClaims { get; set; }
    public DbSet<UserOperationClaim> UserOperationClaims { get; set; }
}

🌱BUSINESS KATMANI

image


🌕 Business katmanında, uygulamanın iş kodları, iş kuralları ve doğrulama (validation) işlemleri yapılmaktadır. Ayrıca, iş kurallarını uygulayan ve veri doğrulamasını gerçekleştiren sınıflar burada bulunur.

📃 Aşağıda Fluent Validation kütüphanesi kullanılarak Brand Entity için oluşturulan validator sınıfı örnek olarak verilmiştir. Diğer sınıfları projeden inceleyebilirsiniz.

public class BrandValidator : AbstractValidator<Brand>
{
    public BrandValidator()
    {
        RuleFor(b=>b.Name).NotEmpty();
        RuleFor(b=>b.Name).MinimumLength(2);
    }
}

🔎 Böylece daha Controller tarafında istek atılmadan requestlerin istenilen kurallara uygun olup olmadığı kontrol edilir.


🌱WEBAPI KATMANI

⚓ Bu katmanda işlemlerin gerçekleştirildiği Controller sınıfları oluşturulur. Aşağıda BrandsController dosyasının kodları örnek olarak gösterilmiştir.

[Route("api/[controller]")]
[ApiController]
public class BrandsController : ControllerBase
{
    IBrandService _brandService;
    public BrandsController(IBrandService brandService)
    {
        _brandService = brandService;
    }

    [HttpGet("GetAll")]
    public IActionResult GetAll()
    {
       var result = _brandService.GetAll();
        if(result.Success)
        {
            return Ok(result);
        }
        return BadRequest(result);
    }

    [HttpGet("GetById")]
    public IActionResult GetById(int id)
    {
        var result = _brandService.GetById(id);
        if (result.Success)
        {
            return Ok(result);
        }
        return BadRequest(result);
    }

    [HttpPost("Add")]
    public IActionResult Add(Brand brand)
    {
        var result = _brandService.Add(brand);
        if (result.Success)
        {
            return Ok(result);
        }
        return BadRequest(result);
    }

    [HttpPost("Update")]
    public IActionResult Update(Brand brand)
    {
        var result = _brandService.Update(brand);
        if (result.Success)
        {
            return Ok(result);
        }
        return BadRequest(result);
    }

    [HttpPost("Delete")]
    public IActionResult Delete(Brand brand)
    {
        var result = _brandService.Delete(brand);
        if (result.Success)
        {
            return Ok(result);
        }
        return BadRequest(result);
    }
}
   //diğer metotlara proje kodlarından ulaşabilirsiniz.

Projede 9 adet Controller sınıfı bulunmaktadır. Proje isterlerine göre eklenen Controller sınıfları ise şunlardır;

  • ⚡ AuthController, yetkilendirme işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ BrandsController, marka işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ CarsController, araba işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ CarImagesController, araba resimleri işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ ColorsController, renk işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ CustomersController, müşteri işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ RentalsController, araba kiralama işlemlerinin gerçekleştirildiği sınıftır.
  • ⚡ UsersController, kullanıcı işlemlerinin gerçekleştirildiği sınıftır.

Görüşürüz 🎉

About

Bu proje, kullanıcıların kolaylıkla araç kiralayabileceği, çeşitli özellikler sunan kapsamlı bir araç kiralama sistemidir. Projemiz, araç kiralama sürecini daha hızlı ve güvenli bir deneyim haline getirmeyi hedefler.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages