Full Code of ugurkryl41/ReCapProject for AI

master a0bfb4633239 cached
142 files
158.8 KB
40.2k tokens
461 symbols
1 requests
Download .txt
Repository: ugurkryl41/ReCapProject
Branch: master
Commit: a0bfb4633239
Files: 142
Total size: 158.8 KB

Directory structure:
gitextract_qx9n6vkf/

├── .gitattributes
├── .gitignore
├── Business/
│   ├── Abstract/
│   │   ├── IAuthService.cs
│   │   ├── IBrandService.cs
│   │   ├── ICarImageService.cs
│   │   ├── ICarService.cs
│   │   ├── ICartService.cs
│   │   ├── IColorService.cs
│   │   ├── ICustomerService.cs
│   │   ├── IPaymentService.cs
│   │   ├── IRentalService.cs
│   │   └── IUserService.cs
│   ├── Business.csproj
│   ├── BusinessAspects/
│   │   └── Autofac/
│   │       └── SecuredOperation.cs
│   ├── Concrete/
│   │   ├── AuthManager.cs
│   │   ├── BrandManager.cs
│   │   ├── CarImageManager.cs
│   │   ├── CarManager.cs
│   │   ├── CartManager.cs
│   │   ├── ColorManager.cs
│   │   ├── CustomerManager.cs
│   │   ├── PaymentManager.cs
│   │   ├── RentalManager.cs
│   │   └── UserManager.cs
│   ├── Constants/
│   │   └── Messages.cs
│   ├── DependencyResolvers/
│   │   └── Autofac/
│   │       └── AutofacBusinessModule.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ValidationRules/
│   │   └── FluentValidation/
│   │       ├── BrandValidator.cs
│   │       ├── CarImageValidator.cs
│   │       ├── CarValidator.cs
│   │       ├── ColorValidator.cs
│   │       ├── CustomerValidator.cs
│   │       ├── RentalValidator.cs
│   │       └── UserValidator.cs
│   ├── app.config
│   └── packages.config
├── CarRentalQuery1.sql
├── ConsoleUI/
│   ├── ConsoleUI.csproj
│   └── Program.cs
├── Core/
│   ├── Aspect/
│   │   └── Autofac/
│   │       ├── Caching/
│   │       │   ├── CacheAspect.cs
│   │       │   └── CacheRemoveAspect.cs
│   │       ├── Performance/
│   │       │   └── PerformanceAspect.cs
│   │       ├── Transaction/
│   │       │   └── TransactionScopeAspect.cs
│   │       └── Validation/
│   │           └── ValidationAspect.cs
│   ├── Core.csproj
│   ├── CrossCuttingConcerns/
│   │   ├── Caching/
│   │   │   ├── ICacheManager.cs
│   │   │   └── Microsoft/
│   │   │       └── MemoryCacheManager.cs
│   │   └── Validation/
│   │       └── ValidationTool.cs
│   ├── DataAccess/
│   │   ├── EntityFramework/
│   │   │   └── EfEntityRepositoryBase.cs
│   │   └── IEntityRepository.cs
│   ├── DependencyResolvers/
│   │   └── CoreModule.cs
│   ├── Entities/
│   │   ├── Concrete/
│   │   │   ├── OperationClaim.cs
│   │   │   ├── User.cs
│   │   │   └── UserOperationClaim.cs
│   │   ├── IDto.cs
│   │   └── IEntity.cs
│   ├── Extensions/
│   │   ├── ClaimExtensions.cs
│   │   ├── ClaimsPrincipalExtensions.cs
│   │   ├── ErrorDetails.cs
│   │   ├── ExceptionMiddleware.cs
│   │   ├── ExceptionMiddlewareExtensions.cs
│   │   └── ServiceCollectionExtensions.cs
│   └── Utilities/
│       ├── Business/
│       │   └── BusinessRules.cs
│       ├── FileHelper/
│       │   └── FileHelper.cs
│       ├── Interceptors/
│       │   ├── AspectInterceptorSelector.cs
│       │   ├── MethodInterception.cs
│       │   └── MethodInterceptionBaseAttribute.cs
│       ├── IoC/
│       │   ├── ICoreModule.cs
│       │   └── ServiceTool.cs
│       ├── Results/
│       │   ├── DataResult.cs
│       │   ├── ErrorDataResult.cs
│       │   ├── ErrorResult.cs
│       │   ├── IDataResult.cs
│       │   ├── IResult.cs
│       │   ├── Result.cs
│       │   ├── SuccessDataResult.cs
│       │   └── SuccessResult.cs
│       └── Security/
│           ├── Encryption/
│           │   ├── SecurityKeyHelper.cs
│           │   └── SigningCredentialsHelper.cs
│           ├── Hashing/
│           │   └── HashingHelper.cs
│           └── Jwt/
│               ├── AccessToken.cs
│               ├── ITokenHelper.cs
│               ├── JwtHelper.cs
│               └── TokenOptions.cs
├── DataAccess/
│   ├── Abstract/
│   │   ├── IBrandDal.cs
│   │   ├── ICarDal.cs
│   │   ├── ICarImageDal.cs
│   │   ├── ICartDal.cs
│   │   ├── IColorDal.cs
│   │   ├── ICustomerDal.cs
│   │   ├── IPaymentDal.cs
│   │   ├── IRentalDal.cs
│   │   └── IUserDal.cs
│   ├── Concrete/
│   │   ├── EntityFramework/
│   │   │   ├── CarRentalContext.cs
│   │   │   ├── EfBrandDal.cs
│   │   │   ├── EfCarDal.cs
│   │   │   ├── EfCarImageDal.cs
│   │   │   ├── EfCartDal.cs
│   │   │   ├── EfColorDal.cs
│   │   │   ├── EfCustomerDal.cs
│   │   │   ├── EfPaymentDal.cs
│   │   │   ├── EfRentalDal.cs
│   │   │   └── EfUserDal.cs
│   │   └── InMemory/
│   │       └── InMemoryCarDal.cs
│   └── DataAccess.csproj
├── Entities/
│   ├── Concrete/
│   │   ├── Brand.cs
│   │   ├── Car.cs
│   │   ├── CarImage.cs
│   │   ├── Cart.cs
│   │   ├── Color.cs
│   │   ├── Customer.cs
│   │   ├── Payment.cs
│   │   └── Rental.cs
│   ├── DTOs/
│   │   ├── CarDetailDto.cs
│   │   ├── CustomerDetailDto.cs
│   │   ├── RentalDetailDto.cs
│   │   ├── UserForLoginDto.cs
│   │   └── UserForRegisterDto.cs
│   ├── Entities.csproj
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── app.config
├── README.md
├── ReCapProject.sln
└── WebAPI/
    ├── .config/
    │   └── dotnet-tools.json
    ├── Controllers/
    │   ├── AuthController.cs
    │   ├── BrandsController.cs
    │   ├── CarImagesController.cs
    │   ├── CarsController.cs
    │   ├── CartsController.cs
    │   ├── ColorsController.cs
    │   ├── CustomersController.cs
    │   ├── PaysController.cs
    │   ├── RentalsController.cs
    │   ├── UsersController.cs
    │   └── WeatherForecastController.cs
    ├── Program.cs
    ├── Properties/
    │   └── launchSettings.json
    ├── Startup.cs
    ├── WeatherForecast.cs
    ├── WebAPI.csproj
    ├── appsettings.Development.json
    └── appsettings.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb

================================================
FILE: Business/Abstract/IAuthService.cs
================================================
using Core.Entities.Concrete;
using Core.Utilities.Results;
using Core.Utilities.Security.Jwt;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IAuthService
    {
        IDataResult<User> Register(UserForRegisterDto userForRegisterDto);
        IDataResult<User> Login(UserForLoginDto userForLoginDto);
        IResult UserExists(string email);
        IDataResult<AccessToken> CreateAccessToken(User user);
    }
}


================================================
FILE: Business/Abstract/IBrandService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IBrandService
    {
        IDataResult<List<Brand>> GetAll();
        IDataResult<Brand> Get(int id);
        IResult Add(Brand brand);
        IResult Update(Brand brand);
        IResult Delete(Brand brand);
    }
}


================================================
FILE: Business/Abstract/ICarImageService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface ICarImageService
    {
        IDataResult<List<CarImage>> GetAll();
        IDataResult<CarImage> Get(int id);
        IResult Add(CarImage carImage,IFormFile file);
        IResult Update(CarImage carImage, IFormFile file);
        IResult Delete(CarImage carImage);
        IDataResult<List<CarImage>> GetImagesByCarId(int id);
        IResult TransactionalOperation(CarImage carImage, IFormFile file);
    }
}


================================================
FILE: Business/Abstract/ICarService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface ICarService
    {
        IDataResult<List<Car>> GetAll();
        IDataResult<Car> Get(int id);

        IResult Add(Car car);
        IResult Update(Car car);
        IResult Delete(Car car);

        IDataResult<CarDetailDto> GetCarDetail(int id);

        IDataResult<List<Car>> GetCarsByBrandId(int id);
        IDataResult<List<Car>> GetCarsByColorId(int id);

        IDataResult<List<CarDetailDto>> GetCarDetails();
        IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int brandid,int colorid);
        IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id);
        IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id);
        IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id);
    }
}


================================================
FILE: Business/Abstract/ICartService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface ICartService
    {
        IDataResult<List<Cart>> GetAll();
        IDataResult<Cart> Get(int id);

        IResult Add(Cart cart);
        IResult Update(Cart cart);
        IResult Delete(Cart cart);

        IDataResult<List<Cart>> GetAllByCustomerId(int customerId);
    }
}


================================================
FILE: Business/Abstract/IColorService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IColorService
    {
        IDataResult<List<Color>> GetAll();
        IDataResult<Color> Get(int id);
        IResult Add(Color color);
        IResult Update(Color color);
        IResult Delete(Color color);
    }
}


================================================
FILE: Business/Abstract/ICustomerService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface ICustomerService
    {
        IDataResult<List<Customer>> GetAll();
        IDataResult<Customer> Get(int id);
        IDataResult<Customer> GetbyUser(int id);
        IResult Add(Customer customer);
        IResult Delete(Customer customer);
        IResult Update(Customer customer);
        IDataResult<List<CustomerDetailDto>> GetCustomerDetails();
    }
}


================================================
FILE: Business/Abstract/IPaymentService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IPaymentService
    {
        IResult Add(Payment payment);
    }
}


================================================
FILE: Business/Abstract/IRentalService.cs
================================================
using Core.Utilities.Results;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IRentalService
    {
        IDataResult<List<Rental>> GetAll();
        IDataResult<Rental> Get(int id);
        IResult Add(Rental rental);
        IResult Delete(Rental rental);
        IResult Update(Rental rental);
        IResult DateCheck(Rental rental);
        IDataResult<List<RentalDetailDto>> GetRentalDetails();
        IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int carId);
    }
}


================================================
FILE: Business/Abstract/IUserService.cs
================================================
using Core.Entities.Concrete;
using Core.Utilities.Results;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Abstract
{
    public interface IUserService
    {
        IDataResult<List<User>> GetAll();
        IDataResult<User> Get(int id);
        IResult Add(User user);
        IResult Delete(User user);
        IResult Update(User user);
        IDataResult<List<OperationClaim>> GetClaims(User user);
        IDataResult<User> GetByMail(string email);
    }
}


================================================
FILE: Business/Business.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{710A9967-AB8D-42BF-ACC4-51E19AD024F1}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Business</RootNamespace>
    <AssemblyName>Business</AssemblyName>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Autofac, Version=6.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
      <HintPath>..\packages\Autofac.6.1.0\lib\netstandard2.0\Autofac.dll</HintPath>
    </Reference>
    <Reference Include="Autofac.Extensions.DependencyInjection, Version=7.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
      <HintPath>..\packages\Autofac.Extensions.DependencyInjection.7.1.0\lib\netstandard2.0\Autofac.Extensions.DependencyInjection.dll</HintPath>
    </Reference>
    <Reference Include="Autofac.Extras.DynamicProxy, Version=6.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
      <HintPath>..\packages\Autofac.Extras.DynamicProxy.6.0.0\lib\netstandard2.0\Autofac.Extras.DynamicProxy.dll</HintPath>
    </Reference>
    <Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
      <HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
    </Reference>
    <Reference Include="FluentValidation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
      <HintPath>..\packages\FluentValidation.9.5.1\lib\net461\FluentValidation.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.AspNetCore.Http, Version=2.2.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.AspNetCore.Http.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.AspNetCore.Http.Features, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNetCore.Http.Features.5.0.0\lib\net461\Microsoft.AspNetCore.Http.Features.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.AspNetCore.WebUtilities, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Extensions.DependencyInjection, Version=3.1.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Extensions.DependencyInjection.3.1.12\lib\net461\Microsoft.Extensions.DependencyInjection.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.12\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Extensions.ObjectPool, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Extensions.ObjectPool.2.2.0\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Extensions.Options, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Extensions.Primitives, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Extensions.Primitives.5.0.0\lib\net461\Microsoft.Extensions.Primitives.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
    </Reference>
    <Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
    </Reference>
    <Reference Include="System.ComponentModel.Composition" />
    <Reference Include="System.ComponentModel.DataAnnotations" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Core" />
    <Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
    </Reference>
    <Reference Include="System.IO.Pipelines, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.IO.Pipelines.5.0.1\lib\net461\System.IO.Pipelines.dll</HintPath>
    </Reference>
    <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
    </Reference>
    <Reference Include="System.Numerics" />
    <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.5.0.0\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
    </Reference>
    <Reference Include="System.Text.Encodings.Web, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Text.Encodings.Web.4.5.0\lib\netstandard2.0\System.Text.Encodings.Web.dll</HintPath>
    </Reference>
    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Abstract\IAuthService.cs" />
    <Compile Include="Abstract\IBrandService.cs" />
    <Compile Include="Abstract\ICarImageService.cs" />
    <Compile Include="Abstract\ICarService.cs" />
    <Compile Include="Abstract\ICartService.cs" />
    <Compile Include="Abstract\IColorService.cs" />
    <Compile Include="Abstract\ICustomerService.cs" />
    <Compile Include="Abstract\IPaymentService.cs" />
    <Compile Include="Abstract\IRentalService.cs" />
    <Compile Include="Abstract\IUserService.cs" />
    <Compile Include="BusinessAspects\Autofac\SecuredOperation.cs" />
    <Compile Include="Concrete\AuthManager.cs" />
    <Compile Include="Concrete\BrandManager.cs" />
    <Compile Include="Concrete\CarImageManager.cs" />
    <Compile Include="Concrete\CarManager.cs" />
    <Compile Include="Concrete\CartManager.cs" />
    <Compile Include="Concrete\ColorManager.cs" />
    <Compile Include="Concrete\CustomerManager.cs" />
    <Compile Include="Concrete\PaymentManager.cs" />
    <Compile Include="Concrete\RentalManager.cs" />
    <Compile Include="Concrete\UserManager.cs" />
    <Compile Include="Constants\Messages.cs" />
    <Compile Include="DependencyResolvers\Autofac\AutofacBusinessModule.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="ValidationRules\FluentValidation\BrandValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\CarImageValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\CarValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\ColorValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\CustomerValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\RentalValidator.cs" />
    <Compile Include="ValidationRules\FluentValidation\UserValidator.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Core\Core.csproj">
      <Project>{185e58ed-316c-45f6-8472-03592bb71a21}</Project>
      <Name>Core</Name>
    </ProjectReference>
    <ProjectReference Include="..\DataAccess\DataAccess.csproj">
      <Project>{dfa505e2-14b4-462a-8dda-09eeffad1018}</Project>
      <Name>DataAccess</Name>
    </ProjectReference>
    <ProjectReference Include="..\Entities\Entities.csproj">
      <Project>{d8f5692b-bd1d-47cf-8b64-45317038c94e}</Project>
      <Name>Entities</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

================================================
FILE: Business/BusinessAspects/Autofac/SecuredOperation.cs
================================================
using Business.Constants;
using Castle.DynamicProxy;
using Core.Utilities.Interceptors;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Core.Extensions;
using Core.Utilities.IoC;

namespace Business.BusinessAspects.Autofac
{
    public class SecuredOperation:MethodInterception
    {
        private string[] _roles;
        private IHttpContextAccessor _httpContextAccessor;

        public SecuredOperation(string roles)
        {
            _roles = roles.Split(',');
            _httpContextAccessor = ServiceTool.ServiceProvider.GetService<IHttpContextAccessor>();

        }

        protected override void OnBefore(IInvocation invocation)
        {
            var roleClaims = _httpContextAccessor.HttpContext.User.ClaimRoles();
            foreach (var role in _roles)
            {
                if (roleClaims.Contains(role))
                {
                    return;
                }
            }
            throw new Exception(Messages.AuthorizationDenied);
        }
    }
}


