[
  {
    "path": ".gitattributes",
    "content": "###############################################################################\n# Set default behavior to automatically normalize line endings.\n###############################################################################\n* text=auto\n\n###############################################################################\n# Set default behavior for command prompt diff.\n#\n# This is need for earlier builds of msysgit that does not have it on by\n# default for csharp files.\n# Note: This is only used by command line\n###############################################################################\n#*.cs     diff=csharp\n\n###############################################################################\n# Set the merge driver for project and solution files\n#\n# Merging from the command prompt will add diff markers to the files if there\n# are conflicts (Merging from VS is not affected by the settings below, in VS\n# the diff markers are never inserted). Diff markers may cause the following \n# file extensions to fail to load in VS. An alternative would be to treat\n# these files as binary and thus will always conflict and require user\n# intervention with every merge. To do so, just uncomment the entries below\n###############################################################################\n#*.sln       merge=binary\n#*.csproj    merge=binary\n#*.vbproj    merge=binary\n#*.vcxproj   merge=binary\n#*.vcproj    merge=binary\n#*.dbproj    merge=binary\n#*.fsproj    merge=binary\n#*.lsproj    merge=binary\n#*.wixproj   merge=binary\n#*.modelproj merge=binary\n#*.sqlproj   merge=binary\n#*.wwaproj   merge=binary\n\n###############################################################################\n# behavior for image files\n#\n# image files are treated as binary by default.\n###############################################################################\n#*.jpg   binary\n#*.png   binary\n#*.gif   binary\n\n###############################################################################\n# diff behavior for common document formats\n# \n# Convert binary document formats to text before diffing them. This feature\n# is only available from the command line. Turn it on by uncommenting the \n# entries below.\n###############################################################################\n#*.doc   diff=astextplain\n#*.DOC   diff=astextplain\n#*.docx  diff=astextplain\n#*.DOCX  diff=astextplain\n#*.dot   diff=astextplain\n#*.DOT   diff=astextplain\n#*.pdf   diff=astextplain\n#*.PDF   diff=astextplain\n#*.rtf   diff=astextplain\n#*.RTF   diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.rsuser\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\n[Aa][Rr][Mm]/\n[Aa][Rr][Mm]64/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_h.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*_wpftmp.csproj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!?*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk\n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n*- Backup*.rdl\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush personal settings\n.cr/personal\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output\nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder\n.mfractor/\n\n# Local History for Visual Studio\n.localhistory/\n\n# BeatPulse healthcheck temp database\nhealthchecksdb"
  },
  {
    "path": "Business/Abstract/IAuthService.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing Core.Utilities.Security.Jwt;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IAuthService\n    {\n        IDataResult<User> Register(UserForRegisterDto userForRegisterDto);\n        IDataResult<User> Login(UserForLoginDto userForLoginDto);\n        IResult UserExists(string email);\n        IDataResult<AccessToken> CreateAccessToken(User user);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/IBrandService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IBrandService\n    {\n        IDataResult<List<Brand>> GetAll();\n        IDataResult<Brand> Get(int id);\n        IResult Add(Brand brand);\n        IResult Update(Brand brand);\n        IResult Delete(Brand brand);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/ICarImageService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface ICarImageService\n    {\n        IDataResult<List<CarImage>> GetAll();\n        IDataResult<CarImage> Get(int id);\n        IResult Add(CarImage carImage,IFormFile file);\n        IResult Update(CarImage carImage, IFormFile file);\n        IResult Delete(CarImage carImage);\n        IDataResult<List<CarImage>> GetImagesByCarId(int id);\n        IResult TransactionalOperation(CarImage carImage, IFormFile file);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/ICarService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface ICarService\n    {\n        IDataResult<List<Car>> GetAll();\n        IDataResult<Car> Get(int id);\n\n        IResult Add(Car car);\n        IResult Update(Car car);\n        IResult Delete(Car car);\n\n        IDataResult<CarDetailDto> GetCarDetail(int id);\n\n        IDataResult<List<Car>> GetCarsByBrandId(int id);\n        IDataResult<List<Car>> GetCarsByColorId(int id);\n\n        IDataResult<List<CarDetailDto>> GetCarDetails();\n        IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int brandid,int colorid);\n        IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id);\n        IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id);\n        IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/ICartService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface ICartService\n    {\n        IDataResult<List<Cart>> GetAll();\n        IDataResult<Cart> Get(int id);\n\n        IResult Add(Cart cart);\n        IResult Update(Cart cart);\n        IResult Delete(Cart cart);\n\n        IDataResult<List<Cart>> GetAllByCustomerId(int customerId);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/IColorService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IColorService\n    {\n        IDataResult<List<Color>> GetAll();\n        IDataResult<Color> Get(int id);\n        IResult Add(Color color);\n        IResult Update(Color color);\n        IResult Delete(Color color);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/ICustomerService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface ICustomerService\n    {\n        IDataResult<List<Customer>> GetAll();\n        IDataResult<Customer> Get(int id);\n        IDataResult<Customer> GetbyUser(int id);\n        IResult Add(Customer customer);\n        IResult Delete(Customer customer);\n        IResult Update(Customer customer);\n        IDataResult<List<CustomerDetailDto>> GetCustomerDetails();\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/IPaymentService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IPaymentService\n    {\n        IResult Add(Payment payment);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/IRentalService.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IRentalService\n    {\n        IDataResult<List<Rental>> GetAll();\n        IDataResult<Rental> Get(int id);\n        IResult Add(Rental rental);\n        IResult Delete(Rental rental);\n        IResult Update(Rental rental);\n        IResult DateCheck(Rental rental);\n        IDataResult<List<RentalDetailDto>> GetRentalDetails();\n        IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int carId);\n    }\n}\n"
  },
  {
    "path": "Business/Abstract/IUserService.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Abstract\n{\n    public interface IUserService\n    {\n        IDataResult<List<User>> GetAll();\n        IDataResult<User> Get(int id);\n        IResult Add(User user);\n        IResult Delete(User user);\n        IResult Update(User user);\n        IDataResult<List<OperationClaim>> GetClaims(User user);\n        IDataResult<User> GetByMail(string email);\n    }\n}\n"
  },
  {
    "path": "Business/Business.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{710A9967-AB8D-42BF-ACC4-51E19AD024F1}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Business</RootNamespace>\n    <AssemblyName>Business</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Autofac, Version=6.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Autofac.6.1.0\\lib\\netstandard2.0\\Autofac.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Autofac.Extensions.DependencyInjection, Version=7.1.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Autofac.Extensions.DependencyInjection.7.1.0\\lib\\netstandard2.0\\Autofac.Extensions.DependencyInjection.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Autofac.Extras.DynamicProxy, Version=6.0.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Autofac.Extras.DynamicProxy.6.0.0\\lib\\netstandard2.0\\Autofac.Extras.DynamicProxy.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Castle.Core.4.4.0\\lib\\net45\\Castle.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"FluentValidation, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\FluentValidation.9.5.1\\lib\\net461\\FluentValidation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNetCore.Http, Version=2.2.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNetCore.Http.2.2.2\\lib\\netstandard2.0\\Microsoft.AspNetCore.Http.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNetCore.Http.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNetCore.Http.Abstractions.2.2.0\\lib\\netstandard2.0\\Microsoft.AspNetCore.Http.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNetCore.Http.Features, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNetCore.Http.Features.5.0.0\\lib\\net461\\Microsoft.AspNetCore.Http.Features.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.AspNetCore.WebUtilities, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.AspNetCore.WebUtilities.2.2.0\\lib\\netstandard2.0\\Microsoft.AspNetCore.WebUtilities.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Bcl.AsyncInterfaces.1.1.1\\lib\\net461\\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection, Version=3.1.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Extensions.DependencyInjection.3.1.12\\lib\\net461\\Microsoft.Extensions.DependencyInjection.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.12.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.12\\lib\\netstandard2.0\\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.ObjectPool, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Extensions.ObjectPool.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.ObjectPool.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Options, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Extensions.Options.2.2.0\\lib\\netstandard2.0\\Microsoft.Extensions.Options.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Extensions.Primitives, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Extensions.Primitives.5.0.0\\lib\\net461\\Microsoft.Extensions.Primitives.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\Microsoft.Net.Http.Headers.2.2.0\\lib\\netstandard2.0\\Microsoft.Net.Http.Headers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Buffers.4.5.1\\lib\\net461\\System.Buffers.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.ComponentModel.Annotations.4.5.0\\lib\\net461\\System.ComponentModel.Annotations.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.ComponentModel.Composition\" />\n    <Reference Include=\"System.ComponentModel.DataAnnotations\" />\n    <Reference Include=\"System.Configuration\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Diagnostics.DiagnosticSource, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Diagnostics.DiagnosticSource.4.7.1\\lib\\net46\\System.Diagnostics.DiagnosticSource.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.IO.Pipelines, Version=5.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.IO.Pipelines.5.0.1\\lib\\net461\\System.IO.Pipelines.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Memory.4.5.4\\lib\\net461\\System.Memory.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Numerics.Vectors.4.5.0\\lib\\net46\\System.Numerics.Vectors.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.CompilerServices.Unsafe, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Runtime.CompilerServices.Unsafe.5.0.0\\lib\\net45\\System.Runtime.CompilerServices.Unsafe.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Text.Encodings.Web, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Text.Encodings.Web.4.5.0\\lib\\netstandard2.0\\System.Text.Encodings.Web.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL\">\n      <HintPath>..\\packages\\System.Threading.Tasks.Extensions.4.5.4\\lib\\net461\\System.Threading.Tasks.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Abstract\\IAuthService.cs\" />\n    <Compile Include=\"Abstract\\IBrandService.cs\" />\n    <Compile Include=\"Abstract\\ICarImageService.cs\" />\n    <Compile Include=\"Abstract\\ICarService.cs\" />\n    <Compile Include=\"Abstract\\ICartService.cs\" />\n    <Compile Include=\"Abstract\\IColorService.cs\" />\n    <Compile Include=\"Abstract\\ICustomerService.cs\" />\n    <Compile Include=\"Abstract\\IPaymentService.cs\" />\n    <Compile Include=\"Abstract\\IRentalService.cs\" />\n    <Compile Include=\"Abstract\\IUserService.cs\" />\n    <Compile Include=\"BusinessAspects\\Autofac\\SecuredOperation.cs\" />\n    <Compile Include=\"Concrete\\AuthManager.cs\" />\n    <Compile Include=\"Concrete\\BrandManager.cs\" />\n    <Compile Include=\"Concrete\\CarImageManager.cs\" />\n    <Compile Include=\"Concrete\\CarManager.cs\" />\n    <Compile Include=\"Concrete\\CartManager.cs\" />\n    <Compile Include=\"Concrete\\ColorManager.cs\" />\n    <Compile Include=\"Concrete\\CustomerManager.cs\" />\n    <Compile Include=\"Concrete\\PaymentManager.cs\" />\n    <Compile Include=\"Concrete\\RentalManager.cs\" />\n    <Compile Include=\"Concrete\\UserManager.cs\" />\n    <Compile Include=\"Constants\\Messages.cs\" />\n    <Compile Include=\"DependencyResolvers\\Autofac\\AutofacBusinessModule.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\BrandValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\CarImageValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\CarValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\ColorValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\CustomerValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\RentalValidator.cs\" />\n    <Compile Include=\"ValidationRules\\FluentValidation\\UserValidator.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"packages.config\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\n      <Project>{185e58ed-316c-45f6-8472-03592bb71a21}</Project>\n      <Name>Core</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\DataAccess\\DataAccess.csproj\">\n      <Project>{dfa505e2-14b4-462a-8dda-09eeffad1018}</Project>\n      <Name>DataAccess</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Entities\\Entities.csproj\">\n      <Project>{d8f5692b-bd1d-47cf-8b64-45317038c94e}</Project>\n      <Name>Entities</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Business/BusinessAspects/Autofac/SecuredOperation.cs",
    "content": "﻿using Business.Constants;\nusing Castle.DynamicProxy;\nusing Core.Utilities.Interceptors;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Microsoft.Extensions.DependencyInjection;\nusing Core.Extensions;\nusing Core.Utilities.IoC;\n\nnamespace Business.BusinessAspects.Autofac\n{\n    public class SecuredOperation:MethodInterception\n    {\n        private string[] _roles;\n        private IHttpContextAccessor _httpContextAccessor;\n\n        public SecuredOperation(string roles)\n        {\n            _roles = roles.Split(',');\n            _httpContextAccessor = ServiceTool.ServiceProvider.GetService<IHttpContextAccessor>();\n\n        }\n\n        protected override void OnBefore(IInvocation invocation)\n        {\n            var roleClaims = _httpContextAccessor.HttpContext.User.ClaimRoles();\n            foreach (var role in _roles)\n            {\n                if (roleClaims.Contains(role))\n                {\n                    return;\n                }\n            }\n            throw new Exception(Messages.AuthorizationDenied);\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/AuthManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.Constants;\nusing Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing Core.Utilities.Security.Hashing;\nusing Core.Utilities.Security.Jwt;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class AuthManager : IAuthService\n    {\n        private IUserService _userService;\n        private ITokenHelper _tokenHelper;\n\n        public AuthManager(IUserService userService, ITokenHelper tokenHelper)\n        {\n            _userService = userService;\n            _tokenHelper = tokenHelper;\n        }\n\n        public IDataResult<AccessToken> CreateAccessToken(User user)\n        {\n            var claims = _userService.GetClaims(user).Data;\n            var accessToken = _tokenHelper.CreateToken(user, claims);\n            return new SuccessDataResult<AccessToken>(accessToken, Messages.AccessTokenCreated);\n        }\n\n        public IDataResult<User> Login(UserForLoginDto userForLoginDto)\n        {\n            var userToCheck = _userService.GetByMail(userForLoginDto.Email).Data;\n            if (userToCheck == null)\n            {\n                return new ErrorDataResult<User>(\"Kullanıcı yok\");\n            }\n\n            if (!HashingHelper.VerifyPasswordHash(userForLoginDto.Password, userToCheck.PasswordHash, userToCheck.PasswordSalt))\n            {\n                return new ErrorDataResult<User>(\"Parola hatası\");\n            }\n\n            return new SuccessDataResult<User>(userToCheck, Messages.SuccessfulLogin);\n        }\n\n        public IDataResult<User> Register(UserForRegisterDto userForRegisterDto)\n        {\n            byte[] passwordHash, passwordSalt;\n            HashingHelper.CreatePasswordHash(userForRegisterDto.Password, out passwordHash, out passwordSalt);\n            var user = new User\n            {\n                Email = userForRegisterDto.Email,\n                FirstName = userForRegisterDto.FirstName,\n                LastName = userForRegisterDto.LastName,\n                PasswordHash = passwordHash,\n                PasswordSalt = passwordSalt,\n                Status = true,\n                Findeks = 200,\n            };\n            _userService.Add(user);\n            return new SuccessDataResult<User>(user, Messages.UserRegistered);\n        }\n\n        public IResult UserExists(string email)\n        {\n            if (_userService.GetByMail(email).Data != null)\n            {\n                return new ErrorResult(Messages.UserAlreadyExists);\n            }\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/BrandManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class BrandManager : IBrandService\n    {\n        IBrandDal _brandDal;\n\n        public BrandManager(IBrandDal brandDal)\n        {\n            _brandDal = brandDal;\n        }\n\n        [SecuredOperation(\"brand.add,Admin\", Priority = 1)]\n        [ValidationAspect(typeof(BrandValidator))]\n        public IResult Add(Brand brand)\n        {\n            _brandDal.Add(brand);\n            return new SuccessResult();\n        }\n\n        [SecuredOperation(\"brand.delete,Admin\", Priority = 1)]\n        public IResult Delete(Brand brand)\n        {\n            _brandDal.Delete(brand);\n            return new SuccessResult();\n        }\n\n        \n        public IDataResult<Brand> Get(int Id)\n        {\n            return new SuccessDataResult<Brand>( _brandDal.Get(p=>p.Id == Id));\n        }\n\n        public IDataResult<List<Brand>> GetAll()\n        {\n            return new SuccessDataResult<List<Brand>>(_brandDal.GetAll());\n        }\n\n        [SecuredOperation(\"brand.update,Admin\", Priority = 1)]\n        [ValidationAspect(typeof(BrandValidator))]\n        public IResult Update(Brand brand)\n        {\n            _brandDal.Update(brand);\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/CarImageManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Caching;\nusing Core.Aspect.Autofac.Performance;\nusing Core.Aspect.Autofac.Transaction;\nusing Core.Aspect.Autofac.Validation;\nusing Core.Utilities.Business;\nusing Core.Utilities.FileHelper;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\n\nnamespace Business.Concrete\n{\n    public class CarImageManager : ICarImageService\n    {\n        ICarImageDal _carImageDal;\n\n        public CarImageManager(ICarImageDal carImageDal)\n        {\n            _carImageDal = carImageDal;\n        }\n\n        [SecuredOperation(\"carimages.add,Admin\", Priority = 1)]\n        [ValidationAspect(typeof(CarImageValidator))]\n        [CacheRemoveAspect(\"ICarImageService.Get\")]\n        public IResult Add(CarImage carImage, IFormFile file)\n        {\n            IResult result = BusinessRules.Run(\n                CheckIfImageLimit(carImage.CarId)\n                );\n\n            if (result != null)\n            {\n                return result;\n            }\n\n            carImage.ImagePath = FileHelper.AddAsync(file);\n            _carImageDal.Add(carImage);\n            return new SuccessResult();\n        }\n\n        [SecuredOperation(\"carimages.update\", Priority = 1)]\n        [ValidationAspect(typeof(CarImageValidator))]\n        [CacheRemoveAspect(\"ICarImageService.Get\")]\n        public IResult Update(CarImage carImage, IFormFile file)\n        {\n            var oldpath = $@\"{Environment.CurrentDirectory}\\wwwroot{_carImageDal.Get(p => p.Id == carImage.Id).ImagePath}\";\n            carImage.ImagePath = FileHelper.UpdateAsync(oldpath, file);\n\n            _carImageDal.Update(carImage);\n            return new SuccessResult();\n        }\n\n        [SecuredOperation(\"carimages.delete\", Priority = 1)]\n        [CacheRemoveAspect(\"ICarImageService.Get\")]\n        public IResult Delete(CarImage carImage)\n        {\n            var oldpath = $@\"{Environment.CurrentDirectory}\\wwwroot{_carImageDal.Get(p => p.Id == carImage.Id).ImagePath}\";\n            FileHelper.DeleteAsync(oldpath);\n\n            _carImageDal.Delete(carImage);\n            return new SuccessResult();\n        }\n\n        public IDataResult<CarImage> Get(int Id)\n        {\n            return new SuccessDataResult<CarImage>(_carImageDal.Get(p => p.Id == Id));\n        }\n\n       [PerformanceAspect(5)]\n        public IDataResult<List<CarImage>> GetAll()\n        {\n            //Thread.Sleep(6000);\n            return new SuccessDataResult<List<CarImage>>(_carImageDal.GetAll());\n        }\n\n        [CacheAspect(duration: 10)]\n        public IDataResult<List<CarImage>> GetImagesByCarId(int CarId)\n        {\n            var result = _carImageDal.GetAll(c => c.CarId == CarId).Any();\n            if (!result)\n            {\n                List<CarImage> carimage = new List<CarImage>();\n                carimage.Add(new CarImage { CarId = CarId, ImagePath = @\"\\Images\\default1.jpg\" });\n                return new SuccessDataResult<List<CarImage>>(carimage);\n            }\n            return new SuccessDataResult<List<CarImage>>(_carImageDal.GetAll(p => p.CarId == CarId));\n        }\n\n        private IResult CheckIfImageLimit(int CarId)\n        {\n            var carImagecount = _carImageDal.GetAll(p => p.CarId == CarId).Count;\n            if (carImagecount >= 5)\n            {\n                return new ErrorResult(Messages.FailAddedImageLimit);\n            }\n\n            return new SuccessResult();\n        }\n\n        [TransactionScopeAspect]\n        public IResult TransactionalOperation(CarImage carImage, IFormFile file)\n        {\n            Add(carImage, file);\n            Update(carImage, file);\n\n            return new SuccessResult(Messages.CarImageUpdated);\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/CarManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class CarManager : ICarService\n    {\n        ICarDal _carDal;\n        IBrandDal _brandDal;\n        IColorDal _colorDal;\n\n        public CarManager(ICarDal carDal, IBrandDal brandDal, IColorDal colorDal)\n        {\n            _carDal = carDal;\n            _brandDal = brandDal;\n            _colorDal = colorDal;\n        }\n\n        [SecuredOperation(\"car.add\", Priority = 1)]\n        [ValidationAspect(typeof(CarValidator))]\n        public IResult Add(Car car)\n        {\n            _carDal.Add(car);\n            return new SuccessResult(Messages.CarAdded);\n        }\n\n        [SecuredOperation(\"car.delete\", Priority = 1)]\n        public IResult Delete(Car car)\n        {\n            _carDal.Delete(car);\n            return new SuccessResult(Messages.CarDeleted);\n        }\n\n        [SecuredOperation(\"car.update\", Priority = 1)]\n        [ValidationAspect(typeof(CarValidator))]\n        public IResult Update(Car car)\n        {\n            _carDal.Update(car);\n            return new SuccessResult(Messages.CarUpdated);\n        }\n\n\n        public IDataResult<Car> Get(int Id)\n        {\n            return new SuccessDataResult<Car>(_carDal.Get(p => p.Id == Id));\n        }\n\n        public IDataResult<List<Car>> GetAll()\n        {\n            return new SuccessDataResult<List<Car>>(_carDal.GetAll());\n        }\n\n\n        public IDataResult<List<Car>> GetCarsByBrandId(int Id)\n        {\n            return new SuccessDataResult<List<Car>>(_carDal.GetAll(p => p.BrandId == Id));\n        }\n\n\n        public IDataResult<List<Car>> GetCarsByColorId(int Id)\n        {\n            return new SuccessDataResult<List<Car>>(_carDal.GetAll(p => p.ColorId == Id));\n        }\n\n        public IDataResult<List<CarDetailDto>> GetCarDetails()\n        {\n            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails());\n        }\n\n        public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandId(int id)\n        {\n            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.BrandName == _brandDal.Get(t => t.Id == id).BrandName).ToList());\n        }\n\n        public IDataResult<List<CarDetailDto>> GetCarDetailsByColorId(int id)\n        {\n            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.ColorName == _colorDal.Get(t => t.Id == id).ColorName).ToList());\n        }\n\n        public IDataResult<List<CarDetailDto>> GetCarDetailsByCarId(int id)\n        {\n            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails().Where(p => p.Id == id).ToList());\n        }\n\n        public IDataResult<List<CarDetailDto>> GetCarDetailsByBrandColor(int brandid, int colorid)\n        {\n            return new SuccessDataResult<List<CarDetailDto>>(_carDal.GetCarDetails()\n                .Where(p => p.BrandName == _brandDal.Get(t => t.Id == brandid).BrandName)\n                .Where(k => k.ColorName == _colorDal.Get(s => s.Id == colorid).ColorName).ToList());\n        }\n\n        public IDataResult<CarDetailDto> GetCarDetail(int id)\n        {\n            return new SuccessDataResult<CarDetailDto>(_carDal.GetCarDetails().Where(p => p.Id == id).ToList().First());          \n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/CartManager.cs",
    "content": "﻿using Business.Abstract;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class CartManager : ICartService\n    {\n        ICartDal _cartDal;\n\n        public CartManager(ICartDal cartDal)\n        {\n            _cartDal = cartDal;\n        }\n\n        public IResult Add(Cart cart)\n        {\n            _cartDal.Add(cart);\n            return new SuccessResult(\"Kart Ekleme Başarılı..\");\n        }\n\n        public IResult Delete(Cart cart)\n        {\n            _cartDal.Delete(cart);\n            return new SuccessResult(\"Kart Silme Başarılı..\");\n        }\n\n        public IDataResult<Cart> Get(int id)\n        {\n            var result = _cartDal.Get(p => p.Id == id);\n            return new SuccessDataResult<Cart>(result);\n        }\n\n        public IDataResult<List<Cart>> GetAll()\n        {\n           \n            return new SuccessDataResult<List<Cart>>(_cartDal.GetAll().ToList());\n        }\n\n        public IDataResult<List<Cart>> GetAllByCustomerId(int customerId)\n        {\n            var result = _cartDal.GetAll(p => p.CustomerId == customerId);\n            return new SuccessDataResult<List<Cart>>(result);\n        }\n\n        public IResult Update(Cart cart)\n        {\n            _cartDal.Update(cart);\n            return new SuccessResult(\"Kart Güncelleme Başarılı..\");\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/ColorManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class ColorManager : IColorService\n    {\n        IColorDal _colorDal;\n\n        public ColorManager(IColorDal colorDal)\n        {\n            _colorDal = colorDal;\n        }\n\n        [SecuredOperation(\"color.add\", Priority = 1)]\n        [ValidationAspect(typeof(ColorValidator))]\n        public IResult Add(Color color)\n        {\n            _colorDal.Add(color);\n            return new SuccessResult();\n        }\n\n        [SecuredOperation(\"color.delete\", Priority = 1)]\n        public IResult Delete(Color color)\n        {\n            _colorDal.Delete(color);\n            return new SuccessResult();\n        }\n\n       \n        public IDataResult<Color> Get(int Id)\n        {\n            return new SuccessDataResult<Color>(_colorDal.Get(p=>p.Id==Id));\n        }\n\n        public IDataResult<List<Color>> GetAll()\n        {\n            return new SuccessDataResult<List<Color>>(_colorDal.GetAll());\n        }\n\n        [SecuredOperation(\"color.update\", Priority = 1)]\n        [ValidationAspect(typeof(ColorValidator))]\n        public IResult Update(Color color)\n        {\n            _colorDal.Update(color);\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/CustomerManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class CustomerManager:ICustomerService\n    {\n        ICustomerDal _customerDal;\n\n        public CustomerManager(ICustomerDal customerDal)\n        {\n            _customerDal = customerDal;\n        }\n\n        //[SecuredOperation(\"customer.add\", Priority = 1)]\n        [ValidationAspect(typeof(CustomerValidator))]\n        public IResult Add(Customer customer)\n        {\n            \n            _customerDal.Add(customer);\n            return new SuccessResult();\n        }\n\n        //[SecuredOperation(\"customer.delete\", Priority = 1)]\n        public IResult Delete(Customer customer)\n        {\n            _customerDal.Delete(customer);\n            return new SuccessResult();\n        }\n\n        \n        public IDataResult<Customer> Get(int Id)\n        {\n            return new SuccessDataResult<Customer>(_customerDal.Get(p => p.Id == Id));\n        }\n\n        \n        public IDataResult<List<Customer>> GetAll()\n        {\n            return new SuccessDataResult<List<Customer>>(_customerDal.GetAll());\n        }\n\n        public IDataResult<Customer> GetbyUser(int id)\n        {\n            return new SuccessDataResult<Customer>(_customerDal.Get(p => p.UserId == id));\n        }\n\n        public IDataResult<List<CustomerDetailDto>> GetCustomerDetails()\n        {\n            return new SuccessDataResult<List<CustomerDetailDto>>(_customerDal.GetCustomerDetails());\n        }\n\n        //[SecuredOperation(\"customer.update\", Priority = 1)]\n        [ValidationAspect(typeof(CustomerValidator))]\n        public IResult Update(Customer customer)\n        {\n            _customerDal.Update(customer);\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/PaymentManager.cs",
    "content": "﻿using Business.Abstract;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class PaymentManager : IPaymentService\n    {\n        IPaymentDal _paymentDal;\n\n        public PaymentManager(IPaymentDal paymentDal)\n        {\n            _paymentDal = paymentDal;\n        }\n\n        public IResult Add(Payment payment)\n        {\n            _paymentDal.Add(payment);\n           return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/RentalManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.Constants;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Business;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class RentalManager : IRentalService\n    {\n        IRentalDal _rentalDal;\n        ICarDal _carDal;\n\n        public RentalManager(IRentalDal rentalDal, ICarDal carDal)\n        {\n            _rentalDal = rentalDal;\n            _carDal = carDal;\n        }\n\n        //[SecuredOperation(\"rental.add\", Priority = 1)]\n        [ValidationAspect(typeof(RentalValidator))]\n        public IResult Add(Rental rental)\n        {\n            IResult result = BusinessRules.Run(\n                CheckIfCar(rental)\n                );\n\n            if (result != null)\n            {\n                return result;\n            }\n\n            _rentalDal.Add(rental);\n            return new SuccessResult(Messages.CarRental);\n        }\n\n        public IResult DateCheck(Rental rental)\n        {\n            var result = _rentalDal.GetAll().Where(p => p.CarId == rental.CarId && p.ReturnDate > rental.ReturnDate).ToList();\n            if( result.Count != 0)\n            {\n                return new ErrorResult();\n            }\n\n          return new SuccessResult();\n        }\n\n        [SecuredOperation(\"rental.delete\", Priority = 1)]\n        public IResult Delete(Rental rental)\n        {\n            _rentalDal.Delete(rental);\n            return new SuccessResult();\n        }\n\n        public IDataResult<Rental> Get(int id)\n        {\n            return new SuccessDataResult<Rental>(_rentalDal.Get(p => p.Id == id));\n        }\n\n        public IDataResult<List<Rental>> GetAll()\n        {\n            return new SuccessDataResult<List<Rental>>(_rentalDal.GetAll());\n        }\n\n        public IDataResult<List<RentalDetailDto>> GetRentalDetails()\n        {\n            return new SuccessDataResult<List<RentalDetailDto>>(_rentalDal.GetRentalDetails());\n        }\n\n        public IDataResult<List<RentalDetailDto>> GetRentalDetailsByCarId(int carId)\n        {\n            return new SuccessDataResult<List<RentalDetailDto>>(_rentalDal.GetRentalDetails()\n                .Where(p=>p.CarId == carId).ToList());\n        }\n\n        [SecuredOperation(\"rental.update\", Priority = 1)]\n        public IResult Update(Rental rental)\n        {\n            _rentalDal.Update(rental);\n            return new SuccessResult();\n        }\n\n        private IResult CheckIfCar(Rental rental)\n        {\n            var result = _rentalDal.GetAll(p => p.CarId == rental.CarId).Where(t => rental.RentDate > t.RentDate && rental.RentDate < t.ReturnDate).ToList();\n            if (result.Count != 0)\n            {\n                return new ErrorResult(\"Araç Kullanımda\");\n            }\n\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Concrete/UserManager.cs",
    "content": "﻿using Business.Abstract;\nusing Business.BusinessAspects.Autofac;\nusing Business.ValidationRules.FluentValidation;\nusing Core.Aspect.Autofac.Validation;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Entities.Concrete;\nusing Core.Utilities.Results;\nusing DataAccess.Abstract;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Concrete\n{\n    public class UserManager : IUserService\n    {\n        IUserDal _userDal;\n\n        public UserManager(IUserDal userDal)\n        {\n            _userDal = userDal;\n        }\n\n        \n        [ValidationAspect(typeof(UserValidator))]\n        public IResult Add(User user)\n        {\n            _userDal.Add(user);\n            return new SuccessResult();\n        }\n\n       \n        public IResult Delete(User user)\n        {\n            _userDal.Delete(user);\n            return new SuccessResult();\n        }\n\n        public IDataResult<User> Get(int id)\n        {\n            \n            return new SuccessDataResult<User>(_userDal.Get(p=>p.Id == id));\n        }\n\n        public IDataResult<List<User>> GetAll()\n        {\n            return new SuccessDataResult<List<User>>(_userDal.GetAll());\n        }\n\n        public IDataResult<User> GetByMail(string email)\n        {\n            return new SuccessDataResult<User>(_userDal.Get(p=>p.Email == email));\n        }\n\n        public IDataResult<List<OperationClaim>> GetClaims(User user)\n        {\n            return new SuccessDataResult<List<OperationClaim>>(_userDal.GetClaims(user));\n        }\n        \n        public IResult Update(User user)\n        {\n            _userDal.Update(user);\n            return new SuccessResult();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Constants/Messages.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.Constants\n{\n    public static class Messages\n    {\n        public static string CarAdded = \"Araba bilgileri eklendi\";\n        public static string CarUpdated = \"Araba bilgileri güncellendi\";\n        public static string CarDeleted = \"Araba bilgileri silindi\";\n\n        public static string CarInvalidName = \"İsim geçersiz\";\n        public static string ImagesAdded=\"resim eklendi\";\n        public static string FailAddedImageLimit=\"Resim limitine erişildi!\";\n        public static string CarRental=\"Araç Kiralandı\";\n        public static string SuccessfulLogin = \"Sisteme giriş başarılı\";\n        public static string UserAlreadyExists = \"Bu kullanıcı zaten mevcut\";\n        public static string UserRegistered = \"Kullanıcı başarıyla kaydedildi\";\n        public static string AccessTokenCreated = \"Access token başarıyla oluşturuldu\";\n        public static string AuthorizationDenied = \"Yetkiniz yok\";\n        public static string ProductNameAlreadyExists = \"Ürün ismi zaten mevcut\";\n        public static string CarImageUpdated=\"Araba resmi güncellendi\";\n    }\n}\n"
  },
  {
    "path": "Business/DependencyResolvers/Autofac/AutofacBusinessModule.cs",
    "content": "﻿using Autofac;\nusing Autofac.Extras.DynamicProxy;\nusing Business.Abstract;\nusing Business.Concrete;\nusing Castle.DynamicProxy;\nusing Core.Utilities.Interceptors;\nusing Core.Utilities.Security.Jwt;\nusing DataAccess.Abstract;\nusing DataAccess.Concrete.EntityFramework;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.DependencyResolvers.Autofac\n{\n    public class AutofacBusinessModule:Module\n    {\n        protected override void Load(ContainerBuilder builder)\n        {\n            builder.RegisterType<CarManager>().As<ICarService>().SingleInstance();\n            builder.RegisterType<EfCarDal>().As<ICarDal>().SingleInstance();\n\n            builder.RegisterType<BrandManager>().As<IBrandService>().SingleInstance();\n            builder.RegisterType<EfBrandDal>().As<IBrandDal>().SingleInstance();\n\n            builder.RegisterType<ColorManager>().As<IColorService>().SingleInstance();\n            builder.RegisterType<EfColorDal>().As<IColorDal>().SingleInstance();\n\n            builder.RegisterType<UserManager>().As<IUserService>().SingleInstance();\n            builder.RegisterType<EfUserDal>().As<IUserDal>().SingleInstance();\n\n            builder.RegisterType<CustomerManager>().As<ICustomerService>().SingleInstance();\n            builder.RegisterType<EfCustomerDal>().As<ICustomerDal>().SingleInstance();\n\n            builder.RegisterType<RentalManager>().As<IRentalService>().SingleInstance();\n            builder.RegisterType<EfRentalDal>().As<IRentalDal>().SingleInstance();\n\n            builder.RegisterType<PaymentManager>().As<IPaymentService>().SingleInstance();\n            builder.RegisterType<EfPaymentDal>().As<IPaymentDal>().SingleInstance();\n\n            builder.RegisterType<CarImageManager>().As<ICarImageService>().SingleInstance();\n            builder.RegisterType<EfCarImageDal>().As<ICarImageDal>().SingleInstance();\n\n            builder.RegisterType<AuthManager>().As<IAuthService>().SingleInstance();\n            builder.RegisterType<JwtHelper>().As<ITokenHelper>().SingleInstance();\n\n            builder.RegisterType<CartManager>().As<ICartService>().SingleInstance();\n            builder.RegisterType<EfCartDal>().As<ICartDal>().SingleInstance();\n\n            var assembly = System.Reflection.Assembly.GetExecutingAssembly();\n\n            builder.RegisterAssemblyTypes(assembly).AsImplementedInterfaces()\n                .EnableInterfaceInterceptors(new ProxyGenerationOptions()\n                {\n                    Selector = new AspectInterceptorSelector()\n                }).SingleInstance();\n\n        }\n    }\n}\n"
  },
  {
    "path": "Business/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki öznitelikler kümesiyle\n// denetlenir. Bütünleştirilmiş kod ile ilişkili bilgileri değiştirmek için\n// bu öznitelik değerlerini değiştirin.\n[assembly: AssemblyTitle(\"Business\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Business\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2021\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// ComVisible özniteliğinin false olarak ayarlanması bu bütünleştirilmiş koddaki türleri\n// COM bileşenleri için görünmez yapar. Bu bütünleştirilmiş koddaki bir türe\n// erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın.\n[assembly: ComVisible(false)]\n\n// Bu proje COM'un kullanımına sunulursa, aşağıdaki GUID tür kitaplığının kimliği içindir\n[assembly: Guid(\"710a9967-ab8d-42bf-acc4-51e19ad024f1\")]\n\n// Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur:\n//\n//      Ana Sürüm\n//      İkincil Sürüm \n//      Yapı Numarası\n//      Düzeltme\n//\n// Tüm değerleri belirtebilir veya varsayılan Derleme ve Düzeltme Numaralarını kullanmak için\n// aşağıda gösterildiği gibi '*' kullanabilirsiniz:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/BrandValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class BrandValidator:AbstractValidator<Brand>\n    {\n        public BrandValidator()\n        {\n            RuleFor(p => p.BrandName).NotEmpty();\n            RuleFor(p => p.BrandName).MinimumLength(3);\n            RuleFor(p => p.BrandName).NotNull();\n        }\n\n    }\n}\n\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CarImageValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class CarImageValidator : AbstractValidator<CarImage>\n    {\n        public CarImageValidator()\n        {\n            RuleFor(p => p.CarId).NotEmpty();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CarValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class CarValidator : AbstractValidator<Car>\n    {\n        public CarValidator()\n        {\n            RuleFor(p => p.Description).MinimumLength(2).WithMessage(\"Description must be at least 2 characters\");\n            RuleFor(p => p.Description).NotEmpty();\n            RuleFor(p => p.Description).NotNull();\n            RuleFor(p => p.DailyPrice).GreaterThan(0);\n            RuleFor(p => p.DailyPrice).NotEmpty();\n            RuleFor(p => p.DailyPrice).GreaterThanOrEqualTo(100).When(p => p.BrandId == 1);\n            RuleFor(p => p.ModelYear).LessThan(DateTime.Now.Year);\n            RuleFor(p => p.ModelYear).NotEmpty();            \n            RuleFor(p => p.BrandId).GreaterThan(0);\n            RuleFor(p => p.BrandId).NotEmpty();\n            RuleFor(p => p.ColorId).GreaterThan(0);\n            RuleFor(p => p.ColorId).NotEmpty();\n\n            //RuleFor(p => p.Description).Must(StartWithA).When(p=>p.Description!=null).WithMessage(\"Description Must start with the letter A\");           \n        }\n        private bool StartWithA(string arg)\n        {\n            return arg.StartsWith(\"A\");\n        }\n    }\n}\n\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/ColorValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class ColorValidator:AbstractValidator<Color>\n    {\n        public ColorValidator()\n        {\n            RuleFor(p => p.ColorName).NotEmpty();\n            RuleFor(p => p.ColorName).NotNull();\n            RuleFor(p => p.ColorName).MinimumLength(3);\n            \n        }\n    }\n}\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/CustomerValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class CustomerValidator : AbstractValidator<Customer>\n    {\n        public CustomerValidator()\n        {\n            RuleFor(p => p.UserId).GreaterThan(0);\n            RuleFor(p => p.UserId).NotEmpty();\n            RuleFor(p => p.CompanyName).NotNull();\n            RuleFor(p => p.CompanyName).NotEmpty();\n            RuleFor(p => p.CompanyName).MinimumLength(2);            \n        }\n    }\n}\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/RentalValidator.cs",
    "content": "﻿using Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class RentalValidator:AbstractValidator<Rental>\n    {\n        public RentalValidator()\n        {\n            RuleFor(p => p.CarId).GreaterThan(0);\n            RuleFor(p => p.CarId).NotEmpty();\n            RuleFor(p => p.CustomerId).GreaterThan(0);\n            RuleFor(p => p.CustomerId).NotEmpty();\n            RuleFor(p => p.RentDate).Equals(DateTime.Now);\n            RuleFor(p => p.RentDate).NotEmpty();\n            RuleFor(p => p.ReturnDate).GreaterThan(DateTime.Now);\n            RuleFor(p => p.ReturnDate).NotEmpty();\n        }\n    }\n}\n"
  },
  {
    "path": "Business/ValidationRules/FluentValidation/UserValidator.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Business.ValidationRules.FluentValidation\n{\n    public class UserValidator : AbstractValidator<User>\n    {\n        public UserValidator()\n        {\n            RuleFor(p => p.FirstName).NotNull();\n            RuleFor(p => p.FirstName).NotEmpty();\n            RuleFor(p => p.LastName).NotNull();\n            RuleFor(p => p.LastName).NotEmpty();\n            RuleFor(p => p.Email).Must(MailCheck).When(p=>p.Email != null).WithMessage(\"IsValid Mail\");\n            RuleFor(p => p.Email).NotEmpty();\n            RuleFor(p => p.Email).NotNull();\n        }\n\n        private bool MailCheck(string arg)\n        {\n            return arg.Contains(\"@\");\n        }\n    }\n}\n"
  },
  {
    "path": "Business/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Memory\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.1.1\" newVersion=\"4.0.1.1\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Primitives\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Configuration.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.DependencyInjection.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Caching.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Options\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.Logging.Abstractions\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Threading.Tasks.Extensions\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.0.1\" newVersion=\"4.2.0.1\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.Extensions.DependencyInjection\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-3.1.12.0\" newVersion=\"3.1.12.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.ComponentModel.Annotations\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.2.1.0\" newVersion=\"4.2.1.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Autofac\" publicKeyToken=\"17863af14b0044da\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-6.1.0.0\" newVersion=\"6.1.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.IO.Pipelines\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.1\" newVersion=\"5.0.0.1\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"Microsoft.AspNetCore.Http.Features\" publicKeyToken=\"adb9793829ddae60\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Buffers\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-4.0.3.0\" newVersion=\"4.0.3.0\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "Business/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"6.1.0\" targetFramework=\"net472\" />\n  <package id=\"Autofac.Extensions.DependencyInjection\" version=\"7.1.0\" targetFramework=\"net472\" />\n  <package id=\"Autofac.Extras.DynamicProxy\" version=\"6.0.0\" targetFramework=\"net472\" />\n  <package id=\"Castle.Core\" version=\"4.4.0\" targetFramework=\"net472\" />\n  <package id=\"FluentValidation\" version=\"9.5.1\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.AspNetCore.Http\" version=\"2.2.2\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.AspNetCore.Http.Abstractions\" version=\"2.2.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.AspNetCore.Http.Features\" version=\"5.0.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.AspNetCore.WebUtilities\" version=\"2.2.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Bcl.AsyncInterfaces\" version=\"1.1.1\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection\" version=\"3.1.12\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Extensions.DependencyInjection.Abstractions\" version=\"3.1.12\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Extensions.ObjectPool\" version=\"2.2.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Extensions.Options\" version=\"2.2.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Extensions.Primitives\" version=\"5.0.0\" targetFramework=\"net472\" />\n  <package id=\"Microsoft.Net.Http.Headers\" version=\"2.2.0\" targetFramework=\"net472\" />\n  <package id=\"System.Buffers\" version=\"4.5.1\" targetFramework=\"net472\" />\n  <package id=\"System.ComponentModel.Annotations\" version=\"4.5.0\" targetFramework=\"net472\" />\n  <package id=\"System.Diagnostics.DiagnosticSource\" version=\"4.7.1\" targetFramework=\"net472\" />\n  <package id=\"System.IO.Pipelines\" version=\"5.0.1\" targetFramework=\"net472\" />\n  <package id=\"System.Memory\" version=\"4.5.4\" targetFramework=\"net472\" />\n  <package id=\"System.Numerics.Vectors\" version=\"4.5.0\" targetFramework=\"net472\" />\n  <package id=\"System.Runtime.CompilerServices.Unsafe\" version=\"5.0.0\" targetFramework=\"net472\" />\n  <package id=\"System.Text.Encodings.Web\" version=\"4.5.0\" targetFramework=\"net472\" />\n  <package id=\"System.Threading.Tasks.Extensions\" version=\"4.5.4\" targetFramework=\"net472\" />\n</packages>"
  },
  {
    "path": "CarRentalQuery1.sql",
    "content": "﻿CREATE TABLE [dbo].[Colors] (\n    [Id]        INT          IDENTITY (1, 1) NOT NULL,\n    [ColorName] VARCHAR (20) NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC)\n);\n\nCREATE TABLE [dbo].[Brands] (\n    [Id]        INT          IDENTITY (1, 1) NOT NULL,\n    [BrandName] VARCHAR (50) NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC)\n);\n\nCREATE TABLE [dbo].[Cars] (\n    [Id]          INT          IDENTITY (1, 1) NOT NULL,\n    [BrandId]     INT          NULL,\n    [ColorId]     INT          NULL,\n    [ModelYear]   INT          NULL,\n    [DailyPrice]  MONEY        NULL,\n    [Description] VARCHAR (50) NULL,\n    CONSTRAINT [PK_Cars] PRIMARY KEY CLUSTERED ([Id] ASC),\n    CONSTRAINT [FK_Cars] FOREIGN KEY ([BrandId]) REFERENCES [dbo].[Brands] ([Id]),\n    CONSTRAINT [FK_Cars2] FOREIGN KEY ([ColorId]) REFERENCES [dbo].[Colors] ([Id])\n);\n\nCREATE TABLE [dbo].[Users] (\n    [Id]           INT             IDENTITY (1, 1) NOT NULL,\n    [FirstName]    VARCHAR (50)    NULL,\n    [LastName]     VARCHAR (50)    NULL,\n    [Email]        VARCHAR (50)    NULL,\n    [PasswordSalt] VARBINARY (500) NULL,\n    [PasswordHash] VARBINARY (500) NULL,\n    [Status]       BIT             NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC)\n);\n\nCREATE TABLE [dbo].[Customers] (\n    [Id]          INT          IDENTITY (1, 1) NOT NULL,\n    [UserId]      INT          NULL,\n    [CompanyName] VARCHAR (50) NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC),\n    CONSTRAINT [FK_UserId] FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([Id])\n);\n\nCREATE TABLE [dbo].[Rentals] (\n    [Id]         INT      IDENTITY (1, 1) NOT NULL,\n    [CarId]      INT      NULL,\n    [CustomerId] INT      NULL,\n    [RentDate]   DATETIME NULL,\n    [ReturnDate] DATETIME NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC),\n    CONSTRAINT [FK_Rentals_Cars] FOREIGN KEY ([CarId]) REFERENCES [dbo].[Cars] ([Id]),\n    CONSTRAINT [FK_Rentals_Customers] FOREIGN KEY ([CustomerId]) REFERENCES [dbo].[Customers] ([Id])\n);\n\nCREATE TABLE [dbo].[CarImages] (\n    [Id]        INT            IDENTITY (1, 1) NOT NULL,\n    [CarId]     INT            NULL,\n    [ImagePath] NVARCHAR (MAX) NULL,\n    [Date]      DATETIME       NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC),\n    CONSTRAINT [FK_CarImages_Cars] FOREIGN KEY ([CarId]) REFERENCES [dbo].[Cars] ([Id])\n);\n\nCREATE TABLE [dbo].[OperationClaims] (\n    [Id]   INT           IDENTITY (1, 1) NOT NULL,\n    [Name] VARCHAR (250) NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC)\n);\n\nCREATE TABLE [dbo].[UserOperationClaims] (\n    [Id]               INT IDENTITY (1, 1) NOT NULL,\n    [UserId]           INT NOT NULL,\n    [OperationClaimId] INT NOT NULL,\n    PRIMARY KEY CLUSTERED ([Id] ASC)\n);\n\n"
  },
  {
    "path": "ConsoleUI/ConsoleUI.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Business\\Business.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "ConsoleUI/Program.cs",
    "content": "﻿using Business.Concrete;\nusing DataAccess.Concrete.EntityFramework;\nusing DataAccess.Concrete.InMemory;\nusing Entities.Concrete;\nusing System;\n\nnamespace ConsoleUI\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            //RentalManager rentalManager = new RentalManager(new EfRentalDal());\n\n            //var rentcar = new Rental {CarId=4,CustomerId=2,RentDate=DateTime.Now,ReturnDate=DateTime.Now.AddDays(2) };\n            \n            //Console.WriteLine(rentalManager.Add(rentcar).Message);          \n\n            //foreach (var rent in rentalManager.GetAll().Data)\n            //{              \n            //    Console.WriteLine(\"Id:{0} CarId={1} CustomerId:{2} RentDate:{3} ReturnDate:{4}\",rent.Id,rent.CarId,rent.CustomerId,rent.RentDate,rent.ReturnDate);\n            //}\n\n            /*foreach (var rentalDetail in rentalManager.GetRentalDetails().Data)\n            {\n                Console.WriteLine(\"Id: {0} CarName: {1} BrandName: {2} ColorName: {3} CompanyName: {4} FirstName: {5} LastName: {6} RentDate: {7} ReturnDate: {8} \",\n                    rentalDetail.Id, rentalDetail.CarName,rentalDetail.BrandName,rentalDetail.ColorName,rentalDetail.CompanyName,rentalDetail.FirstName,rentalDetail.LastName,\n                    rentalDetail.RentDate.ToString(\"MM/dd/yyyy\"), rentalDetail.ReturnDate.ToString(\"MM/dd/yyyy\"));\n            }*/\n\n            //DateTime.Now.ToString(\"MM/dd/yyyy\")\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Aspect/Autofac/Caching/CacheAspect.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Caching;\nusing Core.Utilities.Interceptors;\nusing Core.Utilities.IoC;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Microsoft.Extensions.DependencyInjection;\nusing System.Linq;\n\nnamespace Core.Aspect.Autofac.Caching\n{\n    public class CacheAspect:MethodInterception\n    {\n        private int _duration;\n        private ICacheManager _cacheManager;\n\n        public CacheAspect(int duration=60)\n        {\n            _duration = duration;\n            _cacheManager = ServiceTool.ServiceProvider.GetService<ICacheManager>();\n        }\n\n        public override void Intercept(IInvocation invocation)\n        {\n            var methodName = string.Format($\"{invocation.Method.ReflectedType.FullName}.{invocation.Method.Name}\");\n            var arguments = invocation.Arguments.ToList();\n            var key = $\"{methodName}({string.Join(\",\", arguments.Select(x => x?.ToString() ?? \"<Null>\"))})\";\n            if (_cacheManager.IsAdd(key))\n            {\n                invocation.ReturnValue = _cacheManager.Get(key);\n                return;\n            }\n            invocation.Proceed();\n            _cacheManager.Add(key, invocation.ReturnValue, _duration);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Aspect/Autofac/Caching/CacheRemoveAspect.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Caching;\nusing Core.Utilities.Interceptors;\nusing Core.Utilities.IoC;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Microsoft.Extensions.DependencyInjection;\n\nnamespace Core.Aspect.Autofac.Caching\n{\n    public class CacheRemoveAspect:MethodInterception\n    {\n        private string _pattern;\n        private ICacheManager _cacheManager;\n\n        public CacheRemoveAspect(string pattern)\n        {\n            _pattern = pattern;\n            _cacheManager = ServiceTool.ServiceProvider.GetService<ICacheManager>();\n        }\n\n        protected override void OnSuccess(IInvocation invocation)\n        {\n            _cacheManager.RemoveByPattern(_pattern);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Aspect/Autofac/Performance/PerformanceAspect.cs",
    "content": "﻿using Core.Utilities.Interceptors;\nusing Core.Utilities.IoC;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text;\nusing Microsoft.Extensions.DependencyInjection;\nusing Castle.DynamicProxy;\n\nnamespace Core.Aspect.Autofac.Performance\n{\n    public class PerformanceAspect:MethodInterception\n    {\n        private int _interval;\n        private Stopwatch _stopwatch;\n\n        public PerformanceAspect(int interval)\n        {\n            _interval = interval;\n            _stopwatch = ServiceTool.ServiceProvider.GetService<Stopwatch>();\n        }\n\n\n        protected override void OnBefore(IInvocation invocation)\n        {\n            _stopwatch.Start();\n        }\n\n        protected override void OnAfter(IInvocation invocation)\n        {\n            if (_stopwatch.Elapsed.TotalSeconds > _interval)\n            {\n                Debug.WriteLine($\"Performance : {invocation.Method.DeclaringType.FullName}.{invocation.Method.Name}-->{_stopwatch.Elapsed.TotalSeconds}\");\n            }\n            _stopwatch.Reset();\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Aspect/Autofac/Transaction/TransactionScopeAspect.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing Core.Utilities.Interceptors;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Transactions;\n\nnamespace Core.Aspect.Autofac.Transaction\n{\n    public class TransactionScopeAspect:MethodInterception\n    {\n        public override void Intercept(IInvocation invocation)\n        {\n            using (TransactionScope transactionScope = new TransactionScope())\n            {\n                try\n                {\n                    invocation.Proceed();\n                    transactionScope.Complete();\n                }\n                catch (System.Exception e)\n                {\n                    transactionScope.Dispose();\n                    throw;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Aspect/Autofac/Validation/ValidationAspect.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing Core.CrossCuttingConcerns.Validation;\nusing Core.Utilities.Interceptors;\nusing FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Core.Aspect.Autofac.Validation\n{\n    public class ValidationAspect:MethodInterception\n    {\n        private Type _validatorType;\n\n        public ValidationAspect(Type validatorType)\n        {\n            if (!typeof(IValidator).IsAssignableFrom(validatorType))\n            {\n                throw new System.Exception(\"Bu bir doğrulama sınıfı değil\");\n            }\n            _validatorType = validatorType;\n        }\n\n        protected override void OnBefore(IInvocation invocation)\n        {\n            var validator = (IValidator)Activator.CreateInstance(_validatorType);\n            var entityType = _validatorType.BaseType.GetGenericArguments()[0];\n            var entities = invocation.Arguments.Where(t => t.GetType() == entityType);\n            foreach (var entity in entities)\n            {\n                ValidationTool.Validate(validator, entity);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Core.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Autofac\" Version=\"6.1.0\" />\n    <PackageReference Include=\"Autofac.Extensions.DependencyInjection\" Version=\"7.1.0\" />\n    <PackageReference Include=\"Autofac.Extras.DynamicProxy\" Version=\"6.0.0\" />\n    <PackageReference Include=\"FluentValidation\" Version=\"9.5.1\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Hosting\" Version=\"2.2.7\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Hosting.Abstractions\" Version=\"2.2.0\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Http.Features\" Version=\"5.0.0\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.SqlServer\" Version=\"3.1.12\" />\n    <PackageReference Include=\"Microsoft.IdentityModel.Tokens\" Version=\"6.8.0\" />\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.1\" />\n    <PackageReference Include=\"System.IdentityModel.Tokens.Jwt\" Version=\"6.8.0\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Core/CrossCuttingConcerns/Caching/ICacheManager.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.CrossCuttingConcerns.Caching\n{\n    public interface ICacheManager\n    {\n        T Get<T>(string key);\n        object Get(string key);\n        void Add(string key, object value, int duration);\n        bool IsAdd(string key);\n        void Remove(string key);\n        void RemoveByPattern(string pattern);\n    }\n}\n"
  },
  {
    "path": "Core/CrossCuttingConcerns/Caching/Microsoft/MemoryCacheManager.cs",
    "content": "﻿using Core.Utilities.IoC;\nusing Microsoft.Extensions.Caching.Memory;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing Microsoft.Extensions.DependencyInjection;\nusing System.Text.RegularExpressions;\nusing System.Linq;\n\nnamespace Core.CrossCuttingConcerns.Caching.Microsoft\n{\n    public class MemoryCacheManager : ICacheManager\n    {\n        IMemoryCache _memoryCache;\n\n        public MemoryCacheManager()\n        {\n            _memoryCache = ServiceTool.ServiceProvider.GetService<IMemoryCache>();\n        }\n\n        public void Add(string key, object value, int duration)\n        {\n            _memoryCache.Set(key, value, TimeSpan.FromMinutes(duration));\n        }\n\n        public T Get<T>(string key)\n        {\n            return _memoryCache.Get<T>(key);\n        }\n\n        public object Get(string key)\n        {\n            return _memoryCache.Get(key);\n        }\n\n        public bool IsAdd(string key)\n        {\n            return _memoryCache.TryGetValue(key, out _);\n        }\n\n        public void Remove(string key)\n        {\n            _memoryCache.Remove(key);\n        }\n\n        public void RemoveByPattern(string pattern)\n        {\n            var cacheEntriesCollectionDefinition = typeof(MemoryCache).GetProperty(\"EntriesCollection\", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);\n            var cacheEntriesCollection = cacheEntriesCollectionDefinition.GetValue(_memoryCache) as dynamic;\n            List<ICacheEntry> cacheCollectionValues = new List<ICacheEntry>();\n\n            foreach (var cacheItem in cacheEntriesCollection)\n            {\n                ICacheEntry cacheItemValue = cacheItem.GetType().GetProperty(\"Value\").GetValue(cacheItem, null);\n                cacheCollectionValues.Add(cacheItemValue);\n            }\n\n            var regex = new Regex(pattern, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.IgnoreCase);\n            var keysToRemove = cacheCollectionValues.Where(d => regex.IsMatch(d.Key.ToString())).Select(d => d.Key).ToList();\n\n            foreach (var key in keysToRemove)\n            {\n                _memoryCache.Remove(key);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/CrossCuttingConcerns/Validation/ValidationTool.cs",
    "content": "﻿using FluentValidation;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.CrossCuttingConcerns.Validation\n{\n    public static class ValidationTool\n    {\n        public static void Validate(IValidator validator, object entity)\n        {\n            var context = new ValidationContext<object>(entity);\n\n            var result = validator.Validate(context);\n\n            if (!result.IsValid)\n            {\n                throw new ValidationException(result.Errors);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/DataAccess/EntityFramework/EfEntityRepositoryBase.cs",
    "content": "﻿using Core.Entities;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\n\nnamespace Core.DataAccess.EntityFramework\n{\n    public class EfEntityRepositoryBase<TEntity,TContext>:IEntityRepository<TEntity>\n        where TEntity:class,IEntity,new()\n        where TContext:DbContext,new()\n    {\n        public void Add(TEntity entity)\n        {\n            using (TContext context = new TContext())\n            {\n                var addedEntity = context.Entry(entity);\n                addedEntity.State = EntityState.Added;\n                context.SaveChanges();\n            }\n        }\n\n        public void Delete(TEntity entity)\n        {\n            using (TContext context = new TContext())\n            {\n                var deletedEntity = context.Entry(entity);\n                deletedEntity.State = EntityState.Deleted;\n                context.SaveChanges();\n            }\n        }\n\n        public TEntity Get(Expression<Func<TEntity, bool>> filter)\n        {\n            using (TContext context = new TContext())\n            {\n                return context.Set<TEntity>().SingleOrDefault(filter);\n            }\n        }\n\n        public List<TEntity> GetAll(Expression<Func<TEntity, bool>> filter = null)\n        {\n            using (TContext context = new TContext())\n            {\n                return filter == null\n                       ? context.Set<TEntity>().ToList()\n                       : context.Set<TEntity>().Where(filter).ToList();\n            }\n        }\n\n        public void Update(TEntity entity)\n        {\n            using (TContext context = new TContext())\n            {\n                var updatedEntity = context.Entry(entity);\n                updatedEntity.State = EntityState.Modified;\n                context.SaveChanges();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Core/DataAccess/IEntityRepository.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Core.DataAccess\n{\n    public interface IEntityRepository<T> where T:class,IEntity,new()\n    {\n        List<T> GetAll(Expression<Func<T,bool>> filter=null);\n        T Get(Expression<Func<T, bool>> filter);\n        void Add(T entity);\n        void Update(T entity);\n        void Delete(T entity);\n\n    }\n}\n"
  },
  {
    "path": "Core/DependencyResolvers/CoreModule.cs",
    "content": "﻿using Core.CrossCuttingConcerns.Caching;\nusing Core.CrossCuttingConcerns.Caching.Microsoft;\nusing Core.Utilities.IoC;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text;\n\nnamespace Core.DependencyResolvers\n{\n    public class CoreModule : ICoreModule\n    {\n        public void Load(IServiceCollection serviceCollection)\n        {\n            serviceCollection.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();\n\n            serviceCollection.AddSingleton<ICacheManager, MemoryCacheManager>();\n            serviceCollection.AddMemoryCache();\n\n            serviceCollection.AddSingleton<Stopwatch>();\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Entities/Concrete/OperationClaim.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities.Concrete\n{\n    public class OperationClaim:IEntity\n    {\n        public int Id { get; set; }\n        public string Name { get; set; }\n    }\n}\n"
  },
  {
    "path": "Core/Entities/Concrete/User.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Core.Entities.Concrete\n{\n    public class User:IEntity\n    {\n        public int Id { get; set; }\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n        public string Email { get; set; }\n        public byte[] PasswordSalt { get; set; }\n        public byte[] PasswordHash { get; set; }\n        public bool Status { get; set; }\n        public short Findeks { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "Core/Entities/Concrete/UserOperationClaim.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities.Concrete\n{\n    public class UserOperationClaim:IEntity\n    {\n        public int Id { get; set; }\n        public int UserId { get; set; }\n        public int OperationClaimId { get; set; }\n    }\n}\n"
  },
  {
    "path": "Core/Entities/IDto.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Entities\n{\n    public interface IDto\n    {\n    }\n}\n"
  },
  {
    "path": "Core/Entities/IEntity.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Core.Entities\n{\n    public interface IEntity\n    {\n\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ClaimExtensions.cs",
    "content": "﻿using Microsoft.IdentityModel.JsonWebTokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Text;\n\nnamespace Core.Extensions\n{\n    public static class ClaimExtensions\n    {\n        public static void AddEmail(this ICollection<Claim> claims, string email)\n        {\n            claims.Add(new Claim(JwtRegisteredClaimNames.Email, email));\n        }\n\n        public static void AddName(this ICollection<Claim> claims, string name)\n        {\n            claims.Add(new Claim(ClaimTypes.Name, name));\n        }\n\n        public static void AddNameIdentifier(this ICollection<Claim> claims, string nameIdentifier)\n        {\n            claims.Add(new Claim(ClaimTypes.NameIdentifier, nameIdentifier));\n        }\n\n        public static void AddRoles(this ICollection<Claim> claims, string[] roles)\n        {\n            roles.ToList().ForEach(role => claims.Add(new Claim(ClaimTypes.Role, role)));\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ClaimsPrincipalExtensions.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\n\nnamespace Core.Extensions\n{\n    public static class ClaimsPrincipalExtensions\n    {\n        public static List<string> Claims(this ClaimsPrincipal claimsPrincipal, string claimType)\n        {\n            var result = claimsPrincipal?.FindAll(claimType)?.Select(x => x.Value).ToList();\n            return result;\n        }\n\n        public static List<string> ClaimRoles(this ClaimsPrincipal claimsPrincipal)\n        {\n            return claimsPrincipal?.Claims(ClaimTypes.Role);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ErrorDetails.cs",
    "content": "﻿using FluentValidation.Results;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace Core.Extensions\n{\n    public class ErrorDetails\n    {\n        public string Message { get; set; }\n        public int StatusCode { get; set; }\n\n        public override string ToString()\n        {\n            return JsonConvert.SerializeObject(this);\n        }\n    }\n\n    public class ValidationErrorDetails:ErrorDetails\n    {\n        public IEnumerable<ValidationFailure> ValidationErrors;\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ExceptionMiddleware.cs",
    "content": "﻿using FluentValidation;\nusing FluentValidation.Results;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.Collections.Generic;\nusing System.Net;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Core.Extensions\n{\n    public class ExceptionMiddleware\n    {\n        private RequestDelegate _next;\n\n        public ExceptionMiddleware(RequestDelegate next)\n        {\n            _next = next;\n        }\n\n        public async Task InvokeAsync(HttpContext httpContext)\n        {\n            try\n            {\n                await _next(httpContext);\n            }\n            catch (Exception e)\n            {\n                await HandleExceptionAsync(httpContext, e);\n            }\n        }\n\n        private Task HandleExceptionAsync(HttpContext httpContext, Exception e)\n        {\n            httpContext.Response.ContentType = \"application/json\";\n            httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;\n\n            string message = \"Internal Server Error\";\n\n            IEnumerable<ValidationFailure> errors;\n\n            if (e.GetType() == typeof(ValidationException))\n            {\n                message = e.Message;\n                errors = ((ValidationException)e).Errors;\n                httpContext.Response.StatusCode = 400;\n\n                return httpContext.Response.WriteAsync(new ValidationErrorDetails\n                {\n                    StatusCode = 400,\n                    Message = message,\n                    ValidationErrors = errors\n                }.ToString());\n            }\n\n            return httpContext.Response.WriteAsync(new ErrorDetails\n            {\n                StatusCode = httpContext.Response.StatusCode,\n                Message = message\n            }.ToString());\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ExceptionMiddlewareExtensions.cs",
    "content": "﻿using Microsoft.AspNetCore.Builder;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Extensions\n{\n    public static class ExceptionMiddlewareExtensions\n    {\n        public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app)\n        {\n            app.UseMiddleware<ExceptionMiddleware>();\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Extensions/ServiceCollectionExtensions.cs",
    "content": "﻿using Core.Utilities.IoC;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Extensions\n{ \n    public static class ServiceCollectionExtensions\n    {\n        public static IServiceCollection AddDependencyResolvers( this IServiceCollection serviceCollection, ICoreModule[] modules)\n        {\n            foreach (var module in modules)\n            {\n                module.Load(serviceCollection);\n            }\n\n            return ServiceTool.Create(serviceCollection);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Business/BusinessRules.cs",
    "content": "﻿using Core.Utilities.Results;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Business\n{\n    public class BusinessRules\n    {\n        public static IResult Run(params IResult[] logics)\n        {\n            foreach (var logic in logics)\n            {\n                if (!logic.Success)\n                {\n                    return logic;\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/FileHelper/FileHelper.cs",
    "content": "﻿using Core.Utilities.Results;\nusing Microsoft.AspNetCore.Http;\nusing System;\nusing System.IO;\n\nnamespace Core.Utilities.FileHelper\n{\n    public class FileHelper\n    {\n        public static string AddAsync(IFormFile file)\n        {\n            var result = newPath(file);\n\n            try\n            {\n                var sourcepath = Path.GetTempFileName();\n\n                using (var stream = new FileStream(sourcepath, FileMode.Create))\n                {\n                    file.CopyTo(stream);\n                }\n\n                File.Move(sourcepath, result.newPath);\n            }\n            catch (Exception exception)\n            {\n\n                return exception.Message;\n            }\n\n            return result.Path2;\n        }\n\n        public static string UpdateAsync(string sourcePath, IFormFile file)\n        {\n            var result = newPath(file);\n\n            try\n            {\n                using (var stream = new FileStream(result.newPath, FileMode.Create))\n                {\n                    file.CopyTo(stream);\n                }\n\n                File.Delete(sourcePath);\n            }\n            catch (Exception excepiton)\n            {\n                return excepiton.Message;\n            }\n\n            return result.Path2;\n        }\n\n        public static IResult DeleteAsync(string path)\n        {\n            try\n            {\n                File.Delete(path);\n            }\n            catch (Exception exception)\n            {\n                return new ErrorResult(exception.Message);\n            }\n\n            return new SuccessResult();\n        }\n\n        public static (string newPath, string Path2) newPath(IFormFile file)\n        {\n            FileInfo ff = new FileInfo(file.FileName);\n\n            string fileExtension = ff.Extension;\n\n            var creatingUniqueFilename = Guid.NewGuid().ToString(\"N\") + fileExtension;\n\n            string result = $@\"{Environment.CurrentDirectory + @\"\\wwwroot\\Images\"}\\{creatingUniqueFilename}\";\n\n            return (result, $\"\\\\Images\\\\{creatingUniqueFilename}\");\n        }\n\n\n\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Interceptors/AspectInterceptorSelector.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing Core.Aspect.Autofac.Performance;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\n\nnamespace Core.Utilities.Interceptors\n{\n    public class AspectInterceptorSelector : IInterceptorSelector\n    {\n        public IInterceptor[] SelectInterceptors(Type type, MethodInfo method, IInterceptor[] interceptors)\n        {\n            var classAttributes = type.GetCustomAttributes<MethodInterceptionBaseAttribute>\n                (true).ToList();\n            var methodAttributes = type.GetMethod(method.Name)\n                .GetCustomAttributes<MethodInterceptionBaseAttribute>(true);\n            classAttributes.AddRange(methodAttributes);\n            classAttributes.Add(new PerformanceAspect(5));\n\n            return classAttributes.OrderBy(x => x.Priority).ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Interceptors/MethodInterception.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Interceptors\n{\n    public abstract class MethodInterception: MethodInterceptionBaseAttribute\n    {\n        protected virtual void OnBefore(IInvocation invocation) { }\n        protected virtual void OnAfter(IInvocation invocation) { }\n        protected virtual void OnException(IInvocation invocation, System.Exception e) { }\n        protected virtual void OnSuccess(IInvocation invocation) { }\n\n        public override void Intercept(IInvocation invocation)\n        {\n            var isSuccess = true;\n            OnBefore(invocation);\n            try\n            {\n                invocation.Proceed();\n            }\n            catch (Exception e)\n            {\n                isSuccess = false;\n                OnException(invocation, e);\n                throw;\n            }\n            finally\n            {\n                if (isSuccess)\n                {\n                    OnSuccess(invocation);\n                }\n            }\n            OnAfter(invocation);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Interceptors/MethodInterceptionBaseAttribute.cs",
    "content": "﻿using Castle.DynamicProxy;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Interceptors\n{\n    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple =true,Inherited =true)]\n    public abstract class MethodInterceptionBaseAttribute : Attribute, IInterceptor\n    {\n        public int Priority { get; set; }\n        public virtual void Intercept(IInvocation invocation) { }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/IoC/ICoreModule.cs",
    "content": "﻿using Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.IoC\n{\n    public interface ICoreModule\n    {\n        void Load(IServiceCollection serviceCollection);\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/IoC/ServiceTool.cs",
    "content": "﻿using Microsoft.Extensions.DependencyInjection;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.IoC\n{\n    public static class ServiceTool\n    {\n        public static IServiceProvider ServiceProvider { get; private set; }\n\n        public static IServiceCollection Create(IServiceCollection services)\n        {\n            ServiceProvider = services.BuildServiceProvider();\n            return services;\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/DataResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class DataResult<T> : Result, IDataResult<T>\n    {\n        public DataResult(T data,bool success,string message):base(success,message)\n        {\n            Data = data;\n        }\n\n        public DataResult(T data,bool success):base(success)\n        {\n            Data = data;\n        }       \n\n        public T Data { get; }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/ErrorDataResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class ErrorDataResult<T>:DataResult<T>\n    {\n        public ErrorDataResult(T data,string message):base(data,false,message)\n        {\n                \n        }\n        public ErrorDataResult(T data):base(data,false)\n        {\n\n        }\n        public ErrorDataResult(string message):base(default,false)\n        {\n\n        }\n        public ErrorDataResult():base(default,false)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/ErrorResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class ErrorResult:Result\n    {\n        public ErrorResult(string message):base(false,message)\n        {\n\n        }\n        public ErrorResult():base(false)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/IDataResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public interface IDataResult<T>:IResult\n    {\n        T Data { get; }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/IResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public interface IResult\n    {\n        bool Success { get; }\n        string Message { get; }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/Result.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class Result : IResult\n    {\n        public Result(bool success,string message):this(success)\n        {\n            Message = message;\n        }\n        public Result(bool success)\n        {\n            Success = success;\n        }\n\n        public bool Success { get; }\n\n        public string Message { get; }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/SuccessDataResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class SuccessDataResult<T>:DataResult<T>\n    {\n        public SuccessDataResult(T data, string message):base(data,true,message)\n        {\n\n        }\n        public SuccessDataResult(T data):base(data,true)\n        {\n\n        }\n        public SuccessDataResult(string message):base(default,true,message)\n        {\n\n        }\n        public SuccessDataResult():base(default,true)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Results/SuccessResult.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Results\n{\n    public class SuccessResult:Result\n    {\n        public SuccessResult(string message):base(true,message)\n        {\n\n        }\n        public SuccessResult():base(true)\n        {\n\n        }\n\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Encryption/SecurityKeyHelper.cs",
    "content": "﻿using Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Encryption\n{\n    public class SecurityKeyHelper\n    {\n        public static SecurityKey CreateSecurityKey(string securityKey)\n        {\n            return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Encryption/SigningCredentialsHelper.cs",
    "content": "﻿using Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Encryption\n{\n    public class SigningCredentialsHelper\n    {\n        public static SigningCredentials CreateSigningCredentials(SecurityKey securityKey)\n        {\n            return new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha512Signature);\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Hashing/HashingHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Hashing\n{\n    public class HashingHelper\n    {\n        public static void CreatePasswordHash(string password, out byte[] passwordHash, out byte[] passwordSalt)\n        {\n            using (var hmac = new System.Security.Cryptography.HMACSHA512())\n            {\n                passwordSalt = hmac.Key;\n                passwordHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(password));\n            }\n        }\n\n        public static bool VerifyPasswordHash(string password, byte[] passwordHash, byte[] passwordSalt)\n        {\n            using (var hmac = new System.Security.Cryptography.HMACSHA512(passwordSalt))\n            {\n                var computedHash = hmac.ComputeHash(Encoding.UTF8.GetBytes(password));\n\n                for (int i = 0; i < computedHash.Length; i++)\n                {\n                    if (computedHash[i] != passwordHash[i])\n                    {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        }\n\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Jwt/AccessToken.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Jwt\n{\n    public class AccessToken\n    {\n        public string Token { get; set; }\n        public DateTime Expiration { get; set; }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Jwt/ITokenHelper.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Core.Utilities.Security.Jwt\n{\n    public interface ITokenHelper\n    {\n        AccessToken CreateToken(User user, List<OperationClaim> operationClaims);\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Jwt/JwtHelper.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing Core.Utilities.Security.Encryption;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.IdentityModel.Tokens.Jwt;\nusing System.Text;\nusing System.Security.Claims;\nusing Core.Extensions;\nusing System.Linq;\n\nnamespace Core.Utilities.Security.Jwt\n{\n    public class JwtHelper : ITokenHelper\n    {\n        public IConfiguration Configuration { get; }\n        private TokenOptions _tokenOptions;\n        private DateTime _accessTokenExpiration;\n\n        public JwtHelper(IConfiguration configuration)\n        {\n            Configuration = configuration;\n            _tokenOptions = Configuration.GetSection(\"TokenOptions\").Get<TokenOptions>();\n        }\n\n        public AccessToken CreateToken(User user, List<OperationClaim> operationClaims)\n        {\n            _accessTokenExpiration = DateTime.Now.AddMinutes(_tokenOptions.AccessTokenExpiration);\n            var securityKey = SecurityKeyHelper.CreateSecurityKey(_tokenOptions.SecurityKey);\n            var signingCredentials = SigningCredentialsHelper.CreateSigningCredentials(securityKey);\n            var jwt = CreateJwtSecurityToken(_tokenOptions, user, signingCredentials, operationClaims);\n            var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();\n            var token = jwtSecurityTokenHandler.WriteToken(jwt);\n            return new AccessToken { Token = token, Expiration = _accessTokenExpiration };\n        }\n\n        private JwtSecurityToken CreateJwtSecurityToken(TokenOptions tokenOptions, User user, SigningCredentials signingCredentials, List<OperationClaim> operationClaims)\n        {\n            var jwt = new JwtSecurityToken(\n                issuer: tokenOptions.Issuer,\n                audience: tokenOptions.Audience,\n                expires: _accessTokenExpiration,\n                notBefore: DateTime.Now,\n                claims: SetClaims(user, operationClaims),\n                signingCredentials: signingCredentials\n                );\n\n            return jwt;\n        }\n\n        private IEnumerable<Claim> SetClaims(User user, List<OperationClaim> operationClaims)\n        {\n            var claims = new List<Claim>();\n            claims.AddNameIdentifier(user.Id.ToString());\n            claims.AddEmail(user.Email);\n            claims.AddName($\"{user.FirstName} {user.LastName}\");\n            claims.AddRoles(operationClaims.Select(c => c.Name).ToArray());\n\n            return claims;\n        }\n    }\n}\n"
  },
  {
    "path": "Core/Utilities/Security/Jwt/TokenOptions.cs",
    "content": "﻿namespace Core.Utilities.Security.Jwt\n{\n    public class TokenOptions\n    {\n        public string Audience { get; set; }\n        public string Issuer { get; set; }\n        public int AccessTokenExpiration { get; set; }\n        public string SecurityKey { get; set; }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/IBrandDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface IBrandDal:IEntityRepository<Brand>\n    {\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/ICarDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace DataAccess.Abstract\n{\n    public interface ICarDal:IEntityRepository<Car>\n    {\n        List<CarDetailDto> GetCarDetails();\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/ICarImageDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface ICarImageDal:IEntityRepository<CarImage>\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/ICartDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface ICartDal: IEntityRepository<Cart>\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/IColorDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface IColorDal:IEntityRepository<Color>\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/ICustomerDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface ICustomerDal:IEntityRepository<Customer>\n    {\n        List<CustomerDetailDto> GetCustomerDetails();\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/IPaymentDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface IPaymentDal:IEntityRepository<Payment>\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/IRentalDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface IRentalDal:IEntityRepository<Rental>\n    {\n        List<RentalDetailDto> GetRentalDetails();\n    }\n}\n"
  },
  {
    "path": "DataAccess/Abstract/IUserDal.cs",
    "content": "﻿using Core.DataAccess;\nusing Core.Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Abstract\n{\n    public interface IUserDal:IEntityRepository<User>\n    {\n        List<OperationClaim> GetClaims(User user);\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/CarRentalContext.cs",
    "content": "﻿using Core.Entities.Concrete;\nusing Entities.Concrete;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class CarRentalContext : DbContext\n    {\n        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)\n        {\n            optionsBuilder.UseSqlServer(@\"Server=(localdb)\\MSSQLLocalDB;Database=CarRental;Trusted_Connection=true;\");\n           \n        }\n\n        public DbSet<Car> Cars { get; set; }\n        public DbSet<Brand> Brands { get; set; }\n        public DbSet<Color> Colors { get; set; }\n        public DbSet<User> Users { get; set; }\n        public DbSet<Customer> Customers { get; set; }\n        public DbSet<Rental> Rentals { get; set; }\n        public DbSet<CarImage> CarImages { get; set; }\n        public DbSet<OperationClaim> OperationClaims { get; set; }\n        public DbSet<UserOperationClaim> UserOperationClaims { get; set; }\n        public DbSet<Payment> Payments { get; set; }\n        public DbSet<Cart> Carts { get; set; }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfBrandDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfBrandDal : EfEntityRepositoryBase<Brand, CarRentalContext>, IBrandDal\n    {\n       \n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCarDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfCarDal : EfEntityRepositoryBase<Car, CarRentalContext>, ICarDal\n    {\n        public List<CarDetailDto> GetCarDetails()\n        {\n            using (var context = new CarRentalContext())\n            {\n                var result = from c in context.Cars\n                             join b in context.Brands on c.BrandId equals b.Id\n                             join co in context.Colors on c.ColorId equals co.Id\n                             select new CarDetailDto { Id=c.Id,BrandName = b.BrandName, \n                                 ColorName = co.ColorName,ModelYear=c.ModelYear,DailyPrice = c.DailyPrice,Description=c.Description,Findeks=c.Findeks };\n                             \n                return result.ToList();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCarImageDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfCarImageDal:EfEntityRepositoryBase<CarImage,CarRentalContext>,ICarImageDal\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCartDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfCartDal: EfEntityRepositoryBase<Cart, CarRentalContext>, ICartDal\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfColorDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Microsoft.EntityFrameworkCore;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfColorDal : EfEntityRepositoryBase<Color, CarRentalContext>,IColorDal\n    {\n       \n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfCustomerDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Linq;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfCustomerDal : EfEntityRepositoryBase<Customer, CarRentalContext>, ICustomerDal\n    {\n        public List<CustomerDetailDto> GetCustomerDetails()\n        {\n            using (var context = new CarRentalContext())\n            {\n                var result = from c in context.Customers\n                             join u in context.Users on c.UserId equals u.Id\n                             select new CustomerDetailDto\n                             {\n                                Id = c.Id,\n                                FirstName = u.FirstName,\n                                LastName = u.LastName,\n                                Email = u.Email,\n                                Status = u.Status,\n                                CompanyName = c.CompanyName\n                             };\n\n                return result.ToList();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfPaymentDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfPaymentDal: EfEntityRepositoryBase<Payment, CarRentalContext>, IPaymentDal\n    {\n\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfRentalDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfRentalDal : EfEntityRepositoryBase<Rental, CarRentalContext>, IRentalDal\n    {\n        public List<RentalDetailDto> GetRentalDetails()\n        {\n            using (var context = new CarRentalContext())\n            {\n                var result = from rent in context.Rentals\n                             join car in context.Cars on rent.CarId equals car.Id\n                             join brand in context.Brands on car.BrandId equals brand.Id\n                             join color in context.Colors on car.ColorId equals color.Id\n                             join cus in context.Customers on rent.CustomerId equals cus.Id\n                             join user in context.Users on cus.UserId equals user.Id\n                             select new RentalDetailDto\n                             {\n                                 Id = rent.Id,\n                                 CarId = car.Id,\n                                 CarName = car.Description,\n                                 BrandName = brand.BrandName,\n                                 ColorName = color.ColorName,\n                                 CompanyName = cus.CompanyName,\n                                 FirstName = user.FirstName,\n                                 LastName = user.LastName,\n                                 RentDate = rent.RentDate,\n                                 ReturnDate = rent.ReturnDate,\n                             };\n\n                return result.ToList();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/EntityFramework/EfUserDal.cs",
    "content": "﻿using Core.DataAccess.EntityFramework;\nusing Core.Entities.Concrete;\nusing DataAccess.Abstract;\nusing System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Linq;\n\nnamespace DataAccess.Concrete.EntityFramework\n{\n    public class EfUserDal : EfEntityRepositoryBase<User, CarRentalContext>, IUserDal\n    {\n        public List<OperationClaim> GetClaims(User user)\n        {\n            using (var context = new CarRentalContext())\n            {\n                var result = from operationClaim in context.OperationClaims\n                             join userOperationClaim in context.UserOperationClaims\n                                 on operationClaim.Id equals userOperationClaim.OperationClaimId\n                             where userOperationClaim.UserId == user.Id\n                             select new OperationClaim { Id = operationClaim.Id, Name = operationClaim.Name };\n                return result.ToList();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "DataAccess/Concrete/InMemory/InMemoryCarDal.cs",
    "content": "﻿using DataAccess.Abstract;\nusing Entities.Concrete;\nusing Entities.DTOs;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressions;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace DataAccess.Concrete.InMemory\n{\n    public class InMemoryCarDal : ICarDal\n    {\n        List<Car> _cars;\n\n        public InMemoryCarDal()\n        {\n            _cars = new List<Car>\n            {\n                new Car{Id=0,BrandId=2,ColorId=33,ModelYear=2014,DailyPrice=56929,Description=\"Info.\" },\n                new Car{Id=1,BrandId=2,ColorId=15,ModelYear=2020,DailyPrice=96723,Description=\"Info.\" },\n                new Car{Id=2,BrandId=2,ColorId=78,ModelYear=1994,DailyPrice=26173,Description=\"Info.\" },\n            };\n        }\n\n        public void Add(Car car)\n        {\n            _cars.Add(car);\n        }\n\n        public void Delete(Car car)\n        {\n            Car deletedToCar = null;\n\n            deletedToCar = _cars.SingleOrDefault(p => p.Id == car.Id);\n\n            _cars.Remove(deletedToCar);\n        }\n\n        public Car Get(Expression<Func<Car, bool>> filter)\n        {\n            throw new NotImplementedException();            \n        }\n\n        public Car Get(int id)\n        {\n            return _cars.SingleOrDefault(p => p.Id == id);\n        }\n\n        public List<Car> GetAll(Expression<Func<Car, bool>> filter = null)\n        {\n            return _cars.ToList();\n        }\n\n        public List<Car> GetAll()\n        {\n            return _cars.ToList();\n        }\n\n        public List<CarDetailDto> GetCarDetails()\n        {\n            throw new NotImplementedException();\n        }\n\n        public void Update(Car car)\n        {\n            Car updatedToCar = null;\n\n            updatedToCar = _cars.SingleOrDefault(p => p.Id == car.Id);\n\n            updatedToCar.Id = car.Id;\n            updatedToCar.BrandId = car.BrandId;\n            updatedToCar.ColorId = car.ColorId;\n            updatedToCar.ModelYear = car.ModelYear;\n            updatedToCar.DailyPrice = car.DailyPrice;\n            updatedToCar.Description = car.Description;\n        }\n    }\n}\n"
  },
  {
    "path": "DataAccess/DataAccess.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.SqlServer\" Version=\"3.1.12\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Core\\Core.csproj\" />\n    <ProjectReference Include=\"..\\Entities\\Entities.csproj\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "Entities/Concrete/Brand.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Brand:IEntity\n    {\n        public int Id { get; set; }\n        public string BrandName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/Car.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Car: IEntity\n    {        \n        public int Id { get; set; }\n        public int BrandId { get; set; }\n        public int ColorId { get; set; }\n        public int ModelYear { get; set; }\n        public decimal DailyPrice { get; set; }\n        public string Description { get; set; }\n        public short Findeks { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/CarImage.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class CarImage:IEntity\n    {\n        public CarImage()\n        {\n            Date = DateTime.Now;\n        }\n        public int Id { get; set; }\n        public int CarId { get; set; }\n        public string ImagePath { get; set; }\n        public DateTime Date { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/Cart.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Cart: IEntity\n    {\n        public int Id { get; set; }\n        public int CustomerId { get; set; }\n        public string CartName { get; set; }\n        public string CartNumber { get; set; }\n        public string CartDate { get; set; }\n        public short CartCvv { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/Color.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Color:IEntity\n    {\n        public int Id { get; set; }\n        public string ColorName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/Customer.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Customer:IEntity\n    {\n        public int Id { get; set; }\n        public int UserId { get; set; }\n        public string CompanyName { get; set; }\n\n    }\n}\n\n"
  },
  {
    "path": "Entities/Concrete/Payment.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Payment:IEntity\n    {\n        public int Id { get; set; }\n        public int CarId { get; set; }\n        public int CustomerId { get; set; }       \n        public string CartName { get; set; }\n        public string CartNumber { get; set; }\n        public string CartDate { get; set; }\n        public short CartCvv { get; set; }\n        public decimal TotalPrice { get; set; }\n        public DateTime PaymentDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Concrete/Rental.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.Concrete\n{\n    public class Rental:IEntity\n    {\n        public int Id { get; set; }\n        public int CarId { get; set; }\n        public int CustomerId { get; set; }\n        public DateTime RentDate { get; set; }\n        public DateTime ReturnDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/DTOs/CarDetailDto.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.DTOs\n{\n    public class CarDetailDto:IDto\n    {\n        public int Id { get; set; }\n        public string BrandName { get; set; }\n        public string ColorName { get; set; }\n        public int ModelYear { get; set; }\n        public decimal DailyPrice { get; set; }\n        public string Description { get; set; }\n        public short Findeks { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/DTOs/CustomerDetailDto.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.DTOs\n{\n    public class CustomerDetailDto:IDto\n    {\n        public int Id { get; set; }\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n        public string Email { get; set; }\n        public Boolean Status { get; set; }\n        public string CompanyName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/DTOs/RentalDetailDto.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.DTOs\n{\n    public class RentalDetailDto:IDto\n    {\n        public int Id { get; set; }\n        public int CarId { get; set; }\n        public string CarName { get; set; }\n        public string BrandName { get; set; }\n        public string ColorName { get; set; }\n        public string CompanyName { get; set; }\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n        public DateTime RentDate { get; set; }\n        public DateTime ReturnDate { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/DTOs/UserForLoginDto.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.DTOs\n{\n    public class UserForLoginDto:IDto\n    {\n        public string Email { get; set; }\n        public string Password { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/DTOs/UserForRegisterDto.cs",
    "content": "﻿using Core.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace Entities.DTOs\n{\n    public class UserForRegisterDto:IDto\n    {\n        public string Email { get; set; }\n        public string Password { get; set; }\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n    }\n}\n"
  },
  {
    "path": "Entities/Entities.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{D8F5692B-BD1D-47CF-8B64-45317038C94E}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Entities</RootNamespace>\n    <AssemblyName>Entities</AssemblyName>\n    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n    <Deterministic>true</Deterministic>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Numerics\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Net.Http\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Concrete\\Brand.cs\" />\n    <Compile Include=\"Concrete\\Car.cs\" />\n    <Compile Include=\"Concrete\\CarImage.cs\" />\n    <Compile Include=\"Concrete\\Cart.cs\" />\n    <Compile Include=\"Concrete\\Color.cs\" />\n    <Compile Include=\"Concrete\\Customer.cs\" />\n    <Compile Include=\"Concrete\\Payment.cs\" />\n    <Compile Include=\"Concrete\\Rental.cs\" />\n    <Compile Include=\"DTOs\\CarDetailDto.cs\" />\n    <Compile Include=\"DTOs\\CustomerDetailDto.cs\" />\n    <Compile Include=\"DTOs\\RentalDetailDto.cs\" />\n    <Compile Include=\"DTOs\\UserForLoginDto.cs\" />\n    <Compile Include=\"DTOs\\UserForRegisterDto.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Core\\Core.csproj\">\n      <Project>{185e58ed-316c-45f6-8472-03592bb71a21}</Project>\n      <Name>Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n</Project>"
  },
  {
    "path": "Entities/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// Bir bütünleştirilmiş koda ilişkin Genel Bilgiler aşağıdaki öznitelikler kümesiyle\n// denetlenir. Bütünleştirilmiş kod ile ilişkili bilgileri değiştirmek için\n// bu öznitelik değerlerini değiştirin.\n[assembly: AssemblyTitle(\"Entities\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Entities\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2021\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// ComVisible özniteliğinin false olarak ayarlanması bu bütünleştirilmiş koddaki türleri\n// COM bileşenleri için görünmez yapar. Bu bütünleştirilmiş koddaki bir türe\n// erişmeniz gerekirse ComVisible özniteliğini o türde true olarak ayarlayın.\n[assembly: ComVisible(false)]\n\n// Bu proje COM'un kullanımına sunulursa, aşağıdaki GUID tür kitaplığının kimliği içindir\n[assembly: Guid(\"d8f5692b-bd1d-47cf-8b64-45317038c94e\")]\n\n// Bir derlemenin sürüm bilgileri aşağıdaki dört değerden oluşur:\n//\n//      Ana Sürüm\n//      İkincil Sürüm \n//      Yapı Numarası\n//      Düzeltme\n//\n// Tüm değerleri belirtebilir veya varsayılan Derleme ve Düzeltme Numaralarını kullanmak için\n// aşağıda gösterildiği gibi '*' kullanabilirsiniz:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "Entities/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <runtime>\n    <assemblyBinding xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.Runtime.CompilerServices.Unsafe\" publicKeyToken=\"b03f5f7f11d50a3a\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.0\" newVersion=\"5.0.0.0\" />\n      </dependentAssembly>\n      <dependentAssembly>\n        <assemblyIdentity name=\"System.IO.Pipelines\" publicKeyToken=\"cc7b13ffcd2ddd51\" culture=\"neutral\" />\n        <bindingRedirect oldVersion=\"0.0.0.0-5.0.0.1\" newVersion=\"5.0.0.1\" />\n      </dependentAssembly>\n    </assemblyBinding>\n  </runtime>\n</configuration>"
  },
  {
    "path": "README.md",
    "content": "## Welcome to My Car Rental Project\n\n### The project was developed in accordance with SOLID principles, corporate software architecture, AOP, and software development principles.\n \n* Developed on the .Net Core 3.1 platform.\n* Cross Cutting Concerns were developed using the Autofac library with interceptors.\n  * Performance   \n  * Transaction\n  * Validation\n  * Caching\n\n* Developed using Entity Framework ORM.\n* AOP (Aspect-Oriented Programming) was used to handle Cross Cutting Concerns in a modular way.\n* Exception Middleware was developed for centralized error handling.\n* Claim mechanism was used to provide more flexible role-based authorization.\n* JWT (JSON Web Token) authentication was integrated.\n* Fluent Validation was used to implement validation processes.\n* IoC (Inversion Of Control) was applied to create loosely coupled objects.\n* REST and RESTful Web Services were used for server-client communication.\n\n### C# Backend Layers\n\n* Core: A general layer designed to make tools reusable across other projects.\n* Entities: The layer where database tables are mapped to objects.\n* DataAccess: The layer responsible for database operations.\n* Business: The layer where business logic is implemented\n* WebAPI: The layer that facilitates server-client communication via the RESTful (Representational State Transfer) HTTP protocol. \n\n\n"
  },
  {
    "path": "ReCapProject.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.31005.135\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Entities\", \"Entities\\Entities.csproj\", \"{D8F5692B-BD1D-47CF-8B64-45317038C94E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Business\", \"Business\\Business.csproj\", \"{710A9967-AB8D-42BF-ACC4-51E19AD024F1}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"ConsoleUI\", \"ConsoleUI\\ConsoleUI.csproj\", \"{80F94BC3-9DE5-48FA-9093-A5E2F412A505}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"DataAccess\", \"DataAccess\\DataAccess.csproj\", \"{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Core\", \"Core\\Core.csproj\", \"{185E58ED-316C-45F6-8472-03592BB71A21}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"WebAPI\", \"WebAPI\\WebAPI.csproj\", \"{87C0F5A3-05B6-4D63-8F35-3C893F74E741}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D8F5692B-BD1D-47CF-8B64-45317038C94E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{710A9967-AB8D-42BF-ACC4-51E19AD024F1}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{80F94BC3-9DE5-48FA-9093-A5E2F412A505}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DFA505E2-14B4-462A-8DDA-09EEFFAD1018}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{185E58ED-316C-45F6-8472-03592BB71A21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{185E58ED-316C-45F6-8472-03592BB71A21}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{185E58ED-316C-45F6-8472-03592BB71A21}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{185E58ED-316C-45F6-8472-03592BB71A21}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{87C0F5A3-05B6-4D63-8F35-3C893F74E741}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tSolutionGuid = {BBD63571-3102-4665-8C98-0A4DD1579EC7}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "WebAPI/.config/dotnet-tools.json",
    "content": "{\n  \"version\": 1,\n  \"isRoot\": true,\n  \"tools\": {\n    \"dotnet-ef\": {\n      \"version\": \"5.0.4\",\n      \"commands\": [\n        \"dotnet-ef\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "WebAPI/Controllers/AuthController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.DTOs;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class AuthController : ControllerBase\n    {\n        private IAuthService _authService;\n\n        public AuthController(IAuthService authService)\n        {\n            _authService = authService;\n        }\n\n        [HttpPost(\"login\")]\n        public ActionResult Login(UserForLoginDto userForLoginDto)\n        {\n            var userToLogin = _authService.Login(userForLoginDto);\n            if (!userToLogin.Success)\n            {\n                return BadRequest(userToLogin.Message);\n            }\n\n            var result = _authService.CreateAccessToken(userToLogin.Data);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n\n            return BadRequest(result.Message);\n        }\n\n        [HttpPost(\"register\")]\n        public ActionResult Register(UserForRegisterDto userForRegisterDto)\n        {\n            var userExists = _authService.UserExists(userForRegisterDto.Email);\n            if (!userExists.Success)\n            {\n                return BadRequest(userExists);\n            }\n\n            var registerResult = _authService.Register(userForRegisterDto);\n            var result = _authService.CreateAccessToken(registerResult.Data);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/BrandsController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class BrandsController : ControllerBase\n    {\n        IBrandService _brandService;\n        public BrandsController(IBrandService brandService)\n        {\n            _brandService = brandService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _brandService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _brandService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Brand brand)\n        {\n            var result = _brandService.Add(brand);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(Brand brand)\n        {\n            var result = _brandService.Delete(brand);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(Brand brand)\n        {\n            var result = _brandService.Update(brand);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/CarImagesController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.IO;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class CarImagesController : ControllerBase\n    {\n        ICarImageService _carImageService;\n\n        public CarImagesController(ICarImageService carImageService)\n        {\n            _carImageService = carImageService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _carImageService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById([FromForm(Name = (\"Id\"))] int Id)\n        {\n            var result = _carImageService.Get(Id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getimagesbycaridform\")]\n        public IActionResult GetImagesByCarId([FromForm(Name = (\"CarId\"))] int CarId)\n        {\n            var result = _carImageService.GetImagesByCarId(CarId);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getimagesbycarid\")]\n        public IActionResult GetImagesByCarId2(int id)\n        {\n            var result = _carImageService.GetImagesByCarId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult AddAsync([FromForm(Name = (\"Image\"))] IFormFile file, [FromForm] CarImage carImage)\n        {\n            var result = _carImageService.Add(carImage,file);\n\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update([FromForm(Name = (\"Image\"))] IFormFile file, [FromForm] CarImage carImage)\n        {      \n            var result = _carImageService.Update(carImage, file);\n\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete([FromForm(Name =(\"Id\"))] int Id)\n        {            \n            var carImage = _carImageService.Get(Id).Data;            \n            var result = _carImageService.Delete(carImage);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n\n        }   \n        \n        [HttpPost(\"transaction\")]\n        public IActionResult TransactionTest([FromForm(Name = (\"Image\"))] IFormFile file, [FromForm] CarImage carImage)\n        {\n            var result = _carImageService.TransactionalOperation(carImage, file);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n\n\n}\n"
  },
  {
    "path": "WebAPI/Controllers/CarsController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class CarsController : ControllerBase\n    {\n        ICarService _carService;\n\n        public CarsController(ICarService carService)\n        {\n            _carService = carService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _carService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _carService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbycarid\")]\n        public IActionResult GetByCarId(int id)\n        {\n            var result = _carService.GetCarDetail(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getcarsbybrandid\")]\n        public IActionResult GetCarsByBrandId(int id)\n        {\n            var result = _carService.GetCarsByBrandId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getcarsbycolorid\")]\n        public IActionResult GetCarsByColorId(int id)\n        {\n            var result = _carService.GetCarsByColorId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Car car)\n        {\n            var result = _carService.Add(car);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(Car car)\n        {\n            var result = _carService.Delete(car);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(Car car)\n        {\n            var result = _carService.Update(car);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getcardetails\")]\n        public IActionResult GetCarsDetails()\n        {\n            var result = _carService.GetCarDetails();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getcardetailsbycarid\")]\n        public IActionResult GetCarsDetailsByCarId(int id)\n        {\n            var result = _carService.GetCarDetailsByCarId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n\n        [HttpGet(\"getcardetailsbybrandcolor\")]\n        public IActionResult GetCarDetailsByBrandColor(int brandid,int colorid)\n        {\n            var result = _carService.GetCarDetailsByBrandColor(brandid,colorid);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getcardetailsbybrandid\")]\n        public IActionResult GetCarDetailsByBrandId(int id)\n        {\n            var result = _carService.GetCarDetailsByBrandId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n        [HttpGet(\"getcardetailsbycolorid\")]\n        public IActionResult GetCarDetailsByColorId(int id)\n        {\n            var result = _carService.GetCarDetailsByColorId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/CartsController.cs",
    "content": "﻿using Business.Abstract;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class CartsController : ControllerBase\n    {\n        ICartService _cartService;\n\n        public CartsController(ICartService cartService)\n        {\n            _cartService = cartService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _cartService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getallbyid\")]\n        public IActionResult GetAll(int id)\n        {\n            var result = _cartService.GetAllByCustomerId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/ColorsController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class ColorsController : ControllerBase\n    {\n        IColorService _colorService;\n\n        public ColorsController(IColorService colorService)\n        {\n            _colorService = colorService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _colorService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _colorService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Color color)\n        {\n            var result = _colorService.Add(color);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(Color color)\n        {\n            var result = _colorService.Delete(color);\n            if(result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(Color color)\n        {\n            var result = _colorService.Update(color);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/CustomersController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class CustomersController : ControllerBase\n    {\n        ICustomerService _customerService;\n\n        public CustomersController(ICustomerService customerService)\n        {\n            _customerService = customerService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _customerService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getalldetails\")]\n        public IActionResult GetCustomerDetails()\n        {\n            var result = _customerService.GetCustomerDetails();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _customerService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyuserid\")]\n        public IActionResult GetByUserId(int id)\n        {\n            var result = _customerService.GetbyUser(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Customer customer)\n        {\n            var result = _customerService.Add(customer);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(Customer customer)\n        {\n            var result = _customerService.Delete(customer);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(Customer customer)\n        {\n            var result = _customerService.Update(customer);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/PaysController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class PaysController : ControllerBase\n    {\n        IPaymentService _paymentService;\n        public PaysController(IPaymentService paymentService)\n        {\n            _paymentService = paymentService;\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Payment payment)\n        {\n            var result = _paymentService.Add(payment);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/RentalsController.cs",
    "content": "﻿using Business.Abstract;\nusing Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class RentalsController : ControllerBase\n    {\n        IRentalService _rentalService;\n\n        public RentalsController(IRentalService rentalService)\n        {\n            _rentalService = rentalService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _rentalService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getrentaldetails\")]\n        public IActionResult GetRentalDetails()\n        {\n            var result = _rentalService.GetRentalDetails();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getrentaldetailsbycarid\")]\n        public IActionResult GetRentalDetailsByCarId(int id)\n        {\n            var result = _rentalService.GetRentalDetailsByCarId(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _rentalService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(Rental rental)\n        {\n            //rental.ReturnDate = DateTime.Now.AddDays(2).AddHours(3);\n            var result = _rentalService.Add(rental);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(Rental rental)\n        {\n            var result = _rentalService.Delete(rental);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(Rental rental)\n        {\n            var result = _rentalService.Update(rental);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"datecheck\")]\n        public IActionResult datecheck(Rental rental)\n        {            \n            var result = _rentalService.DateCheck(rental);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/UsersController.cs",
    "content": "﻿using Business.Abstract;\nusing Core.Entities.Concrete;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [Route(\"api/[controller]\")]\n    [ApiController]\n    public class UsersController : ControllerBase\n    {\n        IUserService _userService;\n\n        public UsersController(IUserService userService)\n        {\n            _userService = userService;\n        }\n\n        [HttpGet(\"getall\")]\n        public IActionResult GetAll()\n        {\n            var result = _userService.GetAll();\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpGet(\"getbyid\")]\n        public IActionResult GetById(int id)\n        {\n            var result = _userService.Get(id);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"add\")]\n        public IActionResult Add(User user)\n        {\n            var result = _userService.Add(user);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"delete\")]\n        public IActionResult Delete(User user)\n        {\n            var result = _userService.Delete(user);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n\n        [HttpPost(\"update\")]\n        public IActionResult Update(User user)\n        {\n            var result = _userService.Update(user);\n            if (result.Success)\n            {\n                return Ok(result);\n            }\n            return BadRequest(result);\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Controllers/WeatherForecastController.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI.Controllers\n{\n    [ApiController]\n    [Route(\"[controller]\")]\n    public class WeatherForecastController : ControllerBase\n    {\n        private static readonly string[] Summaries = new[]\n        {\n            \"Freezing\", \"Bracing\", \"Chilly\", \"Cool\", \"Mild\", \"Warm\", \"Balmy\", \"Hot\", \"Sweltering\", \"Scorching\"\n        };\n\n        private readonly ILogger<WeatherForecastController> _logger;\n\n        public WeatherForecastController(ILogger<WeatherForecastController> logger)\n        {\n            _logger = logger;\n        }\n\n        [HttpGet]\n        public IEnumerable<WeatherForecast> Get()\n        {\n            var rng = new Random();\n            return Enumerable.Range(1, 5).Select(index => new WeatherForecast\n            {\n                Date = DateTime.Now.AddDays(index),\n                TemperatureC = rng.Next(-20, 55),\n                Summary = Summaries[rng.Next(Summaries.Length)]\n            })\n            .ToArray();\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/Program.cs",
    "content": "using Autofac;\nusing Autofac.Extensions.DependencyInjection;\nusing Business.DependencyResolvers.Autofac;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI\n{\n    public class Program\n    {\n        public static void Main(string[] args)\n        {\n            CreateHostBuilder(args).Build().Run();\n        }\n\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\n            Host.CreateDefaultBuilder(args)\n                .UseServiceProviderFactory(new AutofacServiceProviderFactory())\n                .ConfigureContainer<ContainerBuilder>(builder => { builder.RegisterModule(new AutofacBusinessModule()); })\n                .ConfigureWebHostDefaults(webBuilder =>\n                {\n                    webBuilder.UseStartup<Startup>();\n                });\n    }\n}\n"
  },
  {
    "path": "WebAPI/Properties/launchSettings.json",
    "content": "﻿{\n  \"$schema\": \"http://json.schemastore.org/launchsettings.json\",\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:55343\",\n      \"sslPort\": 44399\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"weatherforecast\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"WebAPI\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"weatherforecast\",\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "WebAPI/Startup.cs",
    "content": "using Business.Abstract;\nusing Business.Concrete;\nusing Core.DependencyResolvers;\nusing Core.Extensions;\nusing Core.Utilities.IoC;\nusing Core.Utilities.Security.Encryption;\nusing Core.Utilities.Security.Jwt;\nusing DataAccess.Abstract;\nusing DataAccess.Concrete.EntityFramework;\nusing Microsoft.AspNetCore.Authentication.JwtBearer;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.HttpsPolicy;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Hosting;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.IdentityModel.Tokens;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace WebAPI\n{\n    public class Startup\n    {\n        public Startup(IConfiguration configuration)\n        {\n            Configuration = configuration;\n        }\n\n        public IConfiguration Configuration { get; }\n\n        // This method gets called by the runtime. Use this method to add services to the container.\n        public void ConfigureServices(IServiceCollection services)\n        {\n            services.AddControllers();\n            services.AddCors();\n            //services.AddSingleton<ICarService,CarManager>();\n            //services.AddSingleton<ICarDal,EfCarDal>();\n            //services.AddSingleton<IBrandService,BrandManager>();\n            //services.AddSingleton<IBrandDal,EfBrandDal>();\n            //services.AddSingleton<IColorService,ColorManager>();\n            //services.AddSingleton<IColorDal, EfColorDal>();\n            //services.AddSingleton<IUserService,UserManager>();\n            //services.AddSingleton<IUserDal,EfUserDal>();\n            //services.AddSingleton<ICustomerService,CustomerManager>();\n            //services.AddSingleton<ICustomerDal,EfCustomerDal>();\n            //services.AddSingleton<IRentalService,RentalManager>();\n            //services.AddSingleton<IRentalDal, EfRentalDal>();\n\n            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();\n\n            var tokenOptions = Configuration.GetSection(\"TokenOptions\").Get<TokenOptions>();\n            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)\n                .AddJwtBearer(options =>\n                {\n                    options.TokenValidationParameters = new TokenValidationParameters\n                    {\n                        ValidateIssuer = true,\n                        ValidateAudience = true,\n                        ValidateLifetime = true,\n                        ValidIssuer = tokenOptions.Issuer,\n                        ValidAudience = tokenOptions.Audience,\n                        ValidateIssuerSigningKey = true,\n                        IssuerSigningKey = SecurityKeyHelper.CreateSecurityKey(tokenOptions.SecurityKey)\n                    };\n                });\n\n            services.AddDependencyResolvers( new ICoreModule[] { new CoreModule() });\n\n        }\n\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n        {\n            if (env.IsDevelopment())\n            {\n                app.UseDeveloperExceptionPage();\n            }\n\n            app.ConfigureCustomExceptionMiddleware();\n\n            app.UseCors(builder=>builder.WithOrigins(\"http://localhost:4200\").AllowAnyHeader().AllowAnyOrigin());\n\n            app.UseHttpsRedirection();\n\n            app.UseRouting();\n\n            app.UseAuthentication();\n\n            app.UseStaticFiles();\n\n            app.UseAuthorization();\n\n            app.UseEndpoints(endpoints =>\n            {\n                endpoints.MapControllers();\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "WebAPI/WeatherForecast.cs",
    "content": "using System;\n\nnamespace WebAPI\n{\n    public class WeatherForecast\n    {\n        public DateTime Date { get; set; }\n\n        public int TemperatureC { get; set; }\n\n        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);\n\n        public string Summary { get; set; }\n    }\n}\n"
  },
  {
    "path": "WebAPI/WebAPI.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp3.1</TargetFramework>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Autofac.Extensions.DependencyInjection\" Version=\"7.1.0\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Authentication.JwtBearer\" Version=\"3.1.12\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Http.Features\" Version=\"5.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Business\\Business.csproj\" />\n    <ProjectReference Include=\"..\\DataAccess\\DataAccess.csproj\" />\n    <ProjectReference Include=\"..\\Entities\\Entities.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Folder Include=\"wwwroot\\Images\\\" />\n  </ItemGroup>\n\n\n</Project>\n"
  },
  {
    "path": "WebAPI/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "WebAPI/appsettings.json",
    "content": "{\n  \"TokenOptions\": {\n    \"Audience\": \"ugur@ugur.com\",\n    \"Issuer\": \"ugur@ugur.com\",\n    \"AccessTokenExpiration\": 10,\n    \"SecurityKey\": \"mysupersecretkeymysupersecretkey\"\n  },\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft\": \"Warning\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n    }\n  },\n  \"AllowedHosts\": \"*\"\n}\n"
  }
]