Browse Source

Created Azure functions for details campaign

Adapt MVC app to azure function details campaign
Adapt SPA app to azure function details campaign
pull/235/head
Ramón Tomás 7 years ago
parent
commit
525040b9b6
23 changed files with 152 additions and 120 deletions
  1. +0
    -10
      .env
  2. +3
    -2
      docker-compose.override.yml
  3. +58
    -58
      eShopOnContainers-ServicesAndWebApps.sln
  4. +4
    -4
      src/Services/Catalog/Catalog.API/Startup.cs
  5. +0
    -8
      src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/function.json
  6. +21
    -0
      src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/project.json
  7. +11
    -7
      src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/run.csx
  8. +8
    -7
      src/Services/Marketing/Infrastructure/AzureFunctions/local.settings.json
  9. +6
    -0
      src/Services/Marketing/Infrastructure/AzureFunctions/marketing-functions.csproj
  10. +7
    -7
      src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs
  11. +2
    -0
      src/Services/Marketing/Marketing.API/MarketingSettings.cs
  12. +2
    -1
      src/Services/Marketing/Marketing.API/appsettings.json
  13. +2
    -2
      src/Services/Payment/Payment.API/Startup.cs
  14. +1
    -2
      src/Web/WebMVC/Views/Campaigns/_campaign.cshtml
  15. +3
    -1
      src/Web/WebMVC/Views/Order/Index.cshtml
  16. +1
    -0
      src/Web/WebSPA/AppSettings.cs
  17. +6
    -5
      src/Web/WebSPA/Client/modules/campaigns/campaigns.component.html
  18. +8
    -1
      src/Web/WebSPA/Client/modules/campaigns/campaigns.component.ts
  19. +1
    -0
      src/Web/WebSPA/Client/modules/shared/models/campaignItem.model.ts
  20. +2
    -1
      src/Web/WebSPA/Client/modules/shared/models/configuration.model.ts
  21. +1
    -0
      src/Web/WebSPA/Client/modules/shared/services/configuration.service.ts
  22. +1
    -0
      src/Web/WebSPA/appsettings.json
  23. +4
    -4
      test/Services/FunctionalTests/Services/Marketing/appsettings.json

+ 0
- 10
.env View File

@ -6,13 +6,3 @@
ESHOP_EXTERNAL_DNS_NAME_OR_IP=localhost
ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP=10.121.122.92
ESHOP_AZURE_REDIS_BASKET_DB=eshopredisez55a72p6wm62.redis.cache.windows.net:6379,password=RnA4HSjsZY24c+BOVLopWI5lQI5njw1WliiRz3U5Om0=,ssl=False,abortConnect=False
ESHOP_AZURE_STORAGE_ACCOUNT=https://catalogez55a72p6wm62.blob.core.windows.net/pics/
ESHOP_AZURE_SERVICE_BUS=Endpoint=sb://eshopsbez55a72p6wm62.servicebus.windows.net/;SharedAccessKeyName=Root;SharedAccessKey=Jd6iRe3rzTWgMXDDdyUz/AcL6YxLzb8X9afSNPnq50k=;EntityPath=eshop_event_bus
ESHOP_AZURE_COSMOSDB=mongodb://eshop-nosqlez55a72p6wm62:l8jMNoLHFXOijAvaVMjHeCwHK8gAR9SovuK86uCOvwfnMhuhwytPKByOPqrQrlsDz9RPFet2J6SzEbBQXLZokA==@eshop-nosqlez55a72p6wm62.documents.azure.com:10255/?ssl=true&replicaSet=globaldb
ESHOP_AZURE_CATALOG_DB=Server=tcp:eshopsql-ez55a72p6wm62.database.windows.net,1433;Initial Catalog=catalogdb;Persist Security Info=False;User ID=eshop;Password=Pass@word!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
ESHOP_AZURE_IDENTITY_DB=Server=tcp:eshopsql-ez55a72p6wm62.database.windows.net,1433;Initial Catalog=identitydb;Persist Security Info=False;User ID=eshop;Password=Pass@word!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
ESHOP_AZURE_ORDERING_DB=Server=tcp:eshopsql-ez55a72p6wm62.database.windows.net,1433;Initial Catalog=orderingdb;Persist Security Info=False;User ID=eshop;Password=Pass@word!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
ESHOP_AZURE_MARKETING_DB=Server=tcp:eshopsql-ez55a72p6wm62.database.windows.net,1433;Initial Catalog=marketingdb;Persist Security Info=False;User ID=eshop;Password=Pass@word!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI=https://marketing-functions.azurewebsites.net/api/MarketingDetailsHttpTrigger?code=LhqDGSKZIHM0vwBwjHHRv6umvcuRqEtB0m8laxPkb1g1IycLyWmW1A==

