Browse Source

removed layered projects

pull/79/head
Galip Tolga Erdem 5 years ago
parent
commit
6f4e45e396
  1. 84
      services/basket/EShopOnAbp.BasketService.sln
  2. 14
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/AddProductDto.cs
  3. 14
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketDto.cs
  4. 13
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketItemDto.cs
  5. 21
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketServiceApplicationContractsModule.cs
  6. 27
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketServiceDtoExtensions.cs
  7. 19
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/EShopOnAbp.BasketService.Application.Contracts.csproj
  8. 12
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/IBasketAppService.cs
  9. 9
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/IHasAnonymousId.cs
  10. 21
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/Permissions/BasketServicePermissionDefinitionProvider.cs
  11. 10
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/Permissions/BasketServicePermissions.cs
  12. 12
      services/basket/src/EShopOnAbp.BasketService.Application.Contracts/RemoveProductDto.cs
  13. 123
      services/basket/src/EShopOnAbp.BasketService.Application/BasketAppService.cs
  14. 47
      services/basket/src/EShopOnAbp.BasketService.Application/BasketProductEventHandler.cs
  15. 49
      services/basket/src/EShopOnAbp.BasketService.Application/BasketProductService.cs
  16. 18
      services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceAppService.cs
  17. 15
      services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceApplicationAutoMapperProfile.cs
  18. 41
      services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceApplicationModule.cs
  19. 31
      services/basket/src/EShopOnAbp.BasketService.Application/EShopOnAbp.BasketService.Application.csproj
  20. 12
      services/basket/src/EShopOnAbp.BasketService.Application/IBasketProductService.cs
  21. 2
      services/basket/src/EShopOnAbp.BasketService.Application/Properties/AssemblyInfo.cs
  22. 9
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketProductUpdatedEto.cs
  23. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceDomainErrorCodes.cs
  24. 47
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceDomainSharedModule.cs
  25. 23
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceGlobalFeatureConfigurator.cs
  26. 69
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceModuleExtensionConfigurator.cs
  27. 28
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/EShopOnAbp.BasketService.Domain.Shared.csproj
  28. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ar.json
  29. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/cs.json
  30. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/de-DE.json
  31. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/en-GB.json
  32. 12
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/en.json
  33. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/es.json
  34. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/fi.json
  35. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/fr.json
  36. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/hi.json
  37. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/hu.json
  38. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/it.json
  39. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/nl.json
  40. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/pl-PL.json
  41. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/pt-BR.json
  42. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ro-RO.json
  43. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ru.json
  44. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/sk.json
  45. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/sl.json
  46. 12
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/tr.json
  47. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/vi.json
  48. 10
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/zh-Hans.json
  49. 8
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/zh-Hant.json
  50. 10
      services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketServiceResource.cs
  51. 80
      services/basket/src/EShopOnAbp.BasketService.Domain/Basket.cs
  52. 20
      services/basket/src/EShopOnAbp.BasketService.Domain/BasketItem.cs
  53. 25
      services/basket/src/EShopOnAbp.BasketService.Domain/BasketRepository.cs
  54. 35
      services/basket/src/EShopOnAbp.BasketService.Domain/BasketServiceDomainModule.cs
  55. 19
      services/basket/src/EShopOnAbp.BasketService.Domain/EShopOnAbp.BasketService.Domain.csproj
  56. 12
      services/basket/src/EShopOnAbp.BasketService.Domain/IBasketRepository.cs
  57. 26
      services/basket/src/EShopOnAbp.BasketService.Domain/Orders/OrderPlacedEventHandler.cs
  58. 3
      services/basket/src/EShopOnAbp.BasketService.Domain/Properties/AssemblyInfo.cs
  59. 13
      services/basket/src/EShopOnAbp.BasketService.Domain/Settings/BasketServiceSettingDefinitionProvider.cs
  60. 10
      services/basket/src/EShopOnAbp.BasketService.Domain/Settings/BasketServiceSettings.cs
  61. 29
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/BasketServiceHttpApiClientModule.cs
  62. 41
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/BasketClientProxy.Generated.cs
  63. 7
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/BasketClientProxy.cs
  64. 167
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/basket-generate-proxy.json
  65. 23
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/EShopOnAbp.BasketService.HttpApi.Client.csproj
  66. 108
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/BasketServiceHttpApiHostModule.cs
  67. 13
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Controllers/HomeController.cs
  68. 51
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Dockerfile
  69. 4
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Dockerfile.local
  70. 28
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/EShopOnAbp.BasketService.HttpApi.Host.csproj
  71. 37
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Program.cs
  72. 27
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Properties/launchSettings.json
  73. 2
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.Development.json
  74. 49
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.json
  75. 2
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.secrets.json
  76. 1
      services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/tempkey.rsa
  77. 32
      services/basket/src/EShopOnAbp.BasketService.HttpApi/BasketServiceHttpApiModule.cs
  78. 15
      services/basket/src/EShopOnAbp.BasketService.HttpApi/Controllers/BasketServiceController.cs
  79. 18
      services/basket/src/EShopOnAbp.BasketService.HttpApi/EShopOnAbp.BasketService.HttpApi.csproj
  80. 7
      services/basket/src/EShopOnAbp.BasketService/BasketServiceDomainErrorCodes.cs
  81. 7
      services/basket/test/EShopOnAbp.BasketService.Application.Tests/BasketServiceApplicationTestBase.cs
  82. 13
      services/basket/test/EShopOnAbp.BasketService.Application.Tests/BasketServiceApplicationTestModule.cs
  83. 19
      services/basket/test/EShopOnAbp.BasketService.Application.Tests/EShopOnAbp.BasketService.Application.Tests.csproj
  84. 7
      services/basket/test/EShopOnAbp.BasketService.Domain.Tests/BasketServiceDomainTestBase.cs
  85. 11
      services/basket/test/EShopOnAbp.BasketService.Domain.Tests/BasketServiceDomainTestModule.cs
  86. 18
      services/basket/test/EShopOnAbp.BasketService.Domain.Tests/EShopOnAbp.BasketService.Domain.Tests.csproj
  87. 19
      services/basket/test/EShopOnAbp.BasketService.EntityFrameworkCore.Tests/EShopOnAbp.BasketService.EntityFrameworkCore.Tests.csproj
  88. 29
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/BasketServiceConsoleApiClientModule.cs
  89. 37
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs
  90. 31
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp.csproj
  91. 23
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/Program.cs
  92. 18
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/appsettings.json
  93. 2
      services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json
  94. 61
      services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestBase.cs
  95. 48
      services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestBaseModule.cs
  96. 16
      services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestDataSeedContributor.cs
  97. 26
      services/basket/test/EShopOnAbp.BasketService.TestBase/EShopOnAbp.BasketService.TestBase.csproj
  98. 43
      services/basket/test/EShopOnAbp.BasketService.TestBase/Security/FakeCurrentPrincipalAccessor.cs

84
services/basket/EShopOnAbp.BasketService.sln