================================================
FILE: Business/Concrete/AuthManager.cs
================================================
using Business.Abstract;
using Business.Constants;
using Core.Entities.Concrete;
using Core.Utilities.Results;
using Core.Utilities.Security.Hashing;
using Core.Utilities.Security.Jwt;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class AuthManager : IAuthService
    {
        private IUserService _userService;
        private ITokenHelper _tokenHelper;

        public AuthManager(IUserService userService, ITokenHelper tokenHelper)
        {
            _userService = userService;
            _tokenHelper = tokenHelper;
        }

        public IDataResult<AccessToken> CreateAccessToken(User user)
        {
            var claims = _userService.GetClaims(user).Data;
            var accessToken = _tokenHelper.CreateToken(user, claims);
            return new SuccessDataResult<AccessToken>(accessToken, Messages.AccessTokenCreated);
        }

        public IDataResult<User> Login(UserForLoginDto userForLoginDto)
        {
            var userToCheck = _userService.GetByMail(userForLoginDto.Email).Data;
            if (userToCheck == null)
            {
                return new ErrorDataResult<User>("Kullanıcı yok");
            }

            if (!HashingHelper.VerifyPasswordHash(userForLoginDto.Password, userToCheck.PasswordHash, userToCheck.PasswordSalt))
            {
                return new ErrorDataResult<User>("Parola hatası");
            }

            return new SuccessDataResult<User>(userToCheck, Messages.SuccessfulLogin);
        }

        public IDataResult<User> Register(UserForRegisterDto userForRegisterDto)
        {
            byte[] passwordHash, passwordSalt;
            HashingHelper.CreatePasswordHash(userForRegisterDto.Password, out passwordHash, out passwordSalt);
            var user = new User
            {
                Email = userForRegisterDto.Email,
                FirstName = userForRegisterDto.FirstName,
                LastName = userForRegisterDto.LastName,
                PasswordHash = passwordHash,
                PasswordSalt = passwordSalt,
                Status = true,
                Findeks = 200,
            };
            _userService.Add(user);
            return new SuccessDataResult<User>(user, Messages.UserRegistered);
        }

        public IResult UserExists(string email)
        {
            if (_userService.GetByMail(email).Data != null)
            {
                return new ErrorResult(Messages.UserAlreadyExists);
            }
            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/BrandManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class BrandManager : IBrandService
    {
        IBrandDal _brandDal;

        public BrandManager(IBrandDal brandDal)
        {
            _brandDal = brandDal;
        }

        [SecuredOperation("brand.add,Admin", Priority = 1)]
        [ValidationAspect(typeof(BrandValidator))]
        public IResult Add(Brand brand)
        {
            _brandDal.Add(brand);
            return new SuccessResult();
        }

        [SecuredOperation("brand.delete,Admin", Priority = 1)]
        public IResult Delete(Brand brand)
        {
            _brandDal.Delete(brand);
            return new SuccessResult();
        }

        
        public IDataResult<Brand> Get(int Id)
        {
            return new SuccessDataResult<Brand>( _brandDal.Get(p=>p.Id == Id));
        }

        public IDataResult<List<Brand>> GetAll()
        {
            return new SuccessDataResult<List<Brand>>(_brandDal.GetAll());
        }

        [SecuredOperation("brand.update,Admin", Priority = 1)]
        [ValidationAspect(typeof(BrandValidator))]
        public IResult Update(Brand brand)
        {
            _brandDal.Update(brand);
            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/CarImageManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.Constants;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Caching;
using Core.Aspect.Autofac.Performance;
using Core.Aspect.Autofac.Transaction;
using Core.Aspect.Autofac.Validation;
using Core.Utilities.Business;
using Core.Utilities.FileHelper;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;

namespace Business.Concrete
{
    public class CarImageManager : ICarImageService
    {
        ICarImageDal _carImageDal;

        public CarImageManager(ICarImageDal carImageDal)
        {
            _carImageDal = carImageDal;
        }

        [SecuredOperation("carimages.add,Admin", Priority = 1)]
        [ValidationAspect(typeof(CarImageValidator))]
        [CacheRemoveAspect("ICarImageService.Get")]
        public IResult Add(CarImage carImage, IFormFile file)
        {
            IResult result = BusinessRules.Run(
                CheckIfImageLimit(carImage.CarId)
                );

            if (result != null)
            {
                return result;
            }

            carImage.ImagePath = FileHelper.AddAsync(file);
            _carImageDal.Add(carImage);
            return new SuccessResult();
        }

        [SecuredOperation("carimages.update", Priority = 1)]
        [ValidationAspect(typeof(CarImageValidator))]
        [CacheRemoveAspect("ICarImageService.Get")]
        public IResult Update(CarImage carImage, IFormFile file)
        {
            var oldpath = $@"{Environment.CurrentDirectory}\wwwroot{_carImageDal.Get(p => p.Id == carImage.Id).ImagePath}";
            carImage.ImagePath = FileHelper.UpdateAsync(oldpath, file);

            _carImageDal.Update(carImage);
            return new SuccessResult();
        }

        [SecuredOperation("carimages.delete", Priority = 1)]
        [CacheRemoveAspect("ICarImageService.Get")]
        public IResult Delete(CarImage carImage)
        {
            var oldpath = $@"{Environment.CurrentDirectory}\wwwroot{_carImageDal.Get(p => p.Id == carImage.Id).ImagePath}";
            FileHelper.DeleteAsync(oldpath);

            _carImageDal.Delete(carImage);
            return new SuccessResult();
        }

        public IDataResult<CarImage> Get(int Id)
        {
            return new SuccessDataResult<CarImage>(_carImageDal.Get(p => p.Id == Id));
        }

       [PerformanceAspect(5)]
        public IDataResult<List<CarImage>> GetAll()
        {
            //Thread.Sleep(6000);
            return new SuccessDataResult<List<CarImage>>(_carImageDal.GetAll());
        }

        [CacheAspect(duration: 10)]
        public IDataResult<List<CarImage>> GetImagesByCarId(int CarId)
        {
            var result = _carImageDal.GetAll(c => c.CarId == CarId).Any();
            if (!result)
            {
                List<CarImage> carimage = new List<CarImage>();
                carimage.Add(new CarImage { CarId = CarId, ImagePath = @"\Images\default1.jpg" });
                return new SuccessDataResult<List<CarImage>>(carimage);
            }
            return new SuccessDataResult<List<CarImage>>(_carImageDal.GetAll(p => p.CarId == CarId));
        }

        private IResult CheckIfImageLimit(int CarId)
        {
            var carImagecount = _carImageDal.GetAll(p => p.CarId == CarId).Count;
            if (carImagecount >= 5)
            {
                return new ErrorResult(Messages.FailAddedImageLimit);
            }

            return new SuccessResult();
        }

        [TransactionScopeAspect]
        public IResult TransactionalOperation(CarImage carImage, IFormFile file)
        {
            Add(carImage, file);
            Update(carImage, file);

            return new SuccessResult(Messages.CarImageUpdated);
        }
    }
}


================================================
FILE: Business/Concrete/CarManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.Constants;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class CarManager : ICarService
    {
        ICarDal _carDal;
        IBrandDal _brandDal;
        IColorDal _colorDal;

        public CarManager(ICarDal carDal, IBrandDal brandDal, IColorDal colorDal)
        {
            _carDal = carDal;
            _brandDal = brandDal;
            _colorDal = colorDal;
        }

        [SecuredOperation("car.add", Priority = 1)]
        [ValidationAspect(typeof(CarValidator))]
        public IResult Add(Car car)
        {
            _carDal.Add(car);
            return new SuccessResult(Messages.CarAdded);
        }

        [SecuredOperation("car.delete", Priority = 1)]
        public IResult Delete(Car car)
        {
            _carDal.Delete(car);
            return new SuccessResult(Messages.CarDeleted);
        }

        [SecuredOperation("car.update", Priority = 1)]
        [ValidationAspect(typeof(CarValidator))]
        public IResult Update(Car car)
        {
            _carDal.Update(car);
            return new SuccessResult(Messages.CarUpdated);
        }


        public IDataResult<Car> Get(int Id)
        {
            return new SuccessDataResult<Car>(_carDal.Get(p => p.Id == Id));
        }

        public IDataResult<List<Car>> GetAll()
        {
            return new SuccessDataResult<List<Car>>(_carDal.GetAll());
        }


        public IDataResult<List<Car>> GetCarsByBrandId(int Id)
        {
            return new SuccessDataResult<List<Car>>(_carDal.GetAll(p => p.BrandId == Id));
        }


        public IDataResult<List<Car>> GetCarsByColorId(int Id)
        {
            return new SuccessDataResult<List<Car>>(_carDal.GetAll(p => p.ColorId == Id));
        }

        public IDataResult<List<CarDetailDto>> GetCarDetails()
        {
            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails());
        }

        public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id)
        {
            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.BrandName == _brandDal.Get(t => t.Id == id).BrandName).ToList());
        }

        public IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id)
        {
            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.ColorName == _colorDal.Get(t => t.Id == id).ColorName).ToList());
        }

        public IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id)
        {
            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.Id == id).ToList());
        }

        public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int brandid, int colorid)
        {
            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails()
                .Where(p => p.BrandName == _brandDal.Get(t => t.Id == brandid).BrandName)
                .Where(k => k.ColorName == _colorDal.Get(s => s.Id == colorid).ColorName).ToList());
        }

        public IDataResult<CarDetailDto> GetCarDetail(int id)
        {
            return new SuccessDataResult<CarDetailDto>(_carDal.GetCarDetails().Where(p => p.Id == id).ToList().First());          
        }
    }
}


================================================
FILE: Business/Concrete/CartManager.cs
================================================
using Business.Abstract;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class CartManager : ICartService
    {
        ICartDal _cartDal;

        public CartManager(ICartDal cartDal)
        {
            _cartDal = cartDal;
        }

        public IResult Add(Cart cart)
        {
            _cartDal.Add(cart);
            return new SuccessResult("Kart Ekleme Başarılı..");
        }

        public IResult Delete(Cart cart)
        {
            _cartDal.Delete(cart);
            return new SuccessResult("Kart Silme Başarılı..");
        }

        public IDataResult<Cart> Get(int id)
        {
            var result = _cartDal.Get(p => p.Id == id);
            return new SuccessDataResult<Cart>(result);
        }

        public IDataResult<List<Cart>> GetAll()
        {
           
            return new SuccessDataResult<List<Cart>>(_cartDal.GetAll().ToList());
        }

        public IDataResult<List<Cart>> GetAllByCustomerId(int customerId)
        {
            var result = _cartDal.GetAll(p => p.CustomerId == customerId);
            return new SuccessDataResult<List<Cart>>(result);
        }

        public IResult Update(Cart cart)
        {
            _cartDal.Update(cart);
            return new SuccessResult("Kart Güncelleme Başarılı..");
        }
    }
}


================================================
FILE: Business/Concrete/ColorManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class ColorManager : IColorService
    {
        IColorDal _colorDal;

        public ColorManager(IColorDal colorDal)
        {
            _colorDal = colorDal;
        }

        [SecuredOperation("color.add", Priority = 1)]
        [ValidationAspect(typeof(ColorValidator))]
        public IResult Add(Color color)
        {
            _colorDal.Add(color);
            return new SuccessResult();
        }

        [SecuredOperation("color.delete", Priority = 1)]
        public IResult Delete(Color color)
        {
            _colorDal.Delete(color);
            return new SuccessResult();
        }

       
        public IDataResult<Color> Get(int Id)
        {
            return new SuccessDataResult<Color>(_colorDal.Get(p=>p.Id==Id));
        }

        public IDataResult<List<Color>> GetAll()
        {
            return new SuccessDataResult<List<Color>>(_colorDal.GetAll());
        }

        [SecuredOperation("color.update", Priority = 1)]
        [ValidationAspect(typeof(ColorValidator))]
        public IResult Update(Color color)
        {
            _colorDal.Update(color);
            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/CustomerManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class CustomerManager:ICustomerService
    {
        ICustomerDal _customerDal;

        public CustomerManager(ICustomerDal customerDal)
        {
            _customerDal = customerDal;
        }

        //[SecuredOperation("customer.add", Priority = 1)]
        [ValidationAspect(typeof(CustomerValidator))]
        public IResult Add(Customer customer)
        {
            
            _customerDal.Add(customer);
            return new SuccessResult();
        }

        //[SecuredOperation("customer.delete", Priority = 1)]
        public IResult Delete(Customer customer)
        {
            _customerDal.Delete(customer);
            return new SuccessResult();
        }

        
        public IDataResult<Customer> Get(int Id)
        {
            return new SuccessDataResult<Customer>(_customerDal.Get(p => p.Id == Id));
        }

        
        public IDataResult<List<Customer>> GetAll()
        {
            return new SuccessDataResult<List<Customer>>(_customerDal.GetAll());
        }

        public IDataResult<Customer> GetbyUser(int id)
        {
            return new SuccessDataResult<Customer>(_customerDal.Get(p => p.UserId == id));
        }

        public IDataResult<List<CustomerDetailDto>> GetCustomerDetails()
        {
            return new SuccessDataResult<List<CustomerDetailDto>>(_customerDal.GetCustomerDetails());
        }

        //[SecuredOperation("customer.update", Priority = 1)]
        [ValidationAspect(typeof(CustomerValidator))]
        public IResult Update(Customer customer)
        {
            _customerDal.Update(customer);
            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/PaymentManager.cs
================================================
using Business.Abstract;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class PaymentManager : IPaymentService
    {
        IPaymentDal _paymentDal;

        public PaymentManager(IPaymentDal paymentDal)
        {
            _paymentDal = paymentDal;
        }

        public IResult Add(Payment payment)
        {
            _paymentDal.Add(payment);
           return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/RentalManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.Constants;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Business;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class RentalManager : IRentalService
    {
        IRentalDal _rentalDal;
        ICarDal _carDal;

        public RentalManager(IRentalDal rentalDal, ICarDal carDal)
        {
            _rentalDal = rentalDal;
            _carDal = carDal;
        }

        //[SecuredOperation("rental.add", Priority = 1)]
        [ValidationAspect(typeof(RentalValidator))]
        public IResult Add(Rental rental)
        {
            IResult result = BusinessRules.Run(
                CheckIfCar(rental)
                );

            if (result != null)
            {
                return result;
            }

            _rentalDal.Add(rental);
            return new SuccessResult(Messages.CarRental);
        }

        public IResult DateCheck(Rental rental)
        {
            var result = _rentalDal.GetAll().Where(p => p.CarId == rental.CarId && p.ReturnDate > rental.ReturnDate).ToList();
            if( result.Count != 0)
            {
                return new ErrorResult();
            }

          return new SuccessResult();
        }

        [SecuredOperation("rental.delete", Priority = 1)]
        public IResult Delete(Rental rental)
        {
            _rentalDal.Delete(rental);
            return new SuccessResult();
        }

        public IDataResult<Rental> Get(int id)
        {
            return new SuccessDataResult<Rental>(_rentalDal.Get(p => p.Id == id));
        }

        public IDataResult<List<Rental>> GetAll()
        {
            return new SuccessDataResult<List<Rental>>(_rentalDal.GetAll());
        }

        public IDataResult<List<RentalDetailDto>> GetRentalDetails()
        {
            return new SuccessDataResult<List<RentalDetailDto>>(_rentalDal.GetRentalDetails());
        }

        public IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int carId)
        {
            return new SuccessDataResult<List<RentalDetailDto>>(_rentalDal.GetRentalDetails()
                .Where(p=>p.CarId == carId).ToList());
        }

        [SecuredOperation("rental.update", Priority = 1)]
        public IResult Update(Rental rental)
        {
            _rentalDal.Update(rental);
            return new SuccessResult();
        }

        private IResult CheckIfCar(Rental rental)
        {
            var result = _rentalDal.GetAll(p => p.CarId == rental.CarId).Where(t => rental.RentDate > t.RentDate && rental.RentDate < t.ReturnDate).ToList();
            if (result.Count != 0)
            {
                return new ErrorResult("Araç Kullanımda");
            }

            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Concrete/UserManager.cs
================================================
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.ValidationRules.FluentValidation;
using Core.Aspect.Autofac.Validation;
using Core.CrossCuttingConcerns.Validation;
using Core.Entities.Concrete;
using Core.Utilities.Results;
using DataAccess.Abstract;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Business.Concrete
{
    public class UserManager : IUserService
    {
        IUserDal _userDal;

        public UserManager(IUserDal userDal)
        {
            _userDal = userDal;
        }

        
        [ValidationAspect(typeof(UserValidator))]
        public IResult Add(User user)
        {
            _userDal.Add(user);
            return new SuccessResult();
        }

       
        public IResult Delete(User user)
        {
            _userDal.Delete(user);
            return new SuccessResult();
        }

        public IDataResult<User> Get(int id)
        {
            
            return new SuccessDataResult<User>(_userDal.Get(p=>p.Id == id));
        }

        public IDataResult<List<User>> GetAll()
        {
            return new SuccessDataResult<List<User>>(_userDal.GetAll());
        }

        public IDataResult<User> GetByMail(string email)
        {
            return new SuccessDataResult<User>(_userDal.Get(p=>p.Email == email));
        }

        public IDataResult<List<OperationClaim>> GetClaims(User user)
        {
            return new SuccessDataResult<List<OperationClaim>>(_userDal.GetClaims(user));
        }
        
        public IResult Update(User user)
        {
            _userDal.Update(user);
            return new SuccessResult();
        }
    }
}


================================================
FILE: Business/Constants/Messages.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.Constants
{
    public static class Messages
    {
        public static string CarAdded = "Araba bilgileri eklendi";
        public static string CarUpdated = "Araba bilgileri güncellendi";
        public static string CarDeleted = "Araba bilgileri silindi";

        public static string CarInvalidName = "İsim geçersiz";
        public static string ImagesAdded="resim eklendi";
        public static string FailAddedImageLimit="Resim limitine erişildi!";
        public static string CarRental="Araç Kiralandı";
        public static string SuccessfulLogin = "Sisteme giriş başarılı";
        public static string UserAlreadyExists = "Bu kullanıcı zaten mevcut";
        public static string UserRegistered = "Kullanıcı başarıyla kaydedildi";
        public static string AccessTokenCreated = "Access token başarıyla oluşturuldu";
        public static string AuthorizationDenied = "Yetkiniz yok";
        public static string ProductNameAlreadyExists = "Ürün ismi zaten mevcut";
        public static string CarImageUpdated="Araba resmi güncellendi";
    }
}


================================================
FILE: Business/DependencyResolvers/Autofac/AutofacBusinessModule.cs
================================================
using Autofac;
using Autofac.Extras.DynamicProxy;
using Business.Abstract;
using Business.Concrete;
using Castle.DynamicProxy;
using Core.Utilities.Interceptors;
using Core.Utilities.Security.Jwt;
using DataAccess.Abstract;
using DataAccess.Concrete.EntityFramework;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.DependencyResolvers.Autofac
{
    public class AutofacBusinessModule:Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<CarManager>().As<ICarService>().SingleInstance();
            builder.RegisterType<EfCarDal>().As<ICarDal>().SingleInstance();

            builder.RegisterType<BrandManager>().As<IBrandService>().SingleInstance();
            builder.RegisterType<EfBrandDal>().As<IBrandDal>().SingleInstance();

            builder.RegisterType<ColorManager>().As<IColorService>().SingleInstance();
            builder.RegisterType<EfColorDal>().As<IColorDal>().SingleInstance();

            builder.RegisterType<UserManager>().As<IUserService>().SingleInstance();
            builder.RegisterType<EfUserDal>().As<IUserDal>().SingleInstance();

            builder.RegisterType<CustomerManager>().As<ICustomerService>().SingleInstance();
            builder.RegisterType<EfCustomerDal>().As<ICustomerDal>().SingleInstance();

            builder.RegisterType<RentalManager>().As<IRentalService>().SingleInstance();
            builder.RegisterType<EfRentalDal>().As<IRentalDal>().SingleInstance();

            builder.RegisterType<PaymentManager>().As<IPaymentService>().SingleInstance();
            builder.RegisterType<EfPaymentDal>().As<IPaymentDal>().SingleInstance();

            builder.RegisterType<CarImageManager>().As<ICarImageService>().SingleInstance();
            builder.RegisterType<EfCarImageDal>().As<ICarImageDal>().SingleInstance();

            builder.RegisterType<AuthManager>().As<IAuthService>().SingleInstance();
            builder.RegisterType<JwtHelper>().As<ITokenHelper>().SingleInstance();

            builder.RegisterType<CartManager>().As<ICartService>().SingleInstance();
            builder.RegisterType<EfCartDal>().As<ICartDal>().SingleInstance();

            var assembly = System.Reflection.Assembly.GetExecutingAssembly();

            builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces()
                .EnableInterfaceInterceptors(new ProxyGenerationOptions()
                {
                    Selector = new AspectInterceptorSelector()
                }).SingleInstance();

        }
    }
}


================================================
FILE: Business/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki öznitelikler kümesiyle
// denetlenir. Bütünleştirilmiş kod ile ilişkili bilgileri değiştirmek için
// bu öznitelik değerlerini değiştirin.
[assembly: AssemblyTitle("Business")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Business")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// ComVisible özniteliğinin false olarak ayarlanması bu bütünleştirilmiş koddaki türleri
// COM bileşenleri için görünmez yapar. Bu bütünleştirilmiş koddaki bir türe
// erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın.
[assembly: ComVisible(false)]

// Bu proje COM'un kullanımına sunulursa, aşağıdaki GUID tür kitaplığının kimliği içindir
[assembly: Guid("710a9967-ab8d-42bf-acc4-51e19ad024f1")]

// Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur:
//
//      Ana Sürüm
//      İkincil Sürüm 
//      Yapı Numarası
//      Düzeltme
//
// Tüm değerleri belirtebilir veya varsayılan Derleme ve Düzeltme Numaralarını kullanmak için
// aşağıda gösterildiği gibi '*' kullanabilirsiniz:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


================================================
FILE: Business/ValidationRules/FluentValidation/BrandValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class BrandValidator:AbstractValidator<Brand>
    {
        public BrandValidator()
        {
            RuleFor(p => p.BrandName).NotEmpty();
            RuleFor(p => p.BrandName).MinimumLength(3);
            RuleFor(p => p.BrandName).NotNull();
        }

    }
}



================================================
FILE: Business/ValidationRules/FluentValidation/CarImageValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class CarImageValidator : AbstractValidator<CarImage>
    {
        public CarImageValidator()
        {
            RuleFor(p => p.CarId).NotEmpty();
        }
    }
}


================================================
FILE: Business/ValidationRules/FluentValidation/CarValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class CarValidator : AbstractValidator<Car>
    {
        public CarValidator()
        {
            RuleFor(p => p.Description).MinimumLength(2).WithMessage("Description must be at least 2 characters");
            RuleFor(p => p.Description).NotEmpty();
            RuleFor(p => p.Description).NotNull();
            RuleFor(p => p.DailyPrice).GreaterThan(0);
            RuleFor(p => p.DailyPrice).NotEmpty();
            RuleFor(p => p.DailyPrice).GreaterThanOrEqualTo(100).When(p => p.BrandId == 1);
            RuleFor(p => p.ModelYear).LessThan(DateTime.Now.Year);
            RuleFor(p => p.ModelYear).NotEmpty();            
            RuleFor(p => p.BrandId).GreaterThan(0);
            RuleFor(p => p.BrandId).NotEmpty();
            RuleFor(p => p.ColorId).GreaterThan(0);
            RuleFor(p => p.ColorId).NotEmpty();

            //RuleFor(p => p.Description).Must(StartWithA).When(p=>p.Description!=null).WithMessage("Description Must start with the letter A");           
        }
        private bool StartWithA(string arg)
        {
            return arg.StartsWith("A");
        }
    }
}



================================================
FILE: Business/ValidationRules/FluentValidation/ColorValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class ColorValidator:AbstractValidator<Color>
    {
        public ColorValidator()
        {
            RuleFor(p => p.ColorName).NotEmpty();
            RuleFor(p => p.ColorName).NotNull();
            RuleFor(p => p.ColorName).MinimumLength(3);
            
        }
    }
}


================================================
FILE: Business/ValidationRules/FluentValidation/CustomerValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class CustomerValidator : AbstractValidator<Customer>
    {
        public CustomerValidator()
        {
            RuleFor(p => p.UserId).GreaterThan(0);
            RuleFor(p => p.UserId).NotEmpty();
            RuleFor(p => p.CompanyName).NotNull();
            RuleFor(p => p.CompanyName).NotEmpty();
            RuleFor(p => p.CompanyName).MinimumLength(2);            
        }
    }
}


================================================
FILE: Business/ValidationRules/FluentValidation/RentalValidator.cs
================================================
using Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class RentalValidator:AbstractValidator<Rental>
    {
        public RentalValidator()
        {
            RuleFor(p => p.CarId).GreaterThan(0);
            RuleFor(p => p.CarId).NotEmpty();
            RuleFor(p => p.CustomerId).GreaterThan(0);
            RuleFor(p => p.CustomerId).NotEmpty();
            RuleFor(p => p.RentDate).Equals(DateTime.Now);
            RuleFor(p => p.RentDate).NotEmpty();
            RuleFor(p => p.ReturnDate).GreaterThan(DateTime.Now);
            RuleFor(p => p.ReturnDate).NotEmpty();
        }
    }
}


================================================
FILE: Business/ValidationRules/FluentValidation/UserValidator.cs
================================================
using Core.Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Business.ValidationRules.FluentValidation
{
    public class UserValidator : AbstractValidator<User>
    {
        public UserValidator()
        {
            RuleFor(p => p.FirstName).NotNull();
            RuleFor(p => p.FirstName).NotEmpty();
            RuleFor(p => p.LastName).NotNull();
            RuleFor(p => p.LastName).NotEmpty();
            RuleFor(p => p.Email).Must(MailCheck).When(p=>p.Email != null).WithMessage("IsValid Mail");
            RuleFor(p => p.Email).NotEmpty();
            RuleFor(p => p.Email).NotNull();
        }

        private bool MailCheck(string arg)
        {
            return arg.Contains("@");
        }
    }
}