+ 3
- 2
docker-compose.override.yml View File

@ -9,7 +9,7 @@ version: '3'
services:
graceperiodmanager:
environment:
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- ConnectionString=Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
basket.api:
@ -27,7 +27,7 @@ services:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://0.0.0.0:80
- ConnectionString=${ESHOP_AZURE_CATALOG_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.CatalogDb;User Id=sa;Password=Pass@word}
- PicBaseUrl=${ESHOP_AZURE_STORAGE_ACCOUNT:-http://localhost:5101/api/v1/pic/} #Local: You need to open your local dev-machine firewall at range 5100-5105. at range 5100-5105.
- PicBaseUrl=${ESHOP_AZURE_STORAGE_CATALOG:-http://localhost:5101/api/v1/pic/} #Local: You need to open your local dev-machine firewall at range 5100-5105. at range 5100-5105.
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
ports:
- "5101:80"
@ -64,6 +64,7 @@ services:
- ExternalCatalogBaseUrl=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5110 #Local: You need to open your local dev-machine firewall at range 5100-5105. at range 5100-5105.
- identityUrl=http://identity.api #Local: You need to open your local dev-machine firewall at range 5100-5105. at range 5100-5105.
- CampaignDetailFunctionUri=${ESHOP_AZUREFUNC_CAMPAIGN_DETAILS_URI}
- PicBaseUrl=${ESHOP_AZURE_STORAGE_MRKETING:-http://localhost:5110/api/v1/pic/}
ports:
- "5110:80"


+ 58
- 58
eShopOnContainers-ServicesAndWebApps.sln View File

@ -58,21 +58,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventBus", "src\BuildingBlo
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventBusRabbitMQ", "src\BuildingBlocks\EventBus\EventBusRabbitMQ\EventBusRabbitMQ.csproj", "{8088F3FC-6787-45FA-A924-816EC81CBFAC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationEventLogEF", "src\BuildingBlocks\EventBus\IntegrationEventLogEF\IntegrationEventLogEF.csproj", "{9EE28E45-1533-472B-8267-56C48855BA0E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationEventLogEF", "src\BuildingBlocks\EventBus\IntegrationEventLogEF\IntegrationEventLogEF.csproj", "{9EE28E45-1533-472B-8267-56C48855BA0E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HealthChecks", "HealthChecks", "{A81ECBC2-6B00-4DCD-8388-469174033379}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.HealthChecks", "src\BuildingBlocks\HealthChecks\src\Microsoft.Extensions.HealthChecks\Microsoft.Extensions.HealthChecks.csproj", "{942ED6E8-0050-495F-A0EA-01E97F63760C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebStatus", "src\Web\WebStatus\WebStatus.csproj", "{C0A7918D-B4F2-4E7F-8DE2-1E5279EF079F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebStatus", "src\Web\WebStatus\WebStatus.csproj", "{C0A7918D-B4F2-4E7F-8DE2-1E5279EF079F}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Resilience", "Resilience", "{FBF43D93-F2E7-4FF8-B4AB-186895949B88}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Resilience.Http", "src\BuildingBlocks\Resilience\Resilience.Http\Resilience.Http.csproj", "{D1C47FF1-91F1-4CAF-9ABB-AD642B821502}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Resilience.Http", "src\BuildingBlocks\Resilience\Resilience.Http\Resilience.Http.csproj", "{D1C47FF1-91F1-4CAF-9ABB-AD642B821502}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Payment", "Payment", "{022E145D-1593-47EE-9608-8E323D3C63F5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Payment.API", "src\Services\Payment\Payment.API\Payment.API.csproj", "{1A01AF82-6FCB-464C-B39C-F127AEBD315D}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payment.API", "src\Services\Payment\Payment.API\Payment.API.csproj", "{1A01AF82-6FCB-464C-B39C-F127AEBD315D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HealthChecks", "src\BuildingBlocks\HealthChecks\src\Microsoft.AspNetCore.HealthChecks\Microsoft.AspNetCore.HealthChecks.csproj", "{22A0F9C1-2D4A-4107-95B7-8459E6688BC5}"
EndProject
@ -82,27 +82,27 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventBus.Tests", "src\Build
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GracePeriod", "GracePeriod", "{F38B4FF0-0B49-405A-B1B4-F7A5E3BC4C4E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GracePeriodManager", "src\Services\GracePeriod\GracePeriodManager\GracePeriodManager.csproj", "{F6E0F0DD-1400-43C3-B5E0-7CC325728C47}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GracePeriodManager", "src\Services\GracePeriod\GracePeriodManager\GracePeriodManager.csproj", "{F6E0F0DD-1400-43C3-B5E0-7CC325728C47}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Location", "Location", "{41139F64-4046-4F16-96B7-D941D96FA9C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Locations.API", "src\Services\Location\Locations.API\Locations.API.csproj", "{E7581357-FC34-474C-B8F5-307EE3CE05EF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Locations.API", "src\Services\Location\Locations.API\Locations.API.csproj", "{E7581357-FC34-474C-B8F5-307EE3CE05EF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DataProtection", "DataProtection", "{88B22DBB-AA8F-4290-A454-2C109352C345}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataProtection", "src\BuildingBlocks\DataProtection\DataProtection\DataProtection.csproj", "{23A33F9B-7672-426D-ACF9-FF8436ADC81A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataProtection", "src\BuildingBlocks\DataProtection\DataProtection\DataProtection.csproj", "{23A33F9B-7672-426D-ACF9-FF8436ADC81A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Marketing", "Marketing", "{A5260DE0-1FDD-467E-9CC1-A028AB081CEE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Marketing.API", "src\Services\Marketing\Marketing.API\Marketing.API.csproj", "{DF395F85-B010-465D-857A-7EBCC512C0C2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventBusServiceBus", "src\BuildingBlocks\EventBus\EventBusServiceBus\EventBusServiceBus.csproj", "{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EventBusServiceBus", "src\BuildingBlocks\EventBus\EventBusServiceBus\EventBusServiceBus.csproj", "{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastructure", "{5B1011EC-CEE5-47AA-B336-99381D573679}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AzureFunctions", "AzureFunctions", "{106B787C-2CFF-4484-8C07-D14589859E94}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "marketing-functions", "src\Services\Marketing\Infrastructure\AzureFunctions\marketing-functions.csproj", "{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "marketing-functions", "src\Services\Marketing\Infrastructure\AzureFunctions\marketing-functions.csproj", "{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -1318,54 +1318,54 @@ Global
{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8}.Release|x64.Build.0 = Release|Any CPU
{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8}.Release|x86.ActiveCfg = Release|Any CPU
{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8}.Release|x86.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|ARM.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|iPhone.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|x64.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|x64.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|x86.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.AppStore|x86.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|ARM.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|iPhone.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|x64.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|x64.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|x86.ActiveCfg = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Debug|x86.Build.0 = Debug|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|Any CPU.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|ARM.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|ARM.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|iPhone.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|iPhone.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|x64.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|x64.Build.0 = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|x86.ActiveCfg = Release|Any CPU
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F}.Release|x86.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|ARM.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|iPhone.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|x64.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|x64.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|x86.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.AppStore|x86.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|ARM.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|ARM.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|iPhone.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|x64.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|x64.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|x86.ActiveCfg = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Debug|x86.Build.0 = Debug|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|Any CPU.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|ARM.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|ARM.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|iPhone.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|iPhone.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|x64.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|x64.Build.0 = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|x86.ActiveCfg = Release|Any CPU
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1415,6 +1415,6 @@ Global
{69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8} = {807BB76E-B2BB-47A2-A57B-3D1B20FF5E7F}
{5B1011EC-CEE5-47AA-B336-99381D573679} = {A5260DE0-1FDD-467E-9CC1-A028AB081CEE}
{106B787C-2CFF-4484-8C07-D14589859E94} = {5B1011EC-CEE5-47AA-B336-99381D573679}
{E7F8F7C0-9FE5-4DAB-B510-1F05ADD11E1F} = {106B787C-2CFF-4484-8C07-D14589859E94}
{B363EF31-DD1A-46C8-ADDF-CD30A756E97B} = {106B787C-2CFF-4484-8C07-D14589859E94}
EndGlobalSection
EndGlobal

+ 4
- 4
src/Services/Catalog/Catalog.API/Startup.cs View File

@ -230,14 +230,14 @@
}
services.AddSingleton<IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();
services.AddTransient<IIntegrationEventHandler<OrderStatusChangedToAwaitingValidationIntegrationEvent>,
OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
services.AddTransient<IIntegrationEventHandler<OrderStatusChangedToPaidIntegrationEvent>,
OrderStatusChangedToPaidIntegrationEventHandler>();
services.AddTransient<OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
services.AddTransient<OrderStatusChangedToPaidIntegrationEventHandler>();
}
protected virtual void ConfigureEventBus(IApplicationBuilder app)
{
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
eventBus.Subscribe<OrderStatusChangedToAwaitingValidationIntegrationEvent, OrderStatusChangedToAwaitingValidationIntegrationEventHandler>();
eventBus.Subscribe<OrderStatusChangedToPaidIntegrationEvent, OrderStatusChangedToPaidIntegrationEventHandler>();
}
}
}

+ 0
- 8
src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/function.json View File

@ -10,14 +10,6 @@
"name": "$return",
"type": "http",
"direction": "out"
},
{
"type": "documentDB",
"name": "inputDocument",
"databaseName": "MarketingDb",
"collectionName": "MarketingReadDataModel",
"connection": "eshop-nosqlez55a72p6wm62_DOCUMENTDB",
"direction": "in"
}
],
"disabled": false

+ 21
- 0
src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/project.json View File

@ -0,0 +1,21 @@
{
"frameworks": {
"net46":{
"dependencies": {
"Dapper": "1.50.2",
"System.Data.SqlClient":"4.1.0",
"Microsoft.WindowsAzure.ConfigurationManager":"3.2.1"
}
}
}
}

+ 11
- 7
src/Services/Marketing/Infrastructure/AzureFunctions/MarketingDetailsHttpTrigger/run.csx View File

@ -4,11 +4,11 @@ using System.Configuration;
using Dapper;
using System.Data.SqlClient;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, dynamic inputDocument, TraceWriter log)
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info($"Campaign HTTP trigger function processed a request. RequestUri={req.RequestUri}");
string htmlResponse = string.Empty;
string htmlResponse = string.Empty;
// parse query parameter
string campaignId = req.GetQueryNameValuePairs()
@ -31,13 +31,15 @@ public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, dynami
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new ByteArrayContent(System.Text.Encoding.UTF8.GetBytes(htmlResponse));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
private static string BuildHtmlResponse(Campaign campaign)
{
var marketingStorageUri = ConfigurationManager.AppSettings["MarketingStorageUri"];
return string.Format(@"
<html>
<head>
@ -50,7 +52,7 @@ private static string BuildHtmlResponse(Campaign campaign)
<div class='container'>
</br>
<div class='card-deck'>
<div class='card'>
<div class='card text-center'>
<img class='card-img-top' src='{0}' alt='Card image cap'>
<div class='card-block'>
<h4 class='card-title'>{1}</h4>
@ -64,13 +66,13 @@ private static string BuildHtmlResponse(Campaign campaign)
</div>
</body>
</html>",
campaign.PictureUri,
$"{marketingStorageUri}{campaign.PictureName}",
campaign.Name,
campaign.Description,
campaign.From.ToString("MMMM dd, yyyy"),
campaign.From.ToString("MMMM dd, yyyy"));
}
public class Campaign
{
public int Id { get; set; }
@ -84,4 +86,6 @@ public class Campaign
public DateTime To { get; set; }
public string PictureUri { get; set; }
}
public string PictureName { get; set; }
}

+ 8
- 7
src/Services/Marketing/Infrastructure/AzureFunctions/local.settings.json View File

@ -1,16 +1,17 @@
{
"IsEncrypted": false,
"Value": {
"APPSETTING_eshop-nosqlez55a72p6wm62_DOCUMENTDB": "AccountEndpoint=https://eshop-nosqlez55a72p6wm62.documents.azure.com:443/;AccountKey=l8jMNoLHFXOijAvaVMjHeCwHK8gAR9SovuK86uCOvwfnMhuhwytPKByOPqrQrlsDz9RPFet2J6SzEbBQXLZokA==;",
"APPSETTING_FUNCTIONS_EXTENSION_VERSION": "~1",
"APPSETTING_ScmType": "None",
"APPSETTING_WEBSITE_AUTH_ENABLED": "False",
"APPSETTING_AzureWebJobsDashboard": "DefaultEndpointsProtocol=https;AccountName=marketingfuncti9f5e;AccountKey=BAxvLgEs0pEyVSUgsRV8okXZY6MM/0FSikYoXyk80zhLhzPe3gyHxf9QCKDZ1qa6LsgqYdF8yoSotlg3FoDvTw==",
"APPSETTING_REMOTEDEBUGGINGVERSION": "11.0.611103.400",
"APPSETTING_AzureWebJobsDashboard": "",
"APPSETTING_MarketingStorageUri": "",
"APPSETTING_WEBSITE_NODE_DEFAULT_VERSION": "6.5.0",
"APPSETTING_WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=marketingfuncti9f5e;AccountKey=BAxvLgEs0pEyVSUgsRV8okXZY6MM/0FSikYoXyk80zhLhzPe3gyHxf9QCKDZ1qa6LsgqYdF8yoSotlg3FoDvTw==",
"APPSETTING_WEBSITE_CONTENTSHARE": "marketing-functions9f5e",
"APPSETTING_WEBSITE_SLOT_NAME": "Production",
"APPSETTING_AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=marketingfuncti9f5e;AccountKey=BAxvLgEs0pEyVSUgsRV8okXZY6MM/0FSikYoXyk80zhLhzPe3gyHxf9QCKDZ1qa6LsgqYdF8yoSotlg3FoDvTw==",
"APPSETTING_WEBSITE_SITE_NAME": "marketing-functions"
"APPSETTING_WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "",
"APPSETTING_WEBSITE_CONTENTSHARE": "",
"APPSETTING_WEBSITE_SLOT_NAME": "",
"APPSETTING_AzureWebJobsStorage": "",
"APPSETTING_WEBSITE_SITE_NAME": ""
}
}

+ 6
- 0
src/Services/Marketing/Infrastructure/AzureFunctions/marketing-functions.csproj View File

@ -17,6 +17,12 @@
<None Update="MarketingDetailsHttpTrigger/function.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="MarketingDetailsHttpTrigger/project.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="MarketingDetailsHttpTrigger/project.lock.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="MarketingDetailsHttpTrigger/run.csx">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>


+ 7
- 7
src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs View File

@ -186,8 +186,8 @@
Description = campaign.Description,
From = campaign.From,
To = campaign.To,
PictureUri = GetUriPlaceholder(campaign.PictureUri),
DetailsUri = $"{_settings.CampaignDetailFunctionUri}&campaignId={campaign.Id}$userId{userId}"
PictureUri = GetUriPlaceholder(campaign),
DetailsUri = $"{_settings.CampaignDetailFunctionUri}&campaignId={campaign.Id}&userId={userId}"
};
}
@ -204,13 +204,13 @@
};
}
private string GetUriPlaceholder(string campaignUri)
private string GetUriPlaceholder(Campaign campaign)
{
var baseUri = _settings.ExternalCatalogBaseUrl;
var baseUri = _settings.PicBaseUrl;
campaignUri = campaignUri.Replace("http://externalcatalogbaseurltobereplaced", baseUri);
return campaignUri;
return _settings.AzureStorageEnabled
? baseUri + campaign.PictureName
: baseUri + campaign.Id;
}
}
}

+ 2
- 0
src/Services/Marketing/Marketing.API/MarketingSettings.cs View File

@ -7,5 +7,7 @@
public string MongoDatabase { get; set; }
public string ExternalCatalogBaseUrl { get; set; }
public string CampaignDetailFunctionUri { get; set; }
public string PicBaseUrl { get; set; }
public bool AzureStorageEnabled { get; set; }
}
}

+ 2
- 1
src/Services/Marketing/Marketing.API/appsettings.json View File

@ -11,5 +11,6 @@
"IdentityUrl": "http://localhost:5105",
"ExternalCatalogBaseUrl": "http://localhost:5110",
"AzureServiceBusEnabled": true,
"SubscriptionClientName": "Marketing"
"SubscriptionClientName": "Marketing",
"AzureStorageEnabled": true
}

+ 2
- 2
src/Services/Payment/Payment.API/Startup.cs View File

@ -122,14 +122,14 @@ namespace Payment.API
services.AddSingleton<IEventBus, EventBusRabbitMQ>();
}
services.AddTransient<OrderStatusChangedToStockConfirmedIntegrationEventHandler>();
services.AddSingleton<IEventBusSubscriptionsManager, InMemoryEventBusSubscriptionsManager>();
}
private void ConfigureEventBus(IApplicationBuilder app)
{
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();
eventBus.Subscribe<OrderStatusChangedToStockConfirmedIntegrationEvent,
IIntegrationEventHandler<OrderStatusChangedToStockConfirmedIntegrationEvent>>();
eventBus.Subscribe<OrderStatusChangedToStockConfirmedIntegrationEvent, OrderStatusChangedToStockConfirmedIntegrationEventHandler>();
}
}
}