@ -3,34 +3,10 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31717.71
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Domain", "src\EShopOnAbp.BasketService.Domain\EShopOnAbp.BasketService.Domain.csproj", "{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Application", "src\EShopOnAbp.BasketService.Application\EShopOnAbp.BasketService.Application.csproj", "{1A94A50E-06DC-43C1-80B5-B662820EC3EB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{CA9AC87F-097E-4F15-8393-4BC07735A5B0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{04DBDB01-70F4-4E06-B468-8F87850B22BE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Application.Tests", "test\EShopOnAbp.BasketService.Application.Tests\EShopOnAbp.BasketService.Application.Tests.csproj", "{50B2631D-129C-47B3-A587-029CCD6099BC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Domain.Shared", "src\EShopOnAbp.BasketService.Domain.Shared\EShopOnAbp.BasketService.Domain.Shared.csproj", "{42F719ED-8413-4895-B5B4-5AB56079BC66}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Application.Contracts", "src\EShopOnAbp.BasketService.Application.Contracts\EShopOnAbp.BasketService.Application.Contracts.csproj", "{520659C8-C734-4298-A3DA-B539DB9DFC0B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.HttpApi", "src\EShopOnAbp.BasketService.HttpApi\EShopOnAbp.BasketService.HttpApi.csproj", "{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.HttpApi.Client", "src\EShopOnAbp.BasketService.HttpApi.Client\EShopOnAbp.BasketService.HttpApi.Client.csproj", "{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.EntityFrameworkCore.Tests", "test\EShopOnAbp.BasketService.EntityFrameworkCore.Tests\EShopOnAbp.BasketService.EntityFrameworkCore.Tests.csproj", "{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.TestBase", "test\EShopOnAbp.BasketService.TestBase\EShopOnAbp.BasketService.TestBase.csproj", "{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.Domain.Tests", "test\EShopOnAbp.BasketService.Domain.Tests\EShopOnAbp.BasketService.Domain.Tests.csproj", "{E512F4D9-9375-480F-A2F6-A46509F9D824}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp", "test\EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp\EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp.csproj", "{EF480016-9127-4916-8735-D2466BDBC582}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EShopOnAbp.BasketService.HttpApi.Host", "src\EShopOnAbp.BasketService.HttpApi.Host\EShopOnAbp.BasketService.HttpApi.Host.csproj", "{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EShopOnAbp.BasketService", "src\EShopOnAbp.BasketService\EShopOnAbp.BasketService.csproj", "{83F0BE02-6B71-4695-B86F-18DEEE34B485}"
EndProject
Global
@ -39,54 +15,6 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F}.Release|Any CPU.Build.0 = Release|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1A94A50E-06DC-43C1-80B5-B662820EC3EB}.Release|Any CPU.Build.0 = Release|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50B2631D-129C-47B3-A587-029CCD6099BC}.Release|Any CPU.Build.0 = Release|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Debug|Any CPU.Build.0 = Debug|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.ActiveCfg = Release|Any CPU
{42F719ED-8413-4895-B5B4-5AB56079BC66}.Release|Any CPU.Build.0 = Release|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{520659C8-C734-4298-A3DA-B539DB9DFC0B}.Release|Any CPU.Build.0 = Release|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27}.Release|Any CPU.Build.0 = Release|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81}.Release|Any CPU.Build.0 = Release|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7}.Release|Any CPU.Build.0 = Release|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E512F4D9-9375-480F-A2F6-A46509F9D824}.Release|Any CPU.Build.0 = Release|Any CPU
{EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF480016-9127-4916-8735-D2466BDBC582}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF480016-9127-4916-8735-D2466BDBC582}.Release|Any CPU.Build.0 = Release|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D}.Release|Any CPU.Build.0 = Release|Any CPU
{83F0BE02-6B71-4695-B86F-18DEEE34B485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83F0BE02-6B71-4695-B86F-18DEEE34B485}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83F0BE02-6B71-4695-B86F-18DEEE34B485}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -96,18 +24,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{554AD327-6DBA-4F8F-96F8-81CE7A0C863F} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{1A94A50E-06DC-43C1-80B5-B662820EC3EB} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{50B2631D-129C-47B3-A587-029CCD6099BC} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{42F719ED-8413-4895-B5B4-5AB56079BC66} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{520659C8-C734-4298-A3DA-B539DB9DFC0B} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{4164BDF7-F527-4E85-9CE6-E3C2D7426A27} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{3B5A0094-670D-4BB1-BFDD-61B88A8773DC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{1FE30EB9-74A9-47F5-A9F6-7B1FAB672D81} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{91853F21-9CD9-4132-BC29-A7D5D84FFFE7} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{E512F4D9-9375-480F-A2F6-A46509F9D824} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{EF480016-9127-4916-8735-D2466BDBC582} = {04DBDB01-70F4-4E06-B468-8F87850B22BE}
{748584B1-BA69-4F6A-81AA-F4BDE6BCE29D} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
{83F0BE02-6B71-4695-B86F-18DEEE34B485} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution

14
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/AddProductDto.cs

@ -1,14 +0,0 @@
using System;
using System.ComponentModel.DataAnnotations;
namespace EShopOnAbp.BasketService;
public class AddProductDto : IHasAnonymousId
{
public Guid ProductId { get; set; }
[Range(1, int.MaxValue)]
public int Count { get; set; } = 1;
public Guid? AnonymousId { get; set; }
}

14
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketDto.cs

@ -1,14 +0,0 @@
using System.Collections.Generic;
namespace EShopOnAbp.BasketService;
public class BasketDto
{
public float TotalPrice { get; set; }
public List<BasketItemDto> Items { get; set; }
public BasketDto()
{
Items = new List<BasketItemDto>();
}
}

13
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketItemDto.cs

@ -1,13 +0,0 @@
using System;
namespace EShopOnAbp.BasketService;
public class BasketItemDto
{
public Guid ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCode { get; set; }
public string ImageName { get; set; }
public int Count { get; set; }
public float TotalPrice { get; set; }
}

21
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketServiceApplicationContractsModule.cs

@ -1,21 +0,0 @@
using Volo.Abp.Application;
using Volo.Abp.Authorization;
using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceDomainSharedModule),
typeof(AbpDddApplicationContractsModule),
typeof(AbpAuthorizationModule),
typeof(AbpObjectExtendingModule)
)]
public class BasketServiceApplicationContractsModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
BasketServiceDtoExtensions.Configure();
}
}
}

27
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/BasketServiceDtoExtensions.cs

@ -1,27 +0,0 @@
using Volo.Abp.Threading;
namespace EShopOnAbp.BasketService
{
public static class BasketServiceDtoExtensions
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
OneTimeRunner.Run(() =>
{
/* You can add extension properties to DTOs
* defined in the depended modules.
*
* Example:
*
* ObjectExtensionManager.Instance
* .AddOrUpdateProperty<IdentityRoleDto, string>("Title");
*
* See the documentation for more:
* https://docs.abp.io/en/abp/latest/Object-Extensions
*/
});
}
}
}

19
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/EShopOnAbp.BasketService.Application.Contracts.csproj

@ -1,19 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Domain.Shared\EShopOnAbp.BasketService.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="5.1.2" />
<PackageReference Include="Volo.Abp.Authorization" Version="5.1.2" />
</ItemGroup>
</Project>

12
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/IBasketAppService.cs

@ -1,12 +0,0 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace EShopOnAbp.BasketService;
public interface IBasketAppService : IApplicationService
{
Task<BasketDto> GetAsync(Guid? anonymousUserId);
Task<BasketDto> AddProductAsync(AddProductDto input);
Task<BasketDto> RemoveProductAsync(RemoveProductDto input);
}

9
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/IHasAnonymousId.cs

@ -1,9 +0,0 @@
using System;
namespace EShopOnAbp.BasketService
{
public interface IHasAnonymousId
{
Guid? AnonymousId { get; }
}
}

21
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/Permissions/BasketServicePermissionDefinitionProvider.cs

@ -1,21 +0,0 @@
using EShopOnAbp.BasketService.Localization;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
namespace EShopOnAbp.BasketService.Permissions
{
public class BasketServicePermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var myGroup = context.AddGroup(BasketServicePermissions.GroupName);
//Define your own permissions here. Example:
//myGroup.AddPermission(BasketServicePermissions.MyPermission1, L("Permission:MyPermission1"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<BasketServiceResource>(name);
}
}
}

10
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/Permissions/BasketServicePermissions.cs

@ -1,10 +0,0 @@
namespace EShopOnAbp.BasketService.Permissions
{
public static class BasketServicePermissions
{
public const string GroupName = "BasketService";
//Add your own permission names. Example:
//public const string MyPermission1 = GroupName + ".MyPermission1";
}
}

12
services/basket/src/EShopOnAbp.BasketService.Application.Contracts/RemoveProductDto.cs

@ -1,12 +0,0 @@
using System;
namespace EShopOnAbp.BasketService;
public class RemoveProductDto : IHasAnonymousId
{
public Guid ProductId { get; set; }
public int? Count { get; set; }
public Guid? AnonymousId { get; set; }
}

123
services/basket/src/EShopOnAbp.BasketService.Application/BasketAppService.cs

@ -1,123 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Users;
using EShopOnAbp.CatalogService.Products;
using Volo.Abp;
namespace EShopOnAbp.BasketService;
public class BasketAppService : BasketServiceAppService, IBasketAppService
{
private readonly IBasketRepository _basketRepository;
private readonly IBasketProductService _basketProductService;
public BasketAppService(
IBasketRepository basketRepository,
IBasketProductService basketProductService)
{
_basketRepository = basketRepository;
_basketProductService = basketProductService;
}
public async Task<BasketDto> GetAsync(Guid? anonymousUserId)
{
if (anonymousUserId != null && CurrentUser.IsAuthenticated)
{
var userBasket = await _basketRepository.GetAsync(CurrentUser.GetId());
var anonymousUserBasket = await _basketRepository.GetAsync(anonymousUserId.Value);
userBasket.Merge(anonymousUserBasket);
await _basketRepository.UpdateAsync(userBasket);
anonymousUserBasket.Clear();
await _basketRepository.UpdateAsync(anonymousUserBasket);
return await GetBasketDtoAsync(userBasket);
}
if (anonymousUserId != null && !CurrentUser.IsAuthenticated)
{
return await GetBasketDtoAsync(await _basketRepository.GetAsync(anonymousUserId.Value));
}
return await GetBasketDtoAsync(await _basketRepository.GetAsync(CurrentUser.GetId()));
}
public async Task<BasketDto> AddProductAsync(AddProductDto input)
{
Guid userId = CurrentUser.IsAuthenticated ? CurrentUser.GetId() : input.AnonymousId.GetValueOrDefault();
var basket = await _basketRepository.GetAsync(userId);
var product = await _basketProductService.GetAsync(input.ProductId);
if (basket.GetProductCount(product.Id) >= product.StockCount)
{
throw new UserFriendlyException("There is not enough product in stock, sorry :(");
}
basket.AddProduct(product.Id);
await _basketRepository.UpdateAsync(basket);
return await GetBasketDtoAsync(basket);
}
public async Task<BasketDto> RemoveProductAsync(RemoveProductDto input)
{
Guid userId = CurrentUser.IsAuthenticated ? CurrentUser.GetId() : input.AnonymousId.GetValueOrDefault();
var basket = await _basketRepository.GetAsync(userId);
var product = await _basketProductService.GetAsync(input.ProductId);
basket.RemoveProduct(product.Id, input.Count);
await _basketRepository.UpdateAsync(basket);
return await GetBasketDtoAsync(basket);
}
private async Task<BasketDto> GetBasketDtoAsync(Basket basket)
{
var products = new Dictionary<Guid, ProductDto>();
var basketDto = new BasketDto();
var basketChanged = false;
foreach (var basketItem in basket.Items)
{
var productDto = products.GetOrDefault(basketItem.ProductId);
if (productDto == null)
{
productDto = await _basketProductService.GetAsync(basketItem.ProductId);
products[productDto.Id] = productDto;
}
//Removing the products if not available in the stock
if (basketItem.Count > productDto.StockCount)
{
basket.RemoveProduct(basketItem.ProductId, basketItem.Count - productDto.StockCount);
basketChanged = true;
}
basketDto.Items.Add(new BasketItemDto
{
ProductId = basketItem.ProductId,
Count = basketItem.Count,
ProductCode = productDto.Code,
ImageName = productDto.ImageName,
ProductName = productDto.Name,
TotalPrice = productDto.Price * basketItem.Count
});
}
basketDto.TotalPrice = basketDto.Items.Sum(x => x.TotalPrice);
if (basketChanged)
{
await _basketRepository.UpdateAsync(basket);
}
return basketDto;
}
}

