├── WebAPI
├── wwwroot
│ └── Images
│ │ ├── logo.jpg
│ │ ├── 00f6537f-eb18-418b-a7e7-c138ca3d25f7.jpg
│ │ ├── 03d73a38-6aa2-434f-a179-0afbde158b8d.jpeg
│ │ ├── 046a7457-e63e-4a38-af70-4ebdce49677b.jpeg
│ │ ├── 0a64fd43-0f5b-495c-87c7-e2aaf526e458.jpg
│ │ ├── 0e5e15bf-7361-428d-a010-8adb4a4d4d09.jpg
│ │ ├── 0f8d9551-1a6d-4e75-90c9-2e9660cc9ae9.jpg
│ │ ├── 11fc2bb5-48a8-4287-b971-d53a9296a8e6.jpg
│ │ ├── 1dfcc870-81bf-4955-9304-dabb44f05b90.jpg
│ │ ├── 2456fea3-8845-4431-942b-524f8d970c57.jpg
│ │ ├── 26aa8351-e391-4838-9a6d-1dc7f03c1dca.jpg
│ │ ├── 276ecf1f-ffc6-4d64-9b8b-8c0b8932a078.jpg
│ │ ├── 2928e091-1850-43d2-90c5-a993815de67f.jpg
│ │ ├── 2b106a61-b525-42c9-8a6b-8a1bf96916fd.jpeg
│ │ ├── 33d54336-6435-4159-b6ea-ce5ea354482b.jpg
│ │ ├── 34fd7ae3-02d8-446f-8fca-26399c3ca90b.jpg
│ │ ├── 350ad9ff-4d67-45f5-8b3e-d279399a2adc.jpg
│ │ ├── 3b360504-28ce-4fe3-ab7d-79878898e511.jpg
│ │ ├── 3ceba2f4-c233-4f4e-984b-797ddb7661a4.jpg
│ │ ├── 40fc33e8-d6e2-463f-b8fd-d67d1cce6794.jpg
│ │ ├── 49f05e92-889a-42c7-a8f9-d04e1c0a0980.jpg
│ │ ├── 565c98c3-4b3d-4901-af2b-48d280e5933d.jpg
│ │ ├── 5dccfafb-cf40-44c0-997c-0137a4e3dbd5.jpg
│ │ ├── 5e26cb8f-8193-48f3-90fb-38d22dcc3650.jpg
│ │ ├── 6092ed7e-0828-44a4-99f5-1ab300994e0d.jpg
│ │ ├── 65d02cc9-5ee0-4693-9ce6-7802ca372b41.jpg
│ │ ├── 68e2fc27-2052-4a5c-a94e-80fd242835bf.jpg
│ │ ├── 692a04c9-3a9e-4d68-b892-b523f27378e6.jpg
│ │ ├── 692ca5c8-d9e6-4fe2-9a25-993bb64536f6.jpg
│ │ ├── 74244231-e447-458f-b7d9-357d21614b0a.jpg
│ │ ├── 7465deb0-a315-4dcd-91b9-e6c174618445.jpeg
│ │ ├── 7a3df2a6-7aa5-45d1-9d41-0dbe51d092d7.jpg
│ │ ├── 858ab55f-b576-4298-93b4-3cc2a7ba0c4f.jpg
│ │ ├── 887c752d-0987-412c-a858-3f3c2d208075.jpg
│ │ ├── 8c605ffb-357d-4a5e-a055-a173ca1fb593.jpg
│ │ ├── 8fa3b8fc-2eb0-4837-bb9e-462c0c335ff7.jpg
│ │ ├── 980e2174-0ffc-41a4-844f-85a3268f7ae4.jpg
│ │ ├── 9b61af7c-aff2-450e-bf37-8280a34c5fe2.jpg
│ │ ├── 9c89ee69-00a3-4a9a-bfe0-81d5b31a7564.jpg
│ │ ├── a0f2aadb-4d31-457c-bf63-a2c06377bf0c.jpeg
│ │ ├── a489aebe-cd48-4f25-9882-701b87adce01.jpg
│ │ ├── a6ca8af4-cf13-458e-9afe-b54607d382fc.jpg
│ │ ├── a88edb6e-02e1-4822-8861-8a722b0dda1b.jpg
│ │ ├── ca6442e1-43fb-4fcc-bc33-052fd29e3a46.jpg
│ │ ├── ce49b53c-188c-4dfa-bf02-c1b428dd25aa.jpg
│ │ ├── cea17cd1-0840-46c7-81ae-218e0c6cc590.jpg
│ │ ├── d07a1927-e921-40ad-8304-73a3c2431862.jpg
│ │ ├── da340b5f-803c-4019-8cad-64eb158dd35a.jpg
│ │ ├── dcebee70-f238-466f-9f5d-31eab4b86b35.jpg
│ │ ├── e1d32560-9ae4-4116-bdbc-635ba1f2ef33.jpg
│ │ ├── e1eb6b29-1c66-4a34-9a26-3778781ff5c6.jpg
│ │ ├── e3e9db9f-c2e1-4821-a721-6239a49a2993.jpg
│ │ ├── f2dad1f6-66ef-440b-89c7-dd2f0052a50d.jpg
│ │ ├── f78d6402-38f8-43a4-a397-9a3de7409c02.jpg
│ │ ├── f8e565a2-77f1-48c6-befd-e0aef050c2ff.jpg
│ │ ├── fe506da1-ffac-48e1-9868-eeaa0c257670.jpg
│ │ ├── fe78d88b-d9bb-4d84-90d8-c314f796121f.jpg
│ │ └── ff554a87-622c-4ab0-b4e7-c34683b5523d.jpg
├── appsettings.Development.json
├── WeatherForecast.cs
├── appsettings.json
├── Properties
│ └── launchSettings.json
├── Program.cs
├── Controllers
│ ├── WeatherForecastController.cs
│ ├── UsersController.cs
│ ├── ColorsController.cs
│ ├── BrandsController.cs
│ ├── RentalsController.cs
│ ├── CustomersController.cs
│ ├── CarImagesController.cs
│ ├── FakeCardsController.cs
│ └── CarsController.cs
├── WebAPI.csproj
└── Startup.cs
├── Console
├── Class1.cs
└── Console.csproj
├── Core
├── Entities
│ ├── IDto.cs
│ ├── IEntity.cs
│ └── Concrete
│ │ ├── OperationClaim.cs
│ │ ├── UserOperationClaim.cs
│ │ └── User.cs
├── CrossCuttingConcerns
│ ├── Logging
│ │ ├── LogDetailWithException.cs
│ │ ├── LogParameter.cs
│ │ ├── LogDetail.cs
│ │ └── Log4Net
│ │ │ ├── Loggers
│ │ │ ├── FileLogger.cs
│ │ │ └── DatabaseLogger.cs
│ │ │ ├── SerializableLogEvent.cs
│ │ │ ├── Layouts
│ │ │ └── JsonLayout.cs
│ │ │ └── LoggerServiceBase.cs
│ ├── Caching
│ │ ├── ICacheManager.cs
│ │ └── Microsoft
│ │ │ └── MemoryCacheManager.cs
│ └── Validation
│ │ └── ValidationTool.cs
├── Utilities
│ ├── IoC
│ │ ├── ICoreModule.cs
│ │ └── ServiceTool.cs
│ ├── Results
│ │ ├── IDataResult.cs
│ │ ├── IResult.cs
│ │ ├── ErrorResult.cs
│ │ ├── SuccessResult.cs
│ │ ├── Result.cs
│ │ ├── DataResult.cs
│ │ ├── ErrorDataResult.cs
│ │ └── SuccessDataResult.cs
│ ├── Security
│ │ ├── JWT
│ │ │ ├── AccessToken.cs
│ │ │ ├── ITokenHelper.cs
│ │ │ ├── TokenOptions.cs
│ │ │ └── JwtHelper.cs
│ │ ├── Encrypiton
│ │ │ ├── SigningCredentialsHelper.cs
│ │ │ └── SecurityKeyHelper.cs
│ │ └── Hashing
│ │ │ └── HashingHelper.cs
│ ├── Messages
│ │ └── AspectMessages.cs
│ ├── Business
│ │ └── BusinessRules.cs
│ ├── Interceptors
│ │ ├── MethodInterceptionBaseAttribute.cs
│ │ ├── AspectInterceptorSelector.cs
│ │ └── MethodInterception.cs
│ └── FileHelpers
│ │ └── FileHelper.cs
├── Extensions
│ ├── ExceptionMiddlewareExtensions.cs
│ ├── ErrorDetails.cs
│ ├── ServiceCollectionExtensions.cs
│ ├── ClaimsPrincipalExtensions.cs
│ ├── ClaimExtensions.cs
│ └── ExceptionMiddleware.cs
├── DataAccess
│ ├── IEntityRepository.cs
│ └── EntityFramework
│ │ └── EfEntityRepositoryBase.cs
├── DependencyResolvers
│ └── CoreModule.cs
├── Aspects
│ └── Autofac
│ │ ├── Caching
│ │ ├── CacheRemoveAspect.cs
│ │ └── CacheAspect.cs
│ │ ├── Transaction
│ │ └── TransactionScopeAspect.cs
│ │ ├── Perfromanca
│ │ └── PerformanceAspect.cs
│ │ ├── Validation
│ │ └── ValidationAspect.cs
│ │ ├── Logging
│ │ └── LogAspect.cs
│ │ └── Exception
│ │ └── ExceptionLogAspect.cs
└── Core.csproj
├── Entities
├── DTOs
│ ├── UserForLoginDto.cs
│ ├── UserForRegisterDto.cs
│ ├── CustomerDetailDto.cs
│ ├── CarDetailDto.cs
│ └── RentalDetailDto.cs
├── Concrete
│ ├── Brand.cs
│ ├── Color.cs
│ ├── Customer.cs
│ ├── CarImage.cs
│ ├── Rental.cs
│ ├── FakeCard.cs
│ └── Car.cs
└── Entities.csproj
├── DataAccess
├── Concrete
│ └── EntityFramework
│ │ ├── EfEntityRepositoryBase.cs
│ │ ├── EfFakeCardDal.cs
│ │ ├── EfCarImagesDal.cs
│ │ ├── EfBrandDal.cs
│ │ ├── EfColorDal.cs
│ │ ├── EfUserDal.cs
│ │ ├── CarDbContext.cs
│ │ ├── EfCustomerDal.cs
│ │ ├── EfRentalDal.cs
│ │ └── EfCarDal.cs
├── Abstack
│ ├── IBrandDal.cs
│ ├── IColorDal.cs
│ ├── ICarImagesDal .cs
│ ├── IFakeCardDal.cs
│ ├── IUserDal.cs
│ ├── IRentalDal.cs
│ ├── ICustomerDal.cs
│ └── ICarDal.cs
└── DataAccess.csproj
├── Business
├── Abstack
│ ├── IUserService.cs
│ ├── IColorService.cs
│ ├── IBrandService.cs
│ ├── IAuthService.cs
│ ├── ICarImageService.cs
│ ├── IFakeCardService.cs
│ ├── ICustomerService.cs
│ ├── IRentalService.cs
│ └── ICarService.cs
├── ValidationRules
│ └── FluentValidation
│ │ ├── CarImageValidator.cs
│ │ ├── BrandValidator.cs
│ │ ├── ColorValidator.cs
│ │ ├── RentalValidator.cs
│ │ └── CarValidator.cs
├── Business.csproj
├── Concrete
│ ├── UserManager.cs
│ ├── ColorManager.cs
│ ├── BrandManager.cs
│ ├── FakeCardManager.cs
│ ├── CustomerManager.cs
│ ├── AuthManager.cs
│ ├── RentalManager.cs
│ ├── CarImageManager.cs
│ └── CarManager.cs
├── BusinessAspect
│ └── Autofac
│ │ └── SecuredOperation.cs
├── DependencyResolvers
│ └── Autofac
│ │ └── AutofacBusinessModule.cs
└── Constants
│ └── Messages.cs
├── ConsolePrj
├── ConsolePrj.csproj
└── Program.cs
├── .gitattributes
├── ReCapProjectSon.sln
└── .gitignore
/WebAPI/wwwroot/Images/logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/logo.jpg
--------------------------------------------------------------------------------
/Console/Class1.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Console
4 | {
5 | public class Class1
6 | {
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/00f6537f-eb18-418b-a7e7-c138ca3d25f7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/00f6537f-eb18-418b-a7e7-c138ca3d25f7.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/03d73a38-6aa2-434f-a179-0afbde158b8d.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/03d73a38-6aa2-434f-a179-0afbde158b8d.jpeg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/046a7457-e63e-4a38-af70-4ebdce49677b.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/046a7457-e63e-4a38-af70-4ebdce49677b.jpeg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/0a64fd43-0f5b-495c-87c7-e2aaf526e458.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/0a64fd43-0f5b-495c-87c7-e2aaf526e458.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/0e5e15bf-7361-428d-a010-8adb4a4d4d09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/0e5e15bf-7361-428d-a010-8adb4a4d4d09.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/0f8d9551-1a6d-4e75-90c9-2e9660cc9ae9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/0f8d9551-1a6d-4e75-90c9-2e9660cc9ae9.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/11fc2bb5-48a8-4287-b971-d53a9296a8e6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/11fc2bb5-48a8-4287-b971-d53a9296a8e6.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/1dfcc870-81bf-4955-9304-dabb44f05b90.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/1dfcc870-81bf-4955-9304-dabb44f05b90.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/2456fea3-8845-4431-942b-524f8d970c57.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/2456fea3-8845-4431-942b-524f8d970c57.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/26aa8351-e391-4838-9a6d-1dc7f03c1dca.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/26aa8351-e391-4838-9a6d-1dc7f03c1dca.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/276ecf1f-ffc6-4d64-9b8b-8c0b8932a078.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/276ecf1f-ffc6-4d64-9b8b-8c0b8932a078.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/2928e091-1850-43d2-90c5-a993815de67f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/2928e091-1850-43d2-90c5-a993815de67f.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/2b106a61-b525-42c9-8a6b-8a1bf96916fd.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/2b106a61-b525-42c9-8a6b-8a1bf96916fd.jpeg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/33d54336-6435-4159-b6ea-ce5ea354482b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/33d54336-6435-4159-b6ea-ce5ea354482b.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/34fd7ae3-02d8-446f-8fca-26399c3ca90b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/34fd7ae3-02d8-446f-8fca-26399c3ca90b.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/350ad9ff-4d67-45f5-8b3e-d279399a2adc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/350ad9ff-4d67-45f5-8b3e-d279399a2adc.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/3b360504-28ce-4fe3-ab7d-79878898e511.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/3b360504-28ce-4fe3-ab7d-79878898e511.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/3ceba2f4-c233-4f4e-984b-797ddb7661a4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/3ceba2f4-c233-4f4e-984b-797ddb7661a4.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/40fc33e8-d6e2-463f-b8fd-d67d1cce6794.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/40fc33e8-d6e2-463f-b8fd-d67d1cce6794.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/49f05e92-889a-42c7-a8f9-d04e1c0a0980.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/49f05e92-889a-42c7-a8f9-d04e1c0a0980.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/565c98c3-4b3d-4901-af2b-48d280e5933d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/565c98c3-4b3d-4901-af2b-48d280e5933d.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/5dccfafb-cf40-44c0-997c-0137a4e3dbd5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/5dccfafb-cf40-44c0-997c-0137a4e3dbd5.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/5e26cb8f-8193-48f3-90fb-38d22dcc3650.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/5e26cb8f-8193-48f3-90fb-38d22dcc3650.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/6092ed7e-0828-44a4-99f5-1ab300994e0d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/6092ed7e-0828-44a4-99f5-1ab300994e0d.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/65d02cc9-5ee0-4693-9ce6-7802ca372b41.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/65d02cc9-5ee0-4693-9ce6-7802ca372b41.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/68e2fc27-2052-4a5c-a94e-80fd242835bf.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/68e2fc27-2052-4a5c-a94e-80fd242835bf.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/692a04c9-3a9e-4d68-b892-b523f27378e6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/692a04c9-3a9e-4d68-b892-b523f27378e6.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/692ca5c8-d9e6-4fe2-9a25-993bb64536f6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/692ca5c8-d9e6-4fe2-9a25-993bb64536f6.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/74244231-e447-458f-b7d9-357d21614b0a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/74244231-e447-458f-b7d9-357d21614b0a.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/7465deb0-a315-4dcd-91b9-e6c174618445.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/7465deb0-a315-4dcd-91b9-e6c174618445.jpeg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/7a3df2a6-7aa5-45d1-9d41-0dbe51d092d7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/7a3df2a6-7aa5-45d1-9d41-0dbe51d092d7.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/858ab55f-b576-4298-93b4-3cc2a7ba0c4f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/858ab55f-b576-4298-93b4-3cc2a7ba0c4f.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/887c752d-0987-412c-a858-3f3c2d208075.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/887c752d-0987-412c-a858-3f3c2d208075.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/8c605ffb-357d-4a5e-a055-a173ca1fb593.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/8c605ffb-357d-4a5e-a055-a173ca1fb593.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/8fa3b8fc-2eb0-4837-bb9e-462c0c335ff7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/8fa3b8fc-2eb0-4837-bb9e-462c0c335ff7.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/980e2174-0ffc-41a4-844f-85a3268f7ae4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/980e2174-0ffc-41a4-844f-85a3268f7ae4.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/9b61af7c-aff2-450e-bf37-8280a34c5fe2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/9b61af7c-aff2-450e-bf37-8280a34c5fe2.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/9c89ee69-00a3-4a9a-bfe0-81d5b31a7564.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/9c89ee69-00a3-4a9a-bfe0-81d5b31a7564.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/a0f2aadb-4d31-457c-bf63-a2c06377bf0c.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/a0f2aadb-4d31-457c-bf63-a2c06377bf0c.jpeg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/a489aebe-cd48-4f25-9882-701b87adce01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/a489aebe-cd48-4f25-9882-701b87adce01.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/a6ca8af4-cf13-458e-9afe-b54607d382fc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/a6ca8af4-cf13-458e-9afe-b54607d382fc.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/a88edb6e-02e1-4822-8861-8a722b0dda1b.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/a88edb6e-02e1-4822-8861-8a722b0dda1b.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/ca6442e1-43fb-4fcc-bc33-052fd29e3a46.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/ca6442e1-43fb-4fcc-bc33-052fd29e3a46.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/ce49b53c-188c-4dfa-bf02-c1b428dd25aa.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/ce49b53c-188c-4dfa-bf02-c1b428dd25aa.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/cea17cd1-0840-46c7-81ae-218e0c6cc590.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/cea17cd1-0840-46c7-81ae-218e0c6cc590.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/d07a1927-e921-40ad-8304-73a3c2431862.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/d07a1927-e921-40ad-8304-73a3c2431862.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/da340b5f-803c-4019-8cad-64eb158dd35a.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/da340b5f-803c-4019-8cad-64eb158dd35a.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/dcebee70-f238-466f-9f5d-31eab4b86b35.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/dcebee70-f238-466f-9f5d-31eab4b86b35.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/e1d32560-9ae4-4116-bdbc-635ba1f2ef33.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/e1d32560-9ae4-4116-bdbc-635ba1f2ef33.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/e1eb6b29-1c66-4a34-9a26-3778781ff5c6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/e1eb6b29-1c66-4a34-9a26-3778781ff5c6.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/e3e9db9f-c2e1-4821-a721-6239a49a2993.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/e3e9db9f-c2e1-4821-a721-6239a49a2993.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/f2dad1f6-66ef-440b-89c7-dd2f0052a50d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/f2dad1f6-66ef-440b-89c7-dd2f0052a50d.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/f78d6402-38f8-43a4-a397-9a3de7409c02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/f78d6402-38f8-43a4-a397-9a3de7409c02.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/f8e565a2-77f1-48c6-befd-e0aef050c2ff.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/f8e565a2-77f1-48c6-befd-e0aef050c2ff.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/fe506da1-ffac-48e1-9868-eeaa0c257670.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/fe506da1-ffac-48e1-9868-eeaa0c257670.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/fe78d88b-d9bb-4d84-90d8-c314f796121f.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/fe78d88b-d9bb-4d84-90d8-c314f796121f.jpg
--------------------------------------------------------------------------------
/WebAPI/wwwroot/Images/ff554a87-622c-4ab0-b4e7-c34683b5523d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Duygu98/ReCapProjectS/HEAD/WebAPI/wwwroot/Images/ff554a87-622c-4ab0-b4e7-c34683b5523d.jpg
--------------------------------------------------------------------------------
/Console/Console.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Core/Entities/IDto.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Entities
6 | {
7 | public interface IDto
8 | {
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Core/Entities/IEntity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Entities
6 | {
7 | public interface IEntity
8 | {
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/WebAPI/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/LogDetailWithException.cs:
--------------------------------------------------------------------------------
1 | namespace Core.CrossCuttingConcerns.Logging
2 | {
3 | public class LogDetailWithException : LogDetail
4 | {
5 | public string ExceptionMessage { get; set; }
6 | }
7 | }
--------------------------------------------------------------------------------
/Core/Entities/Concrete/OperationClaim.cs:
--------------------------------------------------------------------------------
1 | namespace Core.Entities.Concrete
2 | {
3 | public class OperationClaim : IEntity
4 | {
5 | public int Id { get; set; }
6 | public string Name { get; set; }
7 | }
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/Core/Utilities/IoC/ICoreModule.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.DependencyInjection;
2 |
3 | namespace Core.Utilities.IoC
4 | {
5 | public interface ICoreModule
6 | {
7 | void Load(IServiceCollection serviceCollection);
8 |
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Entities/DTOs/UserForLoginDto.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 |
3 | namespace Entities.DTOs
4 | {
5 | public class UserForLoginDto : IDto
6 | {
7 | public string Email { get; set; }
8 | public string Password { get; set; }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/IDataResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public interface IDataResult : IResult
8 | {
9 | T Data { get; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Core/Utilities/Security/JWT/AccessToken.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Core.Utilities.Security.JWT
4 | {
5 | public class AccessToken
6 | {
7 | public string Token { get; set; }
8 | public DateTime Expiration { get; set; }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/DataAccess/Concrete/EntityFramework/EfEntityRepositoryBase.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace DataAccess.Concrete.EntityFramework
6 | {
7 | public class EfEntityRepositoryBase
8 | {
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/LogParameter.cs:
--------------------------------------------------------------------------------
1 | namespace Core.CrossCuttingConcerns.Logging
2 | {
3 | public class LogParameter
4 | {
5 | public string Name { get; set; }
6 | public object Value { get; set; }
7 | public string Type { get; set; }
8 | }
9 | }
--------------------------------------------------------------------------------
/Core/Utilities/Results/IResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public interface IResult
8 | {
9 | bool Success { get; }
10 | string Message { get; }
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/IBrandDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace DataAccess.Abstack
8 | {
9 | public interface IBrandDal:IEntityRepository
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/IColorDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace DataAccess.Abstack
8 | {
9 | public interface IColorDal : IEntityRepository
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/ICarImagesDal .cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace DataAccess.Abstack
8 | {
9 | public interface ICarImagesDal : IEntityRepository
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/IFakeCardDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace DataAccess.Abstack
8 | {
9 | public interface IFakeCardDal : IEntityRepository
10 | {
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Core/Utilities/Security/JWT/ITokenHelper.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities.Concrete;
2 | using System.Collections.Generic;
3 |
4 | namespace Core.Utilities.Security.JWT
5 | {
6 | public interface ITokenHelper
7 | {
8 | AccessToken CreateToken(User user, List operationClaims);
9 |
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Entities/Concrete/Brand.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class Brand:IEntity
9 | {
10 | public int BrandId { get; set; }
11 | public string BrandName { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Entities/Concrete/Color.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class Color:IEntity
9 | {
10 | public int ColorId { get; set; }
11 | public string ColorName { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Core/Utilities/Security/JWT/TokenOptions.cs:
--------------------------------------------------------------------------------
1 | namespace Core.Utilities.Security.JWT
2 | {
3 | public class TokenOptions
4 | {
5 | public string Audience { get; set; }
6 | public string Issuer { get; set; }
7 | public int AccessTokenExpiration { get; set; }
8 | public string SecurityKey { get; set; }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/LogDetail.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.CrossCuttingConcerns.Logging
6 | {
7 | public class LogDetail
8 | {
9 | public string MethodName { get; set; }
10 | public List LogParameters { get; set; }
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Entities/DTOs/UserForRegisterDto.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 |
3 | namespace Entities.DTOs
4 | {
5 | public class UserForRegisterDto : IDto
6 | {
7 | public string Email { get; set; }
8 | public string Password { get; set; }
9 | public string FirstName { get; set; }
10 | public string LastName { get; set; }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Entities/Entities.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/WebAPI/WeatherForecast.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace WebAPI
4 | {
5 | public class WeatherForecast
6 | {
7 | public DateTime Date { get; set; }
8 |
9 | public int TemperatureC { get; set; }
10 |
11 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
12 |
13 | public string Summary { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/Log4Net/Loggers/FileLogger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.CrossCuttingConcerns.Logging.Log4Net.Loggers
6 | {
7 | public class FileLogger : LoggerServiceBase
8 | {
9 | public FileLogger() : base("JsonFileLogger")
10 | {
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/Log4Net/Loggers/DatabaseLogger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.CrossCuttingConcerns.Logging.Log4Net.Loggers
6 | {
7 | public class DatabaseLogger : LoggerServiceBase
8 | {
9 | public DatabaseLogger() : base("DatabaseLogger")
10 | {
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Core/Entities/Concrete/UserOperationClaim.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Entities.Concrete
6 | {
7 | public class UserOperationClaim : IEntity
8 | {
9 | public int Id { get; set; }
10 | public int UserId { get; set; }
11 | public int OperationClaimId { get; set; }
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/Core/Utilities/Messages/AspectMessages.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Messages
6 | {
7 | public static class AspectMessages
8 | {
9 | public static string WrongValidationType = "Yanlış doğrulama türü";
10 | public static string WrongLoggerType = "Yanlış kaydedici türü";
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Entities/Concrete/Customer.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class Customer :IEntity
9 | {
10 | public int CustomerId { get; set; }
11 | public int UserId { get; set; }
12 | public string CompanyName { get; set; }
13 |
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/IUserDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Core.Entities.Concrete;
3 | using Entities.Concrete;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace DataAccess.Abstack
9 | {
10 |
11 | public interface IUserDal : IEntityRepository
12 | {
13 | List GetClaims(User user);
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/DataAccess/Concrete/EntityFramework/EfFakeCardDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess.EntityFramework;
2 | using DataAccess.Abstack;
3 | using Entities.Concrete;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace DataAccess.Concrete.EntityFramework
9 | {
10 | public class EfFakeCardDal : EfEntityRepositoryBase, IFakeCardDal
11 | {
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/DataAccess/Concrete/EntityFramework/EfCarImagesDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess.EntityFramework;
2 | using DataAccess.Abstack;
3 | using Entities.Concrete;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace DataAccess.Concrete.EntityFramework
9 | {
10 | public class EfCarImageDal : EfEntityRepositoryBase, ICarImagesDal
11 | {
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/ErrorResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class ErrorResult : Result
8 | {
9 | public ErrorResult(string message) : base(false, message)
10 | {
11 |
12 | }
13 | public ErrorResult() : base(false)
14 | {
15 |
16 |
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Entities/Concrete/CarImage.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class CarImage : IEntity
9 | {
10 | public int Id { get; set; }
11 | public int CarId { get; set; }
12 | public string ImagePath { get; set; }
13 | public DateTime? ImageDate { get; set; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/SuccessResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class SuccessResult : Result
8 | {
9 | public SuccessResult(string message) : base(true, message)
10 | {
11 |
12 | }
13 | public SuccessResult() : base(true)
14 | {
15 |
16 |
17 | }
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Business/Abstack/IUserService.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities.Concrete;
2 | using Core.Utilities.Results;
3 | using Entities.Concrete;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace Business.Abstack
9 | {
10 | public interface IUserService
11 | {
12 | List GetClaims(User user);
13 | void Add(User user);
14 | User GetByMail(string email);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/WebAPI/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "TokenOptions": {
3 | "Audience": "engin@engin.com",
4 | "Issuer": "engin@engin.com",
5 | "AccessTokenExpiration": 10,
6 | "SecurityKey": "mysupersecretkeymysupersecretkey"
7 | },
8 | "Logging": {
9 | "LogLevel": {
10 | "Default": "Information",
11 | "Microsoft": "Warning",
12 | "Microsoft.Hosting.Lifetime": "Information"
13 | }
14 | },
15 | "AllowedHosts": "*"
16 | }
17 |
--------------------------------------------------------------------------------
/Core/Utilities/Security/Encrypiton/SigningCredentialsHelper.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.IdentityModel.Tokens;
2 |
3 | namespace Core.Utilities.Security.Encrypiton
4 | {
5 | public class SigningCredentialsHelper
6 | {
7 | public static SigningCredentials CreateSigningCredentials(SecurityKey security)
8 | {
9 | return new SigningCredentials(security, SecurityAlgorithms.HmacSha512Signature);
10 |
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/IRentalDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using Entities.DTOs;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq.Expressions;
7 | using System.Text;
8 |
9 | namespace DataAccess.Abstack
10 | {
11 | public interface IRentalDal : IEntityRepository
12 | {
13 | List GetRentalDetails(Expression> filter = null);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/ConsolePrj/ConsolePrj.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp3.1
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Core/Extensions/ExceptionMiddlewareExtensions.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.AspNetCore.Builder;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.Extensions
7 | {
8 | public static class ExceptionMiddlewareExtensions
9 | {
10 | public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app)
11 | {
12 | app.UseMiddleware();
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/ICustomerDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using Entities.DTOs;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq.Expressions;
7 | using System.Text;
8 |
9 | namespace DataAccess.Abstack
10 | {
11 | public interface ICustomerDal : IEntityRepository
12 | {
13 | List GetCustomerDetails(Expression> filter = null);
14 |
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Business/ValidationRules/FluentValidation/CarImageValidator.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using Entities.Concrete;
5 | using FluentValidation;
6 |
7 | namespace Business.ValidationRules.FluentValidation
8 | {
9 | public class CarImageValidator : AbstractValidator
10 | {
11 | public CarImageValidator()
12 | {
13 | RuleFor(c => c.CarId).NotEmpty();
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Entities/Concrete/Rental.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class Rental:IEntity
9 | {
10 | public int RentalId { get; set; }
11 | public int CarId { get; set; }
12 | public int CustomerId { get; set; }
13 | public DateTime RentDate { get; set; }
14 | public DateTime? ReturnDate { get; set; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/Core/Utilities/Security/Encrypiton/SecurityKeyHelper.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.IdentityModel.Tokens;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.Utilities.Security.Encrypiton
7 | {
8 | public class SecurityKeyHelper
9 | {
10 | public static SecurityKey CreateSecurityKey(string securityKey)
11 | {
12 | return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
13 |
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DataAccess/DataAccess.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/DataAccess/Concrete/EntityFramework/EfBrandDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess.EntityFramework;
2 | using DataAccess.Abstack;
3 | using Entities.Concrete;
4 | using Microsoft.EntityFrameworkCore;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Linq;
8 | using System.Linq.Expressions;
9 | using System.Text;
10 |
11 | namespace DataAccess.Concrete.EntityFramework
12 | {
13 | public class EfBrandDal : EfEntityRepositoryBase, IBrandDal
14 | {
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DataAccess/Concrete/EntityFramework/EfColorDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess.EntityFramework;
2 | using DataAccess.Abstack;
3 | using Entities.Concrete;
4 | using Microsoft.EntityFrameworkCore;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Linq;
8 | using System.Linq.Expressions;
9 | using System.Text;
10 |
11 | namespace DataAccess.Concrete.EntityFramework
12 | {
13 | public class EfColorDal : EfEntityRepositoryBase, IColorDal
14 | {
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Business/Abstack/IColorService.cs:
--------------------------------------------------------------------------------
1 | using Core.Utilities.Results;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.Abstack
8 | {
9 | public interface IColorService
10 | {
11 | IResult Add(Color color);
12 | IResult Delete(Color color);
13 | IResult Update(Color color);
14 | IDataResult> GetAll();
15 | IDataResult> GetCarsByColorId(int id);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Business/Abstack/IBrandService.cs:
--------------------------------------------------------------------------------
1 | using Core.Utilities.Results;
2 | using Entities.Concrete;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.Abstack
8 | {
9 | public interface IBrandService
10 | {
11 | IResult Add(Brand brand);
12 | IResult Delete(Brand brand);
13 | IResult Update(Brand brand);
14 | IDataResult> GetAll();
15 | IDataResult> GetCarsByBrandId(int id);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Caching/ICacheManager.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.CrossCuttingConcerns.Caching
6 | {
7 | public interface ICacheManager
8 | {
9 | T Get(string key);
10 | object Get(string key);
11 | void Add(string key, object value, int duration);
12 | bool IsAdd(string key);
13 | void Remove(string key);
14 | void RemoveByPattern(string pattern);
15 |
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Business/ValidationRules/FluentValidation/BrandValidator.cs:
--------------------------------------------------------------------------------
1 | using Entities.Concrete;
2 | using FluentValidation;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.ValidationRules.FluentValidation
8 | {
9 | public class BrandValidator : AbstractValidator
10 | {
11 | public BrandValidator()
12 | {
13 |
14 | RuleFor(b => b.BrandName).NotEmpty();
15 | RuleFor(b => b.BrandName).MinimumLength(2);
16 |
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Business/ValidationRules/FluentValidation/ColorValidator.cs:
--------------------------------------------------------------------------------
1 | using Entities.Concrete;
2 | using FluentValidation;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.ValidationRules.FluentValidation
8 | {
9 | public class ColorValidator : AbstractValidator
10 | {
11 |
12 | public ColorValidator()
13 | {
14 | RuleFor(c => c.ColorName).NotEmpty();
15 | RuleFor(c => c.ColorName).MinimumLength(2);
16 |
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Entities/Concrete/FakeCard.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class FakeCard : IEntity
9 | {
10 | public int Id { get; set; }
11 | public string NameOnTheCard { get; set; }
12 | public string CardNumber { get; set; }
13 | public string CardCvv { get; set; }
14 | public string ExpirationDate { get; set; }
15 | public decimal MoneyInTheCard { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/Result.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class Result : IResult
8 | {
9 | public Result(bool succsess, string message) : this(succsess)
10 | {
11 | Message = message;
12 | }
13 | public Result(bool succsess)
14 | {
15 | Success = succsess;
16 | }
17 |
18 | public bool Success { get; }
19 | public string Message { get; }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/DataResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class DataResult : Result, IDataResult
8 | {
9 | public DataResult(T data, bool success, string message) : base(success, message)
10 | {
11 | Data = data;
12 | }
13 | public DataResult(T data, bool success) : base(success)
14 | {
15 | Data = data;
16 | }
17 | public T Data { get; }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Entities/Concrete/Car.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.Concrete
7 | {
8 | public class Car:IEntity
9 | {
10 | public int Id { get; set; }
11 | public string CarName { get; set; }
12 | public int BrandId { get; set; }
13 | public int ColorId { get; set; }
14 | public string ModelYear { get; set; }
15 | public int DailyPrice { get; set; }
16 | public string Description{ get; set; }
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Core/Utilities/IoC/ServiceTool.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.DependencyInjection;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.Utilities.IoC
7 | {
8 | public static class ServiceTool
9 | {
10 | public static IServiceProvider ServiceProvider { get; private set; }
11 |
12 | public static IServiceCollection Create(IServiceCollection services)
13 | {
14 | ServiceProvider = services.BuildServiceProvider();
15 | return services;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Entities/DTOs/CustomerDetailDto.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Entities.DTOs
7 | {
8 | public class CustomerDetailDto : IDto
9 | {
10 | public int CustomerId { get; set; }
11 | public int UserId { get; set; }
12 | public string CompanyName { get; set; }
13 | public string FirstName { get; set; }
14 | public string LastName { get; set; }
15 | public string Email { get; set; }
16 | public bool Status { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Business/ValidationRules/FluentValidation/RentalValidator.cs:
--------------------------------------------------------------------------------
1 | using Entities.Concrete;
2 | using FluentValidation;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.ValidationRules.FluentValidation
8 | {
9 | public class RentalValidator : AbstractValidator
10 | {
11 | public RentalValidator()
12 | {
13 | RuleFor(ren => ren.CustomerId).NotEmpty();
14 | RuleFor(ren => ren.CarId).NotEmpty();
15 | RuleFor(ren => ren.RentDate).NotEmpty();
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Logging/Log4Net/SerializableLogEvent.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using log4net.Core;
5 |
6 | namespace Core.CrossCuttingConcerns.Logging.Log4Net
7 | {
8 | [Serializable]
9 | public class SerializableLogEvent
10 | {
11 | private LoggingEvent _loggingEvent;
12 |
13 | public SerializableLogEvent(LoggingEvent loggingEvent)
14 | {
15 | _loggingEvent = loggingEvent;
16 | }
17 |
18 | public object Message => _loggingEvent.MessageObject;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Core/DataAccess/IEntityRepository.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq.Expressions;
5 | using System.Text;
6 |
7 | namespace Core.DataAccess
8 | {
9 | public interface IEntityRepository where T : class, IEntity, new()
10 | {
11 | List GetAll(Expression> filter = null);
12 | T Get(Expression> filter);
13 | void Add(T entity);
14 | void Update(T entity);
15 | void Delete(T entity);
16 | List GetById(int entity);
17 |
18 |
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Core/Entities/Concrete/User.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using Core.Entities;
5 |
6 | namespace Core.Entities.Concrete
7 | {
8 | public class User : IEntity
9 | {
10 | public int UserId { get; set; }
11 | public string FirstName { get; set; }
12 | public string LastName { get; set; }
13 | public string Email { get; set; }
14 | public byte[] PasswordHash { get; set; }
15 | public byte[] PasswordSalt { get; set; }
16 | public bool Status { get; set; }
17 |
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/Core/Utilities/Business/BusinessRules.cs:
--------------------------------------------------------------------------------
1 | using Core.Utilities.Results;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.Utilities.Business
7 | {
8 | public class BusinessRules
9 | {
10 | public static IResult Run(params IResult[] logics)
11 | {
12 | foreach (var logic in logics)
13 | {
14 | if (!logic.Success)
15 | {
16 | return logic;
17 | }
18 | }
19 | return null;
20 | }
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Core/Utilities/Interceptors/MethodInterceptionBaseAttribute.cs:
--------------------------------------------------------------------------------
1 | using Castle.DynamicProxy;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.Utilities.Interceptors
7 | {
8 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
9 | public abstract class MethodInterceptionBaseAttribute : Attribute, IInterceptor
10 | {
11 | public int Priority { get; set; }
12 |
13 | public virtual void Intercept(IInvocation invocation)
14 | {
15 |
16 | }
17 | }
18 |
19 |
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/Business/Abstack/IAuthService.cs:
--------------------------------------------------------------------------------
1 | using Core.Entities.Concrete;
2 | using Core.Utilities.Results;
3 | using Core.Utilities.Security.JWT;
4 | using Entities.DTOs;
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Text;
8 |
9 | namespace Business.Abstract
10 | {
11 | public interface IAuthService
12 | {
13 | IDataResult Register(UserForRegisterDto userForRegisterDto, string password);
14 | IDataResult Login(UserForLoginDto userForLoginDto);
15 | IResult UserExists(string email);
16 | IDataResult CreateAccessToken(User user);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Business/ValidationRules/FluentValidation/CarValidator.cs:
--------------------------------------------------------------------------------
1 | using Entities.Concrete;
2 | using FluentValidation;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Business.ValidationRules.FluentValidation
8 | {
9 | public class CarValidator: AbstractValidator
10 | {
11 | public CarValidator()
12 | {
13 | RuleFor(c => c.CarName).NotEmpty();
14 | RuleFor(c => c.CarName).MinimumLength(2);
15 | RuleFor(c => c.DailyPrice).NotEmpty();
16 | RuleFor(c => c.ModelYear).NotEmpty();
17 |
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/DataAccess/Abstack/ICarDal.cs:
--------------------------------------------------------------------------------
1 | using Core.DataAccess;
2 | using Entities.Concrete;
3 | using Entities.DTOs;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq.Expressions;
7 | using System.Text;
8 |
9 | namespace DataAccess.Abstack
10 | {
11 | public interface ICarDal : IEntityRepository
12 | {
13 | List GetCarDetails(Expression> filter = null);
14 | List GetCarsDetailsByBrandId(int id);
15 | List GetCarsDetailsByColorId(int id);
16 | List GetCarsByFilter(int colorId, int brandId);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Business/Abstack/ICarImageService.cs:
--------------------------------------------------------------------------------
1 | using Core.Utilities.Results;
2 | using Entities.Concrete;
3 | using Microsoft.AspNetCore.Http;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Text;
7 |
8 | namespace Business.Abstract
9 | {
10 | public interface ICarImageService
11 | {
12 | IDataResult> GetAll();
13 | IDataResult GetById(int id);
14 | IDataResult> GetByCarId(int id);
15 | IResult Add(IFormFile file, CarImage carImage);
16 | IResult Update(IFormFile file, CarImage carImage);
17 | IResult Delete(CarImage carImage);
18 | }
19 | }
--------------------------------------------------------------------------------
/Business/Abstack/IFakeCardService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using Core.Utilities.Results;
5 | using Entities.Concrete;
6 |
7 | namespace Business.Abstack
8 | {
9 | public interface IFakeCardService
10 | {
11 | IDataResult> GetByCardNumber(string cardNumber);
12 | IDataResult> GetAll();
13 | IDataResult GetById(int cardId);
14 | IResult IsCardExist(FakeCard fakeCard);
15 | IResult Add(FakeCard fakeCard);
16 | IResult Delete(FakeCard fakeCard);
17 | IResult Update(FakeCard fakeCard);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/ErrorDataResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class ErrorDataResult : DataResult
8 | {
9 | public ErrorDataResult(T data, string message) : base(data, false, message)
10 | {
11 | }
12 | public ErrorDataResult(T data) : base(data, false)
13 | {
14 | }
15 | public ErrorDataResult(string message) : base(default, false, message)
16 | {
17 | }
18 | public ErrorDataResult() : base(default, false)
19 | {
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Core/Extensions/ErrorDetails.cs:
--------------------------------------------------------------------------------
1 | using FluentValidation.Results;
2 | using Newtonsoft.Json;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Text;
6 |
7 | namespace Core.Extensions
8 | {
9 | public class ErrorDetails
10 | {
11 | public string Message { get; set; }
12 | public int StatusCode { get; set; }
13 |
14 | public override string ToString()
15 | {
16 | return JsonConvert.SerializeObject(this);
17 | }
18 | }
19 |
20 | public class ValidationErrorDetails : ErrorDetails
21 | {
22 | public IEnumerable Errors { get; set; }
23 |
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Core/Utilities/Results/SuccessDataResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Core.Utilities.Results
6 | {
7 | public class SuccessDataResult : DataResult
8 | {
9 | public SuccessDataResult(T data, string message) : base(data, true, message)
10 | {
11 | }
12 | public SuccessDataResult(T data) : base(data, true)
13 | {
14 | }
15 | public SuccessDataResult(string message) : base(default, true, message)
16 | {
17 | }
18 | public SuccessDataResult() : base(default, true)
19 | {
20 | }
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Core/CrossCuttingConcerns/Validation/ValidationTool.cs:
--------------------------------------------------------------------------------
1 | using FluentValidation;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 |
6 | namespace Core.CrossCuttingConcerns.Validation
7 | {
8 | public static class ValidationTool
9 | {
10 | public static void Validate(IValidator validator, object entity)
11 | {
12 | var context = new ValidationContext