+ 1
- 2
src/Web/WebMVC/Views/Campaigns/_campaign.cshtml View File

@ -14,9 +14,8 @@
}
</div>
<div class="card-footer">
<small class="text-muted">
From @Model.From.ToString("MMMM dd, yyyy") until @Model.To.ToString("MMMM dd, yyyy")
</small>
</div>
</div>
</form>

+ 3
- 1
src/Web/WebMVC/Views/Order/Index.cshtml View File

@ -19,7 +19,8 @@
<section class="esh-orders-title col-xs-2">Status</section>
<section class="esh-orders-title col-xs-2"></section>
</article>
@if (Model != null && Model.Any())
{
@foreach (var item in Model)
{
<article class="esh-orders-items row">
@ -38,6 +39,7 @@
</section>
</article>
}
}
</div>
</div>
<script>


+ 1
- 0
src/Web/WebSPA/AppSettings.cs View File

@ -13,5 +13,6 @@ namespace eShopOnContainers.WebSPA
public string IdentityUrl { get; set; }
public string BasketUrl { get; set; }
public string MarketingUrl { get; set; }
public string ActivateCampaignDetailFunction { get; set; }
}
}

+ 6
- 5
src/Web/WebSPA/Client/modules/campaigns/campaigns.component.html View File

@ -1,8 +1,7 @@
<esh-header url="/catalog">Back to catalog</esh-header>
<div class="container">
<div *ngIf="campaigns?.data?.length > 0">
<esh-pager [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager>
<esh-pager [model]="paginationInfo" (changed)="onPageChanged($event)"></esh-pager>
<div class="card-group esh-campaign-items row">
<div class="esh-campaign-item col-md-4"
*ngFor="let item of campaigns.data">
@ -10,10 +9,12 @@
<div class="card-block">
<h4 class="card-title esh-campaign-name">{{item.name}}</h4>
<img class="card-img-top esh-campaign-thumbnail" src="{{item.pictureUri}}" alt="{{item.name}}">
<input [ngClass]="{'esh-campaign-button': true}" type="submit" value="More details" routerLink="/campaigns/{{item.id}}">
<button *ngIf="isCampaignDetailFunctionEnabled; else showDefaultDetailsLink" [ngClass]="{'esh-campaigns-button': true}" (click)="onNavigateToDetails(item.detailsUri)">More details</button>
<ng-template #showDefaultDetailsLink>
<input [ngClass]="{'esh-campaign-button': true}" type="submit" value="More details" routerLink="/campaigns/{{item.id}}">
</ng-template>
</div>
<div class="card-footer">
<div class="card-footer">
<small class="text-muted">
From {{item.from | date }} To {{item.to | date }}
</small>


+ 8
- 1
src/Web/WebSPA/Client/modules/campaigns/campaigns.component.ts View File

@ -13,6 +13,7 @@ export class CampaignsComponent implements OnInit {
private interval = null;
paginationInfo: IPager;
campaigns: ICampaign;
isCampaignDetailFunctionEnabled: boolean = false;
constructor(private service: CampaignsService, private configurationService: ConfigurationService) { }
@ -23,7 +24,9 @@ export class CampaignsComponent implements OnInit {
this.configurationService.settingsLoaded$.subscribe(x => {
this.getCampaigns(9, 0);
});
}
}
this.isCampaignDetailFunctionEnabled = this.configurationService.serverSettings.activateCampaignDetailFunction;
}
onPageChanged(value: any) {
@ -45,5 +48,9 @@ export class CampaignsComponent implements OnInit {
};
});
}
onNavigateToDetails(uri: string) {
window.open(uri, "_blank");
}
}