47
services/basket/src/EShopOnAbp.BasketService.Application/BasketProductEventHandler.cs

@ -1,47 +0,0 @@
using System;
using System.Threading.Tasks;
using EShopOnAbp.CatalogService.Products;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.ObjectMapping;
namespace EShopOnAbp.BasketService;
public class BasketProductEventHandler : IDistributedEventHandler<EntityUpdatedEto<ProductEto>>, ITransientDependency
{
private readonly IDistributedCache<ProductDto, Guid> _cache;
private readonly IObjectMapper _objectMapper;
private readonly IDistributedEventBus _distributedEventBus;
public BasketProductEventHandler(
IDistributedCache<ProductDto, Guid> cache,
IObjectMapper objectMapper,
IDistributedEventBus distributedEventBus)
{
_cache = cache;
_objectMapper = objectMapper;
_distributedEventBus = distributedEventBus;
}
public async Task HandleEventAsync(EntityUpdatedEto<ProductEto> eventData)
{
var cachedProductDto = await _cache.GetAsync(eventData.Entity.Id);
if (cachedProductDto == null)
{
return;
}
_objectMapper.Map(eventData.Entity, cachedProductDto);
await _cache.SetAsync(eventData.Entity.Id, cachedProductDto);
await _distributedEventBus.PublishAsync(
new BasketProductUpdatedEto
{
ProductId = eventData.Entity.Id,
ProductName = eventData.Entity.Name
});
}
}

49
services/basket/src/EShopOnAbp.BasketService.Application/BasketProductService.cs

@ -1,49 +0,0 @@
using System;
using System.Threading.Tasks;
using EShopOnAbp.CatalogService.Grpc;
using EShopOnAbp.CatalogService.Products;
using Microsoft.Extensions.Logging;
using Volo.Abp;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.BasketService;
public class BasketProductService : IBasketProductService, ITransientDependency
{
private readonly IDistributedCache<ProductDto, Guid> _cache;
private readonly ILogger<BasketProductService> _logger;
private readonly IObjectMapper _mapper;
private readonly ProductPublic.ProductPublicClient _productPublicGrpcClient;
public BasketProductService(
IDistributedCache<ProductDto, Guid> cache,
ILogger<BasketProductService> logger,
IObjectMapper mapper,
ProductPublic.ProductPublicClient productPublicGrpcClient)
{
_cache = cache;
_logger = logger;
_mapper = mapper;
_productPublicGrpcClient = productPublicGrpcClient;
}
public async Task<ProductDto> GetAsync(Guid productId)
{
return await _cache.GetOrAddAsync(
productId,
() => GetProductAsync(productId)
);
}
private async Task<ProductDto> GetProductAsync(Guid productId)
{
var request = new ProductRequest { Id = productId.ToString() };
_logger.LogInformation("=== GRPC request {@request}", request);
var response = await _productPublicGrpcClient.GetByIdAsync(request);
_logger.LogInformation("=== GRPC response {@response}", response);
return _mapper.Map<ProductResponse, ProductDto>(response) ??
throw new UserFriendlyException(BasketServiceDomainErrorCodes.ProductNotFound);
}
}

18
services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceAppService.cs

@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using EShopOnAbp.BasketService.Localization;
using Volo.Abp.Application.Services;
namespace EShopOnAbp.BasketService
{
/* Inherit your application services from this class.
*/
public abstract class BasketServiceAppService : ApplicationService
{
protected BasketServiceAppService()
{
LocalizationResource = typeof(BasketServiceResource);
}
}
}

15
services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceApplicationAutoMapperProfile.cs

@ -1,15 +0,0 @@
using AutoMapper;
using EShopOnAbp.CatalogService.Grpc;
using EShopOnAbp.CatalogService.Products;
namespace EShopOnAbp.BasketService
{
public class BasketServiceApplicationAutoMapperProfile : Profile
{
public BasketServiceApplicationAutoMapperProfile()
{
CreateMap<ProductEto, ProductDto>();
CreateMap<ProductResponse, ProductDto>();
}
}
}

41
services/basket/src/EShopOnAbp.BasketService.Application/BasketServiceApplicationModule.cs

@ -1,41 +0,0 @@
using System;
using System.Collections.Generic;
using EShopOnAbp.CatalogService;
using EShopOnAbp.CatalogService.Grpc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceDomainModule),
typeof(BasketServiceApplicationContractsModule),
typeof(AbpDddApplicationModule),
typeof(AbpAutoMapperModule),
typeof(CatalogServiceHttpApiClientModule)
)]
public class BasketServiceApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<BasketServiceApplicationModule>();
});
context.Services.AddGrpcClient<ProductPublic.ProductPublicClient>((services, options) =>
{
var remoteServiceOptions = services.GetRequiredService<IOptionsMonitor<AbpRemoteServiceOptions>>().CurrentValue;
var catalogServiceConfiguration = remoteServiceOptions.RemoteServices.GetConfigurationOrDefault("Catalog");
var catalogGrpcUrl = catalogServiceConfiguration.GetOrDefault("GrpcUrl");
options.Address = new Uri(catalogGrpcUrl);
});
}
}
}

31
services/basket/src/EShopOnAbp.BasketService.Application/EShopOnAbp.BasketService.Application.csproj

@ -1,31 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Domain\EShopOnAbp.BasketService.Domain.csproj" />
<ProjectReference Include="..\EShopOnAbp.BasketService.Application.Contracts\EShopOnAbp.BasketService.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\catalog\src\EShopOnAbp.CatalogService.HttpApi.Client\EShopOnAbp.CatalogService.HttpApi.Client.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="5.1.2" />
<PackageReference Include="Volo.Abp.Ddd.Application" Version="5.1.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.19.3" />
<PackageReference Include="Grpc.Net.ClientFactory" Version="2.42.0" />
<PackageReference Include="Grpc.Tools" Version="2.42.0" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<Protobuf Include="..\..\..\catalog\src\EShopOnAbp.CatalogService.Application.Contracts\Protos\product.proto" GrpcServices="Client" />
</ItemGroup>
</Project>

12
services/basket/src/EShopOnAbp.BasketService.Application/IBasketProductService.cs

@ -1,12 +0,0 @@
using System;
using System.Threading.Tasks;
using EShopOnAbp.CatalogService.Products;
using JetBrains.Annotations;
namespace EShopOnAbp.BasketService;
public interface IBasketProductService
{
[ItemNotNull]
Task<ProductDto> GetAsync(Guid productId);
}

2
services/basket/src/EShopOnAbp.BasketService.Application/Properties/AssemblyInfo.cs

@ -1,2 +0,0 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("EShopOnAbp.BasketService.Application.Tests")]

9
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketProductUpdatedEto.cs

@ -1,9 +0,0 @@
using System;
namespace EShopOnAbp.BasketService;
public class BasketProductUpdatedEto
{
public Guid ProductId { get; set; }
public string ProductName { get; set; }
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceDomainErrorCodes.cs

@ -1,8 +0,0 @@
namespace EShopOnAbp.BasketService
{
public static class BasketServiceDomainErrorCodes
{
/* You can add your business exception error codes here, as constants */
public const string ProductNotFound = "ProductNotFound";
}
}

47
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceDomainSharedModule.cs

@ -1,47 +0,0 @@
using EShopOnAbp.BasketService.Localization;
using EShopOnAbp.OrderingService;
using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(AbpValidationModule),
typeof(OrderingServiceDomainSharedModule)
)]
public class BasketServiceDomainSharedModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
BasketServiceGlobalFeatureConfigurator.Configure();
BasketServiceModuleExtensionConfigurator.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<BasketServiceDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<BasketServiceResource>("en")
.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/Localization/BasketService");
options.DefaultResourceType = typeof(BasketServiceResource);
});
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace("BasketService", typeof(BasketServiceResource));
});
}
}
}