================================================
FILE: Business/app.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Caching.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.1.12.0" newVersion="3.1.12.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.1.0.0" newVersion="6.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.AspNetCore.Http.Features" publicKeyToken="adb9793829ddae60" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

================================================
FILE: Business/packages.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Autofac" version="6.1.0" targetFramework="net472" />
  <package id="Autofac.Extensions.DependencyInjection" version="7.1.0" targetFramework="net472" />
  <package id="Autofac.Extras.DynamicProxy" version="6.0.0" targetFramework="net472" />
  <package id="Castle.Core" version="4.4.0" targetFramework="net472" />
  <package id="FluentValidation" version="9.5.1" targetFramework="net472" />
  <package id="Microsoft.AspNetCore.Http" version="2.2.2" targetFramework="net472" />
  <package id="Microsoft.AspNetCore.Http.Abstractions" version="2.2.0" targetFramework="net472" />
  <package id="Microsoft.AspNetCore.Http.Features" version="5.0.0" targetFramework="net472" />
  <package id="Microsoft.AspNetCore.WebUtilities" version="2.2.0" targetFramework="net472" />
  <package id="Microsoft.Bcl.AsyncInterfaces" version="1.1.1" targetFramework="net472" />
  <package id="Microsoft.Extensions.DependencyInjection" version="3.1.12" targetFramework="net472" />
  <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="3.1.12" targetFramework="net472" />
  <package id="Microsoft.Extensions.ObjectPool" version="2.2.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Options" version="2.2.0" targetFramework="net472" />
  <package id="Microsoft.Extensions.Primitives" version="5.0.0" targetFramework="net472" />
  <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" />
  <package id="System.Buffers" version="4.5.1" targetFramework="net472" />
  <package id="System.ComponentModel.Annotations" version="4.5.0" targetFramework="net472" />
  <package id="System.Diagnostics.DiagnosticSource" version="4.7.1" targetFramework="net472" />
  <package id="System.IO.Pipelines" version="5.0.1" targetFramework="net472" />
  <package id="System.Memory" version="4.5.4" targetFramework="net472" />
  <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net472" />
  <package id="System.Text.Encodings.Web" version="4.5.0" targetFramework="net472" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
</packages>

================================================
FILE: CarRentalQuery1.sql
================================================
CREATE TABLE [dbo].[Colors] (
    [Id]        INT          IDENTITY (1, 1) NOT NULL,
    [ColorName] VARCHAR (20) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[Brands] (
    [Id]        INT          IDENTITY (1, 1) NOT NULL,
    [BrandName] VARCHAR (50) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[Cars] (
    [Id]          INT          IDENTITY (1, 1) NOT NULL,
    [BrandId]     INT          NULL,
    [ColorId]     INT          NULL,
    [ModelYear]   INT          NULL,
    [DailyPrice]  MONEY        NULL,
    [Description] VARCHAR (50) NULL,
    CONSTRAINT [PK_Cars] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_Cars] FOREIGN KEY ([BrandId]) REFERENCES [dbo].[Brands] ([Id]),
    CONSTRAINT [FK_Cars2] FOREIGN KEY ([ColorId]) REFERENCES [dbo].[Colors] ([Id])
);

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

CREATE TABLE [dbo].[Customers] (
    [Id]          INT          IDENTITY (1, 1) NOT NULL,
    [UserId]      INT          NULL,
    [CompanyName] VARCHAR (50) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([Id])
);

CREATE TABLE [dbo].[Rentals] (
    [Id]         INT      IDENTITY (1, 1) NOT NULL,
    [CarId]      INT      NULL,
    [CustomerId] INT      NULL,
    [RentDate]   DATETIME NULL,
    [ReturnDate] DATETIME NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_Rentals_Cars] FOREIGN KEY ([CarId]) REFERENCES [dbo].[Cars] ([Id]),
    CONSTRAINT [FK_Rentals_Customers] FOREIGN KEY ([CustomerId]) REFERENCES [dbo].[Customers] ([Id])
);

CREATE TABLE [dbo].[CarImages] (
    [Id]        INT            IDENTITY (1, 1) NOT NULL,
    [CarId]     INT            NULL,
    [ImagePath] NVARCHAR (MAX) NULL,
    [Date]      DATETIME       NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_CarImages_Cars] FOREIGN KEY ([CarId]) REFERENCES [dbo].[Cars] ([Id])
);

CREATE TABLE [dbo].[OperationClaims] (
    [Id]   INT           IDENTITY (1, 1) NOT NULL,
    [Name] VARCHAR (250) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

CREATE TABLE [dbo].[UserOperationClaims] (
    [Id]               INT IDENTITY (1, 1) NOT NULL,
    [UserId]           INT NOT NULL,
    [OperationClaimId] INT NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);



================================================
FILE: ConsoleUI/ConsoleUI.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Business\Business.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: ConsoleUI/Program.cs
================================================
using Business.Concrete;
using DataAccess.Concrete.EntityFramework;
using DataAccess.Concrete.InMemory;
using Entities.Concrete;
using System;

namespace ConsoleUI
{
    class Program
    {
        static void Main(string[] args)
        {
            //RentalManager rentalManager = new RentalManager(new EfRentalDal());

            //var rentcar = new Rental {CarId=4,CustomerId=2,RentDate=DateTime.Now,ReturnDate=DateTime.Now.AddDays(2) };
            
            //Console.WriteLine(rentalManager.Add(rentcar).Message);          

            //foreach (var rent in rentalManager.GetAll().Data)
            //{              
            //    Console.WriteLine("Id:{0} CarId={1} CustomerId:{2} RentDate:{3} ReturnDate:{4}",rent.Id,rent.CarId,rent.CustomerId,rent.RentDate,rent.ReturnDate);
            //}

            /*foreach (var rentalDetail in rentalManager.GetRentalDetails().Data)
            {
                Console.WriteLine("Id: {0} CarName: {1} BrandName: {2} ColorName: {3} CompanyName: {4} FirstName: {5} LastName: {6} RentDate: {7} ReturnDate: {8} ",
                    rentalDetail.Id, rentalDetail.CarName,rentalDetail.BrandName,rentalDetail.ColorName,rentalDetail.CompanyName,rentalDetail.FirstName,rentalDetail.LastName,
                    rentalDetail.RentDate.ToString("MM/dd/yyyy"), rentalDetail.ReturnDate.ToString("MM/dd/yyyy"));
            }*/

            //DateTime.Now.ToString("MM/dd/yyyy")
        }
    }
}


================================================
FILE: Core/Aspect/Autofac/Caching/CacheAspect.cs
================================================
using Castle.DynamicProxy;
using Core.CrossCuttingConcerns.Caching;
using Core.Utilities.Interceptors;
using Core.Utilities.IoC;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using System.Linq;

namespace Core.Aspect.Autofac.Caching
{
    public class CacheAspect:MethodInterception
    {
        private int _duration;
        private ICacheManager _cacheManager;

        public CacheAspect(int duration=60)
        {
            _duration = duration;
            _cacheManager = ServiceTool.ServiceProvider.GetService<ICacheManager>();
        }

        public override void Intercept(IInvocation invocation)
        {
            var methodName = string.Format($"{invocation.Method.ReflectedType.FullName}.{invocation.Method.Name}");
            var arguments = invocation.Arguments.ToList();
            var key = $"{methodName}({string.Join(",", arguments.Select(x => x?.ToString() ?? "<Null>"))})";
            if (_cacheManager.IsAdd(key))
            {
                invocation.ReturnValue = _cacheManager.Get(key);
                return;
            }
            invocation.Proceed();
            _cacheManager.Add(key, invocation.ReturnValue, _duration);
        }
    }
}


================================================
FILE: Core/Aspect/Autofac/Caching/CacheRemoveAspect.cs
================================================
using Castle.DynamicProxy;
using Core.CrossCuttingConcerns.Caching;
using Core.Utilities.Interceptors;
using Core.Utilities.IoC;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.DependencyInjection;

namespace Core.Aspect.Autofac.Caching
{
    public class CacheRemoveAspect:MethodInterception
    {
        private string _pattern;
        private ICacheManager _cacheManager;

        public CacheRemoveAspect(string pattern)
        {
            _pattern = pattern;
            _cacheManager = ServiceTool.ServiceProvider.GetService<ICacheManager>();
        }

        protected override void OnSuccess(IInvocation invocation)
        {
            _cacheManager.RemoveByPattern(_pattern);
        }
    }
}


================================================
FILE: Core/Aspect/Autofac/Performance/PerformanceAspect.cs
================================================
using Core.Utilities.Interceptors;
using Core.Utilities.IoC;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Castle.DynamicProxy;

namespace Core.Aspect.Autofac.Performance
{
    public class PerformanceAspect:MethodInterception
    {
        private int _interval;
        private Stopwatch _stopwatch;

        public PerformanceAspect(int interval)
        {
            _interval = interval;
            _stopwatch = ServiceTool.ServiceProvider.GetService<Stopwatch>();
        }


        protected override void OnBefore(IInvocation invocation)
        {
            _stopwatch.Start();
        }

        protected override void OnAfter(IInvocation invocation)
        {
            if (_stopwatch.Elapsed.TotalSeconds > _interval)
            {
                Debug.WriteLine($"Performance : {invocation.Method.DeclaringType.FullName}.{invocation.Method.Name}-->{_stopwatch.Elapsed.TotalSeconds}");
            }
            _stopwatch.Reset();
        }
    }
}


================================================
FILE: Core/Aspect/Autofac/Transaction/TransactionScopeAspect.cs
================================================
using Castle.DynamicProxy;
using Core.Utilities.Interceptors;
using System;
using System.Collections.Generic;
using System.Text;
using System.Transactions;

namespace Core.Aspect.Autofac.Transaction
{
    public class TransactionScopeAspect:MethodInterception
    {
        public override void Intercept(IInvocation invocation)
        {
            using (TransactionScope transactionScope = new TransactionScope())
            {
                try
                {
                    invocation.Proceed();
                    transactionScope.Complete();
                }
                catch (System.Exception e)
                {
                    transactionScope.Dispose();
                    throw;
                }
            }
        }
    }
}


================================================
FILE: Core/Aspect/Autofac/Validation/ValidationAspect.cs
================================================
using Castle.DynamicProxy;
using Core.CrossCuttingConcerns.Validation;
using Core.Utilities.Interceptors;
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Core.Aspect.Autofac.Validation
{
    public class ValidationAspect:MethodInterception
    {
        private Type _validatorType;

        public ValidationAspect(Type validatorType)
        {
            if (!typeof(IValidator).IsAssignableFrom(validatorType))
            {
                throw new System.Exception("Bu bir doğrulama sınıfı değil");
            }
            _validatorType = validatorType;
        }

        protected override void OnBefore(IInvocation invocation)
        {
            var validator = (IValidator)Activator.CreateInstance(_validatorType);
            var entityType = _validatorType.BaseType.GetGenericArguments()[0];
            var entities = invocation.Arguments.Where(t => t.GetType() == entityType);
            foreach (var entity in entities)
            {
                ValidationTool.Validate(validator, entity);
            }
        }
    }
}


================================================
FILE: Core/Core.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Autofac" Version="6.1.0" />
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
    <PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.0" />
    <PackageReference Include="FluentValidation" Version="9.5.1" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="5.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.12" />
    <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.8.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.8.0" />
  </ItemGroup>

</Project>


================================================
FILE: Core/CrossCuttingConcerns/Caching/ICacheManager.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.CrossCuttingConcerns.Caching
{
    public interface ICacheManager
    {
        T Get<T>(string key);
        object Get(string key);
        void Add(string key, object value, int duration);
        bool IsAdd(string key);
        void Remove(string key);
        void RemoveByPattern(string pattern);
    }
}


================================================
FILE: Core/CrossCuttingConcerns/Caching/Microsoft/MemoryCacheManager.cs
================================================
using Core.Utilities.IoC;
using Microsoft.Extensions.Caching.Memory;
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using System.Text.RegularExpressions;
using System.Linq;

namespace Core.CrossCuttingConcerns.Caching.Microsoft
{
    public class MemoryCacheManager : ICacheManager
    {
        IMemoryCache _memoryCache;

        public MemoryCacheManager()
        {
            _memoryCache = ServiceTool.ServiceProvider.GetService<IMemoryCache>();
        }

        public void Add(string key, object value, int duration)
        {
            _memoryCache.Set(key, value, TimeSpan.FromMinutes(duration));
        }

        public T Get<T>(string key)
        {
            return _memoryCache.Get<T>(key);
        }

        public object Get(string key)
        {
            return _memoryCache.Get(key);
        }

        public bool IsAdd(string key)
        {
            return _memoryCache.TryGetValue(key, out _);
        }

        public void Remove(string key)
        {
            _memoryCache.Remove(key);
        }

        public void RemoveByPattern(string pattern)
        {
            var cacheEntriesCollectionDefinition = typeof(MemoryCache).GetProperty("EntriesCollection", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
            var cacheEntriesCollection = cacheEntriesCollectionDefinition.GetValue(_memoryCache) as dynamic;
            List<ICacheEntry> cacheCollectionValues = new List<ICacheEntry>();

            foreach (var cacheItem in cacheEntriesCollection)
            {
                ICacheEntry cacheItemValue = cacheItem.GetType().GetProperty("Value").GetValue(cacheItem, null);
                cacheCollectionValues.Add(cacheItemValue);
            }

            var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);
            var keysToRemove = cacheCollectionValues.Where(d => regex.IsMatch(d.Key.ToString())).Select(d => d.Key).ToList();

            foreach (var key in keysToRemove)
            {
                _memoryCache.Remove(key);
            }
        }
    }
}


================================================
FILE: Core/CrossCuttingConcerns/Validation/ValidationTool.cs
================================================
using FluentValidation;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.CrossCuttingConcerns.Validation
{
    public static class ValidationTool
    {
        public static void Validate(IValidator validator, object entity)
        {
            var context = new ValidationContext<object>(entity);

            var result = validator.Validate(context);

            if (!result.IsValid)
            {
                throw new ValidationException(result.Errors);
            }
        }
    }
}


================================================
FILE: Core/DataAccess/EntityFramework/EfEntityRepositoryBase.cs
================================================
using Core.Entities;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace Core.DataAccess.EntityFramework
{
    public class EfEntityRepositoryBase<TEntity,TContext>:IEntityRepository<TEntity>
        where TEntity:class,IEntity,new()
        where TContext:DbContext,new()
    {
        public void Add(TEntity entity)
        {
            using (TContext context = new TContext())
            {
                var addedEntity = context.Entry(entity);
                addedEntity.State = EntityState.Added;
                context.SaveChanges();
            }
        }

        public void Delete(TEntity entity)
        {
            using (TContext context = new TContext())
            {
                var deletedEntity = context.Entry(entity);
                deletedEntity.State = EntityState.Deleted;
                context.SaveChanges();
            }
        }

        public TEntity Get(Expression<Func<TEntity, bool>> filter)
        {
            using (TContext context = new TContext())
            {
                return context.Set<TEntity>().SingleOrDefault(filter);
            }
        }

        public List<TEntity> GetAll(Expression<Func<TEntity, bool>> filter = null)
        {
            using (TContext context = new TContext())
            {
                return filter == null
                       ? context.Set<TEntity>().ToList()
                       : context.Set<TEntity>().Where(filter).ToList();
            }
        }

        public void Update(TEntity entity)
        {
            using (TContext context = new TContext())
            {
                var updatedEntity = context.Entry(entity);
                updatedEntity.State = EntityState.Modified;
                context.SaveChanges();
            }
        }
    }
}


================================================
FILE: Core/DataAccess/IEntityRepository.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace Core.DataAccess
{
    public interface IEntityRepository<T> where T:class,IEntity,new()
    {
        List<T> GetAll(Expression<Func<T,bool>> filter=null);
        T Get(Expression<Func<T, bool>> filter);
        void Add(T entity);
        void Update(T entity);
        void Delete(T entity);

    }
}


================================================
FILE: Core/DependencyResolvers/CoreModule.cs
================================================
using Core.CrossCuttingConcerns.Caching;
using Core.CrossCuttingConcerns.Caching.Microsoft;
using Core.Utilities.IoC;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;

namespace Core.DependencyResolvers
{
    public class CoreModule : ICoreModule
    {
        public void Load(IServiceCollection serviceCollection)
        {
            serviceCollection.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

            serviceCollection.AddSingleton<ICacheManager, MemoryCacheManager>();
            serviceCollection.AddMemoryCache();

            serviceCollection.AddSingleton<Stopwatch>();
        }
    }
}


================================================
FILE: Core/Entities/Concrete/OperationClaim.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Entities.Concrete
{
    public class OperationClaim:IEntity
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}


================================================
FILE: Core/Entities/Concrete/User.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Core.Entities.Concrete
{
    public class User:IEntity
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public byte[] PasswordSalt { get; set; }
        public byte[] PasswordHash { get; set; }
        public bool Status { get; set; }
        public short Findeks { get; set; }

    }
}


================================================
FILE: Core/Entities/Concrete/UserOperationClaim.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Entities.Concrete
{
    public class UserOperationClaim:IEntity
    {
        public int Id { get; set; }
        public int UserId { get; set; }
        public int OperationClaimId { get; set; }
    }
}


================================================
FILE: Core/Entities/IDto.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Entities
{
    public interface IDto
    {
    }
}


================================================
FILE: Core/Entities/IEntity.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Core.Entities
{
    public interface IEntity
    {

    }
}


================================================
FILE: Core/Extensions/ClaimExtensions.cs
================================================
using Microsoft.IdentityModel.JsonWebTokens;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text;

namespace Core.Extensions
{
    public static class ClaimExtensions
    {
        public static void AddEmail(this ICollection<Claim> claims, string email)
        {
            claims.Add(new Claim(JwtRegisteredClaimNames.Email, email));
        }

        public static void AddName(this ICollection<Claim> claims, string name)
        {
            claims.Add(new Claim(ClaimTypes.Name, name));
        }

        public static void AddNameIdentifier(this ICollection<Claim> claims, string nameIdentifier)
        {
            claims.Add(new Claim(ClaimTypes.NameIdentifier, nameIdentifier));
        }

        public static void AddRoles(this ICollection<Claim> claims, string[] roles)
        {
            roles.ToList().ForEach(role => claims.Add(new Claim(ClaimTypes.Role, role)));
        }
    }
}


================================================
FILE: Core/Extensions/ClaimsPrincipalExtensions.cs
================================================
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;

namespace Core.Extensions
{
    public static class ClaimsPrincipalExtensions
    {
        public static List<string> Claims(this ClaimsPrincipal claimsPrincipal, string claimType)
        {
            var result = claimsPrincipal?.FindAll(claimType)?.Select(x => x.Value).ToList();
            return result;
        }

        public static List<string> ClaimRoles(this ClaimsPrincipal claimsPrincipal)
        {
            return claimsPrincipal?.Claims(ClaimTypes.Role);
        }
    }
}


================================================
FILE: Core/Extensions/ErrorDetails.cs
================================================
using FluentValidation.Results;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace Core.Extensions
{
    public class ErrorDetails
    {
        public string Message { get; set; }
        public int StatusCode { get; set; }

        public override string ToString()
        {
            return JsonConvert.SerializeObject(this);
        }
    }

    public class ValidationErrorDetails:ErrorDetails
    {
        public IEnumerable<ValidationFailure> ValidationErrors;
    }
}


================================================
FILE: Core/Extensions/ExceptionMiddleware.cs
================================================
using FluentValidation;
using FluentValidation.Results;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace Core.Extensions
{
    public class ExceptionMiddleware
    {
        private RequestDelegate _next;

        public ExceptionMiddleware(RequestDelegate next)
        {
            _next = next;
        }

        public async Task InvokeAsync(HttpContext httpContext)
        {
            try
            {
                await _next(httpContext);
            }
            catch (Exception e)
            {
                await HandleExceptionAsync(httpContext, e);
            }
        }

        private Task HandleExceptionAsync(HttpContext httpContext, Exception e)
        {
            httpContext.Response.ContentType = "application/json";
            httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

            string message = "Internal Server Error";

            IEnumerable<ValidationFailure> errors;

            if (e.GetType() == typeof(ValidationException))
            {
                message = e.Message;
                errors = ((ValidationException)e).Errors;
                httpContext.Response.StatusCode = 400;

                return httpContext.Response.WriteAsync(new ValidationErrorDetails
                {
                    StatusCode = 400,
                    Message = message,
                    ValidationErrors = errors
                }.ToString());
            }

            return httpContext.Response.WriteAsync(new ErrorDetails
            {
                StatusCode = httpContext.Response.StatusCode,
                Message = message
            }.ToString());
        }
    }
}


================================================
FILE: Core/Extensions/ExceptionMiddlewareExtensions.cs
================================================
using Microsoft.AspNetCore.Builder;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Extensions
{
    public static class ExceptionMiddlewareExtensions
    {
        public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app)
        {
            app.UseMiddleware<ExceptionMiddleware>();
        }
    }
}


================================================
FILE: Core/Extensions/ServiceCollectionExtensions.cs
================================================
using Core.Utilities.IoC;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Extensions
{ 
    public static class ServiceCollectionExtensions
    {
        public static IServiceCollection AddDependencyResolvers( this IServiceCollection serviceCollection, ICoreModule[] modules)
        {
            foreach (var module in modules)
            {
                module.Load(serviceCollection);
            }

            return ServiceTool.Create(serviceCollection);
        }
    }
}