+ 1
- 0
src/Web/WebSPA/Client/modules/shared/models/campaignItem.model.ts View File

@ -5,4 +5,5 @@
from: Date;
to: Date;
pictureUri: string;
detailsUri: string;
}

+ 2
- 1
src/Web/WebSPA/Client/modules/shared/models/configuration.model.ts View File

@ -3,5 +3,6 @@ export interface IConfiguration {
orderingUrl: string,
identityUrl: string,
basketUrl: string,
marketingUrl: string
marketingUrl: string,
activateCampaignDetailFunction: boolean
}

+ 1
- 0
src/Web/WebSPA/Client/modules/shared/services/configuration.service.ts View File

@ -33,6 +33,7 @@ export class ConfigurationService {
this.storageService.store('identityUrl', this.serverSettings.identityUrl);
this.storageService.store('orderingUrl', this.serverSettings.orderingUrl);
this.storageService.store('marketingUrl', this.serverSettings.marketingUrl);
this.storageService.store('activateCampaignDetailFunction', this.serverSettings.activateCampaignDetailFunction);
this.isReady = true;
this.settingsLoadedSource.next();
});


+ 1
- 0
src/Web/WebSPA/appsettings.json View File

@ -6,6 +6,7 @@
"MarketingUrl": "http://localhost:5110",
"CallBackUrl": "http://localhost:5104/",
"IsClusterEnv": "False",
"ActivateCampaignDetailFunction": true,
"Logging": {
"IncludeScopes": false,
"LogLevel": {


+ 4
- 4
test/Services/FunctionalTests/Services/Marketing/appsettings.json View File

@ -1,10 +1,10 @@
{
"ConnectionString": "Server=tcp:eshopsql-ez55a72p6wm62.database.windows.net,1433;Initial Catalog=marketingdb;Persist Security Info=False;User ID=eshop;Password=Pass@word!;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
"MongoConnectionString": "mongodb://eshop-nosqlez55a72p6wm62:l8jMNoLHFXOijAvaVMjHeCwHK8gAR9SovuK86uCOvwfnMhuhwytPKByOPqrQrlsDz9RPFet2J6SzEbBQXLZokA==@eshop-nosqlez55a72p6wm62.documents.azure.com:10255/?ssl=true&replicaSet=globaldb",
"ConnectionString": "Server=tcp:127.0.0.1,5433;Initial Catalog=Microsoft.eShopOnContainers.Services.MarketingDb;User Id=sa;Password=Pass@word",
"MongoConnectionString": "mongodb://localhost:27017",
"MongoDatabase": "MarketingDb",
"IdentityUrl": "http://localhost:5105",
"isTest": "true",
"EventBusConnection": "Endpoint=sb://eshopsbez55a72p6wm62.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=Iv+cC7Wgwc8SCrE5AXrguRW6kRMk6vR7crTVBom5nPU=;EntityPath=eshop_event_bus",
"AzureServiceBusEnabled": true,
"EventBusConnection": "localhost",
"AzureServiceBusEnabled": false,
"SubscriptionClientName": "Marketing"
}

Loading…
Cancel
Save