23
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceGlobalFeatureConfigurator.cs

@ -1,23 +0,0 @@
using Volo.Abp.Threading;
namespace EShopOnAbp.BasketService
{
public static class BasketServiceGlobalFeatureConfigurator
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
OneTimeRunner.Run(() =>
{
/* You can configure (enable/disable) global features of the used modules here.
*
* YOU CAN SAFELY DELETE THIS CLASS AND REMOVE ITS USAGES IF YOU DON'T NEED TO IT!
*
* Please refer to the documentation to lear more about the Global Features System:
* https://docs.abp.io/en/abp/latest/Global-Features
*/
});
}
}
}

69
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/BasketServiceModuleExtensionConfigurator.cs

@ -1,69 +0,0 @@
using Volo.Abp.Threading;
namespace EShopOnAbp.BasketService
{
public static class BasketServiceModuleExtensionConfigurator
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
OneTimeRunner.Run(() =>
{
ConfigureExistingProperties();
ConfigureExtraProperties();
});
}
private static void ConfigureExistingProperties()
{
/* You can change max lengths for properties of the
* entities defined in the modules used by your application.
*
* Example: Change user and role name max lengths
IdentityUserConsts.MaxNameLength = 99;
IdentityRoleConsts.MaxNameLength = 99;
* Notice: It is not suggested to change property lengths
* unless you really need it. Go with the standard values wherever possible.
*
* If you are using EF Core, you will need to run the add-migration command after your changes.
*/
}
private static void ConfigureExtraProperties()
{
/* You can configure extra properties for the
* entities defined in the modules used by your application.
*
* This class can be used to define these extra properties
* with a high level, easy to use API.
*
* Example: Add a new property to the user entity of the identity module
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>( //property type: string
"SocialSecurityNumber", //property name
property =>
{
//validation rules
property.Attributes.Add(new RequiredAttribute());
property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4});
//...other configurations for this property
}
);
});
});
* See the documentation for more:
* https://docs.abp.io/en/abp/latest/Module-Entity-Extensions
*/
}
}
}

28
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/EShopOnAbp.BasketService.Domain.Shared.csproj

@ -1,28 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Validation" Version="5.1.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\ordering\src\EShopOnAbp.OrderingService.Domain.Shared\EShopOnAbp.OrderingService.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Localization\BasketService\*.json" />
<Content Remove="Localization\BasketService\*.json" />
</ItemGroup>
</Project>

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ar.json