================================================
FILE: Core/Utilities/Business/BusinessRules.cs
================================================
using Core.Utilities.Results;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Business
{
    public class BusinessRules
    {
        public static IResult Run(params IResult[] logics)
        {
            foreach (var logic in logics)
            {
                if (!logic.Success)
                {
                    return logic;
                }
            }

            return null;
        }
    }
}


================================================
FILE: Core/Utilities/FileHelper/FileHelper.cs
================================================
using Core.Utilities.Results;
using Microsoft.AspNetCore.Http;
using System;
using System.IO;

namespace Core.Utilities.FileHelper
{
    public class FileHelper
    {
        public static string AddAsync(IFormFile file)
        {
            var result = newPath(file);

            try
            {
                var sourcepath = Path.GetTempFileName();

                using (var stream = new FileStream(sourcepath, FileMode.Create))
                {
                    file.CopyTo(stream);
                }

                File.Move(sourcepath, result.newPath);
            }
            catch (Exception exception)
            {

                return exception.Message;
            }

            return result.Path2;
        }

        public static string UpdateAsync(string sourcePath, IFormFile file)
        {
            var result = newPath(file);

            try
            {
                using (var stream = new FileStream(result.newPath, FileMode.Create))
                {
                    file.CopyTo(stream);
                }

                File.Delete(sourcePath);
            }
            catch (Exception excepiton)
            {
                return excepiton.Message;
            }

            return result.Path2;
        }

        public static IResult DeleteAsync(string path)
        {
            try
            {
                File.Delete(path);
            }
            catch (Exception exception)
            {
                return new ErrorResult(exception.Message);
            }

            return new SuccessResult();
        }

        public static (string newPath, string Path2) newPath(IFormFile file)
        {
            FileInfo ff = new FileInfo(file.FileName);

            string fileExtension = ff.Extension;

            var creatingUniqueFilename = Guid.NewGuid().ToString("N") + fileExtension;

            string result = $@"{Environment.CurrentDirectory + @"\wwwroot\Images"}\{creatingUniqueFilename}";

            return (result, $"\\Images\\{creatingUniqueFilename}");
        }



    }
}


================================================
FILE: Core/Utilities/Interceptors/AspectInterceptorSelector.cs
================================================
using Castle.DynamicProxy;
using Core.Aspect.Autofac.Performance;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace Core.Utilities.Interceptors
{
    public class AspectInterceptorSelector : IInterceptorSelector
    {
        public IInterceptor[] SelectInterceptors(Type type, MethodInfo method, IInterceptor[] interceptors)
        {
            var classAttributes = type.GetCustomAttributes<MethodInterceptionBaseAttribute>
                (true).ToList();
            var methodAttributes = type.GetMethod(method.Name)
                .GetCustomAttributes<MethodInterceptionBaseAttribute>(true);
            classAttributes.AddRange(methodAttributes);
            classAttributes.Add(new PerformanceAspect(5));

            return classAttributes.OrderBy(x => x.Priority).ToArray();
        }
    }
}


================================================
FILE: Core/Utilities/Interceptors/MethodInterception.cs
================================================
using Castle.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Interceptors
{
    public abstract class MethodInterception: MethodInterceptionBaseAttribute
    {
        protected virtual void OnBefore(IInvocation invocation) { }
        protected virtual void OnAfter(IInvocation invocation) { }
        protected virtual void OnException(IInvocation invocation, System.Exception e) { }
        protected virtual void OnSuccess(IInvocation invocation) { }

        public override void Intercept(IInvocation invocation)
        {
            var isSuccess = true;
            OnBefore(invocation);
            try
            {
                invocation.Proceed();
            }
            catch (Exception e)
            {
                isSuccess = false;
                OnException(invocation, e);
                throw;
            }
            finally
            {
                if (isSuccess)
                {
                    OnSuccess(invocation);
                }
            }
            OnAfter(invocation);
        }
    }
}


================================================
FILE: Core/Utilities/Interceptors/MethodInterceptionBaseAttribute.cs
================================================
using Castle.DynamicProxy;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Interceptors
{
    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple =true,Inherited =true)]
    public abstract class MethodInterceptionBaseAttribute : Attribute, IInterceptor
    {
        public int Priority { get; set; }
        public virtual void Intercept(IInvocation invocation) { }
    }
}


================================================
FILE: Core/Utilities/IoC/ICoreModule.cs
================================================
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.IoC
{
    public interface ICoreModule
    {
        void Load(IServiceCollection serviceCollection);
    }
}


================================================
FILE: Core/Utilities/IoC/ServiceTool.cs
================================================
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.IoC
{
    public static class ServiceTool
    {
        public static IServiceProvider ServiceProvider { get; private set; }

        public static IServiceCollection Create(IServiceCollection services)
        {
            ServiceProvider = services.BuildServiceProvider();
            return services;
        }
    }
}


================================================
FILE: Core/Utilities/Results/DataResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class DataResult<T> : Result, IDataResult<T>
    {
        public DataResult(T data,bool success,string message):base(success,message)
        {
            Data = data;
        }

        public DataResult(T data,bool success):base(success)
        {
            Data = data;
        }       

        public T Data { get; }
    }
}


================================================
FILE: Core/Utilities/Results/ErrorDataResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class ErrorDataResult<T>:DataResult<T>
    {
        public ErrorDataResult(T data,string message):base(data,false,message)
        {
                
        }
        public ErrorDataResult(T data):base(data,false)
        {

        }
        public ErrorDataResult(string message):base(default,false)
        {

        }
        public ErrorDataResult():base(default,false)
        {

        }
    }
}


================================================
FILE: Core/Utilities/Results/ErrorResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class ErrorResult:Result
    {
        public ErrorResult(string message):base(false,message)
        {

        }
        public ErrorResult():base(false)
        {

        }
    }
}


================================================
FILE: Core/Utilities/Results/IDataResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public interface IDataResult<T>:IResult
    {
        T Data { get; }
    }
}


================================================
FILE: Core/Utilities/Results/IResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public interface IResult
    {
        bool Success { get; }
        string Message { get; }
    }
}


================================================
FILE: Core/Utilities/Results/Result.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class Result : IResult
    {
        public Result(bool success,string message):this(success)
        {
            Message = message;
        }
        public Result(bool success)
        {
            Success = success;
        }

        public bool Success { get; }

        public string Message { get; }
    }
}


================================================
FILE: Core/Utilities/Results/SuccessDataResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class SuccessDataResult<T>:DataResult<T>
    {
        public SuccessDataResult(T data, string message):base(data,true,message)
        {

        }
        public SuccessDataResult(T data):base(data,true)
        {

        }
        public SuccessDataResult(string message):base(default,true,message)
        {

        }
        public SuccessDataResult():base(default,true)
        {

        }
    }
}


================================================
FILE: Core/Utilities/Results/SuccessResult.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Results
{
    public class SuccessResult:Result
    {
        public SuccessResult(string message):base(true,message)
        {

        }
        public SuccessResult():base(true)
        {

        }

    }
}


================================================
FILE: Core/Utilities/Security/Encryption/SecurityKeyHelper.cs
================================================
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Security.Encryption
{
    public class SecurityKeyHelper
    {
        public static SecurityKey CreateSecurityKey(string securityKey)
        {
            return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
        }
    }
}


================================================
FILE: Core/Utilities/Security/Encryption/SigningCredentialsHelper.cs
================================================
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Security.Encryption
{
    public class SigningCredentialsHelper
    {
        public static SigningCredentials CreateSigningCredentials(SecurityKey securityKey)
        {
            return new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha512Signature);
        }
    }
}


================================================
FILE: Core/Utilities/Security/Hashing/HashingHelper.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Security.Hashing
{
    public class HashingHelper
    {
        public static void CreatePasswordHash(string password, out byte[] passwordHash, out byte[] passwordSalt)
        {
            using (var hmac = new System.Security.Cryptography.HMACSHA512())
            {
                passwordSalt = hmac.Key;
                passwordHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(password));
            }
        }

        public static bool VerifyPasswordHash(string password, byte[] passwordHash, byte[] passwordSalt)
        {
            using (var hmac = new System.Security.Cryptography.HMACSHA512(passwordSalt))
            {
                var computedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(password));

                for (int i = 0; i < computedHash.Length; i++)
                {
                    if (computedHash[i] != passwordHash[i])
                    {
                        return false;
                    }
                }
                return true;
            }
        }

    }
}


================================================
FILE: Core/Utilities/Security/Jwt/AccessToken.cs
================================================
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Security.Jwt
{
    public class AccessToken
    {
        public string Token { get; set; }
        public DateTime Expiration { get; set; }
    }
}


================================================
FILE: Core/Utilities/Security/Jwt/ITokenHelper.cs
================================================
using Core.Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace Core.Utilities.Security.Jwt
{
    public interface ITokenHelper
    {
        AccessToken CreateToken(User user, List<OperationClaim> operationClaims);
    }
}


================================================
FILE: Core/Utilities/Security/Jwt/JwtHelper.cs
================================================
using Core.Entities.Concrete;
using Core.Utilities.Security.Encryption;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
using System.Security.Claims;
using Core.Extensions;
using System.Linq;

namespace Core.Utilities.Security.Jwt
{
    public class JwtHelper : ITokenHelper
    {
        public IConfiguration Configuration { get; }
        private TokenOptions _tokenOptions;
        private DateTime _accessTokenExpiration;

        public JwtHelper(IConfiguration configuration)
        {
            Configuration = configuration;
            _tokenOptions = Configuration.GetSection("TokenOptions").Get<TokenOptions>();
        }

        public AccessToken CreateToken(User user, List<OperationClaim> operationClaims)
        {
            _accessTokenExpiration = DateTime.Now.AddMinutes(_tokenOptions.AccessTokenExpiration);
            var securityKey = SecurityKeyHelper.CreateSecurityKey(_tokenOptions.SecurityKey);
            var signingCredentials = SigningCredentialsHelper.CreateSigningCredentials(securityKey);
            var jwt = CreateJwtSecurityToken(_tokenOptions, user, signingCredentials, operationClaims);
            var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
            var token = jwtSecurityTokenHandler.WriteToken(jwt);
            return new AccessToken { Token = token, Expiration = _accessTokenExpiration };
        }

        private JwtSecurityToken CreateJwtSecurityToken(TokenOptions tokenOptions, User user, SigningCredentials signingCredentials, List<OperationClaim> operationClaims)
        {
            var jwt = new JwtSecurityToken(
                issuer: tokenOptions.Issuer,
                audience: tokenOptions.Audience,
                expires: _accessTokenExpiration,
                notBefore: DateTime.Now,
                claims: SetClaims(user, operationClaims),
                signingCredentials: signingCredentials
                );

            return jwt;
        }

        private IEnumerable<Claim> SetClaims(User user, List<OperationClaim> operationClaims)
        {
            var claims = new List<Claim>();
            claims.AddNameIdentifier(user.Id.ToString());
            claims.AddEmail(user.Email);
            claims.AddName($"{user.FirstName} {user.LastName}");
            claims.AddRoles(operationClaims.Select(c => c.Name).ToArray());

            return claims;
        }
    }
}


================================================
FILE: Core/Utilities/Security/Jwt/TokenOptions.cs
================================================
namespace Core.Utilities.Security.Jwt
{
    public class TokenOptions
    {
        public string Audience { get; set; }
        public string Issuer { get; set; }
        public int AccessTokenExpiration { get; set; }
        public string SecurityKey { get; set; }
    }
}


================================================
FILE: DataAccess/Abstract/IBrandDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface IBrandDal:IEntityRepository<Brand>
    {
    }
}


================================================
FILE: DataAccess/Abstract/ICarDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAccess.Abstract
{
    public interface ICarDal:IEntityRepository<Car>
    {
        List<CarDetailDto> GetCarDetails();
    }
}


================================================
FILE: DataAccess/Abstract/ICarImageDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface ICarImageDal:IEntityRepository<CarImage>
    {

    }
}


================================================
FILE: DataAccess/Abstract/ICartDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface ICartDal: IEntityRepository<Cart>
    {

    }
}


================================================
FILE: DataAccess/Abstract/IColorDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface IColorDal:IEntityRepository<Color>
    {

    }
}


================================================
FILE: DataAccess/Abstract/ICustomerDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface ICustomerDal:IEntityRepository<Customer>
    {
        List<CustomerDetailDto> GetCustomerDetails();
    }
}


================================================
FILE: DataAccess/Abstract/IPaymentDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface IPaymentDal:IEntityRepository<Payment>
    {

    }
}


================================================
FILE: DataAccess/Abstract/IRentalDal.cs
================================================
using Core.DataAccess;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface IRentalDal:IEntityRepository<Rental>
    {
        List<RentalDetailDto> GetRentalDetails();
    }
}


================================================
FILE: DataAccess/Abstract/IUserDal.cs
================================================
using Core.DataAccess;
using Core.Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Abstract
{
    public interface IUserDal:IEntityRepository<User>
    {
        List<OperationClaim> GetClaims(User user);
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/CarRentalContext.cs
================================================
using Core.Entities.Concrete;
using Entities.Concrete;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAccess.Concrete.EntityFramework
{
    public class CarRentalContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\MSSQLLocalDB;Database=CarRental;Trusted_Connection=true;");
           
        }

        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; }
        public DbSet<Payment> Payments { get; set; }
        public DbSet<Cart> Carts { get; set; }
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfBrandDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfBrandDal : EfEntityRepositoryBase<Brand, CarRentalContext>, IBrandDal
    {
       
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfCarDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfCarDal : EfEntityRepositoryBase<Car, CarRentalContext>, ICarDal
    {
        public List<CarDetailDto> GetCarDetails()
        {
            using (var context = new CarRentalContext())
            {
                var result = from c in context.Cars
                             join b in context.Brands on c.BrandId equals b.Id
                             join co in context.Colors on c.ColorId equals co.Id
                             select new CarDetailDto { Id=c.Id,BrandName = b.BrandName, 
                                 ColorName = co.ColorName,ModelYear=c.ModelYear,DailyPrice = c.DailyPrice,Description=c.Description,Findeks=c.Findeks };
                             
                return result.ToList();
            }
        }
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfCarImageDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfCarImageDal:EfEntityRepositoryBase<CarImage,CarRentalContext>,ICarImageDal
    {

    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfCartDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfCartDal: EfEntityRepositoryBase<Cart, CarRentalContext>, ICartDal
    {

    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfColorDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfColorDal : EfEntityRepositoryBase<Color, CarRentalContext>,IColorDal
    {
       
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfCustomerDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfCustomerDal : EfEntityRepositoryBase<Customer, CarRentalContext>, ICustomerDal
    {
        public List<CustomerDetailDto> GetCustomerDetails()
        {
            using (var context = new CarRentalContext())
            {
                var result = from c in context.Customers
                             join u in context.Users on c.UserId equals u.Id
                             select new CustomerDetailDto
                             {
                                Id = c.Id,
                                FirstName = u.FirstName,
                                LastName = u.LastName,
                                Email = u.Email,
                                Status = u.Status,
                                CompanyName = c.CompanyName
                             };

                return result.ToList();
            }
        }
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfPaymentDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfPaymentDal: EfEntityRepositoryBase<Payment, CarRentalContext>, IPaymentDal
    {

    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfRentalDal.cs
================================================
using Core.DataAccess.EntityFramework;
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Linq.Expressions;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfRentalDal : EfEntityRepositoryBase<Rental, CarRentalContext>, IRentalDal
    {
        public List<RentalDetailDto> GetRentalDetails()
        {
            using (var context = new CarRentalContext())
            {
                var result = from rent in context.Rentals
                             join car in context.Cars on rent.CarId equals car.Id
                             join brand in context.Brands on car.BrandId equals brand.Id
                             join color in context.Colors on car.ColorId equals color.Id
                             join cus in context.Customers on rent.CustomerId equals cus.Id
                             join user in context.Users on cus.UserId equals user.Id
                             select new RentalDetailDto
                             {
                                 Id = rent.Id,
                                 CarId = car.Id,
                                 CarName = car.Description,
                                 BrandName = brand.BrandName,
                                 ColorName = color.ColorName,
                                 CompanyName = cus.CompanyName,
                                 FirstName = user.FirstName,
                                 LastName = user.LastName,
                                 RentDate = rent.RentDate,
                                 ReturnDate = rent.ReturnDate,
                             };

                return result.ToList();
            }
        }
    }
}


================================================
FILE: DataAccess/Concrete/EntityFramework/EfUserDal.cs
================================================
using Core.DataAccess.EntityFramework;
using Core.Entities.Concrete;
using DataAccess.Abstract;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace DataAccess.Concrete.EntityFramework
{
    public class EfUserDal : EfEntityRepositoryBase<User, CarRentalContext>, IUserDal
    {
        public List<OperationClaim> GetClaims(User user)
        {
            using (var context = new CarRentalContext())
            {
                var result = from operationClaim in context.OperationClaims
                             join userOperationClaim in context.UserOperationClaims
                                 on operationClaim.Id equals userOperationClaim.OperationClaimId
                             where userOperationClaim.UserId == user.Id
                             select new OperationClaim { Id = operationClaim.Id, Name = operationClaim.Name };
                return result.ToList();
            }
        }
    }
}


================================================
FILE: DataAccess/Concrete/InMemory/InMemoryCarDal.cs
================================================
using DataAccess.Abstract;
using Entities.Concrete;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace DataAccess.Concrete.InMemory
{
    public class InMemoryCarDal : ICarDal
    {
        List<Car> _cars;

        public InMemoryCarDal()
        {
            _cars = new List<Car>
            {
                new Car{Id=0,BrandId=2,ColorId=33,ModelYear=2014,DailyPrice=56929,Description="Info." },
                new Car{Id=1,BrandId=2,ColorId=15,ModelYear=2020,DailyPrice=96723,Description="Info." },
                new Car{Id=2,BrandId=2,ColorId=78,ModelYear=1994,DailyPrice=26173,Description="Info." },
            };
        }

        public void Add(Car car)
        {
            _cars.Add(car);
        }

        public void Delete(Car car)
        {
            Car deletedToCar = null;

            deletedToCar = _cars.SingleOrDefault(p => p.Id == car.Id);

            _cars.Remove(deletedToCar);
        }

        public Car Get(Expression<Func<Car, bool>> filter)
        {
            throw new NotImplementedException();            
        }

        public Car Get(int id)
        {
            return _cars.SingleOrDefault(p => p.Id == id);
        }

        public List<Car> GetAll(Expression<Func<Car, bool>> filter = null)
        {
            return _cars.ToList();
        }

        public List<Car> GetAll()
        {
            return _cars.ToList();
        }

        public List<CarDetailDto> GetCarDetails()
        {
            throw new NotImplementedException();
        }

        public void Update(Car car)
        {
            Car updatedToCar = null;

            updatedToCar = _cars.SingleOrDefault(p => p.Id == car.Id);

            updatedToCar.Id = car.Id;
            updatedToCar.BrandId = car.BrandId;
            updatedToCar.ColorId = car.ColorId;
            updatedToCar.ModelYear = car.ModelYear;
            updatedToCar.DailyPrice = car.DailyPrice;
            updatedToCar.Description = car.Description;
        }
    }
}


================================================
FILE: DataAccess/DataAccess.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.12" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Core\Core.csproj" />
    <ProjectReference Include="..\Entities\Entities.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: Entities/Concrete/Brand.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Brand:IEntity
    {
        public int Id { get; set; }
        public string BrandName { get; set; }
    }
}


================================================
FILE: Entities/Concrete/Car.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Car: IEntity
    {        
        public int Id { get; set; }
        public int BrandId { get; set; }
        public int ColorId { get; set; }
        public int ModelYear { get; set; }
        public decimal DailyPrice { get; set; }
        public string Description { get; set; }
        public short Findeks { get; set; }
    }
}


================================================
FILE: Entities/Concrete/CarImage.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class CarImage:IEntity
    {
        public CarImage()
        {
            Date = DateTime.Now;
        }
        public int Id { get; set; }
        public int CarId { get; set; }
        public string ImagePath { get; set; }
        public DateTime Date { get; set; }
    }
}


================================================
FILE: Entities/Concrete/Cart.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Cart: IEntity
    {
        public int Id { get; set; }
        public int CustomerId { get; set; }
        public string CartName { get; set; }
        public string CartNumber { get; set; }
        public string CartDate { get; set; }
        public short CartCvv { get; set; }

    }
}


================================================
FILE: Entities/Concrete/Color.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Color:IEntity
    {
        public int Id { get; set; }
        public string ColorName { get; set; }
    }
}


================================================
FILE: Entities/Concrete/Customer.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Customer:IEntity
    {
        public int Id { get; set; }
        public int UserId { get; set; }
        public string CompanyName { get; set; }

    }
}



================================================
FILE: Entities/Concrete/Payment.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Payment:IEntity
    {
        public int Id { get; set; }
        public int CarId { get; set; }
        public int CustomerId { get; set; }       
        public string CartName { get; set; }
        public string CartNumber { get; set; }
        public string CartDate { get; set; }
        public short CartCvv { get; set; }
        public decimal TotalPrice { get; set; }
        public DateTime PaymentDate { get; set; }
    }
}