@ -1,8 +0,0 @@
{
"culture": "ar",
"texts": {
"Menu:Home": "الرئيسية",
"Welcome": "مرحبا",
"LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/cs.json

@ -1,8 +0,0 @@
{
"culture": "cs",
"texts": {
"Menu:Home": "Úvod",
"Welcome": "Vítejte",
"LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/de-DE.json

@ -1,8 +0,0 @@
{
"culture": "de-DE",
"texts": {
"Menu:Home": "Home",
"Welcome": "Willkommen",
"LongWelcomeMessage": "Willkommen bei der Anwendung. Dies ist ein Startup-Projekt, das auf dem ABP-Framework basiert. Weitere Informationen finden Sie unter abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/en-GB.json

@ -1,8 +0,0 @@
{
"culture": "en-GB",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welcome",
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io."
}
}

12
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/en.json

@ -1,12 +0,0 @@
{
"culture": "en",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welcome",
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.",
"Toolbar:Cart": "My Cart",
"Toolbar:BasketNotLoaded": "Couldn't Load!",
"Toolbar:CartEmpty": "Cart is Empty!",
"ProductNotFound": "Could not find the product!"
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/es.json

@ -1,8 +0,0 @@
{
"culture": "es",
"texts": {
"Menu:Home": "Inicio",
"Welcome": "Bienvenido",
"LongWelcomeMessage": "Bienvenido a la aplicación, este es un proyecto base basado en el framework ABP. Para más información, visita abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/fi.json

@ -1,8 +0,0 @@
{
"culture": "fi",
"texts": {
"Menu:Home": "Koti",
"Welcome": "Tervetuloa",
"LongWelcomeMessage": "Tervetuloa sovellukseen. Tämä on ABP-kehykseen perustuva käynnistysprojekti. Lisätietoja on osoitteessa abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/fr.json

@ -1,8 +0,0 @@
{
"culture": "fr",
"texts": {
"Menu:Home": "Accueil",
"Welcome": "Bienvenue",
"LongWelcomeMessage": "Bienvenue dans l'application. Il s'agit d'un projet de démarrage basé sur le framework ABP. Pour plus d'informations, visitez abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/hi.json

@ -1,8 +0,0 @@
{
"culture": "hi",
"texts": {
"Menu:Home": "घर",
"Welcome": "स्वागत हे",
"LongWelcomeMessage": "आवेदन करने के लिए आपका स्वागत है। यह एबीपी ढांचे पर आधारित एक स्टार्टअप परियोजना है। अधिक जानकारी के लिए, abp.io पर जाएं।"
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/hu.json

@ -1,8 +0,0 @@
{
"culture": "hu",
"texts": {
"Menu:Home": "Kezdőlap",
"Welcome": "Üdvözlöm",
"LongWelcomeMessage": "Üdvözöljük az alkalmazásban. Ez egy ABP keretrendszeren alapuló startup projekt. További információkért látogasson el az abp.io oldalra."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/it.json

@ -1,8 +0,0 @@
{
"culture": "it",
"texts": {
"Menu:Home": "Home",
"Welcome": "Benvenuto",
"LongWelcomeMessage": "Benvenuto nell'applicazione. Questo è un progetto di avvio basato sul framework ABP. Per ulteriori informazioni, visita abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/nl.json

@ -1,8 +0,0 @@
{
"culture": "nl",
"texts": {
"Menu:Home": "Home",
"Welcome": "Welkom",
"LongWelcomeMessage": "Welkom bij de applicatie. Dit is een startup-project gebaseerd op het ABP-framework. Bezoek abp.io voor meer informatie."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/pl-PL.json

@ -1,8 +0,0 @@
{
"culture": "pl-PL",
"texts": {
"Menu:Home": "Home",
"Welcome": "Witaj",
"LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/pt-BR.json

@ -1,8 +0,0 @@
{
"culture": "pt-BR",
"texts": {
"Menu:Home": "Principal",
"Welcome": "Seja bem-vindo!",
"LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ro-RO.json

@ -1,8 +0,0 @@
{
"culture": "ro-RO",
"texts": {
"Menu:Home": "Acasă",
"Welcome": "Bun venit",
"LongWelcomeMessage": "Bun venit la aplicaţie. Acesta este un proiect de pornire bazat pe framework-ul ABP. Pentru mai multe informaţii, vizitaţi, visit abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/ru.json

@ -1,8 +0,0 @@
{
"culture": "ru",
"texts": {
"Menu:Home": "Главная",
"Welcome": "Добро пожаловать",
"LongWelcomeMessage": "Добро пожаловать в приложение. Этот запущенный проект основан на фреймворке ABP. Для получения дополнительной информации посетите сайт abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/sk.json

@ -1,8 +0,0 @@
{
"culture": "sk",
"texts": {
"Menu:Home": "Domov",
"Welcome": "Vitajte",
"LongWelcomeMessage": "Vitajte v aplikácii. Toto je štartovací projekt založený na ABP frameworku. Viac informácií nájdete na stránke abp.io."
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/sl.json

@ -1,8 +0,0 @@
{
"culture": "sl",
"texts": {
"Menu:Home": "Domov",
"Welcome": "Dobrodošli",
"LongWelcomeMessage": "Dobrodošli v aplikaciji. To je začetni projekt na osnovi okolja ABP. Za več informacij obiščite abp.io."
}
}

12
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/tr.json

@ -1,12 +0,0 @@
{
"culture": "tr",
"texts": {
"Menu:Home": "Ana sayfa",
"Welcome": "Hoşgeldiniz",
"LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz.",
"Toolbar:Cart": "Sepetim",
"Toolbar:BasketNotLoaded": "Sepet Hatası!",
"Toolbar:CartEmpty": "Sepetiniz Boş",
"ProductNotFound": "Bu ürün bulunamadı!"
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/vi.json

@ -1,8 +0,0 @@
{
"culture": "vi",
"texts": {
"Menu:Home": "Trang chủ",
"Welcome": "Chào mừng bạn",
"LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io."
}
}

10
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/zh-Hans.json

@ -1,10 +0,0 @@
{
"culture": "zh-Hans",
"texts": {
"Menu:Home": "首页",
"Welcome": "欢迎",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
"Toolbar:Cart": "我的购物车",
"Toolbar:BasketNotLoaded": "无法加载!"
}
}

8
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketService/zh-Hant.json

@ -1,8 +0,0 @@
{
"culture": "zh-Hant",
"texts": {
"Menu:Home": "首頁",
"Welcome": "歡迎",
"LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io."
}
}

10
services/basket/src/EShopOnAbp.BasketService.Domain.Shared/Localization/BasketServiceResource.cs

@ -1,10 +0,0 @@
using Volo.Abp.Localization;
namespace EShopOnAbp.BasketService.Localization
{
[LocalizationResourceName("BasketService")]
public class BasketServiceResource
{
}
}

80
services/basket/src/EShopOnAbp.BasketService.Domain/Basket.cs

@ -1,80 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Domain.Entities;
namespace EShopOnAbp.BasketService;
public class Basket : AggregateRoot<Guid>
{
public List<BasketItem> Items { get; set; }
private Basket()
{
}
public Basket(Guid id)
: base(id)
{
Items = new List<BasketItem>();
}
public void AddProduct(Guid productId, int count = 1)
{
if (count < 1)
{
throw new ArgumentOutOfRangeException(nameof(count), "Product count should be 1 or more!");
}
var item = Items.FirstOrDefault(x => x.ProductId == productId);
if (item == null)
{
Items.Add(new BasketItem(productId, count));
}
else
{
item.Count += count;
}
}
public void RemoveProduct(Guid productId, int? count = null)
{
if (count is < 1)
{
throw new ArgumentOutOfRangeException(nameof(count), "Product count should be null, 1 or more!");
}
var item = Items.FirstOrDefault(x => x.ProductId == productId);
if (item == null)
{
return;
}
if (count == null || item.Count <= count)
{
Items.Remove(item);
return;
}
item.Count -= count.Value;
}
public int GetProductCount(Guid productId)
{
var item = Items.FirstOrDefault(x => x.ProductId == productId);
return item?.Count ?? 0;
}
public void Clear()
{
Items.Clear();
}
public void Merge(Basket basket)
{
foreach (var item in basket.Items)
{
AddProduct(item.ProductId, item.Count);
}
}
}

20
services/basket/src/EShopOnAbp.BasketService.Domain/BasketItem.cs

@ -1,20 +0,0 @@
using System;
namespace EShopOnAbp.BasketService;
public class BasketItem
{
public Guid ProductId { get; private set; }
public int Count { get; internal set; }
private BasketItem()
{
}
public BasketItem(Guid productId, int count = 1)
{
ProductId = productId;
Count = count;
}
}

25
services/basket/src/EShopOnAbp.BasketService.Domain/BasketRepository.cs

@ -1,25 +0,0 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Caching;
namespace EShopOnAbp.BasketService;
public class BasketRepository : IBasketRepository
{
private readonly IDistributedCache<Basket, Guid> _cache;
public BasketRepository(IDistributedCache<Basket, Guid> cache)
{
_cache = cache;
}
public async Task<Basket> GetAsync(Guid id)
{
return await _cache.GetOrAddAsync(id, () => Task.FromResult(new Basket(id)));
}
public async Task UpdateAsync(Basket basket)
{
await _cache.SetAsync(basket.Id, basket);
}
}

35
services/basket/src/EShopOnAbp.BasketService.Domain/BasketServiceDomainModule.cs

@ -1,35 +0,0 @@
using System;
using Microsoft.Extensions.Caching.Distributed;
using Volo.Abp.Caching;
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceDomainSharedModule),
typeof(AbpDddDomainModule),
typeof(AbpCachingModule)
)]
public class BasketServiceDomainModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpDistributedCacheOptions>(options =>
{
options.CacheConfigurators.Add(cacheName =>
{
if (cacheName == CacheNameAttribute.GetCacheName(typeof(Basket)))
{
return new DistributedCacheEntryOptions
{
SlidingExpiration = TimeSpan.FromDays(7)
};
}
return null;
});
});
}
}
}

19
services/basket/src/EShopOnAbp.BasketService.Domain/EShopOnAbp.BasketService.Domain.csproj

@ -1,19 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Domain.Shared\EShopOnAbp.BasketService.Domain.Shared.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="5.1.2" />
<PackageReference Include="Volo.Abp.Caching" Version="5.1.2" />
</ItemGroup>
</Project>

12
services/basket/src/EShopOnAbp.BasketService.Domain/IBasketRepository.cs

@ -1,12 +0,0 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace EShopOnAbp.BasketService;
public interface IBasketRepository : IRepository
{
Task<Basket> GetAsync(Guid id);
Task UpdateAsync(Basket basket);
}

26
services/basket/src/EShopOnAbp.BasketService.Domain/Orders/OrderPlacedEventHandler.cs

@ -1,26 +0,0 @@
using EShopOnAbp.OrderingService.Orders;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Uow;
namespace EShopOnAbp.BasketService.Orders
{
public class OrderPlacedEventHandler : IDistributedEventHandler<OrderPlacedEto>, ITransientDependency
{
private readonly IBasketRepository _basketRepository;
public OrderPlacedEventHandler(IBasketRepository basketRepository)
{
_basketRepository = basketRepository;
}
[UnitOfWork]
public async Task HandleEventAsync(OrderPlacedEto eventData)
{
var basket = await _basketRepository.GetAsync(eventData.Buyer.BuyerId.GetValueOrDefault());
basket.Clear();
await _basketRepository.UpdateAsync(basket);
}
}
}

3
services/basket/src/EShopOnAbp.BasketService.Domain/Properties/AssemblyInfo.cs

@ -1,3 +0,0 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("EShopOnAbp.BasketService.Domain.Tests")]
[assembly:InternalsVisibleToAttribute("EShopOnAbp.BasketService.TestBase")]

13
services/basket/src/EShopOnAbp.BasketService.Domain/Settings/BasketServiceSettingDefinitionProvider.cs

@ -1,13 +0,0 @@
using Volo.Abp.Settings;
namespace EShopOnAbp.BasketService.Settings
{
public class BasketServiceSettingDefinitionProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
//Define your own settings here. Example:
//context.Add(new SettingDefinition(BasketServiceSettings.MySetting1));
}
}
}

10
services/basket/src/EShopOnAbp.BasketService.Domain/Settings/BasketServiceSettings.cs

@ -1,10 +0,0 @@
namespace EShopOnAbp.BasketService.Settings
{
public static class BasketServiceSettings
{
private const string Prefix = "BasketService";
//Add your own setting names here. Example:
//public const string MySetting1 = Prefix + ".MySetting1";
}
}

29
services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/BasketServiceHttpApiClientModule.cs

@ -1,29 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceApplicationContractsModule),
typeof(AbpHttpClientModule)
)]
public class BasketServiceHttpApiClientModule : AbpModule
{
public const string RemoteServiceName = "Basket";
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddStaticHttpClientProxies(
typeof(BasketServiceApplicationContractsModule).Assembly,
RemoteServiceName
);
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<BasketServiceHttpApiClientModule>();
});
}
}
}

41
services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/BasketClientProxy.Generated.cs

@ -1,41 +0,0 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Modeling;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client.ClientProxying;
using EShopOnAbp.BasketService;
// ReSharper disable once CheckNamespace
namespace EShopOnAbp.BasketService.ClientProxies;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IBasketAppService), typeof(BasketClientProxy))]
public partial class BasketClientProxy : ClientProxyBase<IBasketAppService>, IBasketAppService
{
public virtual async Task<BasketDto> GetAsync(Guid? anonymousUserId)
{
return await RequestAsync<BasketDto>(nameof(GetAsync), new ClientProxyRequestTypeValue
{
{ typeof(Guid?), anonymousUserId }
});
}
public virtual async Task<BasketDto> AddProductAsync(AddProductDto input)
{
return await RequestAsync<BasketDto>(nameof(AddProductAsync), new ClientProxyRequestTypeValue
{
{ typeof(AddProductDto), input }
});
}
public virtual async Task<BasketDto> RemoveProductAsync(RemoveProductDto input)
{
return await RequestAsync<BasketDto>(nameof(RemoveProductAsync), new ClientProxyRequestTypeValue
{
{ typeof(RemoveProductDto), input }
});
}
}

7
services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/BasketClientProxy.cs

@ -1,7 +0,0 @@
// This file is part of BasketClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace EShopOnAbp.BasketService.ClientProxies;
public partial class BasketClientProxy
{
}

167
services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/ClientProxies/basket-generate-proxy.json

@ -1,167 +0,0 @@
{
"modules": {
"basket": {
"rootPath": "basket",
"remoteServiceName": "Basket",
"controllers": {
"EShopOnAbp.BasketService.BasketAppService": {
"controllerName": "Basket",
"controllerGroupName": "Basket",
"type": "EShopOnAbp.BasketService.BasketAppService",
"interfaces": [
{
"type": "Volo.Abp.Validation.IValidationEnabled"
},
{
"type": "Volo.Abp.Auditing.IAuditingEnabled"
},
{
"type": "Volo.Abp.GlobalFeatures.IGlobalFeatureCheckingEnabled"
},
{
"type": "EShopOnAbp.BasketService.IBasketAppService"
}
],
"actions": {
"GetAsyncByAnonymousUserId": {
"uniqueName": "GetAsyncByAnonymousUserId",
"name": "GetAsync",
"httpMethod": "GET",
"url": "api/basket/basket",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "anonymousUserId",
"typeAsString": "System.Nullable`1[[System.Guid, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib",
"type": "System.Guid?",
"typeSimple": "string?",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "anonymousUserId",
"name": "anonymousUserId",
"jsonName": null,
"type": "System.Guid?",
"typeSimple": "string?",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "EShopOnAbp.BasketService.BasketDto",
"typeSimple": "EShopOnAbp.BasketService.BasketDto"
},
"allowAnonymous": null,
"implementFrom": "EShopOnAbp.BasketService.IBasketAppService"
},
"AddProductAsyncByInput": {
"uniqueName": "AddProductAsyncByInput",
"name": "AddProductAsync",
"httpMethod": "POST",
"url": "api/basket/basket/product",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "EShopOnAbp.BasketService.AddProductDto, EShopOnAbp.BasketService.Application.Contracts",
"type": "EShopOnAbp.BasketService.AddProductDto",
"typeSimple": "EShopOnAbp.BasketService.AddProductDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "input",
"jsonName": null,
"type": "EShopOnAbp.BasketService.AddProductDto",
"typeSimple": "EShopOnAbp.BasketService.AddProductDto",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "Body",
"descriptorName": ""
}
],
"returnValue": {
"type": "EShopOnAbp.BasketService.BasketDto",
"typeSimple": "EShopOnAbp.BasketService.BasketDto"
},
"allowAnonymous": null,
"implementFrom": "EShopOnAbp.BasketService.IBasketAppService"
},
"RemoveProductAsyncByInput": {
"uniqueName": "RemoveProductAsyncByInput",
"name": "RemoveProductAsync",
"httpMethod": "DELETE",
"url": "api/basket/basket/product",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "EShopOnAbp.BasketService.RemoveProductDto, EShopOnAbp.BasketService.Application.Contracts",
"type": "EShopOnAbp.BasketService.RemoveProductDto",
"typeSimple": "EShopOnAbp.BasketService.RemoveProductDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProductId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Count",
"jsonName": null,
"type": "System.Int32?",
"typeSimple": "number?",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "AnonymousId",
"jsonName": null,
"type": "System.Guid?",
"typeSimple": "string?",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "EShopOnAbp.BasketService.BasketDto",
"typeSimple": "EShopOnAbp.BasketService.BasketDto"
},
"allowAnonymous": null,
"implementFrom": "EShopOnAbp.BasketService.IBasketAppService"
}
}
}
}
}
},
"types": {}
}

23
services/basket/src/EShopOnAbp.BasketService.HttpApi.Client/EShopOnAbp.BasketService.HttpApi.Client.csproj

@ -1,23 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Application.Contracts\EShopOnAbp.BasketService.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client" Version="5.1.2" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="**\*generate-proxy.json" />
<Content Remove="**\*generate-proxy.json" />
</ItemGroup>
</Project>

108
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/BasketServiceHttpApiHostModule.cs

@ -1,108 +0,0 @@
using EShopOnAbp.Shared.Hosting.AspNetCore;
using EShopOnAbp.Shared.Hosting.Microservices;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Configuration;
using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.AntiForgery;
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService;
[DependsOn(
typeof(BasketServiceHttpApiModule),
typeof(BasketServiceApplicationModule),
typeof(EShopOnAbpSharedHostingMicroservicesModule)
)]
public class BasketServiceHttpApiHostModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
var configuration = context.Services.GetConfiguration();
var hostingEnvironment = context.Services.GetHostingEnvironment();
JwtBearerConfigurationHelper.Configure(context, "BasketService");
SwaggerWithAuthConfigurationHelper.Configure(
context: context,
authority: configuration["AuthServer:Authority"],
scopes: new
Dictionary<string, string> /* Requested scopes for authorization code request and descriptions for swagger UI only */
{
{"BasketService", "Basket Service API"}
},
apiTitle: "Basket Service API"
);
context.Services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder
.WithOrigins(
configuration["App:CorsOrigins"]
.Split(",", StringSplitOptions.RemoveEmptyEntries)
.Select(o => o.Trim().RemovePostFix("/"))
.ToArray()
)
.WithAbpExposedHeaders()
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.ConventionalControllers.Create(
typeof(BasketServiceApplicationModule).Assembly, opts =>
{
opts.RootPath = "basket";
opts.RemoteServiceName = "Basket";
});
});
Configure<AbpAntiForgeryOptions>(options => { options.AutoValidate = false; });
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var app = context.GetApplicationBuilder();
var env = context.GetEnvironment();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCorrelationId();
app.UseCors();
app.UseAbpRequestLocalization();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAbpClaimsMap();
app.UseAuthorization();
app.UseSwagger();
app.UseSwaggerUI(options =>
{
var configuration = context.ServiceProvider.GetRequiredService<IConfiguration>();
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Basket Service API");
options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]);
options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);
});
app.UseAbpSerilogEnrichers();
app.UseAuditing();
app.UseUnitOfWork();
app.UseConfiguredEndpoints();
}
}

13
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Controllers/HomeController.cs

@ -1,13 +0,0 @@
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace EShopOnAbp.BasketService.Controllers
{
public class HomeController : AbpController
{
public ActionResult Index()
{
return Redirect("~/swagger");
}
}
}

51
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Dockerfile

@ -1,51 +0,0 @@
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
# It's important to keep lines from here down to "COPY . ." identical in all Dockerfiles
# to take advantage of Docker's build cache, to speed up local container builds
COPY "EShopOnAbp.sln" "EShopOnAbp.sln"
# Applications
COPY "apps/auth-server/src/EShopOnAbp.AuthServer/EShopOnAbp.AuthServer.csproj" "apps/auth-server/src/EShopOnAbp.AuthServer/EShopOnAbp.AuthServer.csproj"
COPY "apps/public-web/src/EShopOnAbp.PublicWeb/EShopOnAbp.PublicWeb.csproj" "apps/public-web/src/EShopOnAbp.PublicWeb/EShopOnAbp.PublicWeb.csproj"
# Shared
COPY "shared/EShopOnAbp.Shared.Hosting/EShopOnAbp.Shared.Hosting.csproj" "shared/EShopOnAbp.Shared.Hosting/EShopOnAbp.Shared.Hosting.csproj"
COPY "shared/EShopOnAbp.Shared.Hosting.AspNetCore/EShopOnAbp.Shared.Hosting.AspNetCore.csproj" "shared/EShopOnAbp.Shared.Hosting.AspNetCore/EShopOnAbp.Shared.Hosting.AspNetCore.csproj"
COPY "shared/EShopOnAbp.Shared.Hosting.Gateways/EShopOnAbp.Shared.Hosting.Gateways.csproj" "shared/EShopOnAbp.Shared.Hosting.Gateways/EShopOnAbp.Shared.Hosting.Gateways.csproj"
COPY "shared/EShopOnAbp.Shared.Hosting.Microservices/EShopOnAbp.Shared.Hosting.Microservices.csproj" "shared/EShopOnAbp.Shared.Hosting.Microservices/EShopOnAbp.Shared.Hosting.Microservices.csproj"
COPY "shared/EShopOnAbp.Shared.Localization/EShopOnAbp.Shared.Localization.csproj" "shared/EShopOnAbp.Shared.Localization/EShopOnAbp.Shared.Localization.csproj"
# Microservices
COPY "services/administration/src/EShopOnAbp.AdministrationService.HttpApi.Host/EShopOnAbp.AdministrationService.HttpApi.Host.csproj" "services/administration/src/EShopOnAbp.AdministrationService.HttpApi.Host/EShopOnAbp.AdministrationService.HttpApi.Host.csproj"
COPY "services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/EShopOnAbp.IdentityService.HttpApi.Host.csproj" "services/identity/src/EShopOnAbp.IdentityService.HttpApi.Host/EShopOnAbp.IdentityService.HttpApi.Host.csproj"
COPY *"services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/EShopOnAbp.BasketService.HttpApi.Host.csproj" "services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/EShopOnAbp.BasketService.HttpApi.Host.csproj"
COPY *"services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Host/EShopOnAbp.OrderingService.HttpApi.Host.csproj" "services/ordering/src/EShopOnAbp.OrderingService.HttpApi.Host/EShopOnAbp.OrderingService.HttpApi.Host.csproj"
COPY *"services/catalog/src/EShopOnAbp.CatalogService.HttpApi.Host/EShopOnAbp.CatalogService.HttpApi.Host.csproj" "services/catalog/src/EShopOnAbp.CatalogService.HttpApi.Host/EShopOnAbp.CatalogService.HttpApi.Host.csproj"
COPY *"services/payment/src/EShopOnAbp.PaymentService.HttpApi.Host/EShopOnAbp.PaymentService.HttpApi.Host.csproj" "services/payment/src/EShopOnAbp.PaymentService.HttpApi.Host/EShopOnAbp.PaymentService.HttpApi.Host.csproj"
# Gateways
COPY "gateways/web/src/EShopOnAbp.WebGateway/EShopOnAbp.WebGateway.csproj" "gateways/web/src/EShopOnAbp.WebGateway/EShopOnAbp.WebGateway.csproj"
COPY "gateways/web-public/src/EShopOnAbp.WebPublicGateway/EShopOnAbp.WebPublicGateway.csproj" "gateways/web-public/src/EShopOnAbp.WebPublicGateway/EShopOnAbp.WebPublicGateway.csproj"
COPY "NuGet.Config" "NuGet.Config"
RUN dotnet restore "EShopOnAbp.sln"
COPY . .
WORKDIR "/src/services/basket/src/EShopOnAbp.BasketService.HttpApi.Host"
RUN dotnet publish -c Release -o /app
# Should be used after .net6 is out of preview for better performance
# RUN dotnet publish --no-restore -c Release -o /app
FROM build AS publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "EShopOnAbp.BasketService.HttpApi.Host.dll"]

4
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Dockerfile.local

@ -1,4 +0,0 @@
FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY bin/Release/net6.0/publish/ app/
WORKDIR /app
ENTRYPOINT ["dotnet", "EShopOnAbp.BasketService.HttpApi.Host.dll"]

28
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/EShopOnAbp.BasketService.HttpApi.Host.csproj

@ -1,28 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
<PreserveCompilationReferences>true</PreserveCompilationReferences>
<UserSecretsId>EShopOnAbp.BasketService-4681b4fd-151f-4221-84a4-929d86723e4c</UserSecretsId>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Application\EShopOnAbp.BasketService.Application.csproj" />
<ProjectReference Include="..\EShopOnAbp.BasketService.HttpApi\EShopOnAbp.BasketService.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\shared\EShopOnAbp.Shared.Hosting.Microservices\EShopOnAbp.Shared.Hosting.Microservices.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Logs\**" />
<Content Remove="Logs\**" />
<EmbeddedResource Remove="Logs\**" />
<None Remove="Logs\**" />
</ItemGroup>
</Project>

37
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Program.cs

@ -1,37 +0,0 @@
using System;
using System.Threading.Tasks;
using EShopOnAbp.Shared.Hosting.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Serilog;
namespace EShopOnAbp.BasketService;
public class Program
{
public static async Task<int> Main(string[] args)
{
var assemblyName = typeof(Program).Assembly.GetName().Name;
SerilogConfigurationHelper.Configure(assemblyName);
try
{
Log.Information($"Starting {assemblyName}.");
var app = await ApplicationBuilderHelper
.BuildApplicationAsync<BasketServiceHttpApiHostModule>(args);
await app.InitializeApplicationAsync();
await app.RunAsync();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, $"{assemblyName} terminated unexpectedly!");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
}

27
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/Properties/launchSettings.json

@ -1,27 +0,0 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "https://localhost:44355",
"sslPort": 44355
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"EShopOnAbp.BasketService.HttpApi.Host": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:44355",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

2
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.Development.json

@ -1,2 +0,0 @@
{
}

49
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.json

@ -1,49 +0,0 @@
{
"App": {
"SelfUrl": "https://localhost:44355",
"CorsOrigins": "https://localhost:44372,https://localhost:44373,https://localhost:44335"
},
"AuthServer": {
"Authority": "https://localhost:44330",
"RequireHttpsMetadata": "true",
"SwaggerClientId": "WebGateway_Swagger",
"SwaggerClientSecret": "1q2w3e*"
},
"RemoteServices": {
"Catalog": {
"BaseUrl": "https://localhost:44354/",
"GrpcUrl": "http://localhost:81"
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"AdministrationService": "User ID=postgres;Password=myPassw0rd;Host=localhost;Port=5432;Database=EShopOnAbp_Administration;Pooling=false;"
},
"StringEncryption": {
"DefaultPassPhrase": "3PfxLgcuymUUbihz"
},
"Redis": {
"Configuration": "localhost:6379"
},
"RabbitMQ": {
"Connections": {
"Default": {
"HostName": "localhost"
}
},
"EventBus": {
"ClientName": "EShopOnAbp_BasketService",
"ExchangeName": "EShopOnAbp"
}
},
"ElasticSearch": {
"Url": "http://localhost:9200"
}
}

2
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/appsettings.secrets.json

@ -1,2 +0,0 @@
{
}

1
services/basket/src/EShopOnAbp.BasketService.HttpApi.Host/tempkey.rsa

@ -1 +0,0 @@
{"KeyId":"5eb863b25811a7099f9bc925c0fdf680","Parameters":{"D":"gqn7NAeMkug4twJJHFz/qPseDzQCx7R+6Maj649xrG4vPsMANV9mfR78Er2SuHUS0ZihM2MQEILI5Sf41Uuubv8swCNSE3Dw7GQrBIbTAJ7BZKbQMVgtGkMDtHrtri6d9cOi3EOTSJINICk9r80M49oBMOZihEKascfBSIUYVQvWLEMYfryEiDeFUPbobr10OxF5tZ1unvEKgZe190BdNKWQuFhJelcgsZumjEYNsOz5DHrK73WLhfTy01DmsTKx8i1XVnLtq6W89MqAhMZP9QO9Vj8lR0ANnmdOsY6hJfwUbXiI36t4V9rAZvXR5ESorjb4mnXzT6QPuOfy1fbdSQ==","DP":"ItYIpEqw6aDjDc/swDifUe0Dq6yl4yim3UyQ4B9NBPQR5M6b7D3vbCnvwql4zJK4s+0N4lRViBtkF+20Td1yc2v8S+THCYZCVxCf2e9Q7Ff/sKecJ9/JmdzHkztCfs0xb+4X3CPEQP+JIYtMGmwOLQgE5XgmUYKr0ahZDhYTCwE=","DQ":"v35mgxfyF/nwnWwWlR9cF3mg0v7SyPfKkwdxGaVnGH6G8nPWpPlO+zueflA5QDXEwGtk/1k3PAzI/OLUwJiKBubx/UMhsqt5+/bKTrFDNHxLANCvGNZggMZIzFZBYRucuXRZbiBe5qpCkKkniUct7w6jd/V1mnsESiJZ7btcxU0=","Exponent":"AQAB","InverseQ":"Vbg2a+wtaYvhTV8AzqJsVvaz0kfC4HFbmwEgA8+BAbS3GEoS3RHFSfB3DHndpnNihIg72DctDNLmV2GMMiTu18uyI+7AUaYNR836fByxptfyhPtSQfw4kINZ3V0GWKJGzzZ5NAOct4/FpRl8xliHetayCfUIuK9jwk0z9i6V6bA=","Modulus":"xlzmN1sBi2V1971MsPD5MTND9dAGncIzYqxa3H+9jx1mNDivY6JgKijUWm5a3D2Y1UPMB3kx6qUf3iH6pZHjq5bk938qRhxrPy9muW55U03HTiW4V5/ga0+OqXj5Tj4lz+29OiQHPErxLRgfXT+WBgrGb75ElzkHajKpJnPgzAZuarlUCwupJNQlav/crwOFrgkhGsnaOW13M8htiSLZozw5lxkbhYIei7YTTQZ3l6rVH1dPL8CvzRJJOTwbnU8k0sUmWiuOhrLzuinlr6uuOTocAVgbj943/witVFtN5B0yhetxEVgFCwxRDTOO1EKVHFtCiAyZBUOlK4gwZ+SbGQ==","P":"7dFfbAkZSdx/ieSMYJHoY1DKC4dLg80RObEEmuJ72MaVJLTtFuBPoRpYOrMUNuupIyPjZZsW8fHRlPRhKW7xFv+Q2aDudh1UaJzFZs3xYKoiXTU/j0B3TB3nrifVLMqsS+8kHOWOojwA4dMjI6GCYCpKmYVvMOE1cuJrQ9EYxoM=","Q":"1YdN8mLchLVoTEwD34Pi3T2U7EjjBDgDCzhjl7x5FBG73TyKMz1n7/KXkXcJ2rqIAsnLqCWpYUeRcWl+IQEQxFKoMwkvmQ33lRkOE0SBZ+FnUAMivRyxOD5qM9z4ccqx0ga4ZRgb1lR85f7VYtMSfIosOuSFxWAbV1e29utxhTM="}}

32
services/basket/src/EShopOnAbp.BasketService.HttpApi/BasketServiceHttpApiModule.cs

@ -1,32 +0,0 @@
using EShopOnAbp.BasketService.Localization;
using Localization.Resources.AbpUi;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceApplicationContractsModule),
typeof(AbpAspNetCoreMvcModule)
)]
public class BasketServiceHttpApiModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
ConfigureLocalization();
}
private void ConfigureLocalization()
{
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<BasketServiceResource>()
.AddBaseTypes(
typeof(AbpUiResource)
);
});
}
}
}

15
services/basket/src/EShopOnAbp.BasketService.HttpApi/Controllers/BasketServiceController.cs

@ -1,15 +0,0 @@
using EShopOnAbp.BasketService.Localization;
using Volo.Abp.AspNetCore.Mvc;
namespace EShopOnAbp.BasketService.Controllers
{
/* Inherit your controllers from this class.
*/
public abstract class BasketServiceController : AbpControllerBase
{
protected BasketServiceController()
{
LocalizationResource = typeof(BasketServiceResource);
}
}
}

18
services/basket/src/EShopOnAbp.BasketService.HttpApi/EShopOnAbp.BasketService.HttpApi.csproj

@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.Application.Contracts\EShopOnAbp.BasketService.Application.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="5.1.2" />
</ItemGroup>
</Project>

7
services/basket/src/EShopOnAbp.BasketService/BasketServiceDomainErrorCodes.cs

@ -0,0 +1,7 @@
namespace EShopOnAbp.BasketService;
public static class BasketServiceDomainErrorCodes
{
/* You can add your business exception error codes here, as constants */
public const string ProductNotFound = "ProductNotFound";
}

7
services/basket/test/EShopOnAbp.BasketService.Application.Tests/BasketServiceApplicationTestBase.cs

@ -1,7 +0,0 @@
namespace EShopOnAbp.BasketService
{
public abstract class BasketServiceApplicationTestBase : BasketServiceTestBase<BasketServiceApplicationTestModule>
{
}
}