================================================
FILE: Entities/Concrete/Rental.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.Concrete
{
    public class Rental:IEntity
    {
        public int Id { get; set; }
        public int CarId { get; set; }
        public int CustomerId { get; set; }
        public DateTime RentDate { get; set; }
        public DateTime ReturnDate { get; set; }
    }
}


================================================
FILE: Entities/DTOs/CarDetailDto.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.DTOs
{
    public class CarDetailDto:IDto
    {
        public int Id { get; set; }
        public string BrandName { get; set; }
        public string ColorName { get; set; }
        public int ModelYear { get; set; }
        public decimal DailyPrice { get; set; }
        public string Description { get; set; }
        public short Findeks { get; set; }
    }
}


================================================
FILE: Entities/DTOs/CustomerDetailDto.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.DTOs
{
    public class CustomerDetailDto:IDto
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public Boolean Status { get; set; }
        public string CompanyName { get; set; }
    }
}


================================================
FILE: Entities/DTOs/RentalDetailDto.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.DTOs
{
    public class RentalDetailDto:IDto
    {
        public int Id { get; set; }
        public int CarId { get; set; }
        public string CarName { get; set; }
        public string BrandName { get; set; }
        public string ColorName { get; set; }
        public string CompanyName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime RentDate { get; set; }
        public DateTime ReturnDate { get; set; }
    }
}


================================================
FILE: Entities/DTOs/UserForLoginDto.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.DTOs
{
    public class UserForLoginDto:IDto
    {
        public string Email { get; set; }
        public string Password { get; set; }
    }
}