13
services/basket/test/EShopOnAbp.BasketService.Application.Tests/BasketServiceApplicationTestModule.cs

@ -1,13 +0,0 @@
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(BasketServiceApplicationModule),
typeof(BasketServiceDomainTestModule)
)]
public class BasketServiceApplicationTestModule : AbpModule
{
}
}

19
services/basket/test/EShopOnAbp.BasketService.Application.Tests/EShopOnAbp.BasketService.Application.Tests.csproj

@ -1,19 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EShopOnAbp.BasketService.Application\EShopOnAbp.BasketService.Application.csproj" />
<ProjectReference Include="..\EShopOnAbp.BasketService.Domain.Tests\EShopOnAbp.BasketService.Domain.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
</ItemGroup>
</Project>

7
services/basket/test/EShopOnAbp.BasketService.Domain.Tests/BasketServiceDomainTestBase.cs

@ -1,7 +0,0 @@
namespace EShopOnAbp.BasketService
{
public abstract class BasketServiceDomainTestBase : BasketServiceTestBase<BasketServiceDomainTestModule>
{
}
}

11
services/basket/test/EShopOnAbp.BasketService.Domain.Tests/BasketServiceDomainTestModule.cs

@ -1,11 +0,0 @@
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService
{
[DependsOn(
)]
public class BasketServiceDomainTestModule : AbpModule
{
}
}

18
services/basket/test/EShopOnAbp.BasketService.Domain.Tests/EShopOnAbp.BasketService.Domain.Tests.csproj

@ -1,18 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.EntityFrameworkCore.Tests\EShopOnAbp.BasketService.EntityFrameworkCore.Tests.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
</ItemGroup>
</Project>

19
services/basket/test/EShopOnAbp.BasketService.EntityFrameworkCore.Tests/EShopOnAbp.BasketService.EntityFrameworkCore.Tests.csproj

@ -1,19 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EShopOnAbp.BasketService.TestBase\EShopOnAbp.BasketService.TestBase.csproj" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Version="5.1.2" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
</ItemGroup>
</Project>

29
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/BasketServiceConsoleApiClientModule.cs

@ -1,29 +0,0 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Polly;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.IdentityModel;
using Volo.Abp.Modularity;
namespace EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp
{
[DependsOn(
typeof(BasketServiceHttpApiClientModule),
typeof(AbpHttpClientIdentityModelModule)
)]
public class BasketServiceConsoleApiClientModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
PreConfigure<AbpHttpClientBuilderOptions>(options =>
{
options.ProxyClientBuildActions.Add((remoteServiceName, clientBuilder) =>
{
clientBuilder.AddTransientHttpErrorPolicy(
policyBuilder => policyBuilder.WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(Math.Pow(2, i)))
);
});
});
}
}
}

37
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs

@ -1,37 +0,0 @@
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
namespace EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp
{
public class ConsoleTestAppHostedService : IHostedService
{
private readonly IConfiguration _configuration;
public ConsoleTestAppHostedService(IConfiguration configuration)
{
_configuration = configuration;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using (var application = AbpApplicationFactory.Create<BasketServiceConsoleApiClientModule>(options =>
{
options.Services.ReplaceConfiguration(_configuration);
}))
{
application.Initialize();
//var demo = application.ServiceProvider.GetRequiredService<ClientDemoService>();
//await demo.RunAsync();
application.Shutdown();
}
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
}

31
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp.csproj

@ -1,31 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Remove="appsettings.json" />
<Content Include="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<None Remove="appsettings.secrets.json" />
<Content Include="appsettings.secrets.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="5.1.2" />
<ProjectReference Include="..\..\src\EShopOnAbp.BasketService.HttpApi.Client\EShopOnAbp.BasketService.HttpApi.Client.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="6.0.0" />
</ItemGroup>
</Project>

23
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/Program.cs

@ -1,23 +0,0 @@
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp
{
class Program
{
static async Task Main(string[] args)
{
await CreateHostBuilder(args).RunConsoleAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.AddAppSettingsSecretsJson()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<ConsoleTestAppHostedService>();
});
}
}

18
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/appsettings.json

@ -1,18 +0,0 @@
{
"RemoteServices": {
"Default": {
"BaseUrl": "https://localhost:44376"
}
},
"IdentityClients": {
"Default": {
"GrantType": "password",
"ClientId": "BasketService_App",
"ClientSecret": "1q2w3e*",
"UserName": "admin",
"UserPassword": "1q2w3E*",
"Authority": "https://localhost:44376",
"Scope": "BasketService"
}
}
}

2
services/basket/test/EShopOnAbp.BasketService.HttpApi.Client.ConsoleTestApp/appsettings.secrets.json

@ -1,2 +0,0 @@
{
}

61
services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestBase.cs

@ -1,61 +0,0 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Uow;
using Volo.Abp.Testing;
namespace EShopOnAbp.BasketService
{
/* All test classes are derived from this class, directly or indirectly.
*/
public abstract class BasketServiceTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule>
where TStartupModule : IAbpModule
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}
}
protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options, Func<Task<TResult>> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = await func();
await uow.CompleteAsync();
return result;
}
}
}
}
}

48
services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestBaseModule.cs

@ -1,48 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Authorization;
using Volo.Abp.Autofac;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace EShopOnAbp.BasketService
{
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpTestBaseModule),
typeof(AbpAuthorizationModule),
typeof(BasketServiceDomainModule)
)]
public class BasketServiceTestBaseModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
//Configure<AbpBackgroundJobOptions>(options =>
//{
// options.IsJobExecutionEnabled = false;
//});
context.Services.AddAlwaysAllowAuthorization();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
SeedTestData(context);
}
private static void SeedTestData(ApplicationInitializationContext context)
{
AsyncHelper.RunSync(async () =>
{
using (var scope = context.ServiceProvider.CreateScope())
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>()
.SeedAsync();
}
});
}
}
}

16
services/basket/test/EShopOnAbp.BasketService.TestBase/BasketServiceTestDataSeedContributor.cs

@ -1,16 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace EShopOnAbp.BasketService
{
public class BasketServiceTestDataSeedContributor : IDataSeedContributor, ITransientDependency
{
public Task SeedAsync(DataSeedContext context)
{
/* Seed additional test data... */
return Task.CompletedTask;
}
}
}

26
services/basket/test/EShopOnAbp.BasketService.TestBase/EShopOnAbp.BasketService.TestBase.csproj

@ -1,26 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>EShopOnAbp.BasketService</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.TestBase" Version="5.1.2" />
<PackageReference Include="Volo.Abp.Autofac" Version="5.1.2" />
<PackageReference Include="Volo.Abp.Authorization" Version="5.1.2" />
<ProjectReference Include="..\..\src\EShopOnAbp.BasketService.Domain\EShopOnAbp.BasketService.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
<PackageReference Include="NSubstitute" Version="4.2.2" />
<PackageReference Include="Shouldly" Version="4.0.3" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3" />
</ItemGroup>
</Project>

43
services/basket/test/EShopOnAbp.BasketService.TestBase/Security/FakeCurrentPrincipalAccessor.cs

@ -1,43 +0,0 @@
using System.Collections.Generic;
using System.Security.Claims;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
namespace EShopOnAbp.BasketService.Security
{
[Dependency(ReplaceServices = true)]
public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
{
protected override ClaimsPrincipal GetClaimsPrincipal()
{
return GetPrincipal();
}
private ClaimsPrincipal _principal;
private ClaimsPrincipal GetPrincipal()
{
if (_principal == null)
{
lock (this)
{
if (_principal == null)
{
_principal = new ClaimsPrincipal(
new ClaimsIdentity(
new List<Claim>
{
new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"),
new Claim(AbpClaimTypes.UserName,"admin"),
new Claim(AbpClaimTypes.Email,"admin@abp.io")
}
)
);
}
}
}
return _principal;
}
}
}
Loading…
Cancel
Save