================================================
FILE: Entities/DTOs/UserForRegisterDto.cs
================================================
using Core.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Entities.DTOs
{
    public class UserForRegisterDto:IDto
    {
        public string Email { get; set; }
        public string Password { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}


================================================
FILE: Entities/Entities.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{D8F5692B-BD1D-47CF-8B64-45317038C94E}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>Entities</RootNamespace>
    <AssemblyName>Entities</AssemblyName>
    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <Deterministic>true</Deterministic>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Numerics" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="Concrete\Brand.cs" />
    <Compile Include="Concrete\Car.cs" />
    <Compile Include="Concrete\CarImage.cs" />
    <Compile Include="Concrete\Cart.cs" />
    <Compile Include="Concrete\Color.cs" />
    <Compile Include="Concrete\Customer.cs" />
    <Compile Include="Concrete\Payment.cs" />
    <Compile Include="Concrete\Rental.cs" />
    <Compile Include="DTOs\CarDetailDto.cs" />
    <Compile Include="DTOs\CustomerDetailDto.cs" />
    <Compile Include="DTOs\RentalDetailDto.cs" />
    <Compile Include="DTOs\UserForLoginDto.cs" />
    <Compile Include="DTOs\UserForRegisterDto.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\Core\Core.csproj">
      <Project>{185e58ed-316c-45f6-8472-03592bb71a21}</Project>
      <Name>Core</Name>
    </ProjectReference>
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

================================================
FILE: Entities/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki öznitelikler kümesiyle
// denetlenir. Bütünleştirilmiş kod ile ilişkili bilgileri değiştirmek için
// bu öznitelik değerlerini değiştirin.
[assembly: AssemblyTitle("Entities")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Entities")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// ComVisible özniteliğinin false olarak ayarlanması bu bütünleştirilmiş koddaki türleri
// COM bileşenleri için görünmez yapar. Bu bütünleştirilmiş koddaki bir türe
// erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın.
[assembly: ComVisible(false)]

// Bu proje COM'un kullanımına sunulursa, aşağıdaki GUID tür kitaplığının kimliği içindir
[assembly: Guid("d8f5692b-bd1d-47cf-8b64-45317038c94e")]

// Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur:
//
//      Ana Sürüm
//      İkincil Sürüm 
//      Yapı Numarası
//      Düzeltme
//
// Tüm değerleri belirtebilir veya varsayılan Derleme ve Düzeltme Numaralarını kullanmak için
// aşağıda gösterildiği gibi '*' kullanabilirsiniz:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


================================================
FILE: Entities/app.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.1" newVersion="5.0.0.1" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

================================================
FILE: README.md
================================================
## Welcome to My Car Rental Project

### The project was developed in accordance with SOLID principles, corporate software architecture, AOP, and software development principles.
 
* Developed on the .Net Core 3.1 platform.
* Cross Cutting Concerns were developed using the Autofac library with interceptors.
  * Performance   
  * Transaction
  * Validation
  * Caching

* Developed using Entity Framework ORM.
* AOP (Aspect-Oriented Programming) was used to handle Cross Cutting Concerns in a modular way.
* Exception Middleware was developed for centralized error handling.
* Claim mechanism was used to provide more flexible role-based authorization.
* JWT (JSON Web Token) authentication was integrated.
* Fluent Validation was used to implement validation processes.
* IoC (Inversion Of Control) was applied to create loosely coupled objects.
* REST and RESTful Web Services were used for server-client communication.

### C# Backend Layers

* Core: A general layer designed to make tools reusable across other projects.
* Entities: The layer where database tables are mapped to objects.
* DataAccess: The layer responsible for database operations.
* Business: The layer where business logic is implemented
* WebAPI: The layer that facilitates server-client communication via the RESTful (Representational State Transfer) HTTP protocol. 




================================================
FILE: ReCapProject.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31005.135
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entities", "Entities\Entities.csproj", "{D8F5692B-BD1D-47CF-8B64-45317038C94E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Business", "Business\Business.csproj", "{710A9967-AB8D-42BF-ACC4-51E19AD024F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleUI", "ConsoleUI\ConsoleUI.csproj", "{80F94BC3-9DE5-48FA-9093-A5E2F412A505}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataAccess", "DataAccess\DataAccess.csproj", "{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Core", "Core\Core.csproj", "{185E58ED-316C-45F6-8472-03592BB71A21}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebAPI", "WebAPI\WebAPI.csproj", "{87C0F5A3-05B6-4D63-8F35-3C893F74E741}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Release|Any CPU.Build.0 = Release|Any CPU
		{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Release|Any CPU.Build.0 = Release|Any CPU
		{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Release|Any CPU.Build.0 = Release|Any CPU
		{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Release|Any CPU.Build.0 = Release|Any CPU
		{185E58ED-316C-45F6-8472-03592BB71A21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{185E58ED-316C-45F6-8472-03592BB71A21}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{185E58ED-316C-45F6-8472-03592BB71A21}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{185E58ED-316C-45F6-8472-03592BB71A21}.Release|Any CPU.Build.0 = Release|Any CPU
		{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {BBD63571-3102-4665-8C98-0A4DD1579EC7}
	EndGlobalSection
EndGlobal


================================================
FILE: WebAPI/.config/dotnet-tools.json
================================================
{
  "version": 1,
  "isRoot": true,
  "tools": {
    "dotnet-ef": {
      "version": "5.0.4",
      "commands": [
        "dotnet-ef"
      ]
    }
  }
}

================================================
FILE: WebAPI/Controllers/AuthController.cs
================================================
using Business.Abstract;
using Entities.DTOs;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        private IAuthService _authService;

        public AuthController(IAuthService authService)
        {
            _authService = authService;
        }

        [HttpPost("login")]
        public ActionResult Login(UserForLoginDto userForLoginDto)
        {
            var userToLogin = _authService.Login(userForLoginDto);
            if (!userToLogin.Success)
            {
                return BadRequest(userToLogin.Message);
            }

            var result = _authService.CreateAccessToken(userToLogin.Data);
            if (result.Success)
            {
                return Ok(result);
            }

            return BadRequest(result.Message);
        }

        [HttpPost("register")]
        public ActionResult Register(UserForRegisterDto userForRegisterDto)
        {
            var userExists = _authService.UserExists(userForRegisterDto.Email);
            if (!userExists.Success)
            {
                return BadRequest(userExists);
            }

            var registerResult = _authService.Register(userForRegisterDto);
            var result = _authService.CreateAccessToken(registerResult.Data);
            if (result.Success)
            {
                return Ok(result);
            }

            return BadRequest(result);
        }
    }
}


================================================
FILE: WebAPI/Controllers/BrandsController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [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.Get(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("delete")]
        public IActionResult Delete(Brand brand)
        {
            var result = _brandService.Delete(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);
        }
    }
}


================================================
FILE: WebAPI/Controllers/CarImagesController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CarImagesController : ControllerBase
    {
        ICarImageService _carImageService;

        public CarImagesController(ICarImageService carImageService)
        {
            _carImageService = carImageService;
        }

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

        [HttpGet("getbyid")]
        public IActionResult GetById([FromForm(Name = ("Id"))] int Id)
        {
            var result = _carImageService.Get(Id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpGet("getimagesbycaridform")]
        public IActionResult GetImagesByCarId([FromForm(Name = ("CarId"))] int CarId)
        {
            var result = _carImageService.GetImagesByCarId(CarId);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpGet("getimagesbycarid")]
        public IActionResult GetImagesByCarId2(int id)
        {
            var result = _carImageService.GetImagesByCarId(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("add")]
        public IActionResult AddAsync([FromForm(Name = ("Image"))] IFormFile file, [FromForm] CarImage carImage)
        {
            var result = _carImageService.Add(carImage,file);

            if (result.Success)
            {
                return Ok(result);
            }

            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update([FromForm(Name = ("Image"))] IFormFile file, [FromForm] CarImage carImage)
        {      
            var result = _carImageService.Update(carImage, file);

            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("delete")]
        public IActionResult Delete([FromForm(Name =("Id"))] int Id)
        {            
            var carImage = _carImageService.Get(Id).Data;            
            var result = _carImageService.Delete(carImage);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);

        }   
        
        [HttpPost("transaction")]
        public IActionResult TransactionTest([FromForm(Name = ("Image"))] IFormFile file, [FromForm] CarImage carImage)
        {
            var result = _carImageService.TransactionalOperation(carImage, file);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
    }


}


================================================
FILE: WebAPI/Controllers/CarsController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CarsController : ControllerBase
    {
        ICarService _carService;

        public CarsController(ICarService carService)
        {
            _carService = carService;
        }

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

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

        [HttpGet("getbycarid")]
        public IActionResult GetByCarId(int id)
        {
            var result = _carService.GetCarDetail(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

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

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

        [HttpPost("add")]
        public IActionResult Add(Car car)
        {
            var result = _carService.Add(car);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("delete")]
        public IActionResult Delete(Car car)
        {
            var result = _carService.Delete(car);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update(Car car)
        {
            var result = _carService.Update(car);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpGet("getcardetails")]
        public IActionResult GetCarsDetails()
        {
            var result = _carService.GetCarDetails();
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpGet("getcardetailsbycarid")]
        public IActionResult GetCarsDetailsByCarId(int id)
        {
            var result = _carService.GetCarDetailsByCarId(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }


        [HttpGet("getcardetailsbybrandcolor")]
        public IActionResult GetCarDetailsByBrandColor(int brandid,int colorid)
        {
            var result = _carService.GetCarDetailsByBrandColor(brandid,colorid);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpGet("getcardetailsbybrandid")]
        public IActionResult GetCarDetailsByBrandId(int id)
        {
            var result = _carService.GetCarDetailsByBrandId(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
        [HttpGet("getcardetailsbycolorid")]
        public IActionResult GetCarDetailsByColorId(int id)
        {
            var result = _carService.GetCarDetailsByColorId(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
    }
}


================================================
FILE: WebAPI/Controllers/CartsController.cs
================================================
using Business.Abstract;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CartsController : ControllerBase
    {
        ICartService _cartService;

        public CartsController(ICartService cartService)
        {
            _cartService = cartService;
        }

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

        [HttpGet("getallbyid")]
        public IActionResult GetAll(int id)
        {
            var result = _cartService.GetAllByCustomerId(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

    }
}


================================================
FILE: WebAPI/Controllers/ColorsController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ColorsController : ControllerBase
    {
        IColorService _colorService;

        public ColorsController(IColorService colorService)
        {
            _colorService = colorService;
        }

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

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

        [HttpPost("add")]
        public IActionResult Add(Color color)
        {
            var result = _colorService.Add(color);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("delete")]
        public IActionResult Delete(Color color)
        {
            var result = _colorService.Delete(color);
            if(result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update(Color color)
        {
            var result = _colorService.Update(color);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

    }
}


================================================
FILE: WebAPI/Controllers/CustomersController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class CustomersController : ControllerBase
    {
        ICustomerService _customerService;

        public CustomersController(ICustomerService customerService)
        {
            _customerService = customerService;
        }

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

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

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

        [HttpGet("getbyuserid")]
        public IActionResult GetByUserId(int id)
        {
            var result = _customerService.GetbyUser(id);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("add")]
        public IActionResult Add(Customer customer)
        {
            var result = _customerService.Add(customer);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
        [HttpPost("delete")]
        public IActionResult Delete(Customer customer)
        {
            var result = _customerService.Delete(customer);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update(Customer customer)
        {
            var result = _customerService.Update(customer);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
    }
}


================================================
FILE: WebAPI/Controllers/PaysController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class PaysController : ControllerBase
    {
        IPaymentService _paymentService;
        public PaysController(IPaymentService paymentService)
        {
            _paymentService = paymentService;
        }

        [HttpPost("add")]
        public IActionResult Add(Payment payment)
        {
            var result = _paymentService.Add(payment);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

    }
}


================================================
FILE: WebAPI/Controllers/RentalsController.cs
================================================
using Business.Abstract;
using Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class RentalsController : ControllerBase
    {
        IRentalService _rentalService;

        public RentalsController(IRentalService rentalService)
        {
            _rentalService = rentalService;
        }

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

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

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

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

        [HttpPost("add")]
        public IActionResult Add(Rental rental)
        {
            //rental.ReturnDate = DateTime.Now.AddDays(2).AddHours(3);
            var result = _rentalService.Add(rental);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("delete")]
        public IActionResult Delete(Rental rental)
        {
            var result = _rentalService.Delete(rental);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update(Rental rental)
        {
            var result = _rentalService.Update(rental);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("datecheck")]
        public IActionResult datecheck(Rental rental)
        {            
            var result = _rentalService.DateCheck(rental);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
    }
}


================================================
FILE: WebAPI/Controllers/UsersController.cs
================================================
using Business.Abstract;
using Core.Entities.Concrete;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        IUserService _userService;

        public UsersController(IUserService userService)
        {
            _userService = userService;
        }

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

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

        [HttpPost("add")]
        public IActionResult Add(User user)
        {
            var result = _userService.Add(user);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("delete")]
        public IActionResult Delete(User user)
        {
            var result = _userService.Delete(user);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }

        [HttpPost("update")]
        public IActionResult Update(User user)
        {
            var result = _userService.Update(user);
            if (result.Success)
            {
                return Ok(result);
            }
            return BadRequest(result);
        }
    }
}


================================================
FILE: WebAPI/Controllers/WeatherForecastController.cs
================================================
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            var rng = new Random();
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}


================================================
FILE: WebAPI/Program.cs
================================================
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Business.DependencyResolvers.Autofac;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseServiceProviderFactory(new AutofacServiceProviderFactory())
                .ConfigureContainer<ContainerBuilder>(builder => { builder.RegisterModule(new AutofacBusinessModule()); })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}


================================================
FILE: WebAPI/Properties/launchSettings.json
================================================
{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:55343",
      "sslPort": 44399
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebAPI": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "weatherforecast",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}


================================================
FILE: WebAPI/Startup.cs
================================================
using Business.Abstract;
using Business.Concrete;
using Core.DependencyResolvers;
using Core.Extensions;
using Core.Utilities.IoC;
using Core.Utilities.Security.Encryption;
using Core.Utilities.Security.Jwt;
using DataAccess.Abstract;
using DataAccess.Concrete.EntityFramework;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebAPI
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddCors();
            //services.AddSingleton<ICarService,CarManager>();
            //services.AddSingleton<ICarDal,EfCarDal>();
            //services.AddSingleton<IBrandService,BrandManager>();
            //services.AddSingleton<IBrandDal,EfBrandDal>();
            //services.AddSingleton<IColorService,ColorManager>();
            //services.AddSingleton<IColorDal, EfColorDal>();
            //services.AddSingleton<IUserService,UserManager>();
            //services.AddSingleton<IUserDal,EfUserDal>();
            //services.AddSingleton<ICustomerService,CustomerManager>();
            //services.AddSingleton<ICustomerDal,EfCustomerDal>();
            //services.AddSingleton<IRentalService,RentalManager>();
            //services.AddSingleton<IRentalDal, EfRentalDal>();

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

            var tokenOptions = Configuration.GetSection("TokenOptions").Get<TokenOptions>();
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidIssuer = tokenOptions.Issuer,
                        ValidAudience = tokenOptions.Audience,
                        ValidateIssuerSigningKey = true,
                        IssuerSigningKey = SecurityKeyHelper.CreateSecurityKey(tokenOptions.SecurityKey)
                    };
                });

            services.AddDependencyResolvers( new ICoreModule[] { new CoreModule() });

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.ConfigureCustomExceptionMiddleware();

            app.UseCors(builder=>builder.WithOrigins("http://localhost:4200").AllowAnyHeader().AllowAnyOrigin());

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthentication();

            app.UseStaticFiles();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}


================================================
FILE: WebAPI/WeatherForecast.cs
================================================
using System;

namespace WebAPI
{
    public class WeatherForecast
    {
        public DateTime Date { get; set; }

        public int TemperatureC { get; set; }

        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);

        public string Summary { get; set; }
    }
}


================================================
FILE: WebAPI/WebAPI.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.12" />
    <PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="5.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Business\Business.csproj" />
    <ProjectReference Include="..\DataAccess\DataAccess.csproj" />
    <ProjectReference Include="..\Entities\Entities.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="wwwroot\Images\" />
  </ItemGroup>


</Project>


================================================
FILE: WebAPI/appsettings.Development.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}


================================================
FILE: WebAPI/appsettings.json
================================================
{
  "TokenOptions": {
    "Audience": "ugur@ugur.com",
    "Issuer": "ugur@ugur.com",
    "AccessTokenExpiration": 10,
    "SecurityKey": "mysupersecretkeymysupersecretkey"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}
Download .txt
gitextract_qx9n6vkf/

├── .gitattributes
├── .gitignore
├── Business/
│   ├── Abstract/
│   │   ├── IAuthService.cs
│   │   ├── IBrandService.cs
│   │   ├── ICarImageService.cs
│   │   ├── ICarService.cs
│   │   ├── ICartService.cs
│   │   ├── IColorService.cs
│   │   ├── ICustomerService.cs
│   │   ├── IPaymentService.cs
│   │   ├── IRentalService.cs
│   │   └── IUserService.cs
│   ├── Business.csproj
│   ├── BusinessAspects/
│   │   └── Autofac/
│   │       └── SecuredOperation.cs
│   ├── Concrete/
│   │   ├── AuthManager.cs
│   │   ├── BrandManager.cs
│   │   ├── CarImageManager.cs
│   │   ├── CarManager.cs
│   │   ├── CartManager.cs
│   │   ├── ColorManager.cs
│   │   ├── CustomerManager.cs
│   │   ├── PaymentManager.cs
│   │   ├── RentalManager.cs
│   │   └── UserManager.cs
│   ├── Constants/
│   │   └── Messages.cs
│   ├── DependencyResolvers/
│   │   └── Autofac/
│   │       └── AutofacBusinessModule.cs
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   ├── ValidationRules/
│   │   └── FluentValidation/
│   │       ├── BrandValidator.cs
│   │       ├── CarImageValidator.cs
│   │       ├── CarValidator.cs
│   │       ├── ColorValidator.cs
│   │       ├── CustomerValidator.cs
│   │       ├── RentalValidator.cs
│   │       └── UserValidator.cs
│   ├── app.config
│   └── packages.config
├── CarRentalQuery1.sql
├── ConsoleUI/
│   ├── ConsoleUI.csproj
│   └── Program.cs
├── Core/
│   ├── Aspect/
│   │   └── Autofac/
│   │       ├── Caching/
│   │       │   ├── CacheAspect.cs
│   │       │   └── CacheRemoveAspect.cs
│   │       ├── Performance/
│   │       │   └── PerformanceAspect.cs
│   │       ├── Transaction/
│   │       │   └── TransactionScopeAspect.cs
│   │       └── Validation/
│   │           └── ValidationAspect.cs
│   ├── Core.csproj
│   ├── CrossCuttingConcerns/
│   │   ├── Caching/
│   │   │   ├── ICacheManager.cs
│   │   │   └── Microsoft/
│   │   │       └── MemoryCacheManager.cs
│   │   └── Validation/
│   │       └── ValidationTool.cs
│   ├── DataAccess/
│   │   ├── EntityFramework/
│   │   │   └── EfEntityRepositoryBase.cs
│   │   └── IEntityRepository.cs
│   ├── DependencyResolvers/
│   │   └── CoreModule.cs
│   ├── Entities/
│   │   ├── Concrete/
│   │   │   ├── OperationClaim.cs
│   │   │   ├── User.cs
│   │   │   └── UserOperationClaim.cs
│   │   ├── IDto.cs
│   │   └── IEntity.cs
│   ├── Extensions/
│   │   ├── ClaimExtensions.cs
│   │   ├── ClaimsPrincipalExtensions.cs
│   │   ├── ErrorDetails.cs
│   │   ├── ExceptionMiddleware.cs
│   │   ├── ExceptionMiddlewareExtensions.cs
│   │   └── ServiceCollectionExtensions.cs
│   └── Utilities/
│       ├── Business/
│       │   └── BusinessRules.cs
│       ├── FileHelper/
│       │   └── FileHelper.cs
│       ├── Interceptors/
│       │   ├── AspectInterceptorSelector.cs
│       │   ├── MethodInterception.cs
│       │   └── MethodInterceptionBaseAttribute.cs
│       ├── IoC/
│       │   ├── ICoreModule.cs
│       │   └── ServiceTool.cs
│       ├── Results/
│       │   ├── DataResult.cs
│       │   ├── ErrorDataResult.cs
│       │   ├── ErrorResult.cs
│       │   ├── IDataResult.cs
│       │   ├── IResult.cs
│       │   ├── Result.cs
│       │   ├── SuccessDataResult.cs
│       │   └── SuccessResult.cs
│       └── Security/
│           ├── Encryption/
│           │   ├── SecurityKeyHelper.cs
│           │   └── SigningCredentialsHelper.cs
│           ├── Hashing/
│           │   └── HashingHelper.cs
│           └── Jwt/
│               ├── AccessToken.cs
│               ├── ITokenHelper.cs
│               ├── JwtHelper.cs
│               └── TokenOptions.cs
├── DataAccess/
│   ├── Abstract/
│   │   ├── IBrandDal.cs
│   │   ├── ICarDal.cs
│   │   ├── ICarImageDal.cs
│   │   ├── ICartDal.cs
│   │   ├── IColorDal.cs
│   │   ├── ICustomerDal.cs
│   │   ├── IPaymentDal.cs
│   │   ├── IRentalDal.cs
│   │   └── IUserDal.cs
│   ├── Concrete/
│   │   ├── EntityFramework/
│   │   │   ├── CarRentalContext.cs
│   │   │   ├── EfBrandDal.cs
│   │   │   ├── EfCarDal.cs
│   │   │   ├── EfCarImageDal.cs
│   │   │   ├── EfCartDal.cs
│   │   │   ├── EfColorDal.cs
│   │   │   ├── EfCustomerDal.cs
│   │   │   ├── EfPaymentDal.cs
│   │   │   ├── EfRentalDal.cs
│   │   │   └── EfUserDal.cs
│   │   └── InMemory/
│   │       └── InMemoryCarDal.cs
│   └── DataAccess.csproj
├── Entities/
│   ├── Concrete/
│   │   ├── Brand.cs
│   │   ├── Car.cs
│   │   ├── CarImage.cs
│   │   ├── Cart.cs
│   │   ├── Color.cs
│   │   ├── Customer.cs
│   │   ├── Payment.cs
│   │   └── Rental.cs
│   ├── DTOs/
│   │   ├── CarDetailDto.cs
│   │   ├── CustomerDetailDto.cs
│   │   ├── RentalDetailDto.cs
│   │   ├── UserForLoginDto.cs
│   │   └── UserForRegisterDto.cs
│   ├── Entities.csproj
│   ├── Properties/
│   │   └── AssemblyInfo.cs
│   └── app.config
├── README.md
├── ReCapProject.sln
└── WebAPI/
    ├── .config/
    │   └── dotnet-tools.json
    ├── Controllers/
    │   ├── AuthController.cs
    │   ├── BrandsController.cs
    │   ├── CarImagesController.cs
    │   ├── CarsController.cs
    │   ├── CartsController.cs
    │   ├── ColorsController.cs
    │   ├── CustomersController.cs
    │   ├── PaysController.cs
    │   ├── RentalsController.cs
    │   ├── UsersController.cs
    │   └── WeatherForecastController.cs
    ├── Program.cs
    ├── Properties/
    │   └── launchSettings.json
    ├── Startup.cs
    ├── WeatherForecast.cs
    ├── WebAPI.csproj
    ├── appsettings.Development.json
    └── appsettings.json
Download .txt
SYMBOL INDEX (461 symbols across 123 files)

FILE: Business/Abstract/IAuthService.cs
  type IAuthService (line 13) | public interface IAuthService
    method Register (line 15) | IDataResult<User> Register(UserForRegisterDto userForRegisterDto);
    method Login (line 16) | IDataResult<User> Login(UserForLoginDto userForLoginDto);
    method UserExists (line 17) | IResult UserExists(string email);
    method CreateAccessToken (line 18) | IDataResult<AccessToken> CreateAccessToken(User user);

FILE: Business/Abstract/IBrandService.cs
  type IBrandService (line 11) | public interface IBrandService
    method GetAll (line 13) | IDataResult<List<Brand>> GetAll();
    method Get (line 14) | IDataResult<Brand> Get(int id);
    method Add (line 15) | IResult Add(Brand brand);
    method Update (line 16) | IResult Update(Brand brand);
    method Delete (line 17) | IResult Delete(Brand brand);

FILE: Business/Abstract/ICarImageService.cs
  type ICarImageService (line 12) | public interface ICarImageService
    method GetAll (line 14) | IDataResult<List<CarImage>> GetAll();
    method Get (line 15) | IDataResult<CarImage> Get(int id);
    method Add (line 16) | IResult Add(CarImage carImage,IFormFile file);
    method Update (line 17) | IResult Update(CarImage carImage, IFormFile file);
    method Delete (line 18) | IResult Delete(CarImage carImage);
    method GetImagesByCarId (line 19) | IDataResult<List<CarImage>> GetImagesByCarId(int id);
    method TransactionalOperation (line 20) | IResult TransactionalOperation(CarImage carImage, IFormFile file);

FILE: Business/Abstract/ICarService.cs
  type ICarService (line 13) | public interface ICarService
    method GetAll (line 15) | IDataResult<List<Car>> GetAll();
    method Get (line 16) | IDataResult<Car> Get(int id);
    method Add (line 18) | IResult Add(Car car);
    method Update (line 19) | IResult Update(Car car);
    method Delete (line 20) | IResult Delete(Car car);
    method GetCarDetail (line 22) | IDataResult<CarDetailDto> GetCarDetail(int id);
    method GetCarsByBrandId (line 24) | IDataResult<List<Car>> GetCarsByBrandId(int id);
    method GetCarsByColorId (line 25) | IDataResult<List<Car>> GetCarsByColorId(int id);
    method GetCarDetails (line 27) | IDataResult<List<CarDetailDto>> GetCarDetails();
    method GetCarDetailsByBrandColor (line 28) | IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int brandid,...
    method GetCarDetailsByCarId (line 29) | IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id);
    method GetCarDetailsByBrandId (line 30) | IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id);
    method GetCarDetailsByColorId (line 31) | IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id);

FILE: Business/Abstract/ICartService.cs
  type ICartService (line 11) | public interface ICartService
    method GetAll (line 13) | IDataResult<List<Cart>> GetAll();
    method Get (line 14) | IDataResult<Cart> Get(int id);
    method Add (line 16) | IResult Add(Cart cart);
    method Update (line 17) | IResult Update(Cart cart);
    method Delete (line 18) | IResult Delete(Cart cart);
    method GetAllByCustomerId (line 20) | IDataResult<List<Cart>> GetAllByCustomerId(int customerId);

FILE: Business/Abstract/IColorService.cs
  type IColorService (line 11) | public interface IColorService
    method GetAll (line 13) | IDataResult<List<Color>> GetAll();
    method Get (line 14) | IDataResult<Color> Get(int id);
    method Add (line 15) | IResult Add(Color color);
    method Update (line 16) | IResult Update(Color color);
    method Delete (line 17) | IResult Delete(Color color);

FILE: Business/Abstract/ICustomerService.cs
  type ICustomerService (line 13) | public interface ICustomerService
    method GetAll (line 15) | IDataResult<List<Customer>> GetAll();
    method Get (line 16) | IDataResult<Customer> Get(int id);
    method GetbyUser (line 17) | IDataResult<Customer> GetbyUser(int id);
    method Add (line 18) | IResult Add(Customer customer);
    method Delete (line 19) | IResult Delete(Customer customer);
    method Update (line 20) | IResult Update(Customer customer);
    method GetCustomerDetails (line 21) | IDataResult<List<CustomerDetailDto>> GetCustomerDetails();

FILE: Business/Abstract/IPaymentService.cs
  type IPaymentService (line 11) | public interface IPaymentService
    method Add (line 13) | IResult Add(Payment payment);

FILE: Business/Abstract/IRentalService.cs
  type IRentalService (line 13) | public interface IRentalService
    method GetAll (line 15) | IDataResult<List<Rental>> GetAll();
    method Get (line 16) | IDataResult<Rental> Get(int id);
    method Add (line 17) | IResult Add(Rental rental);
    method Delete (line 18) | IResult Delete(Rental rental);
    method Update (line 19) | IResult Update(Rental rental);
    method DateCheck (line 20) | IResult DateCheck(Rental rental);
    method GetRentalDetails (line 21) | IDataResult<List<RentalDetailDto>> GetRentalDetails();
    method GetRentalDetailsByCarId (line 22) | IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int carId);

FILE: Business/Abstract/IUserService.cs
  type IUserService (line 12) | public interface IUserService
    method GetAll (line 14) | IDataResult<List<User>> GetAll();
    method Get (line 15) | IDataResult<User> Get(int id);
    method Add (line 16) | IResult Add(User user);
    method Delete (line 17) | IResult Delete(User user);
    method Update (line 18) | IResult Update(User user);
    method GetClaims (line 19) | IDataResult<List<OperationClaim>> GetClaims(User user);
    method GetByMail (line 20) | IDataResult<User> GetByMail(string email);

FILE: Business/BusinessAspects/Autofac/SecuredOperation.cs
  class SecuredOperation (line 16) | public class SecuredOperation:MethodInterception
    method SecuredOperation (line 21) | public SecuredOperation(string roles)
    method OnBefore (line 28) | protected override void OnBefore(IInvocation invocation)

FILE: Business/Concrete/AuthManager.cs
  class AuthManager (line 16) | public class AuthManager : IAuthService
    method AuthManager (line 21) | public AuthManager(IUserService userService, ITokenHelper tokenHelper)
    method CreateAccessToken (line 27) | public IDataResult<AccessToken> CreateAccessToken(User user)
    method Login (line 34) | public IDataResult<User> Login(UserForLoginDto userForLoginDto)
    method Register (line 50) | public IDataResult<User> Register(UserForRegisterDto userForRegisterDto)
    method UserExists (line 68) | public IResult UserExists(string email)

FILE: Business/Concrete/BrandManager.cs
  class BrandManager (line 17) | public class BrandManager : IBrandService
    method BrandManager (line 21) | public BrandManager(IBrandDal brandDal)
    method Add (line 26) | [SecuredOperation("brand.add,Admin", Priority = 1)]
    method Delete (line 34) | [SecuredOperation("brand.delete,Admin", Priority = 1)]
    method Get (line 42) | public IDataResult<Brand> Get(int Id)
    method GetAll (line 47) | public IDataResult<List<Brand>> GetAll()
    method Update (line 52) | [SecuredOperation("brand.update,Admin", Priority = 1)]

FILE: Business/Concrete/CarImageManager.cs
  class CarImageManager (line 23) | public class CarImageManager : ICarImageService
    method CarImageManager (line 27) | public CarImageManager(ICarImageDal carImageDal)
    method Add (line 32) | [SecuredOperation("carimages.add,Admin", Priority = 1)]
    method Update (line 51) | [SecuredOperation("carimages.update", Priority = 1)]
    method Delete (line 63) | [SecuredOperation("carimages.delete", Priority = 1)]
    method Get (line 74) | public IDataResult<CarImage> Get(int Id)
    method GetAll (line 79) | [PerformanceAspect(5)]
    method GetImagesByCarId (line 86) | [CacheAspect(duration: 10)]
    method CheckIfImageLimit (line 99) | private IResult CheckIfImageLimit(int CarId)
    method TransactionalOperation (line 110) | [TransactionScopeAspect]

FILE: Business/Concrete/CarManager.cs
  class CarManager (line 20) | public class CarManager : ICarService
    method CarManager (line 26) | public CarManager(ICarDal carDal, IBrandDal brandDal, IColorDal colorDal)
    method Add (line 33) | [SecuredOperation("car.add", Priority = 1)]
    method Delete (line 41) | [SecuredOperation("car.delete", Priority = 1)]
    method Update (line 48) | [SecuredOperation("car.update", Priority = 1)]
    method Get (line 57) | public IDataResult<Car> Get(int Id)
    method GetAll (line 62) | public IDataResult<List<Car>> GetAll()
    method GetCarsByBrandId (line 68) | public IDataResult<List<Car>> GetCarsByBrandId(int Id)
    method GetCarsByColorId (line 74) | public IDataResult<List<Car>> GetCarsByColorId(int Id)
    method GetCarDetails (line 79) | public IDataResult<List<CarDetailDto>> GetCarDetails()
    method GetCarDetailsByBrandId (line 84) | public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id)
    method GetCarDetailsByColorId (line 89) | public IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id)
    method GetCarDetailsByCarId (line 94) | public IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id)
    method GetCarDetailsByBrandColor (line 99) | public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int b...
    method GetCarDetail (line 106) | public IDataResult<CarDetailDto> GetCarDetail(int id)

FILE: Business/Concrete/CartManager.cs
  class CartManager (line 13) | public class CartManager : ICartService
    method CartManager (line 17) | public CartManager(ICartDal cartDal)
    method Add (line 22) | public IResult Add(Cart cart)
    method Delete (line 28) | public IResult Delete(Cart cart)
    method Get (line 34) | public IDataResult<Cart> Get(int id)
    method GetAll (line 40) | public IDataResult<List<Cart>> GetAll()
    method GetAllByCustomerId (line 46) | public IDataResult<List<Cart>> GetAllByCustomerId(int customerId)
    method Update (line 52) | public IResult Update(Cart cart)

FILE: Business/Concrete/ColorManager.cs
  class ColorManager (line 17) | public class ColorManager : IColorService
    method ColorManager (line 21) | public ColorManager(IColorDal colorDal)
    method Add (line 26) | [SecuredOperation("color.add", Priority = 1)]
    method Delete (line 34) | [SecuredOperation("color.delete", Priority = 1)]
    method Get (line 42) | public IDataResult<Color> Get(int Id)
    method GetAll (line 47) | public IDataResult<List<Color>> GetAll()
    method Update (line 52) | [SecuredOperation("color.update", Priority = 1)]

FILE: Business/Concrete/CustomerManager.cs
  class CustomerManager (line 19) | public class CustomerManager:ICustomerService
    method CustomerManager (line 23) | public CustomerManager(ICustomerDal customerDal)
    method Add (line 29) | [ValidationAspect(typeof(CustomerValidator))]
    method Delete (line 38) | public IResult Delete(Customer customer)
    method Get (line 45) | public IDataResult<Customer> Get(int Id)
    method GetAll (line 51) | public IDataResult<List<Customer>> GetAll()
    method GetbyUser (line 56) | public IDataResult<Customer> GetbyUser(int id)
    method GetCustomerDetails (line 61) | public IDataResult<List<CustomerDetailDto>> GetCustomerDetails()
    method Update (line 67) | [ValidationAspect(typeof(CustomerValidator))]

FILE: Business/Concrete/PaymentManager.cs
  class PaymentManager (line 13) | public class PaymentManager : IPaymentService
    method PaymentManager (line 17) | public PaymentManager(IPaymentDal paymentDal)
    method Add (line 22) | public IResult Add(Payment payment)

FILE: Business/Concrete/RentalManager.cs
  class RentalManager (line 21) | public class RentalManager : IRentalService
    method RentalManager (line 26) | public RentalManager(IRentalDal rentalDal, ICarDal carDal)
    method Add (line 33) | [ValidationAspect(typeof(RentalValidator))]
    method DateCheck (line 49) | public IResult DateCheck(Rental rental)
    method Delete (line 60) | [SecuredOperation("rental.delete", Priority = 1)]
    method Get (line 67) | public IDataResult<Rental> Get(int id)
    method GetAll (line 72) | public IDataResult<List<Rental>> GetAll()
    method GetRentalDetails (line 77) | public IDataResult<List<RentalDetailDto>> GetRentalDetails()
    method GetRentalDetailsByCarId (line 82) | public IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int ...
    method Update (line 88) | [SecuredOperation("rental.update", Priority = 1)]
    method CheckIfCar (line 95) | private IResult CheckIfCar(Rental rental)

FILE: Business/Concrete/UserManager.cs
  class UserManager (line 18) | public class UserManager : IUserService
    method UserManager (line 22) | public UserManager(IUserDal userDal)
    method Add (line 28) | [ValidationAspect(typeof(UserValidator))]
    method Delete (line 36) | public IResult Delete(User user)
    method Get (line 42) | public IDataResult<User> Get(int id)
    method GetAll (line 48) | public IDataResult<List<User>> GetAll()
    method GetByMail (line 53) | public IDataResult<User> GetByMail(string email)
    method GetClaims (line 58) | public IDataResult<List<OperationClaim>> GetClaims(User user)
    method Update (line 63) | public IResult Update(User user)

FILE: Business/Constants/Messages.cs
  class Messages (line 9) | public static class Messages

FILE: Business/DependencyResolvers/Autofac/AutofacBusinessModule.cs
  class AutofacBusinessModule (line 19) | public class AutofacBusinessModule:Module
    method Load (line 21) | protected override void Load(ContainerBuilder builder)

FILE: Business/ValidationRules/FluentValidation/BrandValidator.cs
  class BrandValidator (line 11) | public class BrandValidator:AbstractValidator<Brand>
    method BrandValidator (line 13) | public BrandValidator()

FILE: Business/ValidationRules/FluentValidation/CarImageValidator.cs
  class CarImageValidator (line 11) | public class CarImageValidator : AbstractValidator<CarImage>
    method CarImageValidator (line 13) | public CarImageValidator()

FILE: Business/ValidationRules/FluentValidation/CarValidator.cs
  class CarValidator (line 11) | public class CarValidator : AbstractValidator<Car>
    method CarValidator (line 13) | public CarValidator()
    method StartWithA (line 30) | private bool StartWithA(string arg)

FILE: Business/ValidationRules/FluentValidation/ColorValidator.cs
  class ColorValidator (line 11) | public class ColorValidator:AbstractValidator<Color>
    method ColorValidator (line 13) | public ColorValidator()

FILE: Business/ValidationRules/FluentValidation/CustomerValidator.cs
  class CustomerValidator (line 11) | public class CustomerValidator : AbstractValidator<Customer>
    method CustomerValidator (line 13) | public CustomerValidator()

FILE: Business/ValidationRules/FluentValidation/RentalValidator.cs
  class RentalValidator (line 11) | public class RentalValidator:AbstractValidator<Rental>
    method RentalValidator (line 13) | public RentalValidator()

FILE: Business/ValidationRules/FluentValidation/UserValidator.cs
  class UserValidator (line 11) | public class UserValidator : AbstractValidator<User>
    method UserValidator (line 13) | public UserValidator()
    method MailCheck (line 24) | private bool MailCheck(string arg)

FILE: CarRentalQuery1.sql
  type dbo (line 1) | CREATE TABLE [dbo].[Colors] (
  type dbo (line 7) | CREATE TABLE [dbo].[Brands] (
  type dbo (line 13) | CREATE TABLE [dbo].[Cars] (
  type dbo (line 25) | CREATE TABLE [dbo].[Users] (
  type dbo (line 36) | CREATE TABLE [dbo].[Customers] (
  type dbo (line 44) | CREATE TABLE [dbo].[Rentals] (
  type dbo (line 55) | CREATE TABLE [dbo].[CarImages] (
  type dbo (line 64) | CREATE TABLE [dbo].[OperationClaims] (
  type dbo (line 70) | CREATE TABLE [dbo].[UserOperationClaims] (

FILE: ConsoleUI/Program.cs
  class Program (line 9) | class Program
    method Main (line 11) | static void Main(string[] args)

FILE: Core/Aspect/Autofac/Caching/CacheAspect.cs
  class CacheAspect (line 13) | public class CacheAspect:MethodInterception
    method CacheAspect (line 18) | public CacheAspect(int duration=60)
    method Intercept (line 24) | public override void Intercept(IInvocation invocation)

FILE: Core/Aspect/Autofac/Caching/CacheRemoveAspect.cs
  class CacheRemoveAspect (line 12) | public class CacheRemoveAspect:MethodInterception
    method CacheRemoveAspect (line 17) | public CacheRemoveAspect(string pattern)
    method OnSuccess (line 23) | protected override void OnSuccess(IInvocation invocation)

FILE: Core/Aspect/Autofac/Performance/PerformanceAspect.cs
  class PerformanceAspect (line 12) | public class PerformanceAspect:MethodInterception
    method PerformanceAspect (line 17) | public PerformanceAspect(int interval)
    method OnBefore (line 24) | protected override void OnBefore(IInvocation invocation)
    method OnAfter (line 29) | protected override void OnAfter(IInvocation invocation)

FILE: Core/Aspect/Autofac/Transaction/TransactionScopeAspect.cs
  class TransactionScopeAspect (line 10) | public class TransactionScopeAspect:MethodInterception
    method Intercept (line 12) | public override void Intercept(IInvocation invocation)

FILE: Core/Aspect/Autofac/Validation/ValidationAspect.cs
  class ValidationAspect (line 12) | public class ValidationAspect:MethodInterception
    method ValidationAspect (line 16) | public ValidationAspect(Type validatorType)
    method OnBefore (line 25) | protected override void OnBefore(IInvocation invocation)

FILE: Core/CrossCuttingConcerns/Caching/ICacheManager.cs
  type ICacheManager (line 7) | public interface ICacheManager
    method Get (line 9) | T Get<T>(string key);
    method Get (line 10) | object Get(string key);
    method Add (line 11) | void Add(string key, object value, int duration);
    method IsAdd (line 12) | bool IsAdd(string key);
    method Remove (line 13) | void Remove(string key);
    method RemoveByPattern (line 14) | void RemoveByPattern(string pattern);

FILE: Core/CrossCuttingConcerns/Caching/Microsoft/MemoryCacheManager.cs
  class MemoryCacheManager (line 12) | public class MemoryCacheManager : ICacheManager
    method MemoryCacheManager (line 16) | public MemoryCacheManager()
    method Add (line 21) | public void Add(string key, object value, int duration)
    method Get (line 26) | public T Get<T>(string key)
    method Get (line 31) | public object Get(string key)
    method IsAdd (line 36) | public bool IsAdd(string key)
    method Remove (line 41) | public void Remove(string key)
    method RemoveByPattern (line 46) | public void RemoveByPattern(string pattern)

FILE: Core/CrossCuttingConcerns/Validation/ValidationTool.cs
  class ValidationTool (line 8) | public static class ValidationTool
    method Validate (line 10) | public static void Validate(IValidator validator, object entity)

FILE: Core/DataAccess/EntityFramework/EfEntityRepositoryBase.cs
  class EfEntityRepositoryBase (line 11) | public class EfEntityRepositoryBase<TEntity,TContext>:IEntityRepository<...
    method Add (line 15) | public void Add(TEntity entity)
    method Delete (line 25) | public void Delete(TEntity entity)
    method Get (line 35) | public TEntity Get(Expression<Func<TEntity, bool>> filter)
    method GetAll (line 43) | public List<TEntity> GetAll(Expression<Func<TEntity, bool>> filter = n...
    method Update (line 53) | public void Update(TEntity entity)

FILE: Core/DataAccess/IEntityRepository.cs
  type IEntityRepository (line 11) | public interface IEntityRepository<T> where T:class,IEntity,new()
    method GetAll (line 13) | List<T> GetAll(Expression<Func<T,bool>> filter=null);
    method Get (line 14) | T Get(Expression<Func<T, bool>> filter);
    method Add (line 15) | void Add(T entity);
    method Update (line 16) | void Update(T entity);
    method Delete (line 17) | void Delete(T entity);

FILE: Core/DependencyResolvers/CoreModule.cs
  class CoreModule (line 13) | public class CoreModule : ICoreModule
    method Load (line 15) | public void Load(IServiceCollection serviceCollection)

FILE: Core/Entities/Concrete/OperationClaim.cs
  class OperationClaim (line 7) | public class OperationClaim:IEntity

FILE: Core/Entities/Concrete/User.cs
  class User (line 9) | public class User:IEntity

FILE: Core/Entities/Concrete/UserOperationClaim.cs
  class UserOperationClaim (line 7) | public class UserOperationClaim:IEntity

FILE: Core/Entities/IDto.cs
  type IDto (line 7) | public interface IDto

FILE: Core/Entities/IEntity.cs
  type IEntity (line 9) | public interface IEntity

FILE: Core/Extensions/ClaimExtensions.cs
  class ClaimExtensions (line 10) | public static class ClaimExtensions
    method AddEmail (line 12) | public static void AddEmail(this ICollection<Claim> claims, string email)
    method AddName (line 17) | public static void AddName(this ICollection<Claim> claims, string name)
    method AddNameIdentifier (line 22) | public static void AddNameIdentifier(this ICollection<Claim> claims, s...
    method AddRoles (line 27) | public static void AddRoles(this ICollection<Claim> claims, string[] r...

FILE: Core/Extensions/ClaimsPrincipalExtensions.cs
  class ClaimsPrincipalExtensions (line 7) | public static class ClaimsPrincipalExtensions
    method Claims (line 9) | public static List<string> Claims(this ClaimsPrincipal claimsPrincipal...
    method ClaimRoles (line 15) | public static List<string> ClaimRoles(this ClaimsPrincipal claimsPrinc...

FILE: Core/Extensions/ErrorDetails.cs
  class ErrorDetails (line 7) | public class ErrorDetails
    method ToString (line 12) | public override string ToString()
  class ValidationErrorDetails (line 18) | public class ValidationErrorDetails:ErrorDetails

FILE: Core/Extensions/ExceptionMiddleware.cs
  class ExceptionMiddleware (line 12) | public class ExceptionMiddleware
    method ExceptionMiddleware (line 16) | public ExceptionMiddleware(RequestDelegate next)
    method InvokeAsync (line 21) | public async Task InvokeAsync(HttpContext httpContext)
    method HandleExceptionAsync (line 33) | private Task HandleExceptionAsync(HttpContext httpContext, Exception e)

FILE: Core/Extensions/ExceptionMiddlewareExtensions.cs
  class ExceptionMiddlewareExtensions (line 8) | public static class ExceptionMiddlewareExtensions
    method ConfigureCustomExceptionMiddleware (line 10) | public static void ConfigureCustomExceptionMiddleware(this IApplicatio...

FILE: Core/Extensions/ServiceCollectionExtensions.cs
  class ServiceCollectionExtensions (line 9) | public static class ServiceCollectionExtensions
    method AddDependencyResolvers (line 11) | public static IServiceCollection AddDependencyResolvers( this IService...

FILE: Core/Utilities/Business/BusinessRules.cs
  class BusinessRules (line 8) | public class BusinessRules
    method Run (line 10) | public static IResult Run(params IResult[] logics)

FILE: Core/Utilities/FileHelper/FileHelper.cs
  class FileHelper (line 8) | public class FileHelper
    method AddAsync (line 10) | public static string AddAsync(IFormFile file)
    method UpdateAsync (line 34) | public static string UpdateAsync(string sourcePath, IFormFile file)
    method DeleteAsync (line 55) | public static IResult DeleteAsync(string path)
    method newPath (line 69) | public static (string newPath, string Path2) newPath(IFormFile file)

FILE: Core/Utilities/Interceptors/AspectInterceptorSelector.cs
  class AspectInterceptorSelector (line 11) | public class AspectInterceptorSelector : IInterceptorSelector
    method SelectInterceptors (line 13) | public IInterceptor[] SelectInterceptors(Type type, MethodInfo method,...

FILE: Core/Utilities/Interceptors/MethodInterception.cs
  class MethodInterception (line 8) | public abstract class MethodInterception: MethodInterceptionBaseAttribute
    method OnBefore (line 10) | protected virtual void OnBefore(IInvocation invocation) { }
    method OnAfter (line 11) | protected virtual void OnAfter(IInvocation invocation) { }
    method OnException (line 12) | protected virtual void OnException(IInvocation invocation, System.Exce...
    method OnSuccess (line 13) | protected virtual void OnSuccess(IInvocation invocation) { }
    method Intercept (line 15) | public override void Intercept(IInvocation invocation)

FILE: Core/Utilities/Interceptors/MethodInterceptionBaseAttribute.cs
  class MethodInterceptionBaseAttribute (line 8) | [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMult...
    method Intercept (line 12) | public virtual void Intercept(IInvocation invocation) { }

FILE: Core/Utilities/IoC/ICoreModule.cs
  type ICoreModule (line 8) | public interface ICoreModule
    method Load (line 10) | void Load(IServiceCollection serviceCollection);

FILE: Core/Utilities/IoC/ServiceTool.cs
  class ServiceTool (line 8) | public static class ServiceTool
    method Create (line 12) | public static IServiceCollection Create(IServiceCollection services)

FILE: Core/Utilities/Results/DataResult.cs
  class DataResult (line 7) | public class DataResult<T> : Result, IDataResult<T>
    method DataResult (line 9) | public DataResult(T data,bool success,string message):base(success,mes...
    method DataResult (line 14) | public DataResult(T data,bool success):base(success)

FILE: Core/Utilities/Results/ErrorDataResult.cs
  class ErrorDataResult (line 7) | public class ErrorDataResult<T>:DataResult<T>
    method ErrorDataResult (line 9) | public ErrorDataResult(T data,string message):base(data,false,message)
    method ErrorDataResult (line 13) | public ErrorDataResult(T data):base(data,false)
    method ErrorDataResult (line 17) | public ErrorDataResult(string message):base(default,false)
    method ErrorDataResult (line 21) | public ErrorDataResult():base(default,false)

FILE: Core/Utilities/Results/ErrorResult.cs
  class ErrorResult (line 7) | public class ErrorResult:Result
    method ErrorResult (line 9) | public ErrorResult(string message):base(false,message)
    method ErrorResult (line 13) | public ErrorResult():base(false)

FILE: Core/Utilities/Results/IDataResult.cs
  type IDataResult (line 7) | public interface IDataResult<T>:IResult

FILE: Core/Utilities/Results/IResult.cs
  type IResult (line 7) | public interface IResult

FILE: Core/Utilities/Results/Result.cs
  class Result (line 7) | public class Result : IResult
    method Result (line 9) | public Result(bool success,string message):this(success)
    method Result (line 13) | public Result(bool success)

FILE: Core/Utilities/Results/SuccessDataResult.cs
  class SuccessDataResult (line 7) | public class SuccessDataResult<T>:DataResult<T>
    method SuccessDataResult (line 9) | public SuccessDataResult(T data, string message):base(data,true,message)
    method SuccessDataResult (line 13) | public SuccessDataResult(T data):base(data,true)
    method SuccessDataResult (line 17) | public SuccessDataResult(string message):base(default,true,message)
    method SuccessDataResult (line 21) | public SuccessDataResult():base(default,true)

FILE: Core/Utilities/Results/SuccessResult.cs
  class SuccessResult (line 7) | public class SuccessResult:Result
    method SuccessResult (line 9) | public SuccessResult(string message):base(true,message)
    method SuccessResult (line 13) | public SuccessResult():base(true)

FILE: Core/Utilities/Security/Encryption/SecurityKeyHelper.cs
  class SecurityKeyHelper (line 8) | public class SecurityKeyHelper
    method CreateSecurityKey (line 10) | public static SecurityKey CreateSecurityKey(string securityKey)

FILE: Core/Utilities/Security/Encryption/SigningCredentialsHelper.cs
  class SigningCredentialsHelper (line 8) | public class SigningCredentialsHelper
    method CreateSigningCredentials (line 10) | public static SigningCredentials CreateSigningCredentials(SecurityKey ...

FILE: Core/Utilities/Security/Hashing/HashingHelper.cs
  class HashingHelper (line 7) | public class HashingHelper
    method CreatePasswordHash (line 9) | public static void CreatePasswordHash(string password, out byte[] pass...
    method VerifyPasswordHash (line 18) | public static bool VerifyPasswordHash(string password, byte[] password...

FILE: Core/Utilities/Security/Jwt/AccessToken.cs
  class AccessToken (line 7) | public class AccessToken

FILE: Core/Utilities/Security/Jwt/ITokenHelper.cs
  type ITokenHelper (line 8) | public interface ITokenHelper
    method CreateToken (line 10) | AccessToken CreateToken(User user, List<OperationClaim> operationClaims);

FILE: Core/Utilities/Security/Jwt/JwtHelper.cs
  class JwtHelper (line 15) | public class JwtHelper : ITokenHelper
    method JwtHelper (line 21) | public JwtHelper(IConfiguration configuration)
    method CreateToken (line 27) | public AccessToken CreateToken(User user, List<OperationClaim> operati...
    method CreateJwtSecurityToken (line 38) | private JwtSecurityToken CreateJwtSecurityToken(TokenOptions tokenOpti...
    method SetClaims (line 52) | private IEnumerable<Claim> SetClaims(User user, List<OperationClaim> o...

FILE: Core/Utilities/Security/Jwt/TokenOptions.cs
  class TokenOptions (line 3) | public class TokenOptions

FILE: DataAccess/Abstract/IBrandDal.cs
  type IBrandDal (line 9) | public interface IBrandDal:IEntityRepository<Brand>

FILE: DataAccess/Abstract/ICarDal.cs
  type ICarDal (line 12) | public interface ICarDal:IEntityRepository<Car>
    method GetCarDetails (line 14) | List<CarDetailDto> GetCarDetails();

FILE: DataAccess/Abstract/ICarImageDal.cs
  type ICarImageDal (line 9) | public interface ICarImageDal:IEntityRepository<CarImage>

FILE: DataAccess/Abstract/ICartDal.cs
  type ICartDal (line 9) | public interface ICartDal: IEntityRepository<Cart>

FILE: DataAccess/Abstract/IColorDal.cs
  type IColorDal (line 9) | public interface IColorDal:IEntityRepository<Color>

FILE: DataAccess/Abstract/ICustomerDal.cs
  type ICustomerDal (line 10) | public interface ICustomerDal:IEntityRepository<Customer>
    method GetCustomerDetails (line 12) | List<CustomerDetailDto> GetCustomerDetails();

FILE: DataAccess/Abstract/IPaymentDal.cs
  type IPaymentDal (line 9) | public interface IPaymentDal:IEntityRepository<Payment>

FILE: DataAccess/Abstract/IRentalDal.cs
  type IRentalDal (line 10) | public interface IRentalDal:IEntityRepository<Rental>
    method GetRentalDetails (line 12) | List<RentalDetailDto> GetRentalDetails();

FILE: DataAccess/Abstract/IUserDal.cs
  type IUserDal (line 9) | public interface IUserDal:IEntityRepository<User>
    method GetClaims (line 11) | List<OperationClaim> GetClaims(User user);

FILE: DataAccess/Concrete/EntityFramework/CarRentalContext.cs
  class CarRentalContext (line 12) | public class CarRentalContext : DbContext
    method OnConfiguring (line 14) | protected override void OnConfiguring(DbContextOptionsBuilder optionsB...

FILE: DataAccess/Concrete/EntityFramework/EfBrandDal.cs
  class EfBrandDal (line 13) | public class EfBrandDal : EfEntityRepositoryBase<Brand, CarRentalContext...

FILE: DataAccess/Concrete/EntityFramework/EfCarDal.cs
  class EfCarDal (line 15) | public class EfCarDal : EfEntityRepositoryBase<Car, CarRentalContext>, I...
    method GetCarDetails (line 17) | public List<CarDetailDto> GetCarDetails()

FILE: DataAccess/Concrete/EntityFramework/EfCarImageDal.cs
  class EfCarImageDal (line 10) | public class EfCarImageDal:EfEntityRepositoryBase<CarImage,CarRentalCont...

FILE: DataAccess/Concrete/EntityFramework/EfCartDal.cs
  class EfCartDal (line 10) | public class EfCartDal: EfEntityRepositoryBase<Cart, CarRentalContext>, ...

FILE: DataAccess/Concrete/EntityFramework/EfColorDal.cs
  class EfColorDal (line 13) | public class EfColorDal : EfEntityRepositoryBase<Color, CarRentalContext...

FILE: DataAccess/Concrete/EntityFramework/EfCustomerDal.cs
  class EfCustomerDal (line 12) | public class EfCustomerDal : EfEntityRepositoryBase<Customer, CarRentalC...
    method GetCustomerDetails (line 14) | public List<CustomerDetailDto> GetCustomerDetails()

FILE: DataAccess/Concrete/EntityFramework/EfPaymentDal.cs
  class EfPaymentDal (line 10) | public class EfPaymentDal: EfEntityRepositoryBase<Payment, CarRentalCont...

FILE: DataAccess/Concrete/EntityFramework/EfRentalDal.cs
  class EfRentalDal (line 13) | public class EfRentalDal : EfEntityRepositoryBase<Rental, CarRentalConte...
    method GetRentalDetails (line 15) | public List<RentalDetailDto> GetRentalDetails()

FILE: DataAccess/Concrete/EntityFramework/EfUserDal.cs
  class EfUserDal (line 11) | public class EfUserDal : EfEntityRepositoryBase<User, CarRentalContext>,...
    method GetClaims (line 13) | public List<OperationClaim> GetClaims(User user)

FILE: DataAccess/Concrete/InMemory/InMemoryCarDal.cs
  class InMemoryCarDal (line 13) | public class InMemoryCarDal : ICarDal
    method InMemoryCarDal (line 17) | public InMemoryCarDal()
    method Add (line 27) | public void Add(Car car)
    method Delete (line 32) | public void Delete(Car car)
    method Get (line 41) | public Car Get(Expression<Func<Car, bool>> filter)
    method Get (line 46) | public Car Get(int id)
    method GetAll (line 51) | public List<Car> GetAll(Expression<Func<Car, bool>> filter = null)
    method GetAll (line 56) | public List<Car> GetAll()
    method GetCarDetails (line 61) | public List<CarDetailDto> GetCarDetails()
    method Update (line 66) | public void Update(Car car)

FILE: Entities/Concrete/Brand.cs
  class Brand (line 10) | public class Brand:IEntity

FILE: Entities/Concrete/Car.cs
  class Car (line 10) | public class Car: IEntity

FILE: Entities/Concrete/CarImage.cs
  class CarImage (line 10) | public class CarImage:IEntity
    method CarImage (line 12) | public CarImage()

FILE: Entities/Concrete/Cart.cs
  class Cart (line 10) | public class Cart: IEntity

FILE: Entities/Concrete/Color.cs
  class Color (line 10) | public class Color:IEntity

FILE: Entities/Concrete/Customer.cs
  class Customer (line 10) | public class Customer:IEntity

FILE: Entities/Concrete/Payment.cs
  class Payment (line 10) | public class Payment:IEntity

FILE: Entities/Concrete/Rental.cs
  class Rental (line 10) | public class Rental:IEntity

FILE: Entities/DTOs/CarDetailDto.cs
  class CarDetailDto (line 10) | public class CarDetailDto:IDto

FILE: Entities/DTOs/CustomerDetailDto.cs
  class CustomerDetailDto (line 10) | public class CustomerDetailDto:IDto

FILE: Entities/DTOs/RentalDetailDto.cs
  class RentalDetailDto (line 10) | public class RentalDetailDto:IDto

FILE: Entities/DTOs/UserForLoginDto.cs
  class UserForLoginDto (line 10) | public class UserForLoginDto:IDto

FILE: Entities/DTOs/UserForRegisterDto.cs
  class UserForRegisterDto (line 10) | public class UserForRegisterDto:IDto

FILE: WebAPI/Controllers/AuthController.cs
  class AuthController (line 12) | [Route("api/[controller]")]
    method AuthController (line 18) | public AuthController(IAuthService authService)
    method Login (line 23) | [HttpPost("login")]
    method Register (line 41) | [HttpPost("register")]

FILE: WebAPI/Controllers/BrandsController.cs
  class BrandsController (line 12) | [Route("api/[controller]")]
    method BrandsController (line 17) | public BrandsController(IBrandService brandService)
    method GetAll (line 22) | [HttpGet("getall")]
    method GetById (line 33) | [HttpGet("getbyid")]
    method Add (line 44) | [HttpPost("add")]
    method Delete (line 55) | [HttpPost("delete")]
    method Update (line 66) | [HttpPost("update")]

FILE: WebAPI/Controllers/CarImagesController.cs
  class CarImagesController (line 11) | [Route("api/[controller]")]
    method CarImagesController (line 17) | public CarImagesController(ICarImageService carImageService)
    method GetAll (line 22) | [HttpGet("getall")]
    method GetById (line 33) | [HttpGet("getbyid")]
    method GetImagesByCarId (line 44) | [HttpGet("getimagesbycaridform")]
    method GetImagesByCarId2 (line 55) | [HttpGet("getimagesbycarid")]
    method AddAsync (line 66) | [HttpPost("add")]
    method Update (line 79) | [HttpPost("update")]
    method Delete (line 91) | [HttpPost("delete")]
    method TransactionTest (line 104) | [HttpPost("transaction")]

FILE: WebAPI/Controllers/CarsController.cs
  class CarsController (line 12) | [Route("api/[controller]")]
    method CarsController (line 18) | public CarsController(ICarService carService)
    method GetAll (line 23) | [HttpGet("getall")]
    method GetById (line 34) | [HttpGet("getbyid")]
    method GetByCarId (line 45) | [HttpGet("getbycarid")]
    method GetCarsByBrandId (line 56) | [HttpGet("getcarsbybrandid")]
    method GetCarsByColorId (line 67) | [HttpGet("getcarsbycolorid")]
    method Add (line 78) | [HttpPost("add")]
    method Delete (line 89) | [HttpPost("delete")]
    method Update (line 100) | [HttpPost("update")]
    method GetCarsDetails (line 111) | [HttpGet("getcardetails")]
    method GetCarsDetailsByCarId (line 122) | [HttpGet("getcardetailsbycarid")]
    method GetCarDetailsByBrandColor (line 134) | [HttpGet("getcardetailsbybrandcolor")]
    method GetCarDetailsByBrandId (line 145) | [HttpGet("getcardetailsbybrandid")]
    method GetCarDetailsByColorId (line 155) | [HttpGet("getcardetailsbycolorid")]

FILE: WebAPI/Controllers/CartsController.cs
  class CartsController (line 11) | [Route("api/[controller]")]
    method CartsController (line 17) | public CartsController(ICartService cartService)
    method GetAll (line 22) | [HttpGet("getall")]
    method GetAll (line 33) | [HttpGet("getallbyid")]

FILE: WebAPI/Controllers/ColorsController.cs
  class ColorsController (line 12) | [Route("api/[controller]")]
    method ColorsController (line 18) | public ColorsController(IColorService colorService)
    method GetAll (line 23) | [HttpGet("getall")]
    method GetById (line 34) | [HttpGet("getbyid")]
    method Add (line 45) | [HttpPost("add")]
    method Delete (line 56) | [HttpPost("delete")]
    method Update (line 67) | [HttpPost("update")]

FILE: WebAPI/Controllers/CustomersController.cs
  class CustomersController (line 12) | [Route("api/[controller]")]
    method CustomersController (line 18) | public CustomersController(ICustomerService customerService)
    method GetAll (line 23) | [HttpGet("getall")]
    method GetCustomerDetails (line 34) | [HttpGet("getalldetails")]
    method GetById (line 45) | [HttpGet("getbyid")]
    method GetByUserId (line 56) | [HttpGet("getbyuserid")]
    method Add (line 67) | [HttpPost("add")]
    method Delete (line 77) | [HttpPost("delete")]
    method Update (line 88) | [HttpPost("update")]

FILE: WebAPI/Controllers/PaysController.cs
  class PaysController (line 12) | [Route("api/[controller]")]
    method PaysController (line 17) | public PaysController(IPaymentService paymentService)
    method Add (line 22) | [HttpPost("add")]

FILE: WebAPI/Controllers/RentalsController.cs
  class RentalsController (line 12) | [Route("api/[controller]")]
    method RentalsController (line 18) | public RentalsController(IRentalService rentalService)
    method GetAll (line 23) | [HttpGet("getall")]
    method GetRentalDetails (line 34) | [HttpGet("getrentaldetails")]
    method GetRentalDetailsByCarId (line 45) | [HttpGet("getrentaldetailsbycarid")]
    method GetById (line 56) | [HttpGet("getbyid")]
    method Add (line 67) | [HttpPost("add")]
    method Delete (line 79) | [HttpPost("delete")]
    method Update (line 90) | [HttpPost("update")]
    method datecheck (line 101) | [HttpPost("datecheck")]

FILE: WebAPI/Controllers/UsersController.cs
  class UsersController (line 12) | [Route("api/[controller]")]
    method UsersController (line 18) | public UsersController(IUserService userService)
    method GetAll (line 23) | [HttpGet("getall")]
    method GetById (line 34) | [HttpGet("getbyid")]
    method Add (line 45) | [HttpPost("add")]
    method Delete (line 56) | [HttpPost("delete")]
    method Update (line 67) | [HttpPost("update")]

FILE: WebAPI/Controllers/WeatherForecastController.cs
  class WeatherForecastController (line 10) | [ApiController]
    method WeatherForecastController (line 21) | public WeatherForecastController(ILogger<WeatherForecastController> lo...
    method Get (line 26) | [HttpGet]

FILE: WebAPI/Program.cs
  class Program (line 15) | public class Program
    method Main (line 17) | public static void Main(string[] args)
    method CreateHostBuilder (line 22) | public static IHostBuilder CreateHostBuilder(string[] args) =>

FILE: WebAPI/Startup.cs
  class Startup (line 28) | public class Startup
    method Startup (line 30) | public Startup(IConfiguration configuration)
    method ConfigureServices (line 38) | public void ConfigureServices(IServiceCollection services)
    method Configure (line 78) | public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

FILE: WebAPI/WeatherForecast.cs
  class WeatherForecast (line 5) | public class WeatherForecast
Condensed preview — 142 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (179K chars).
[
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".gitignore",
    "chars": 5745,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "Business/Abstract/IAuthService.cs",
    "chars": 558,
    "preview": "using Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing Core.Utilities.Security.Jwt;\nusing Entities.DTOs;\nusi"
  },
  {
    "path": "Business/Abstract/IBrandService.cs",
    "chars": 443,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Lin"
  },
  {
    "path": "Business/Abstract/ICarImageService.cs",
    "chars": 671,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Coll"
  },
  {
    "path": "Business/Abstract/ICarService.cs",
    "chars": 1014,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Gene"
  },
  {
    "path": "Business/Abstract/ICartService.cs",
    "chars": 504,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Lin"
  },
  {
    "path": "Business/Abstract/IColorService.cs",
    "chars": 443,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Lin"
  },
  {
    "path": "Business/Abstract/ICustomerService.cs",
    "chars": 638,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Gene"
  },
  {
    "path": "Business/Abstract/IPaymentService.cs",
    "chars": 292,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Lin"
  },
  {
    "path": "Business/Abstract/IRentalService.cs",
    "chars": 688,
    "preview": "using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Gene"
  },
  {
    "path": "Business/Abstract/IUserService.cs",
    "chars": 585,
    "preview": "using Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing System;\nusing System.Collections.Generic;\nusing Syste"
  },
  {
    "path": "Business/Business.csproj",
    "chars": 11980,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "Business/BusinessAspects/Autofac/SecuredOperation.cs",
    "chars": 1156,
    "preview": "using Business.Constants;\nusing Castle.DynamicProxy;\nusing Core.Utilities.Interceptors;\nusing Microsoft.AspNetCore.Http"
  },
  {
    "path": "Business/Concrete/AuthManager.cs",
    "chars": 2632,
    "preview": "using Business.Abstract;\nusing Business.Constants;\nusing Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing Co"
  },
  {
    "path": "Business/Concrete/BrandManager.cs",
    "chars": 1624,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing"
  },
  {
    "path": "Business/Concrete/CarImageManager.cs",
    "chars": 3969,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRul"
  },
  {
    "path": "Business/Concrete/CarManager.cs",
    "chars": 3709,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRul"
  },
  {
    "path": "Business/Concrete/CartManager.cs",
    "chars": 1491,
    "preview": "using Business.Abstract;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System"
  },
  {
    "path": "Business/Concrete/ColorManager.cs",
    "chars": 1602,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing"
  },
  {
    "path": "Business/Concrete/CustomerManager.cs",
    "chars": 2144,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing"
  },
  {
    "path": "Business/Concrete/PaymentManager.cs",
    "chars": 607,
    "preview": "using Business.Abstract;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System"
  },
  {
    "path": "Business/Concrete/RentalManager.cs",
    "chars": 3146,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRul"
  },
  {
    "path": "Business/Concrete/UserManager.cs",
    "chars": 1765,
    "preview": "using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing"
  },
  {
    "path": "Business/Constants/Messages.cs",
    "chars": 1201,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "Business/DependencyResolvers/Autofac/AutofacBusinessModule.cs",
    "chars": 2670,
    "preview": "using Autofac;\nusing Autofac.Extras.DynamicProxy;\nusing Business.Abstract;\nusing Business.Concrete;\nusing Castle.Dynami"
  },
  {
    "path": "Business/Properties/AssemblyInfo.cs",
    "chars": 1450,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// Bir bütünleşt"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/BrandValidator.cs",
    "chars": 501,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CarImageValidator.cs",
    "chars": 401,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CarValidator.cs",
    "chars": 1347,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/ColorValidator.cs",
    "chars": 512,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CustomerValidator.cs",
    "chars": 626,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/RentalValidator.cs",
    "chars": 774,
    "preview": "using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusi"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/UserValidator.cs",
    "chars": 841,
    "preview": "using Core.Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq"
  },
  {
    "path": "Business/app.config",
    "chars": 3967,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-co"
  },
  {
    "path": "Business/packages.config",
    "chars": 2289,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"6.1.0\" targetFramework=\"net472\" />\n "
  },
  {
    "path": "CarRentalQuery1.sql",
    "chars": 2632,
    "preview": "CREATE TABLE [dbo].[Colors] (\n    [Id]        INT          IDENTITY (1, 1) NOT NULL,\n    [ColorName] VARCHAR (20) NULL,"
  },
  {
    "path": "ConsoleUI/ConsoleUI.csproj",
    "chars": 263,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.1"
  },
  {
    "path": "ConsoleUI/Program.cs",
    "chars": 1450,
    "preview": "using Business.Concrete;\nusing DataAccess.Concrete.EntityFramework;\nusing DataAccess.Concrete.InMemory;\nusing Entities."
  },
  {
    "path": "Core/Aspect/Autofac/Caching/CacheAspect.cs",
    "chars": 1259,
    "preview": "using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Caching;\nusing Core.Utilities.Interceptors;\nusing Core.Utili"
  },
  {
    "path": "Core/Aspect/Autofac/Caching/CacheRemoveAspect.cs",
    "chars": 759,
    "preview": "using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Caching;\nusing Core.Utilities.Interceptors;\nusing Core.Utili"
  },
  {
    "path": "Core/Aspect/Autofac/Performance/PerformanceAspect.cs",
    "chars": 1072,
    "preview": "using Core.Utilities.Interceptors;\nusing Core.Utilities.IoC;\nusing System;\nusing System.Collections.Generic;\nusing Syst"
  },
  {
    "path": "Core/Aspect/Autofac/Transaction/TransactionScopeAspect.cs",
    "chars": 766,
    "preview": "using Castle.DynamicProxy;\nusing Core.Utilities.Interceptors;\nusing System;\nusing System.Collections.Generic;\nusing Sys"
  },
  {
    "path": "Core/Aspect/Autofac/Validation/ValidationAspect.cs",
    "chars": 1123,
    "preview": "using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Interceptors;\nusing FluentV"
  },
  {
    "path": "Core/Core.csproj",
    "chars": 1048,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyG"
  },
  {
    "path": "Core/CrossCuttingConcerns/Caching/ICacheManager.cs",
    "chars": 395,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.CrossCuttingConcerns.Caching\n{\n    p"
  },
  {
    "path": "Core/CrossCuttingConcerns/Caching/Microsoft/MemoryCacheManager.cs",
    "chars": 2192,
    "preview": "using Core.Utilities.IoC;\nusing Microsoft.Extensions.Caching.Memory;\nusing System;\nusing System.Collections.Generic;\nus"
  },
  {
    "path": "Core/CrossCuttingConcerns/Validation/ValidationTool.cs",
    "chars": 532,
    "preview": "using FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.CrossCutting"
  },
  {
    "path": "Core/DataAccess/EntityFramework/EfEntityRepositoryBase.cs",
    "chars": 1895,
    "preview": "using Core.Entities;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System."
  },
  {
    "path": "Core/DataAccess/IEntityRepository.cs",
    "chars": 484,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\n"
  },
  {
    "path": "Core/DependencyResolvers/CoreModule.cs",
    "chars": 747,
    "preview": "using Core.CrossCuttingConcerns.Caching;\nusing Core.CrossCuttingConcerns.Caching.Microsoft;\nusing Core.Utilities.IoC;\nu"
  },
  {
    "path": "Core/Entities/Concrete/OperationClaim.cs",
    "chars": 235,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities.Concrete\n{\n    public class"
  },
  {
    "path": "Core/Entities/Concrete/User.cs",
    "chars": 549,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "Core/Entities/Concrete/UserOperationClaim.cs",
    "chars": 288,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities.Concrete\n{\n    public class"
  },
  {
    "path": "Core/Entities/IDto.cs",
    "chars": 135,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities\n{\n    public interface IDto"
  },
  {
    "path": "Core/Entities/IEntity.cs",
    "chars": 188,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "Core/Extensions/ClaimExtensions.cs",
    "chars": 973,
    "preview": "using Microsoft.IdentityModel.JsonWebTokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing S"
  },
  {
    "path": "Core/Extensions/ClaimsPrincipalExtensions.cs",
    "chars": 581,
    "preview": "using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\n\nnamespace Core.Extensions\n{\n    pub"
  },
  {
    "path": "Core/Extensions/ErrorDetails.cs",
    "chars": 498,
    "preview": "using FluentValidation.Results;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace Core.Extensions\n{\n "
  },
  {
    "path": "Core/Extensions/ExceptionMiddleware.cs",
    "chars": 1780,
    "preview": "using FluentValidation;\nusing FluentValidation.Results;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Col"
  },
  {
    "path": "Core/Extensions/ExceptionMiddlewareExtensions.cs",
    "chars": 367,
    "preview": "using Microsoft.AspNetCore.Builder;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core."
  },
  {
    "path": "Core/Extensions/ServiceCollectionExtensions.cs",
    "chars": 568,
    "preview": "using Core.Utilities.IoC;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generi"
  },
  {
    "path": "Core/Utilities/Business/BusinessRules.cs",
    "chars": 461,
    "preview": "using Core.Utilities.Results;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilit"
  },
  {
    "path": "Core/Utilities/FileHelper/FileHelper.cs",
    "chars": 2079,
    "preview": "using Core.Utilities.Results;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.IO;\n\nnamespace Core.Utilities"
  },
  {
    "path": "Core/Utilities/Interceptors/AspectInterceptorSelector.cs",
    "chars": 879,
    "preview": "using Castle.DynamicProxy;\nusing Core.Aspect.Autofac.Performance;\nusing System;\nusing System.Collections.Generic;\nusing"
  },
  {
    "path": "Core/Utilities/Interceptors/MethodInterception.cs",
    "chars": 1110,
    "preview": "using Castle.DynamicProxy;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities"
  },
  {
    "path": "Core/Utilities/Interceptors/MethodInterceptionBaseAttribute.cs",
    "chars": 447,
    "preview": "using Castle.DynamicProxy;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities"
  },
  {
    "path": "Core/Utilities/IoC/ICoreModule.cs",
    "chars": 252,
    "preview": "using Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "Core/Utilities/IoC/ServiceTool.cs",
    "chars": 465,
    "preview": "using Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "Core/Utilities/Results/DataResult.cs",
    "chars": 449,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Results/ErrorDataResult.cs",
    "chars": 523,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Results/ErrorResult.cs",
    "chars": 300,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Results/IDataResult.cs",
    "chars": 186,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public inter"
  },
  {
    "path": "Core/Utilities/Results/IResult.cs",
    "chars": 209,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public inter"
  },
  {
    "path": "Core/Utilities/Results/Result.cs",
    "chars": 433,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Results/SuccessDataResult.cs",
    "chars": 522,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Results/SuccessResult.cs",
    "chars": 305,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class"
  },
  {
    "path": "Core/Utilities/Security/Encryption/SecurityKeyHelper.cs",
    "chars": 377,
    "preview": "using Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Cor"
  },
  {
    "path": "Core/Utilities/Security/Encryption/SigningCredentialsHelper.cs",
    "chars": 417,
    "preview": "using Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Cor"
  },
  {
    "path": "Core/Utilities/Security/Hashing/HashingHelper.cs",
    "chars": 1121,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Hashing\n{\n    pub"
  },
  {
    "path": "Core/Utilities/Security/Jwt/AccessToken.cs",
    "chars": 243,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Jwt\n{\n    public "
  },
  {
    "path": "Core/Utilities/Security/Jwt/ITokenHelper.cs",
    "chars": 269,
    "preview": "using Core.Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilit"
  },
  {
    "path": "Core/Utilities/Security/Jwt/JwtHelper.cs",
    "chars": 2523,
    "preview": "using Core.Entities.Concrete;\nusing Core.Utilities.Security.Encryption;\nusing Microsoft.Extensions.Configuration;\nusing"
  },
  {
    "path": "Core/Utilities/Security/Jwt/TokenOptions.cs",
    "chars": 276,
    "preview": "namespace Core.Utilities.Security.Jwt\n{\n    public class TokenOptions\n    {\n        public string Audience { get; set; "
  },
  {
    "path": "DataAccess/Abstract/IBrandDal.cs",
    "chars": 219,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "DataAccess/Abstract/ICarDal.cs",
    "chars": 329,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nus"
  },
  {
    "path": "DataAccess/Abstract/ICarImageDal.cs",
    "chars": 226,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "DataAccess/Abstract/ICartDal.cs",
    "chars": 219,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "DataAccess/Abstract/IColorDal.cs",
    "chars": 220,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "DataAccess/Abstract/ICustomerDal.cs",
    "chars": 300,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nus"
  },
  {
    "path": "DataAccess/Abstract/IPaymentDal.cs",
    "chars": 224,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnam"
  },
  {
    "path": "DataAccess/Abstract/IRentalDal.cs",
    "chars": 292,
    "preview": "using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nus"
  },
  {
    "path": "DataAccess/Abstract/IUserDal.cs",
    "chars": 273,
    "preview": "using Core.DataAccess;\nusing Core.Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/CarRentalContext.cs",
    "chars": 1149,
    "preview": "using Core.Entities.Concrete;\nusing Entities.Concrete;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System."
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfBrandDal.cs",
    "chars": 406,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Microsoft.EntityFramew"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCarDal.cs",
    "chars": 1122,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing M"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCarImageDal.cs",
    "chars": 317,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.C"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCartDal.cs",
    "chars": 308,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.C"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfColorDal.cs",
    "chars": 405,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Microsoft.EntityFramew"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCustomerDal.cs",
    "chars": 1136,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing S"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfPaymentDal.cs",
    "chars": 317,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.C"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfRentalDal.cs",
    "chars": 1787,
    "preview": "using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing S"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfUserDal.cs",
    "chars": 974,
    "preview": "using Core.DataAccess.EntityFramework;\nusing Core.Entities.Concrete;\nusing DataAccess.Abstract;\nusing System;\nusing Sys"
  },
  {
    "path": "DataAccess/Concrete/InMemory/InMemoryCarDal.cs",
    "chars": 2120,
    "preview": "using DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic"
  },
  {
    "path": "DataAccess/DataAccess.csproj",
    "chars": 408,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyG"
  },
  {
    "path": "Entities/Concrete/Brand.cs",
    "chars": 296,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Car.cs",
    "chars": 521,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/CarImage.cs",
    "chars": 460,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Cart.cs",
    "chars": 475,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Color.cs",
    "chars": 296,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Customer.cs",
    "chars": 343,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Payment.cs",
    "chars": 620,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Concrete/Rental.cs",
    "chars": 430,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/DTOs/CarDetailDto.cs",
    "chars": 524,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/DTOs/CustomerDetailDto.cs",
    "chars": 480,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/DTOs/RentalDetailDto.cs",
    "chars": 663,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/DTOs/UserForLoginDto.cs",
    "chars": 304,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/DTOs/UserForRegisterDto.cs",
    "chars": 398,
    "preview": "using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System"
  },
  {
    "path": "Entities/Entities.csproj",
    "chars": 3023,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "Entities/Properties/AssemblyInfo.cs",
    "chars": 1450,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// Bir bütünleşt"
  },
  {
    "path": "Entities/app.config",
    "chars": 680,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-co"
  },
  {
    "path": "README.md",
    "chars": 1346,
    "preview": "## Welcome to My Car Rental Project\n\n### The project was developed in accordance with SOLID principles, corporate softwa"
  },
  {
    "path": "ReCapProject.sln",
    "chars": 3454,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3100"
  },
  {
    "path": "WebAPI/.config/dotnet-tools.json",
    "chars": 153,
    "preview": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-ef\": {\n      \"version\": \"5.0.4\",\n      \"commands\": [\n      "
  },
  {
    "path": "WebAPI/Controllers/AuthController.cs",
    "chars": 1650,
    "preview": "using Business.Abstract;\nusing Entities.DTOs;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing Sy"
  },
  {
    "path": "WebAPI/Controllers/BrandsController.cs",
    "chars": 1920,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/CarImagesController.cs",
    "chars": 3283,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\n"
  },
  {
    "path": "WebAPI/Controllers/CarsController.cs",
    "chars": 4399,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/CartsController.cs",
    "chars": 1052,
    "preview": "using Business.Abstract;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Co"
  },
  {
    "path": "WebAPI/Controllers/ColorsController.cs",
    "chars": 1921,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/CustomersController.cs",
    "chars": 2584,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/PaysController.cs",
    "chars": 816,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/RentalsController.cs",
    "chars": 2957,
    "preview": "using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusin"
  },
  {
    "path": "WebAPI/Controllers/UsersController.cs",
    "chars": 1904,
    "preview": "using Business.Abstract;\nusing Core.Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;"
  },
  {
    "path": "WebAPI/Controllers/WeatherForecastController.cs",
    "chars": 1138,
    "preview": "using Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusi"
  },
  {
    "path": "WebAPI/Program.cs",
    "chars": 996,
    "preview": "using Autofac;\nusing Autofac.Extensions.DependencyInjection;\nusing Business.DependencyResolvers.Autofac;\nusing Microsoft"
  },
  {
    "path": "WebAPI/Properties/launchSettings.json",
    "chars": 784,
    "preview": "{\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"iisSettings\": {\n    \"windowsAuthentication\": false"
  },
  {
    "path": "WebAPI/Startup.cs",
    "chars": 3839,
    "preview": "using Business.Abstract;\nusing Business.Concrete;\nusing Core.DependencyResolvers;\nusing Core.Extensions;\nusing Core.Util"
  },
  {
    "path": "WebAPI/WeatherForecast.cs",
    "chars": 287,
    "preview": "using System;\n\nnamespace WebAPI\n{\n    public class WeatherForecast\n    {\n        public DateTime Date { get; set; }\n\n   "
  },
  {
    "path": "WebAPI/WebAPI.csproj",
    "chars": 740,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </Proper"
  },
  {
    "path": "WebAPI/appsettings.Development.json",
    "chars": 159,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hostin"
  },
  {
    "path": "WebAPI/appsettings.json",
    "chars": 358,
    "preview": "{\n  \"TokenOptions\": {\n    \"Audience\": \"ugur@ugur.com\",\n    \"Issuer\": \"ugur@ugur.com\",\n    \"AccessTokenExpiration\": 10,\n "
  }
]

About this extraction

This page contains the full source code of the ugurkryl41/ReCapProject GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 142 files (158.8 KB), approximately 40.2k tokens, and a symbol index with 461 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!