From 68073679d6442360afcf79bce8f26b92063a479f Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 19 Sep 2024 15:15:33 -0600 Subject: [PATCH 01/27] Strating to convert SEO elements into components --- .../Pages/Public/JsonLdForSingleVideo.razor | 43 ++++++++++++++++ .../Components/Pages/Public/WatchVideo.razor | 49 ++++++++----------- .../WebComponents/SEO/OpenGraph.razor | 37 ++++++++++++++ .../WebComponents/SEO/TwitterCard.razor | 21 ++++++++ 4 files changed, 122 insertions(+), 28 deletions(-) create mode 100644 src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor create mode 100644 src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor create mode 100644 src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor new file mode 100644 index 00000000..718bf678 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor @@ -0,0 +1,43 @@ + + +@code +{ + [Parameter] + [EditorRequired] + public string? Name { get; set; } + [Parameter] + [EditorRequired] + public string? Description { get; set; } + [Parameter] + [EditorRequired] + public string? ThumbnailUrl { get; set; } + [Parameter] + [EditorRequired] + public string? UploadDate { get; set; } + [Parameter] + [EditorRequired] + public string? Duration { get; set; } + [Parameter] + [EditorRequired] + public string? ContentUrl { get; set; } + [Parameter] + [EditorRequired] + public string? EmbedUrl { get; set; } + [Parameter] + [EditorRequired] + public int? InteractionCount { get; set; } +} \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor index 5e912669..a3880eca 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor @@ -11,6 +11,7 @@ @using FairPlayTube.SharedUI.Components.Spinners @using FairPlayTube.SharedUI.Components.Video @using System.Net +@using FairPlayTube.SharedUI.Components.WebComponents.SEO @inject IJSRuntime jsRuntime @inject IVideoWatchTimeService videoWatchTimeService @@ -33,37 +34,29 @@ - - - - - + - - + - - - - - - - + } diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor new file mode 100644 index 00000000..d613c24e --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor @@ -0,0 +1,37 @@ + + + + + + + + + + +@code +{ + [Parameter] + [EditorRequired] + public string? Title { get; set; } + [Parameter] + [EditorRequired] + public string? Description { get; set; } + [Parameter] + [EditorRequired] + public string? ImageUrl { get; set; } + [Parameter] + [EditorRequired] + public string? ImageSecureUrl { get; set; } + [Parameter] + [EditorRequired] + public string? ImageType { get; set; } + [Parameter] + [EditorRequired] + public int? ImageWidth { get; set; } + [Parameter] + [EditorRequired] + public int? ImageHeight { get; set; } + [Parameter] + [EditorRequired] + public string? ImageAlt { get; set; } +} \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor new file mode 100644 index 00000000..f51ab432 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor @@ -0,0 +1,21 @@ + + + + + + +@code +{ + [Parameter] + [EditorRequired] + public string? Site { get; set; } + [Parameter] + [EditorRequired] + public string? Title { get; set; } + [Parameter] + [EditorRequired] + public string? Description { get; set; } + [Parameter] + [EditorRequired] + public string? ImageUrl { get; set; } +} \ No newline at end of file From 82966a24aa475bff2759d12a3379888c066b221d Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Sat, 21 Sep 2024 14:51:29 -0600 Subject: [PATCH 02/27] Upgrading to rc 1 --- .../FairPlayAdminPortal/FairPlayAdminPortal.csproj | 7 +------ .../FairPlayBudget/FairPlayBudget.csproj | 7 +------ src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj | 7 +------ .../FairPlayCombined.AutomatedTests.csproj | 2 +- .../FairPlayCombined.Common.csproj | 4 ++-- .../FairPlayCombined.DataAccess.csproj | 3 +-- .../FairPlayCombined.DataExportService.csproj | 4 ++-- .../FairPlayCombined.DatabaseManager.csproj | 2 +- .../FairPlayCombined.MailDev.Hosting.csproj | 2 +- .../FairPlayCombined.Migrations.csproj | 2 +- .../FairPlayCombined.Models.csproj | 2 +- .../FairPlayCombined.Services.csproj | 2 +- .../FairPlayCombined.Shared.csproj | 2 +- .../FairPlayCombined.SharedAuth.csproj | 4 ++-- .../FairPlayCombined.WebApi.csproj | 4 +--- .../FairPlayCombinedSln.AppHost.csproj | 8 ++++---- .../FairPlayCombinedSln.ServiceDefaults.csproj | 4 ++-- .../FairPlayDating.TestDataGenerator.csproj | 3 +-- .../FairPlayDating/FairPlayDating.csproj | 7 +------ src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj | 5 ----- .../FairPlaySocial/FairPlaySocial.csproj | 7 +------ .../FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj | 6 +++--- .../FairPlayTube.VideoIndexing.csproj | 2 +- src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj | 9 +-------- src/FairPlayCombinedSln/global.json | 2 +- 25 files changed, 33 insertions(+), 74 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj index e587dc03..fdd2563a 100644 --- a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj +++ b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj @@ -22,7 +22,7 @@ - + @@ -32,11 +32,6 @@ - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj index 09dc7eba..c679fe7c 100644 --- a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj +++ b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj @@ -7,17 +7,12 @@ Debug;Release;Debug_Enable_Paid_Tests - + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj index 79026265..8c79dad2 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj +++ b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj @@ -16,17 +16,12 @@ - + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj index 70033d5e..57e8268c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj @@ -27,7 +27,7 @@ True - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj index b85a4cc3..6247f7ab 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj @@ -20,8 +20,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj index 6726098b..129cef75 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj @@ -18,8 +18,7 @@ - - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj index bbc3501e..531ba975 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj @@ -16,8 +16,8 @@ - - + + all diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj index c507c06a..2f085ee8 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj @@ -8,7 +8,7 @@ en-US - + all diff --git a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj index b5f45752..3b7e2b79 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj @@ -7,7 +7,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj index 5dbd5fb2..5126ae9d 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj index b0cde6ab..97702bae 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj index 61b3a6f9..800482ad 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj index c30df143..56178a72 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj @@ -15,7 +15,7 @@ True - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj index 8410b6d5..17b9da4e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj index 33201f18..dc5c3ad2 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -17,8 +17,6 @@ - - all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj index 0e0e51a4..3fa3f689 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj @@ -18,14 +18,14 @@ True - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj index ed348179..587137e2 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj @@ -19,10 +19,10 @@ - + - + diff --git a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj index 877722ab..9a690ad9 100644 --- a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj @@ -17,9 +17,8 @@ True - + - all diff --git a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj index a5de7238..a308f4e2 100644 --- a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj @@ -26,15 +26,10 @@ - + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj b/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj index 9e2c85a9..a707009f 100644 --- a/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj +++ b/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj @@ -18,11 +18,6 @@ - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj index 7af918b2..ae213c3b 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj @@ -16,17 +16,12 @@ True - + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj index d7a5fa1d..39df6549 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj @@ -26,9 +26,9 @@ - - - + + + diff --git a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj index 09a65da6..e2488e5f 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj @@ -7,7 +7,7 @@ Debug;Release;Debug_Enable_Paid_Tests - + all diff --git a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj index 547f4399..f65ee822 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj @@ -16,18 +16,11 @@ True - + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/src/FairPlayCombinedSln/global.json b/src/FairPlayCombinedSln/global.json index 64b46ded..96cd2238 100644 --- a/src/FairPlayCombinedSln/global.json +++ b/src/FairPlayCombinedSln/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100-preview.6.24328.19" + "version": "9.0.100-rc.1.24452.12" } } \ No newline at end of file From db68bf3b9a95ab35ff7092bdfb0c13c3564f2fb0 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Sat, 21 Sep 2024 17:23:40 -0600 Subject: [PATCH 03/27] Adding WebComponents project --- .../FairPlayCombined.WebComponents.csproj | 22 +++++++++++++++++++ .../SEO}/JsonLdForSingleVideo.razor | 0 .../SEO/OpenGraph.razor | 0 .../SEO/TwitterCard.razor | 0 .../_Imports.razor | 1 + .../FairPlayCombinedNoMauiFilter.slnf | 1 + .../FairPlayCombinedSln.sln | 8 +++++++ .../Components/Pages/Public/WatchVideo.razor | 2 +- .../FairPlayTube.SharedUI.csproj | 2 ++ 9 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj rename src/FairPlayCombinedSln/{FairPlayTube.SharedUI/Components/Pages/Public => FairPlayCombined.WebComponents/SEO}/JsonLdForSingleVideo.razor (100%) rename src/FairPlayCombinedSln/{FairPlayTube.SharedUI/Components/WebComponents => FairPlayCombined.WebComponents}/SEO/OpenGraph.razor (100%) rename src/FairPlayCombinedSln/{FairPlayTube.SharedUI/Components/WebComponents => FairPlayCombined.WebComponents}/SEO/TwitterCard.razor (100%) create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj new file mode 100644 index 00000000..60e065e0 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj @@ -0,0 +1,22 @@ + + + + net9.0 + enable + enable + + + + + + + + + + + + + + + + diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/JsonLdForSingleVideo.razor similarity index 100% rename from src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/JsonLdForSingleVideo.razor rename to src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/JsonLdForSingleVideo.razor diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/OpenGraph.razor similarity index 100% rename from src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/OpenGraph.razor rename to src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/OpenGraph.razor diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/TwitterCard.razor similarity index 100% rename from src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/WebComponents/SEO/TwitterCard.razor rename to src/FairPlayCombinedSln/FairPlayCombined.WebComponents/SEO/TwitterCard.razor diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor new file mode 100644 index 00000000..77285129 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor @@ -0,0 +1 @@ +@using Microsoft.AspNetCore.Components.Web diff --git a/src/FairPlayCombinedSln/FairPlayCombinedNoMauiFilter.slnf b/src/FairPlayCombinedSln/FairPlayCombinedNoMauiFilter.slnf index fe318a2c..6cb3e334 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedNoMauiFilter.slnf +++ b/src/FairPlayCombinedSln/FairPlayCombinedNoMauiFilter.slnf @@ -24,6 +24,7 @@ "FairPlayCombined.SharedAuth\\FairPlayCombined.SharedAuth.csproj", "FairPlayCombined.Shared\\FairPlayCombined.Shared.csproj", "FairPlayCombined.WebApi\\FairPlayCombined.WebApi.csproj", + "FairPlayCombined.WebComponents\\FairPlayCombined.WebComponents.csproj", "FairPlayCombinedDb\\FairPlayCombinedDb.sqlproj", "FairPlayCombinedSln.AppHost\\FairPlayCombinedSln.AppHost.csproj", "FairPlayCombinedSln.ServiceDefaults\\FairPlayCombinedSln.ServiceDefaults.csproj", diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.sln b/src/FairPlayCombinedSln/FairPlayCombinedSln.sln index cb479134..1533d222 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.sln +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.sln @@ -91,6 +91,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FairPlayCRM", "FairPlayCRM\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FairPlayCombined.SharedAuth", "FairPlayCombined.SharedAuth\FairPlayCombined.SharedAuth.csproj", "{B62337AF-F8C4-4EC1-9C01-281112EDB877}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FairPlayCombined.WebComponents", "FairPlayCombined.WebComponents\FairPlayCombined.WebComponents.csproj", "{434607F4-A5DC-46FC-A2DB-D09942BE5A55}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_Enable_Paid_Tests|Any CPU = Debug_Enable_Paid_Tests|Any CPU @@ -350,6 +352,12 @@ Global {B62337AF-F8C4-4EC1-9C01-281112EDB877}.Debug|Any CPU.Build.0 = Debug|Any CPU {B62337AF-F8C4-4EC1-9C01-281112EDB877}.Release|Any CPU.ActiveCfg = Release|Any CPU {B62337AF-F8C4-4EC1-9C01-281112EDB877}.Release|Any CPU.Build.0 = Release|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Debug_Enable_Paid_Tests|Any CPU.ActiveCfg = Debug|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Debug_Enable_Paid_Tests|Any CPU.Build.0 = Debug|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Debug|Any CPU.Build.0 = Debug|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Release|Any CPU.ActiveCfg = Release|Any CPU + {434607F4-A5DC-46FC-A2DB-D09942BE5A55}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor index a3880eca..ac3fa3c5 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/Public/WatchVideo.razor @@ -11,7 +11,7 @@ @using FairPlayTube.SharedUI.Components.Spinners @using FairPlayTube.SharedUI.Components.Video @using System.Net -@using FairPlayTube.SharedUI.Components.WebComponents.SEO +@using FairPlayCombined.WebComponents.SEO @inject IJSRuntime jsRuntime @inject IVideoWatchTimeService videoWatchTimeService diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj index 39df6549..ac886f4f 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj @@ -42,6 +42,7 @@ + @@ -51,6 +52,7 @@ + From fdc901c786bc31e8f651ec7aab80f2edd8651002 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Sat, 21 Sep 2024 17:49:50 -0600 Subject: [PATCH 04/27] Converting PayPalCheckout into a reusable component --- .../FairPlayCombined.WebComponents.csproj | 5 ++++ .../PayPal/PayPalCheckout.razor | 23 ++++++++------- .../_Imports.razor | 1 + .../Components/Pages/User/MyFunds.razor | 28 ++++++++++++++++--- 4 files changed, 41 insertions(+), 16 deletions(-) rename src/FairPlayCombinedSln/{FairPlayTube.SharedUI/Components => FairPlayCombined.WebComponents}/PayPal/PayPalCheckout.razor (77%) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj index 60e065e0..e2d04fe8 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj @@ -13,10 +13,15 @@ + + + + + diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/PayPal/PayPalCheckout.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor similarity index 77% rename from src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/PayPal/PayPalCheckout.razor rename to src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor index ef1d789c..23c09461 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/PayPal/PayPalCheckout.razor +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor @@ -1,15 +1,11 @@ @implements IAsyncDisposable @using FairPlayCombined.Common.CustomAttributes -@using FairPlayCombined.Interfaces.Common @using FairPlayCombined.Models.PayPal @using Microsoft.Extensions.Localization @inject IStringLocalizer Localizer @inject IJSRuntime JSRuntime -@inject IToastService toastService -@inject IUserFundService userFundService -@inject IPayPalOrderService payPalOrderService
@@ -31,7 +27,12 @@ @code { [Parameter] - public EventCallback OnFundsAdded { get; set; } + [EditorRequired] + public EventCallback<(PaypalCheckoutApprovedDataModel data, + PaypalCheckoutApprovedDetailsModel details)> OnPayPalOrderApproved { get; set; } + [Parameter] + [EditorRequired] + public EventCallback OnError { get; set; } private DotNetObjectReference? objRef; private readonly CancellationTokenSource cancellationTokenSource = new(); @@ -52,7 +53,7 @@ } catch (Exception ex) { - this.toastService.ShowError(ex.Message); + await this.OnError.InvokeAsync(ex.Message); } } @@ -62,20 +63,18 @@ { try { - await this.userFundService.AddMyFundsAsync(data.orderID!, this.cancellationTokenSource.Token); - this.toastService.ShowSuccess($"Funds have been added to your Wallet"); - await OnFundsAdded.InvokeAsync(); + await OnPayPalOrderApproved.InvokeAsync((data, details)); } catch (Exception ex) { - toastService.ShowError(ex.Message); + await this.OnError.InvokeAsync(ex.Message); } } [JSInvokable] - public void ShowPayPalNotFoundError() + public async void ShowPayPalNotFoundError() { - this.toastService.ShowError(Localizer[PayPalNotFoundErrorTextKey]); + await this.OnError.InvokeAsync(Localizer[PayPalNotFoundErrorTextKey]); } public async ValueTask DisposeAsync() diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor index 77285129..b4df76f9 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/_Imports.razor @@ -1 +1,2 @@ @using Microsoft.AspNetCore.Components.Web +@using Microsoft.JSInterop diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/User/MyFunds.razor b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/User/MyFunds.razor index 5cc8f103..d753d7e5 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/User/MyFunds.razor +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/Components/Pages/User/MyFunds.razor @@ -4,7 +4,8 @@ @attribute [Authorize(Roles = FairPlayCombined.Common.Constants.RoleName.BasicPlanUser)] @using FairPlayCombined.Interfaces.Common -@using FairPlayTube.SharedUI.Components.PayPal +@using FairPlayCombined.Models.PayPal +@using FairPlayCombined.WebComponents.PayPal @inject IUserFundService userFundService @inject IToastService toastService @@ -22,7 +23,7 @@
- +
@@ -51,9 +52,23 @@ StateHasChanged(); } - private async Task OnFundsAdded() + private async Task OnPayPalOrderApprovedAsync( + ( + PaypalCheckoutApprovedDataModel data, + PaypalCheckoutApprovedDetailsModel details + ) tuple + ) { - await LoadDataAsync(); + try + { + await this.userFundService.AddMyFundsAsync(tuple.data.orderID!, this.cancellationTokenSource.Token); + this.toastService.ShowSuccess($"Funds have been added to your Wallet"); + await LoadDataAsync(); + } + catch (Exception ex) + { + this.toastService.ShowError(ex.Message); + } } private async Task OnClaimCodeClickAsync() @@ -72,6 +87,11 @@ } } + private void OnError(string errorMessage) + { + this.toastService.ShowError(errorMessage); + } + public async ValueTask DisposeAsync() { await this.cancellationTokenSource.CancelAsync(); From 49788c779002d4e2881197921c6043246519b798 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Sat, 21 Sep 2024 18:04:52 -0600 Subject: [PATCH 05/27] Adding WebComponents project to localization generator --- .../LocalizationGenerator.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/LocalizationGenerator.cs b/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/LocalizationGenerator.cs index 434b2315..d6e105c8 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/LocalizationGenerator.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/LocalizationGenerator.cs @@ -156,6 +156,9 @@ private static List GetTypesToCheck() var fairplayCombinedSharedAuthAssembly = typeof(SharedAuth._Imports).Assembly; var fairplayCombinedSharedAuthTypes = fairplayCombinedSharedAuthAssembly.GetTypes(); + var fairplayCombinedWebComponentsAssembly = typeof(WebComponents._Imports).Assembly; + var fairplayCombinedWebComponentsTypes = fairplayCombinedWebComponentsAssembly.GetTypes(); + List typesToCheck = [ .. fairplayTubeTypes, .. fairplayTubeSharedUITypes, @@ -167,7 +170,8 @@ private static List GetTypesToCheck() .. fairPlayDatingTypes, .. fairplayCrmTypes, .. fairplayCrmSharedUITypes, - .. fairplayCombinedSharedAuthTypes]; + .. fairplayCombinedSharedAuthTypes, + .. fairplayCombinedWebComponentsTypes]; return typesToCheck; } } From 2f137b507d5383354332fb8d4dcafdd21710b57b Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 23 Sep 2024 06:31:38 -0600 Subject: [PATCH 06/27] upgrading packages of MAUI applications --- .../FairPlayAdminPortal.MAUI.csproj | 4 ++-- .../FairPlayDating.MAUI/FairPlayDating.MAUI.csproj | 4 ++-- .../FairPlayShop.MAUI/FairPlayShop.MAUI.csproj | 4 ++-- .../FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj | 10 +++++----- .../FairPlayTube.MAUI/FairPlayTube.MAUI.csproj | 4 ++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayAdminPortal.MAUI/FairPlayAdminPortal.MAUI.csproj b/src/FairPlayCombinedSln/FairPlayAdminPortal.MAUI/FairPlayAdminPortal.MAUI.csproj index 5e76928f..f59e448e 100644 --- a/src/FairPlayCombinedSln/FairPlayAdminPortal.MAUI/FairPlayAdminPortal.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayAdminPortal.MAUI/FairPlayAdminPortal.MAUI.csproj @@ -48,7 +48,7 @@ - - + + \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayDating.MAUI/FairPlayDating.MAUI.csproj b/src/FairPlayCombinedSln/FairPlayDating.MAUI/FairPlayDating.MAUI.csproj index cf57aa17..b9a3c9b6 100644 --- a/src/FairPlayCombinedSln/FairPlayDating.MAUI/FairPlayDating.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating.MAUI/FairPlayDating.MAUI.csproj @@ -48,7 +48,7 @@ - - + + \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayShop.MAUI/FairPlayShop.MAUI.csproj b/src/FairPlayCombinedSln/FairPlayShop.MAUI/FairPlayShop.MAUI.csproj index 019975bc..70e72117 100644 --- a/src/FairPlayCombinedSln/FairPlayShop.MAUI/FairPlayShop.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayShop.MAUI/FairPlayShop.MAUI.csproj @@ -48,8 +48,8 @@ - - + + diff --git a/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj b/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj index 0f146990..805e8a19 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj @@ -50,13 +50,13 @@ - - + + - - - + + + diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/FairPlayTube.MAUI.csproj b/src/FairPlayCombinedSln/FairPlayTube.MAUI/FairPlayTube.MAUI.csproj index 15bbd6d9..f6eb0384 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/FairPlayTube.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/FairPlayTube.MAUI.csproj @@ -53,8 +53,8 @@ - - + + From 07564cd0f88868d4bb57925aeb4e140a58b70da7 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 23 Sep 2024 06:42:53 -0600 Subject: [PATCH 07/27] Fixing issue of persistentence component not registerd in MAUI app --- src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs b/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs index 32b34e65..30869b52 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs @@ -5,7 +5,9 @@ using FairPlayTube.ClientServices.KiotaClient; using FairPlayTube.MAUI.Authentication; using FairPlayTube.MAUI.Helpers; +using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.AspNetCore.Components.Infrastructure; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -34,6 +36,12 @@ public static MauiApp CreateMauiApp() builder.Services.AddFluentUIComponents(); builder.Services.AddMemoryCache(); builder.Services.AddMauiBlazorWebView(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(sp => + { + var manager = sp.GetRequiredService(); + return manager.State; + }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddLocalization(); From ba166922ee13eab3d7e4387b899275174b3aa09f Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 23 Sep 2024 07:35:22 -0600 Subject: [PATCH 08/27] Fixing exceptions in maui app --- .../VideoInfoClientService.cs | 43 ++++++++++++++----- .../FairPlayTube.MAUI/App.xaml.cs | 4 +- .../Components/Pages/Login.razor | 7 ++- .../Helpers/ReloadService.cs | 13 ++++++ .../FairPlayTube.MAUI/MauiProgram.cs | 5 +-- .../FairPlayTube.MAUI/Routes.razor | 10 +++-- 6 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 src/FairPlayCombinedSln/FairPlayTube.MAUI/Helpers/ReloadService.cs diff --git a/src/FairPlayCombinedSln/FairPlayTube.ClientServices/VideoInfoClientService.cs b/src/FairPlayCombinedSln/FairPlayTube.ClientServices/VideoInfoClientService.cs index f627b65e..486b3452 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.ClientServices/VideoInfoClientService.cs +++ b/src/FairPlayCombinedSln/FairPlayTube.ClientServices/VideoInfoClientService.cs @@ -7,7 +7,9 @@ namespace FairPlayTube.ClientServices { public class VideoInfoClientService( [FromKeyedServices("AnonymousApiClient")] - KiotaClient.ApiClient anonymousClient + KiotaClient.ApiClient anonymousClient, + [FromKeyedServices("AuthenticatedApiClient")] + KiotaClient.ApiClient authenticatedClient ) : IVideoInfoService { public Task CreateDescriptionForVideoAsync(long videoInfoId, CancellationToken cancellationToken) @@ -44,24 +46,43 @@ public async Task> GetPaginatedCompletedVideoInfoA }, cancellationToken); return new PaginationOfT() { - Items=result!.Items!.Select(p=>new VideoInfoModel() + Items = result!.Items!.Select(p => new VideoInfoModel() { VideoId = p.VideoId, Name = p.Name, - LifetimeSessions=p.LifetimeSessions!.Value, - LifetimeViewers=p.LifetimeViewers!.Value, - LifetimeWatchTime=TimeSpan.Parse(p.LifetimeWatchTime!), - PublishedOnString=p.PublishedOnString + LifetimeSessions = p.LifetimeSessions!.Value, + LifetimeViewers = p.LifetimeViewers!.Value, + LifetimeWatchTime = TimeSpan.Parse(p.LifetimeWatchTime!), + PublishedOnString = p.PublishedOnString }).ToArray(), - PageSize=result.PageSize!.Value, - TotalItems=result.TotalItems!.Value, - TotalPages=result.TotalPages!.Value, + PageSize = result.PageSize!.Value, + TotalItems = result.TotalItems!.Value, + TotalPages = result.TotalPages!.Value, }; } - public Task> GetPaginatedCompletedVideoInfoAsync(PaginationRequest paginationRequest, string? searchTerm, CancellationToken cancellationToken) + public async Task> GetPaginatedCompletedVideoInfoAsync(PaginationRequest paginationRequest, string? searchTerm, CancellationToken cancellationToken) { - throw new NotImplementedException(); + var result = await authenticatedClient.Videoinfo.GetPaginatedCompletedVideoInfoAsync + .GetAsync(requestConfiguration => + { + requestConfiguration.QueryParameters.StartIndex = paginationRequest.StartIndex; + }, cancellationToken); + return new PaginationOfT() + { + Items = result!.Items!.Select(p => new VideoInfoModel() + { + VideoId = p.VideoId, + Name = p.Name, + LifetimeSessions = p.LifetimeSessions!.Value, + LifetimeViewers = p.LifetimeViewers!.Value, + LifetimeWatchTime = TimeSpan.Parse(p.LifetimeWatchTime!), + PublishedOnString = p.PublishedOnString + }).ToArray(), + PageSize = result.PageSize!.Value, + TotalItems = result.TotalItems!.Value, + TotalPages = result.TotalPages!.Value, + }; } public Task> GetPaginatedCompletedVideoInfobyUserIdAsync(PaginationRequest paginationRequest, string userId, CancellationToken cancellationToken) diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/App.xaml.cs b/src/FairPlayCombinedSln/FairPlayTube.MAUI/App.xaml.cs index 0679bcf9..1f5476d5 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/App.xaml.cs +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/App.xaml.cs @@ -4,11 +4,11 @@ namespace FairPlayTube.MAUI { public partial class App : Application { - public App([FromKeyedServices("AnonymousApiClient")] ApiClient apiClient) + public App() { InitializeComponent(); - MainPage = new MauiPages.Login(apiClient); + MainPage = new MainPage(); } } } diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/Components/Pages/Login.razor b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Components/Pages/Login.razor index 047602cf..c3076392 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/Components/Pages/Login.razor +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Components/Pages/Login.razor @@ -2,6 +2,7 @@ @using FairPlayTube.ClientServices.KiotaClient @using FairPlayTube.ClientServices.KiotaClient.Models @using FairPlayTube.MAUI.Authentication +@using FairPlayTube.MAUI.Helpers @using Microsoft.Kiota.Abstractions @using System.Net

Login

@@ -42,7 +43,11 @@ UserContext.AccessTokenExpiresIn = result.ExpiresIn; UserContext.RefreshToken = result.RefreshToken; UserContext.TokenExpiraton = DateTimeOffset.UtcNow.AddMinutes(result!.ExpiresIn!.Value); - this.navingationManager!.NavigateTo("/", true); + ReloadService.IsReloading = true; + StateHasChanged(); + this.navingationManager!.NavigateTo("/", false); + ReloadService.IsReloading = false; + StateHasChanged(); } else { diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/Helpers/ReloadService.cs b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Helpers/ReloadService.cs new file mode 100644 index 00000000..a1010197 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Helpers/ReloadService.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FairPlayTube.MAUI.Helpers +{ + internal static class ReloadService + { + public static bool IsReloading { get; set; } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs b/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs index 30869b52..91f91848 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/MauiProgram.cs @@ -47,8 +47,6 @@ public static MauiApp CreateMauiApp() builder.Services.AddLocalization(); builder.Services.AddOptions(); builder.Services.AddAuthorizationCore(); - builder.Services.AddIdentityCore(options => options.SignIn.RequireConfirmedAccount = true) - .AddRoles(); builder.Services.AddCascadingAuthenticationState(); builder.Services.AddScoped(); builder.Services.AddScoped(); @@ -92,7 +90,8 @@ public class CustomAccessTokenAuthenticationProvider : IAccessTokenProvider public Task GetAuthorizationTokenAsync(Uri uri, Dictionary? additionalAuthenticationContext = null, CancellationToken cancellationToken = default) { - return Task.FromResult(UserContext.AccessToken ?? String.Empty); + var result = UserContext.AccessToken ?? String.Empty; + return Task.FromResult(result); } } diff --git a/src/FairPlayCombinedSln/FairPlayTube.MAUI/Routes.razor b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Routes.razor index e0681743..a726aabb 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.MAUI/Routes.razor +++ b/src/FairPlayCombinedSln/FairPlayTube.MAUI/Routes.razor @@ -1,6 +1,10 @@ - +@using FairPlayTube.MAUI.Helpers + - - + @if (!ReloadService.IsReloading) + { + + + } From db3209c5b6f44fd02b98bf1f5c1b9e9a26b24556 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 23 Sep 2024 11:37:44 -0600 Subject: [PATCH 09/27] Enabling LinkedIn Authentication --- .../LinkedInAuthClientSecretInfo.cs | 14 +++++++++++ .../Extensions/LinkedInAuthExtensions.cs | 23 +++++++++++++++++++ .../FairPlayCombinedSln.AppHost/Program.cs | 9 ++++++++ .../FairPlayTube/FairPlayTube.csproj | 1 + .../FairPlayTube/Program.cs | 9 ++++++++ 5 files changed, 56 insertions(+) create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInAuth/LinkedInAuthClientSecretInfo.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Services/Extensions/LinkedInAuthExtensions.cs diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInAuth/LinkedInAuthClientSecretInfo.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInAuth/LinkedInAuthClientSecretInfo.cs new file mode 100644 index 00000000..5ef3e45a --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInAuth/LinkedInAuthClientSecretInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FairPlayCombined.Models.LinkedInAuth +{ + public class LinkedInAuthClientSecretInfo + { + public string? ClientId { get; set; } + public string? ClientSecret { get; set; } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Extensions/LinkedInAuthExtensions.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Extensions/LinkedInAuthExtensions.cs new file mode 100644 index 00000000..a7e8a0f8 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Extensions/LinkedInAuthExtensions.cs @@ -0,0 +1,23 @@ +using FairPlayCombined.Models.LinkedInAuth; +using Microsoft.AspNetCore.Builder; + +namespace FairPlayCombined.Services.Extensions +{ + public static class LinkedInAuthExtensions + { + public static LinkedInAuthClientSecretInfo GetLinkedInAuthClientSecretInfo(this WebApplicationBuilder builder) + { + var linkedInAuthClientId = builder.GetConfigurationValue("LinkedInAuthClientId"); + + var linkedInAuthClientSecret = builder.GetConfigurationValue("LinkedInAuthClientSecret"); + + + LinkedInAuthClientSecretInfo linkedInAuthClientSecretInfo = new() + { + ClientId = linkedInAuthClientId, + ClientSecret = linkedInAuthClientSecret, + }; + return linkedInAuthClientSecretInfo; + } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/Program.cs b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/Program.cs index ec8a3a5c..e621659c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/Program.cs +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/Program.cs @@ -35,6 +35,12 @@ var paypalClientId = builder.Configuration["PayPalClientId"] ?? throw new InvalidOperationException("'PayPalClientId' not found"); +var linkedInAuthClientId = builder.Configuration["LinkedInAuthClientId"] ?? + throw new InvalidOperationException("'LinkedInAuthClientId' not found"); + +var linkedInAuthClientSecret = builder.Configuration["LinkedInAuthClientSecret"] ?? + throw new InvalidOperationException("'LinkedInAuthClientSecret' not found"); + var paypalClientSecret = builder.Configuration["PayPalClientSecret"] ?? throw new InvalidOperationException("'PayPalClientSecret' not found"); @@ -96,6 +102,9 @@ callback.EnvironmentVariables.Add("PayPalClientId", paypalClientId); callback.EnvironmentVariables.Add("PayPalClientSecret", paypalClientSecret); + callback.EnvironmentVariables.Add("LinkedInAuthClientId", linkedInAuthClientId); + callback.EnvironmentVariables.Add("LinkedInAuthClientSecret", linkedInAuthClientSecret); + callback.EnvironmentVariables.Add("IpDataKey", ipDataKey); }) .WithReference(fairPlayDbResource) diff --git a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj index f65ee822..501ea464 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj @@ -17,6 +17,7 @@ + diff --git a/src/FairPlayCombinedSln/FairPlayTube/Program.cs b/src/FairPlayCombinedSln/FairPlayTube/Program.cs index b498081e..8e5783f5 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/Program.cs +++ b/src/FairPlayCombinedSln/FairPlayTube/Program.cs @@ -5,6 +5,7 @@ using FairPlayCombined.Interfaces; using FairPlayCombined.Interfaces.FairPlayTube; using FairPlayCombined.Models.GoogleAuth; +using FairPlayCombined.Models.LinkedInAuth; using FairPlayCombined.Services.Common; using FairPlayCombined.Services.Extensions; using FairPlayCombined.Services.FairPlaySocial.Notificatios.UserMessage; @@ -84,6 +85,8 @@ GoogleAuthClientSecretInfo = googleAuthClientSecretInfo }); +LinkedInAuthClientSecretInfo linkedInAuthClientSecretInfo = builder.GetLinkedInAuthClientSecretInfo(); + builder.AddPayPalCore(); builder.Services.AddAuthentication(configureOptions => @@ -100,6 +103,12 @@ options.Scope.Add(YouTubeService.Scope.Youtubepartner); options.SaveTokens = true; }) + .AddLinkedIn(options => + { + options.ClientId = linkedInAuthClientSecretInfo.ClientId!; + options.ClientSecret = linkedInAuthClientSecretInfo.ClientSecret!; + options.SaveTokens = true; + }) .AddBearerToken(IdentityConstants.BearerScheme) .AddIdentityCookies(); From e69d8c539ec9b1d5ff65f38dc262f9e69b0ac5be Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 23 Sep 2024 13:20:44 -0600 Subject: [PATCH 10/27] Starting integration with LinkedIn --- .../DataExportUserProviderService.cs | 5 + .../Common/ILinkedInClientService.cs | 12 ++ .../IUserProviderService.cs | 1 + .../LinkedInApi/TextShareModel.cs | 42 ++++++ .../LinkedInApi/UserInfoModel.cs | 29 ++++ .../Common/LinkedInClientService.cs | 129 ++++++++++++++++++ .../Common/UserProviderService.cs | 8 ++ .../Providers/UserProviderService.cs | 5 + .../VideoIndexingUserProviderService.cs | 5 + .../WebApplicationBuilderExtensions.cs | 1 + .../FairPlayTube/Program.cs | 1 + 11 files changed, 238 insertions(+) create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInClientService.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/TextShareModel.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/UserInfoModel.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/DataExportUserProviderService.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/DataExportUserProviderService.cs index 7bea3b48..be37f946 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/DataExportUserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/DataExportUserProviderService.cs @@ -17,4 +17,9 @@ public bool IsAuthenticatedWithGoogle() { throw new NotImplementedException(); } + + public bool IsAuthenticatedWithLinkedIn() + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInClientService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInClientService.cs new file mode 100644 index 00000000..5ecea0b5 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInClientService.cs @@ -0,0 +1,12 @@ +using FairPlayCombined.Models.LinkedInApi; + +namespace FairPlayCombined.Interfaces.Common +{ + public interface ILinkedInClientService + { + Task CreateTextShareAsync(string text, CancellationToken cancellationToken); + Task GetUserInfoAsync(CancellationToken cancellationToken); + Task CreateArticleOrUrlShareAsync(string text, string? title, + string? description, string url, CancellationToken cancellationToken); + } +} \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/IUserProviderService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/IUserProviderService.cs index 87d61234..aef7cf75 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/IUserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/IUserProviderService.cs @@ -5,5 +5,6 @@ public interface IUserProviderService string? GetCurrentUserId(); string? GetAccessToken(); bool IsAuthenticatedWithGoogle(); + bool IsAuthenticatedWithLinkedIn(); } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/TextShareModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/TextShareModel.cs new file mode 100644 index 00000000..367da8c0 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/TextShareModel.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace FairPlayCombined.Models.LinkedInApi +{ + + public class TextShareModel + { + public string? author { get; set; } + public string? lifecycleState { get; set; } + public Specificcontent? specificContent { get; set; } + public Visibility? visibility { get; set; } + } + + public class Specificcontent + { + [JsonPropertyName("com.linkedin.ugc.ShareContent")] + public ComLinkedinUgcSharecontent? comlinkedinugcShareContent { get; set; } + } + + public class ComLinkedinUgcSharecontent + { + public Sharecommentary? shareCommentary { get; set; } + public string? shareMediaCategory { get; set; } + } + + public class Sharecommentary + { + public string? text { get; set; } + } + + public class Visibility + { + [JsonPropertyName("com.linkedin.ugc.MemberNetworkVisibility")] + public string? comlinkedinugcMemberNetworkVisibility { get; set; } + } + +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/UserInfoModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/UserInfoModel.cs new file mode 100644 index 00000000..46799881 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/LinkedInApi/UserInfoModel.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FairPlayCombined.Models.LinkedInApi +{ + + + public class UserInfoModel + { + public string? sub { get; set; } + public bool email_verified { get; set; } + public string? name { get; set; } + public Locale? locale { get; set; } + public string? given_name { get; set; } + public string? family_name { get; set; } + public string? email { get; set; } + public string? picture { get; set; } + } + + public class Locale + { + public string? country { get; set; } + public string? language { get; set; } + } + +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs new file mode 100644 index 00000000..73712952 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs @@ -0,0 +1,129 @@ +using FairPlayCombined.DataAccess.Data; +using FairPlayCombined.DataAccess.Models.dboSchema; +using FairPlayCombined.Interfaces; +using FairPlayCombined.Interfaces.Common; +using FairPlayCombined.Models.LinkedInApi; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using System.Net.Http.Json; + +namespace FairPlayCombined.Services.Common +{ + public class LinkedInClientService( + IDbContextFactory dbContextFactory, + IUserProviderService userProviderService, + ILogger logger, + HttpClient httpClient) : ILinkedInClientService + { + private async Task GetAccessTokenAsync(IDbContextFactory dbContextFactory, IUserProviderService userProviderService) + { + var userId = userProviderService.GetCurrentUserId(); + var dbContext = await dbContextFactory.CreateDbContextAsync(); + var accessTokenEntity = await + dbContext.AspNetUserTokens + .AsNoTracking() + .SingleAsync(p => p.UserId == userId && p.LoginProvider == "LinkedIn" && + p.Name == "access_token"); + return accessTokenEntity; + } + public async Task GetUserInfoAsync(CancellationToken cancellationToken) + { + AspNetUserTokens accessTokenEntity = await GetAccessTokenAsync(dbContextFactory, userProviderService); + httpClient.DefaultRequestHeaders.Authorization = + new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessTokenEntity.Value); + string requestUrl = "https://api.linkedin.com/v2/userinfo"; + var result = await httpClient.GetFromJsonAsync(requestUrl); + return result!; + } + + public async Task CreateTextShareAsync(string text, CancellationToken cancellationToken) + { + AspNetUserTokens accessTokenEntity = await GetAccessTokenAsync(dbContextFactory, userProviderService); + httpClient.DefaultRequestHeaders.Authorization = + new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessTokenEntity.Value); + httpClient.DefaultRequestHeaders.Add("X-Restli-Protocol-Version", "2.0.0"); + var userInfo = await this.GetUserInfoAsync(cancellationToken); + var authorId = userInfo.sub; + + var json = $$""" +{ + "author": "urn:li:person:{{authorId}}", + "lifecycleState": "PUBLISHED", + "specificContent": { + "com.linkedin.ugc.ShareContent": { + "shareCommentary": { + "text": "{{text}}" + }, + "shareMediaCategory": "NONE" + } + }, + "visibility": { + "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" + } +} +"""; + + string requestUrl = "https://api.linkedin.com/v2/ugcPosts"; + StringContent stringContent = new(json); + var response = await httpClient.PostAsync(requestUrl, stringContent, cancellationToken: cancellationToken); + if (!response.IsSuccessStatusCode) + { + var error = await response.Content.ReadAsStringAsync(); + logger.LogError(error); + } + } + + public async Task CreateArticleOrUrlShareAsync(string text, string? title, + string? description, string url, CancellationToken cancellationToken) + { + AspNetUserTokens accessTokenEntity = await GetAccessTokenAsync(dbContextFactory, userProviderService); + httpClient.DefaultRequestHeaders.Authorization = + new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessTokenEntity.Value); + httpClient.DefaultRequestHeaders.Add("X-Restli-Protocol-Version", "2.0.0"); + var userInfo = await this.GetUserInfoAsync(cancellationToken); + var authorId = userInfo.sub; + + var json = $$""" +{ + "author": "urn:li:person:{{authorId}}", + "lifecycleState": "PUBLISHED", + "specificContent": { + "com.linkedin.ugc.ShareContent": { + "shareCommentary": { + "text": "{{text}}" + }, + "shareMediaCategory": "ARTICLE", + "media": [ + { + "status": "READY", + "description": { + "text": "{{description}}" + }, + "originalUrl": "{{url}}", + "title": { + "text": "{{title}}" + } + } + ] + } + }, + "visibility": { + "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" + } +} +"""; + + string requestUrl = "https://api.linkedin.com/v2/ugcPosts"; + StringContent stringContent = new(json); + var response = await httpClient.PostAsync(requestUrl, stringContent, cancellationToken: cancellationToken); + if (!response.IsSuccessStatusCode) + { + var error = await response.Content.ReadAsStringAsync(); + logger.LogError(error); + } + } + } + +} + + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/UserProviderService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/UserProviderService.cs index 0a99eec7..10491f52 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/UserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/UserProviderService.cs @@ -29,5 +29,13 @@ public bool IsAuthenticatedWithGoogle() "Google"); return result; } + + public bool IsAuthenticatedWithLinkedIn() + { + var result = httpContextAccessor.HttpContext!.User + .HasClaim("http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", + "LinkedIn"); + return result; + } } } diff --git a/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/Providers/UserProviderService.cs b/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/Providers/UserProviderService.cs index 4ba8b6ca..f0d75423 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/Providers/UserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/Providers/UserProviderService.cs @@ -20,5 +20,10 @@ public bool IsAuthenticatedWithGoogle() { throw new NotImplementedException(); } + + public bool IsAuthenticatedWithLinkedIn() + { + throw new NotImplementedException(); + } } } diff --git a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/VideoIndexingUserProviderService.cs b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/VideoIndexingUserProviderService.cs index 893b2504..24e530f2 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/VideoIndexingUserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/VideoIndexingUserProviderService.cs @@ -17,4 +17,9 @@ public bool IsAuthenticatedWithGoogle() { throw new NotImplementedException(); } + + public bool IsAuthenticatedWithLinkedIn() + { + throw new NotImplementedException(); + } } \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayTube/Extensions/WebApplicationBuilderExtensions.cs b/src/FairPlayCombinedSln/FairPlayTube/Extensions/WebApplicationBuilderExtensions.cs index c45ee0e7..addc8615 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/Extensions/WebApplicationBuilderExtensions.cs +++ b/src/FairPlayCombinedSln/FairPlayTube/Extensions/WebApplicationBuilderExtensions.cs @@ -91,6 +91,7 @@ internal static void AddPlatformServices(this WebApplicationBuilder builder, builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); + builder.Services.AddTransient(); } } } diff --git a/src/FairPlayCombinedSln/FairPlayTube/Program.cs b/src/FairPlayCombinedSln/FairPlayTube/Program.cs index 8e5783f5..5143789f 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/Program.cs +++ b/src/FairPlayCombinedSln/FairPlayTube/Program.cs @@ -107,6 +107,7 @@ { options.ClientId = linkedInAuthClientSecretInfo.ClientId!; options.ClientSecret = linkedInAuthClientSecretInfo.ClientSecret!; + options.Scope.Add("w_member_social"); options.SaveTokens = true; }) .AddBearerToken(IdentityConstants.BearerScheme) From a4d9f5c6ddc164a03fc29cb8246fefdcd65659d1 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Fri, 27 Sep 2024 09:11:02 -0600 Subject: [PATCH 11/27] Adding additional columns --- .../Components/Pages/User/CompanyCreate.razor | 14 +++++ .../Components/Pages/User/CompanyList.razor | 54 ++++++++++++++++++- .../Data/FairPlayCombinedDbContext.cs | 14 ++--- .../Models/dbo/Company.cs | 10 ++-- .../Models/dbo/Contact.cs | 10 ++-- .../Common/Company/CompanyModel.cs | 3 +- .../Common/Company/CreateCompanyModel.cs | 4 ++ .../Common/Company/UpdateCompanyModel.cs | 4 ++ .../Common/Contact/ContactModel.cs | 2 +- .../Common/Contact/CreateContactModel.cs | 2 + .../Common/Contact/UpdateContactModel.cs | 2 + .../FairPlayCombinedDb/dbo/Tables/Company.sql | 6 ++- .../FairPlayCombinedDb/dbo/Tables/Contact.sql | 3 +- 13 files changed, 107 insertions(+), 21 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor index 991eb1c0..5e803b62 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor @@ -58,6 +58,20 @@ style="width:100%;">
+
+ LinkedIn Url + + +
+
+ Instagram Url + + +
Save
diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor index 5655e831..d48c552e 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor @@ -27,8 +27,58 @@ - - + +
    + @if (!String.IsNullOrWhiteSpace(context.WebsiteUrl)) + { +
  • + + + + Website + + +
  • + } + @if (!String.IsNullOrWhiteSpace(context.LinkedInUrl)) + { +
  • + + + + LinkedIn + + +
  • + } + @if (!String.IsNullOrWhiteSpace(context.InstagramUrl)) + { +
  • + + + + Instagram + + +
  • + } + @if (!String.IsNullOrWhiteSpace(context.YouTubeChannelUrl)) + { +
  • + + + + YouTube Channel + + +
  • + } +
+
diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs index 55369286..65b95653 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs @@ -366,8 +366,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasColumnName("ValidTo"); })); - entity.Property(e => e.PostTypeId).HasDefaultValueSql("1"); - entity.Property(e => e.PostVisibilityId).HasDefaultValueSql("1"); + entity.Property(e => e.PostTypeId).HasDefaultValue(1); + entity.Property(e => e.PostVisibilityId).HasDefaultValue(1); entity.HasOne(d => d.CreatedFromPost).WithMany(p => p.InverseCreatedFromPost).HasConstraintName("FK_Post_Post"); @@ -650,12 +650,12 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasFilter("YouTubeVideoId IS NOT NULL"); entity.Property(e => e.ApplicationUserId).HasComment("Video Owner Id"); - entity.Property(e => e.IsVideoGeneratedWithAi).HasDefaultValueSql("0"); + entity.Property(e => e.IsVideoGeneratedWithAi).HasDefaultValue(false); entity.Property(e => e.RowCreationDateTime).HasDefaultValueSql("GETUTCDATE()"); - entity.Property(e => e.RowCreationUser).HasDefaultValueSql("'Unknown'"); - entity.Property(e => e.SourceApplication).HasDefaultValueSql("'Unknown'"); - entity.Property(e => e.VideoIndexingProcessingPercentage).HasDefaultValueSql("0"); - entity.Property(e => e.VideoVisibilityId).HasDefaultValueSql("1"); + entity.Property(e => e.RowCreationUser).HasDefaultValue("Unknown"); + entity.Property(e => e.SourceApplication).HasDefaultValue("Unknown"); + entity.Property(e => e.VideoIndexingProcessingPercentage).HasDefaultValue(0); + entity.Property(e => e.VideoVisibilityId).HasDefaultValue((short)1); entity.HasOne(d => d.ApplicationUser).WithMany(p => p.VideoInfo) .OnDelete(DeleteBehavior.ClientSetNull) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs index 4e601c65..7b749576 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs @@ -20,6 +20,10 @@ public partial class Company [Key] public long CompanyId { get; set; } + [Required] + [StringLength(450)] + public string OwnerApplicationUserId { get; set; } + [Required] [StringLength(50)] public string Name { get; set; } @@ -33,9 +37,9 @@ public partial class Company public string YouTubeChannelUrl { get; set; } - [Required] - [StringLength(450)] - public string OwnerApplicationUserId { get; set; } + public string InstagramUrl { get; set; } + + public string LinkedInUrl { get; set; } [InverseProperty("Company")] public virtual ICollection ContactCompany { get; set; } = new List(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs index 0c927b38..31eb7196 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs @@ -21,6 +21,10 @@ public partial class Contact [Key] public long ContactId { get; set; } + [Required] + [StringLength(450)] + public string OwnerApplicationUserId { get; set; } + [Required] [StringLength(50)] public string Name { get; set; } @@ -39,6 +43,8 @@ public partial class Contact [StringLength(50)] public string YouTubeChannelUrl { get; set; } + public string InstagramUrl { get; set; } + [StringLength(50)] public string BusinessPhoneNumber { get; set; } @@ -47,10 +53,6 @@ public partial class Contact public DateTimeOffset? BirthDate { get; set; } - [Required] - [StringLength(450)] - public string OwnerApplicationUserId { get; set; } - [InverseProperty("PrimaryContact")] public virtual ICollection Company { get; set; } = new List(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs index 58e8ab64..fc47261b 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs @@ -19,7 +19,8 @@ public class CompanyModel : IListModel public long? PrimaryContactId { get; set; } public string? YouTubeChannelUrl { get; set; } - + public string? InstagramUrl { get; set; } + public string? LinkedInUrl { get; set; } public string? OwnerApplicationUserId { get; set; } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs index 92663e61..1ac70f6f 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs @@ -24,6 +24,10 @@ public class CreateCompanyModel : ICreateModel public long? PrimaryContactId { get; set; } [Url] public string? YouTubeChannelUrl { get; set; } + [Url] + public string? InstagramUrl { get; set; } + [Url] + public string? LinkedInUrl { get; set; } [Required] [StringLength(450)] public string? OwnerApplicationUserId { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs index 2b6a059c..13e21e65 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs @@ -23,5 +23,9 @@ public class UpdateCompanyModel: IUpdateModel public long? PrimaryContactId { get; set; } [Url] public string? YouTubeChannelUrl { get; set; } + [Url] + public string? InstagramUrl { get; set; } + [Url] + public string? LinkedInUrl { get; set; } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs index d80b086b..85749103 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs @@ -16,9 +16,9 @@ public class ContactModel : IListModel public string? EmailAddress { get; set; } public string? LinkedInProfileUrl { get; set; } public string? YouTubeChannelUrl { get; set; } + public string? InstagramUrl { get; set; } public string? BusinessPhoneNumber { get; set; } public string? MobilePhoneNumber { get; set; } public DateTimeOffset? BirthDate { get; set; } - } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs index 3cdce5a9..1ad10fbd 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs @@ -26,6 +26,8 @@ public class CreateContactModel : ICreateModel [StringLength(50)] [Url] public string? YouTubeChannelUrl { get; set; } + [Url] + public string? InstagramUrl { get; set; } [StringLength(50)] [Phone] public string? BusinessPhoneNumber { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs index dbe11670..056617f3 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs @@ -23,6 +23,8 @@ public class UpdateContactModel : IUpdateModel [StringLength(50)] [Url] public string? YouTubeChannelUrl { get; set; } + [Url] + public string? InstagramUrl { get; set; } [StringLength(50)] [Phone] public string? BusinessPhoneNumber { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql index 199f3d68..f095ec7e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql @@ -1,12 +1,14 @@ CREATE TABLE [dbo].[Company] ( [CompanyId] BIGINT NOT NULL CONSTRAINT PK_Company PRIMARY KEY IDENTITY, + [OwnerApplicationUserId] NVARCHAR(450) NOT NULL, [Name] NVARCHAR(50) NOT NULL, [WebsiteUrl] NVARCHAR(MAX) NULL, [Phone] NVARCHAR(50) NULL, [PrimaryContactId] BIGINT NULL, - [YouTubeChannelUrl] NVARCHAR(MAX) NULL, - [OwnerApplicationUserId] NVARCHAR(450) NOT NULL, + [YouTubeChannelUrl] NVARCHAR(MAX) NULL, + [InstagramUrl] NVARCHAR(MAX) NULL, + [LinkedInUrl] NVARCHAR(MAX) NULL, CONSTRAINT [FK_Company_Contact] FOREIGN KEY ([PrimaryContactId]) REFERENCES [dbo].[Contact]([ContactId]), CONSTRAINT [FK_Company_AspNetUsers] FOREIGN KEY ([OwnerApplicationUserId]) REFERENCES [AspNetUsers]([Id]) ) diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql index 39be80dc..c0ac1d57 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql @@ -1,15 +1,16 @@ CREATE TABLE [dbo].[Contact] ( [ContactId] BIGINT NOT NULL CONSTRAINT PK_Contact PRIMARY KEY IDENTITY, + [OwnerApplicationUserId] NVARCHAR(450) NOT NULL, [Name] NVARCHAR(50) NOT NULL, [Lastname] NVARCHAR(50) NOT NULL, [EmailAddress] NVARCHAR(50) NOT NULL, [LinkedInProfileUrl] NVARCHAR(50) NULL, [YouTubeChannelUrl] NVARCHAR(50) NULL, + [InstagramUrl] NVARCHAR(MAX) NULL, [BusinessPhoneNumber] NVARCHAR(50) NULL, [MobilePhoneNumber] NVARCHAR(50) NULL, [BirthDate] DATETIMEOFFSET NULL, - [OwnerApplicationUserId] NVARCHAR(450) NOT NULL, CONSTRAINT [FK_Contact_AspNetUsers] FOREIGN KEY ([OwnerApplicationUserId]) REFERENCES [AspNetUsers]([Id]) ) From 9fff75948500ae8bd12e80f496cefd7694702589 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 3 Oct 2024 13:25:13 -0600 Subject: [PATCH 12/27] Adding more url columns for social media presence --- .../Components/Pages/User/CompanyCreate.razor | 7 +++ .../Components/Pages/User/CompanyList.razor | 12 +++++ .../Components/Pages/User/ContactCreate.razor | 7 +++ .../Components/Pages/User/ContactList.razor | 54 ++++++++++++++++++- .../Providers/TestUserProviderService.cs | 5 ++ .../Models/dbo/Company.cs | 3 ++ .../Models/dbo/Contact.cs | 3 ++ .../Common/Company/CompanyModel.cs | 1 + .../Common/Company/CreateCompanyModel.cs | 2 + .../Common/Company/UpdateCompanyModel.cs | 2 + .../Common/Contact/ContactModel.cs | 1 + .../Common/Contact/CreateContactModel.cs | 2 + .../Common/Contact/UpdateContactModel.cs | 2 + .../FairPlayCombinedDb/dbo/Tables/Company.sql | 1 + .../FairPlayCombinedDb/dbo/Tables/Contact.sql | 1 + 15 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor index 5e803b62..1fdce9f9 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyCreate.razor @@ -72,6 +72,13 @@ style="width:100%;"> +
+ X (Formerly Twitter) Url + + +
Save
diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor index d48c552e..3e241227 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/CompanyList.razor @@ -77,6 +77,18 @@ } + @if (!String.IsNullOrWhiteSpace(context.XformerlyTwitterUrl)) + { +
  • + + + + X (Formerly Twitter) + + +
  • + } diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactCreate.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactCreate.razor index d297baf6..68681259 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactCreate.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactCreate.razor @@ -63,6 +63,13 @@ style="width:100%;"> +
    + X (Formerly Twitter) Url + + +
    Business Phone Number - - + +
      + @if (!String.IsNullOrWhiteSpace(context.LinkedInProfileUrl)) + { +
    • + + + + LinkedIn + + +
    • + } + @if (!String.IsNullOrWhiteSpace(context.InstagramUrl)) + { +
    • + + + + Instagram + + +
    • + } + @if (!String.IsNullOrWhiteSpace(context.YouTubeChannelUrl)) + { +
    • + + + + YouTube Channel + + +
    • + } + @if (!String.IsNullOrWhiteSpace(context.XformerlyTwitterUrl)) + { +
    • + + + + X (Formerly Twitter) + + +
    • + } +
    +
    diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs index 787a2500..5b40300e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs @@ -18,5 +18,10 @@ public bool IsAuthenticatedWithGoogle() { throw new NotImplementedException(); } + + public bool IsAuthenticatedWithLinkedIn() + { + throw new NotImplementedException(); + } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs index 7b749576..0fb6159a 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Company.cs @@ -41,6 +41,9 @@ public partial class Company public string LinkedInUrl { get; set; } + [Column("XFormerlyTwitterUrl")] + public string XformerlyTwitterUrl { get; set; } + [InverseProperty("Company")] public virtual ICollection ContactCompany { get; set; } = new List(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs index 31eb7196..b9355c7f 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/Contact.cs @@ -45,6 +45,9 @@ public partial class Contact public string InstagramUrl { get; set; } + [Column("XFormerlyTwitterUrl")] + public string XformerlyTwitterUrl { get; set; } + [StringLength(50)] public string BusinessPhoneNumber { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs index fc47261b..77a6a6b4 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CompanyModel.cs @@ -21,6 +21,7 @@ public class CompanyModel : IListModel public string? YouTubeChannelUrl { get; set; } public string? InstagramUrl { get; set; } public string? LinkedInUrl { get; set; } + public string? XformerlyTwitterUrl { get; set; } public string? OwnerApplicationUserId { get; set; } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs index 1ac70f6f..0ec5abef 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/CreateCompanyModel.cs @@ -28,6 +28,8 @@ public class CreateCompanyModel : ICreateModel public string? InstagramUrl { get; set; } [Url] public string? LinkedInUrl { get; set; } + [Url] + public string? XformerlyTwitterUrl { get; set; } [Required] [StringLength(450)] public string? OwnerApplicationUserId { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs index 13e21e65..27a231dd 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Company/UpdateCompanyModel.cs @@ -27,5 +27,7 @@ public class UpdateCompanyModel: IUpdateModel public string? InstagramUrl { get; set; } [Url] public string? LinkedInUrl { get; set; } + [Url] + public string? XformerlyTwitterUrl { get; set; } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs index 85749103..ac8ea799 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/ContactModel.cs @@ -17,6 +17,7 @@ public class ContactModel : IListModel public string? LinkedInProfileUrl { get; set; } public string? YouTubeChannelUrl { get; set; } public string? InstagramUrl { get; set; } + public string? XformerlyTwitterUrl { get; set; } public string? BusinessPhoneNumber { get; set; } public string? MobilePhoneNumber { get; set; } public DateTimeOffset? BirthDate { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs index 1ad10fbd..ed029ea8 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/CreateContactModel.cs @@ -28,6 +28,8 @@ public class CreateContactModel : ICreateModel public string? YouTubeChannelUrl { get; set; } [Url] public string? InstagramUrl { get; set; } + [Url] + public string? XformerlyTwitterUrl { get; set; } [StringLength(50)] [Phone] public string? BusinessPhoneNumber { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs index 056617f3..cea651bf 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/Contact/UpdateContactModel.cs @@ -25,6 +25,8 @@ public class UpdateContactModel : IUpdateModel public string? YouTubeChannelUrl { get; set; } [Url] public string? InstagramUrl { get; set; } + [Url] + public string? XformerlyTwitterUrl { get; set; } [StringLength(50)] [Phone] public string? BusinessPhoneNumber { get; set; } diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql index f095ec7e..c6f57c85 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Company.sql @@ -9,6 +9,7 @@ [YouTubeChannelUrl] NVARCHAR(MAX) NULL, [InstagramUrl] NVARCHAR(MAX) NULL, [LinkedInUrl] NVARCHAR(MAX) NULL, + [XFormerlyTwitterUrl] NVARCHAR(MAX) NULL, CONSTRAINT [FK_Company_Contact] FOREIGN KEY ([PrimaryContactId]) REFERENCES [dbo].[Contact]([ContactId]), CONSTRAINT [FK_Company_AspNetUsers] FOREIGN KEY ([OwnerApplicationUserId]) REFERENCES [AspNetUsers]([Id]) ) diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql index c0ac1d57..174e3566 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/Contact.sql @@ -8,6 +8,7 @@ [LinkedInProfileUrl] NVARCHAR(50) NULL, [YouTubeChannelUrl] NVARCHAR(50) NULL, [InstagramUrl] NVARCHAR(MAX) NULL, + [XFormerlyTwitterUrl] NVARCHAR(MAX) NULL, [BusinessPhoneNumber] NVARCHAR(50) NULL, [MobilePhoneNumber] NVARCHAR(50) NULL, [BirthDate] DATETIMEOFFSET NULL, From e5e4e8d27ed59bb9ba68bb3d86a9ceca8905708f Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 3 Oct 2024 13:34:56 -0600 Subject: [PATCH 13/27] Improve layout of contact list --- .../Components/Pages/User/ContactList.razor | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor index a8ad9bf7..0b3ae229 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor @@ -27,10 +27,47 @@ - - - + +
      + @if (!String.IsNullOrWhiteSpace(context.EmailAddress)) + { +
    • + + + + Email + + +
    • + } + @if (!String.IsNullOrWhiteSpace(context.BusinessPhoneNumber)) + { +
    • + + + + Business Phone Number + + +
    • + } + @if (!String.IsNullOrWhiteSpace(context.MobilePhoneNumber)) + { +
    • + + + + Mobile Phone Number + + +
    • + } +
    +
      @if (!String.IsNullOrWhiteSpace(context.LinkedInProfileUrl)) From 239c68ed0291799752d33055fe263e58a4c66dbf Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Sat, 5 Oct 2024 10:17:12 -0600 Subject: [PATCH 14/27] Improving UI for mobile devices --- .../Components/Pages/User/ContactList.razor | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor index 0b3ae229..7d205864 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/ContactList.razor @@ -24,12 +24,19 @@ {
      - - - - - + + + @($"{context.Name} {context.Lastname}") + +
        + @if (context.BirthDate.HasValue) + { +
      • + BirthDate: @context.BirthDate +
      • + } @if (!String.IsNullOrWhiteSpace(context.EmailAddress)) {
      • @@ -66,10 +73,6 @@
      • } -
      -
      - -
        @if (!String.IsNullOrWhiteSpace(context.LinkedInProfileUrl)) {
      • From 71d7187bdc6092b52dfe4bf448cc93e0f469843b Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Wed, 9 Oct 2024 09:20:57 -0600 Subject: [PATCH 15/27] Adding table CompanyContact --- .../FairPlayCombinedDb.refactorlog | 7 +++++++ .../FairPlayCombinedDb.sqlproj | 1 + .../dbo/Tables/CompanyContact.sql | 17 +++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/CompanyContact.sql diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog index 2d690184..dd219a15 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog @@ -154,4 +154,11 @@ + + + + + + + \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj index 0ecdb4ee..60f88e80 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj @@ -193,6 +193,7 @@ + diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/CompanyContact.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/CompanyContact.sql new file mode 100644 index 00000000..2827bd5d --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/CompanyContact.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[CompanyContact] +( + [CompanyContactId] BIGINT NOT NULL CONSTRAINT PK_CompanyContact PRIMARY KEY IDENTITY, + [CompanyId] BIGINT NOT NULL, + [ContactId] BIGINT NOT NULL, + [IsPrimaryContact] BIT NOT NULL, + CONSTRAINT [FK_CompanyContact_Company] FOREIGN KEY ([CompanyId]) REFERENCES [dbo].[Company]([CompanyId]), + CONSTRAINT [FK_CompanyContact_Contactt] FOREIGN KEY ([ContactId]) REFERENCES [dbo].[Contact]([ContactId]) +) + +GO + +CREATE UNIQUE INDEX [UI_CompanyContact_CompanyId_ContactId] ON [dbo].[CompanyContact] ([CompanyId],[ContactId]) + +GO + +CREATE UNIQUE INDEX [UI_CompanyContact_CompanyId_IsPrimaryContact] ON [dbo].[CompanyContact] ([CompanyId],[IsPrimaryContact]) From b1e4465ab0d1b5ab4312b6c1eee8f15c347ab701 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Wed, 9 Oct 2024 10:50:32 -0600 Subject: [PATCH 16/27] Upgrading to rc2 --- .../FairPlayAdminPortal/FairPlayAdminPortal.csproj | 7 ++++--- .../FairPlayBudget/FairPlayBudget.csproj | 2 +- .../FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj | 6 +++--- src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj | 7 ++++--- .../FairPlayCombined.Common.csproj | 4 ++-- .../FairPlayCombined.DataAccess.csproj | 2 +- .../FairPlayCombined.DataExportService.csproj | 5 +++-- .../FairPlayCombined.DatabaseManager.csproj | 2 +- .../FairPlayCombined.Interfaces.csproj | 2 +- .../FairPlayCombined.Models.csproj | 2 +- .../FairPlayCombined.Services.csproj | 4 ++-- .../FairPlayCombined.Shared.csproj | 2 +- .../FairPlayCombined.SharedAuth.csproj | 4 ++-- .../FairPlayCombined.WebApi.csproj | 3 ++- .../FairPlayCombined.WebComponents.csproj | 4 ++-- .../FairPlayCombinedSln.AppHost.csproj | 9 +++++---- .../FairPlayCombinedSln.ServiceDefaults.csproj | 6 +++--- .../FairPlayDating.TestDataGenerator.csproj | 3 ++- .../FairPlayDating/FairPlayDating.csproj | 3 ++- .../FairPlaySocial/FairPlaySocial.csproj | 3 ++- .../FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj | 6 +++--- .../FairPlayTube.VideoIndexing.csproj | 2 +- src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj | 3 ++- src/FairPlayCombinedSln/global.json | 2 +- 24 files changed, 51 insertions(+), 42 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj index fdd2563a..9a724b3d 100644 --- a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj +++ b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj @@ -1,4 +1,4 @@ - + net9.0 enable @@ -22,8 +22,8 @@ - - + + @@ -33,6 +33,7 @@ + diff --git a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj index c679fe7c..ef443c9c 100644 --- a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj +++ b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj @@ -7,7 +7,7 @@ Debug;Release;Debug_Enable_Paid_Tests - + diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj index 6a2cb9e0..0a1c0073 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj @@ -12,9 +12,9 @@ - - - + + + diff --git a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj index 8c79dad2..4e573e08 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj +++ b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -16,9 +16,9 @@ - - + + @@ -31,6 +31,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj index 6247f7ab..81b8231c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj @@ -20,8 +20,8 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj index 129cef75..90a8bba5 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj index 531ba975..e76a7f24 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj @@ -1,4 +1,4 @@ - + net9.0 @@ -17,12 +17,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj index 2f085ee8..771cca56 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj @@ -8,7 +8,7 @@ en-US - + all diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj index 39ba7c3c..630bd70b 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj @@ -15,7 +15,7 @@ True - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj index 97702bae..d2841436 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj index 800482ad..5d3316f4 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj @@ -34,7 +34,7 @@ - + @@ -42,7 +42,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj index 56178a72..7f496864 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj @@ -15,7 +15,7 @@ True - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj index 17b9da4e..50f1f996 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj index dc5c3ad2..fc4e395b 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj @@ -16,12 +16,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj index e2d04fe8..5fd12949 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj index 3fa3f689..c498dbac 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj @@ -18,14 +18,15 @@ True - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj index 587137e2..7345ca54 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj @@ -19,10 +19,10 @@ - + - - + + diff --git a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj index 9a690ad9..9d40ccb8 100644 --- a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj @@ -17,13 +17,14 @@ True - + all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj index a308f4e2..2e13b7b1 100644 --- a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj @@ -26,7 +26,7 @@ - + @@ -38,6 +38,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj index ae213c3b..34e5c3b5 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj @@ -16,7 +16,7 @@ True - + @@ -27,6 +27,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj index ac886f4f..0afe2df9 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj @@ -26,9 +26,9 @@ - - - + + + diff --git a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj index e2488e5f..03ba40d6 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj @@ -7,7 +7,7 @@ Debug;Release;Debug_Enable_Paid_Tests - + all diff --git a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj index 501ea464..7e86ff8b 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj @@ -16,7 +16,7 @@ True - + @@ -31,6 +31,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/global.json b/src/FairPlayCombinedSln/global.json index 96cd2238..fc0162ff 100644 --- a/src/FairPlayCombinedSln/global.json +++ b/src/FairPlayCombinedSln/global.json @@ -1,5 +1,5 @@ { "sdk": { - "version": "9.0.100-rc.1.24452.12" + "version": "9.0.100-rc.2.24474.11" } } \ No newline at end of file From 6fc66db63c3aa4a5f0c84d5c5a9491016aa3e832 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Wed, 9 Oct 2024 11:30:41 -0600 Subject: [PATCH 17/27] Fixing deployment compilation issues --- .../FairPlayBudget/FairPlayBudget.csproj | 1 + .../FairPlayCombined.DatabaseManager.csproj | 1 + .../FairPlayCombined.MailDev.Hosting.csproj | 4 ++-- .../Common/LinkedInClientService.cs | 16 +++++++++++----- .../FairPlaySocial/PostService.cs | 4 ++-- .../VideoDigitalMarketingDailyPostsService.cs | 12 ++++++------ .../FairPlayTube/VideoInfoService.cs | 8 ++++---- .../FairPlayTube/VideoThumbnailService.cs | 4 ++-- .../FairPlayTube.VideoIndexing.csproj | 1 + 9 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj index ef443c9c..6c1e9f1c 100644 --- a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj +++ b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj @@ -14,6 +14,7 @@ + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj index 771cca56..584b444b 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj @@ -15,6 +15,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj index 3b7e2b79..aa09c6e0 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj @@ -7,12 +7,12 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs index 73712952..0d332ecd 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs @@ -31,8 +31,10 @@ public async Task GetUserInfoAsync(CancellationToken cancellation AspNetUserTokens accessTokenEntity = await GetAccessTokenAsync(dbContextFactory, userProviderService); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessTokenEntity.Value); +#pragma warning disable S1075 // URIs should not be hardcoded string requestUrl = "https://api.linkedin.com/v2/userinfo"; - var result = await httpClient.GetFromJsonAsync(requestUrl); +#pragma warning restore S1075 // URIs should not be hardcoded + var result = await httpClient.GetFromJsonAsync(requestUrl, cancellationToken); return result!; } @@ -63,13 +65,15 @@ public async Task CreateTextShareAsync(string text, CancellationToken cancellati } """; +#pragma warning disable S1075 // URIs should not be hardcoded string requestUrl = "https://api.linkedin.com/v2/ugcPosts"; +#pragma warning restore S1075 // URIs should not be hardcoded StringContent stringContent = new(json); var response = await httpClient.PostAsync(requestUrl, stringContent, cancellationToken: cancellationToken); if (!response.IsSuccessStatusCode) { - var error = await response.Content.ReadAsStringAsync(); - logger.LogError(error); + var error = await response.Content.ReadAsStringAsync(cancellationToken); + logger.LogError("Error: {ErrorMessage}", error); } } @@ -113,13 +117,15 @@ public async Task CreateArticleOrUrlShareAsync(string text, string? title, } """; +#pragma warning disable S1075 // URIs should not be hardcoded string requestUrl = "https://api.linkedin.com/v2/ugcPosts"; +#pragma warning restore S1075 // URIs should not be hardcoded StringContent stringContent = new(json); var response = await httpClient.PostAsync(requestUrl, stringContent, cancellationToken: cancellationToken); if (!response.IsSuccessStatusCode) { - var error = await response.Content.ReadAsStringAsync(); - logger.LogError(error); + var error = await response.Content.ReadAsStringAsync(cancellationToken); + logger.LogError("Error: {ErrorMessage}", error); } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlaySocial/PostService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlaySocial/PostService.cs index 2443bba1..e3b335b3 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlaySocial/PostService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlaySocial/PostService.cs @@ -24,7 +24,7 @@ namespace FairPlayCombined.Services.FairPlaySocial >] public partial class PostService : BaseService { - private readonly IHubContext hubContext; + private readonly IHubContext? hubContext; public PostService( IDbContextFactory dbContextFactory, @@ -43,7 +43,7 @@ public async Task SendPostCreatedNotificationAsync(long postId, var userEntity = await dbContext .AspNetUsers.SingleAsync(p => p.Id == postEntity.OwnerApplicationUserId, cancellationToken: cancellationToken); - await hubContext.Clients.All.ReceiveMessage(new PostNotificationModel() + await hubContext!.Clients.All.ReceiveMessage(new PostNotificationModel() { PostAction = PostAction.PostCreated, From = userEntity.UserName, diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoDigitalMarketingDailyPostsService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoDigitalMarketingDailyPostsService.cs index 7513fb13..c7867d5c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoDigitalMarketingDailyPostsService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoDigitalMarketingDailyPostsService.cs @@ -25,8 +25,8 @@ namespace FairPlayCombined.Services.FairPlayTube >] public partial class VideoDigitalMarketingDailyPostsService : BaseService, IVideoDigitalMarketingDailyPostsService { - private readonly IUserFundService userFundService; - private readonly IOpenAIService openAIService; + private readonly IUserFundService? userFundService; + private readonly IOpenAIService? openAIService; public VideoDigitalMarketingDailyPostsService( IDbContextFactory dbContextFactory, ILogger logger, @@ -39,7 +39,7 @@ public VideoDigitalMarketingDailyPostsService( public async Task CreateVideoDigitalMarketingDailyPostsForLinkedInAsync (long videoInfoId, string languageCode, CancellationToken cancellationToken) { - var hasRequiredFunds = await userFundService.HasFundsToCreateDailyPostsAsync(cancellationToken); + var hasRequiredFunds = await userFundService!.HasFundsToCreateDailyPostsAsync(cancellationToken); if (!hasRequiredFunds) { string message = "You don't have available funds left to perform the operation."; @@ -65,7 +65,7 @@ public async Task CreateVideoDigitalMarketingDailyPostsForLinkedInAsync promptBuilder.AppendLine("Posts are for LinkedIn"); promptBuilder.AppendLine($"The posts must be in language culture: {languageCode}"); var userMessage = $"Today's Date: {DateTimeOffset.UtcNow.Date}. Video Title: {videoDataEntity.Description}. Video Captions: {videoDataEntity.EnglishCaptions}"; - var result = await this.openAIService.GenerateChatCompletionAsync(promptBuilder.ToString(), + var result = await this.openAIService!.GenerateChatCompletionAsync(promptBuilder.ToString(), userMessage, cancellationToken); var resultText = result!.choices![0].message!.content; await dbContext.VideoDigitalMarketingDailyPosts.AddAsync(new() @@ -82,7 +82,7 @@ await dbContext.VideoDigitalMarketingDailyPosts.AddAsync(new() public async Task CreateVideoDigitalMarketingDailyPostsForTwitterAsync (long videoInfoId, string languageCode, CancellationToken cancellationToken) { - var hasRequiredFunds = await userFundService.HasFundsToCreateDailyPostsAsync(cancellationToken); + var hasRequiredFunds = await userFundService!.HasFundsToCreateDailyPostsAsync(cancellationToken); if (!hasRequiredFunds) { string message = "You don't have available funds left to perform the operation."; @@ -107,7 +107,7 @@ public async Task CreateVideoDigitalMarketingDailyPostsForTwitterAsync promptBuilder.AppendLine("Posts are for Twitter/X"); promptBuilder.AppendLine($"The posts must be in language culture: {languageCode}"); var userMessage = $"Today's Date: {DateTimeOffset.UtcNow.Date}. Video Title: {videoDataEntity.Description}. Video Captions: {videoDataEntity.EnglishCaptions}"; - var result = await this.openAIService.GenerateChatCompletionAsync(promptBuilder.ToString(), + var result = await this.openAIService!.GenerateChatCompletionAsync(promptBuilder.ToString(), userMessage, cancellationToken); var resultText = result!.choices![0].message!.content; await dbContext.VideoDigitalMarketingDailyPosts.AddAsync(new() diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoInfoService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoInfoService.cs index 3592235a..e70eeff0 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoInfoService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoInfoService.cs @@ -24,8 +24,8 @@ namespace FairPlayCombined.Services.FairPlayTube >] public partial class VideoInfoService : BaseService, IVideoInfoService { - private readonly IAzureVideoIndexerService azureVideoIndexerService; - private readonly IOpenAIService openAIService; + private readonly IAzureVideoIndexerService? azureVideoIndexerService; + private readonly IOpenAIService? openAIService; public VideoInfoService(IDbContextFactory dbContextFactory, ILogger logger, IAzureVideoIndexerService azureVideoIndexerService, IOpenAIService openAIService) : @@ -58,7 +58,7 @@ await dbContext.VideoInfo StringBuilder systemMessage = new("Create a description for the video based on the information I'll provide. Description must be less than 500 characters. Your response must be in simple text."); systemMessage.AppendLine("The description must have the 3 best hashtags at the end."); systemMessage.AppendLine("The description must be in the language of the Video Title."); - var response = await openAIService + var response = await openAIService! .GenerateChatCompletionAsync(systemMessage.ToString(), prompt: promptBuilder.ToString(), cancellationToken); @@ -356,7 +356,7 @@ await dbContext.VideoInfo await transaction.CommitAsync(cancellationToken); // Call the Azure Video Indexer service to delete the video by ID - var armAccessToken = await azureVideoIndexerService.AuthenticateToAzureArmAsync(); + var armAccessToken = await azureVideoIndexerService!.AuthenticateToAzureArmAsync(); var getAccessTokenResult = await azureVideoIndexerService.GetAccessTokenForArmAccountAsync(armAccessToken, cancellationToken); await azureVideoIndexerService.DeleteVideoByIdAsync(videoInfoEntity.VideoId, getAccessTokenResult!.AccessToken!, cancellationToken); } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoThumbnailService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoThumbnailService.cs index 8d78c478..0e1209d1 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoThumbnailService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayTube/VideoThumbnailService.cs @@ -27,7 +27,7 @@ namespace FairPlayCombined.Services.FairPlayTube >] public partial class VideoThumbnailService : BaseService, IVideoThumbnailService { - private readonly IUserFundService userFundService; + private readonly IUserFundService? userFundService; public VideoThumbnailService( IDbContextFactory dbContextFactory, ILogger logger, @@ -43,7 +43,7 @@ public VideoThumbnailService( HttpClient httpClient, CancellationToken cancellationToken) { - var hasRequiredFunds = await userFundService.HasFundsToCreateThumbnailsAsync(cancellationToken); + var hasRequiredFunds = await userFundService!.HasFundsToCreateThumbnailsAsync(cancellationToken); if (!hasRequiredFunds) { string message = "You don't have available funds left to perform the operation."; diff --git a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj index 03ba40d6..b44ce34e 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj @@ -13,6 +13,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + From acc9693784b14b8a5c296b96d7269b827bb3705a Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 10 Oct 2024 05:15:05 -0600 Subject: [PATCH 18/27] Adding service to import LinkedIn Connections --- .../LinkedInConnectionServiceTests.cs | 91 +++++++++++++ .../Providers/TestUserProviderService.cs | 3 +- .../Data/FairPlayCombinedDbContext.cs | 9 ++ .../Models/dbo/AspNetUsers.cs | 3 + .../Models/dbo/LinkedInConnection.cs | 52 ++++++++ .../efpt.config.json | 4 + .../Common/ILinkedInConnectionService.cs | 7 + .../Common/LinkedInConnectionService.cs | 120 ++++++++++++++++++ .../FairPlayCombinedDb.refactorlog | 7 + .../FairPlayCombinedDb.sqlproj | 1 + .../dbo/Tables/LinkedInConnection.sql | 13 ++ 11 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/LinkedInConnection.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/LinkedInConnection.sql diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs new file mode 100644 index 00000000..17261b17 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs @@ -0,0 +1,91 @@ + +using FairPlayCombined.AutomatedTests.ServicesTests.Providers; +using FairPlayCombined.DataAccess.Data; +using FairPlayCombined.DataAccess.Interceptors; +using FairPlayCombined.DataAccess.Models.dboSchema; +using FairPlayCombined.Interfaces; +using FairPlayCombined.Services.Common; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace FairPlayCombined.AutomatedTests.ServicesTests.CommonServices +{ + [TestClass] + public class LinkedInConnectionServiceTests : ServicesBase + { + [TestCleanup] + public async Task TestCleanupAsync() + { + ServiceCollection services = new(); + var cs = _msSqlContainer!.GetConnectionString(); + services.AddDbContextFactory( + optionsAction => + { + optionsAction.UseSqlServer(cs, sqlServerOptionsAction => sqlServerOptionsAction.UseNetTopologySuite()); + }); + var sp = services.BuildServiceProvider(); + var dbContext = sp.GetRequiredService(); + foreach (var singleLinkedInConnection in dbContext.LinkedInConnection) + { + dbContext.LinkedInConnection.Remove(singleLinkedInConnection); + } + foreach (var singleUser in dbContext.AspNetUsers) + { + dbContext.AspNetUsers.Remove(singleUser); + } + await dbContext.SaveChangesAsync(); + } + + [TestMethod] + public async Task Test_ImportFromConnectionsFileAsync() + { + var configurationBuilder = new ConfigurationBuilder(); + configurationBuilder.AddUserSecrets(); + var configuration = configurationBuilder.Build(); + var linkedInConnectionsFilePath = configuration["LinkedInConnectionsFilePath"] ?? + throw new Exception("'LinkedInConnectionsFilePath' is not in configuration"); + ServiceCollection services = new(); + var cs = _msSqlContainer!.GetConnectionString(); + services.AddDbContextFactory( + optionsAction => + { + optionsAction.AddInterceptors( + new SaveChangesInterceptor(new TestUserProviderService()) + ); + optionsAction.UseSqlServer(cs, sqlServerOptionsAction => sqlServerOptionsAction.UseNetTopologySuite()); + }); + services.AddTransient>(sp => + { + var loggerFactory = LoggerFactory.Create(p => p.AddConsole()); + var logger = loggerFactory!.CreateLogger(); + return logger; + }); + services.AddTransient(); + services.AddTransient(); + var sp = services.BuildServiceProvider(); + var dbContext = sp.GetRequiredService(); + await dbContext.Database.EnsureCreatedAsync(); + string testUserName = "fromuser@test.test"; + AspNetUsers testUser = new() + { + Id = Guid.NewGuid().ToString(), + UserName = testUserName, + NormalizedUserName = testUserName.Normalize(), + Email = testUserName, + NormalizedEmail = testUserName.Normalize(), + }; + await dbContext.AspNetUsers.AddAsync(testUser); + await dbContext.SaveChangesAsync(); + TestUserProviderService.CurrentUserId = testUser.Id; + var linkedInConnectionService = sp.GetRequiredService(); + var filePath = configuration["LinkedInConnectionsFilePath"]; + Stream fileStream = File.OpenRead(filePath!); + await linkedInConnectionService.ImportFromConnectionsFileAsync( + fileStream, CancellationToken.None); + var connectionsCount = await dbContext.LinkedInConnection.CountAsync(); + Assert.IsTrue(connectionsCount > 0); + } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs index 5b40300e..1a8190c9 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/Providers/TestUserProviderService.cs @@ -4,6 +4,7 @@ namespace FairPlayCombined.AutomatedTests.ServicesTests.Providers { internal class TestUserProviderService : IUserProviderService { + public static string? CurrentUserId { private get; set; } public string? GetAccessToken() { throw new NotImplementedException(); @@ -11,7 +12,7 @@ internal class TestUserProviderService : IUserProviderService public string GetCurrentUserId() { - return "AT User"; + return CurrentUserId!; } public bool IsAuthenticatedWithGoogle() diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs index 65b95653..7be8a93f 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Data/FairPlayCombinedDbContext.cs @@ -76,6 +76,8 @@ public FairPlayCombinedDbContext(DbContextOptions opt public virtual DbSet LikedUserProfile { get; set; } + public virtual DbSet LinkedInConnection { get; set; } + public virtual DbSet MonthlyBudgetInfo { get; set; } public virtual DbSet NewVideoRecommendation { get; set; } @@ -314,6 +316,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) .HasConstraintName("FK_LikedUserProfile_LikingApplicactionUser"); }); + modelBuilder.Entity(entity => + { + entity.HasOne(d => d.ApplicationUser).WithMany(p => p.LinkedInConnection) + .OnDelete(DeleteBehavior.ClientSetNull) + .HasConstraintName("FK_LinkedInConnection_AspNetUsers"); + }); + modelBuilder.Entity(entity => { entity.HasOne(d => d.Owner).WithMany(p => p.MonthlyBudgetInfo) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/AspNetUsers.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/AspNetUsers.cs index 1d31f8a3..55fadec0 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/AspNetUsers.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/AspNetUsers.cs @@ -89,6 +89,9 @@ public partial class AspNetUsers [InverseProperty("LikingApplicationUser")] public virtual ICollection LikedUserProfileLikingApplicationUser { get; set; } = new List(); + [InverseProperty("ApplicationUser")] + public virtual ICollection LinkedInConnection { get; set; } = new List(); + [InverseProperty("Owner")] public virtual ICollection MonthlyBudgetInfo { get; set; } = new List(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/LinkedInConnection.cs b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/LinkedInConnection.cs new file mode 100644 index 00000000..11c8ba87 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/Models/dbo/LinkedInConnection.cs @@ -0,0 +1,52 @@ +// This file has been auto generated by EF Core Power Tools. +#nullable disable +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; +using FairPlayCombined.DataAccess.Models.dboSchema; +using FairPlayCombined.DataAccess.Models.FairPlayBudgetSchema; +using FairPlayCombined.DataAccess.Models.FairPlayDatingSchema; +using FairPlayCombined.DataAccess.Models.FairPlayShopSchema; +using FairPlayCombined.DataAccess.Models.FairPlaySocialSchema; +using FairPlayCombined.DataAccess.Models.FairPlayTubeSchema; + + +namespace FairPlayCombined.DataAccess.Models.dboSchema; + +public partial class LinkedInConnection +{ + [Key] + public long LinkedInConnectionId { get; set; } + + [Required] + [StringLength(450)] + public string ApplicationUserId { get; set; } + + [Required] + [StringLength(50)] + public string FirstName { get; set; } + + [StringLength(50)] + public string LastName { get; set; } + + [Required] + [StringLength(1000)] + public string ProfileUrl { get; set; } + + [StringLength(50)] + public string EmailAddress { get; set; } + + [StringLength(1000)] + public string Company { get; set; } + + [StringLength(1000)] + public string Position { get; set; } + + public DateOnly ConnectedOn { get; set; } + + [ForeignKey("ApplicationUserId")] + [InverseProperty("LinkedInConnection")] + public virtual AspNetUsers ApplicationUser { get; set; } +} \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/efpt.config.json b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/efpt.config.json index 855eb98a..964fab57 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/efpt.config.json +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/efpt.config.json @@ -78,6 +78,10 @@ "Name": "[dbo].[ImageStyle]", "ObjectType": 0 }, + { + "Name": "[dbo].[LinkedInConnection]", + "ObjectType": 0 + }, { "Name": "[dbo].[OpenAIPrompt]", "ObjectType": 0 diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs new file mode 100644 index 00000000..b2bc6eba --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs @@ -0,0 +1,7 @@ +namespace FairPlayCombined.Interfaces.Common +{ + public interface ILinkedInConnectionService + { + Task ImportFromConnectionsFileAsync(Stream stream, CancellationToken cancellationToken); + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs new file mode 100644 index 00000000..9708241f --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs @@ -0,0 +1,120 @@ +using CsvHelper.Configuration; +using CsvHelper; +using FairPlayCombined.DataAccess.Data; +using FairPlayCombined.Interfaces; +using FairPlayCombined.Interfaces.Common; +using Microsoft.EntityFrameworkCore; +using System.Globalization; +using FairPlayCombined.DataAccess.Models.dboSchema; +using Microsoft.Extensions.Logging; + +namespace FairPlayCombined.Services.Common +{ + public class LinkedInConnectionService( + ILogger logger, + IDbContextFactory dbContextFactory, + IUserProviderService userProviderService) : ILinkedInConnectionService + { + public async Task ImportFromConnectionsFileAsync(Stream stream, CancellationToken cancellationToken) + { + cancellationToken.ThrowIfCancellationRequested(); + var dbContext = await dbContextFactory.CreateDbContextAsync(cancellationToken); + using StreamReader streamReader = new(stream); + using CsvParser csvParser = new(streamReader, configuration: + new CsvConfiguration(CultureInfo.CurrentCulture) + { + Delimiter = ",", + ShouldQuote = ((ShouldQuoteArgs args) => { return false; }) + }); + using CsvReader csvReader = new(csvParser); + logger.LogInformation("Start of reading file"); + if (await csvReader.ReadAsync()) + { + bool firstNameHeaderFound = false; + while (await csvReader.ReadAsync()) + { + logger.LogInformation("Read a new row"); + if (!firstNameHeaderFound) + { + firstNameHeaderFound = IsFirstNameHeader(logger, csvReader); + } + else + { + logger.LogInformation("Reading main columns text"); + await SaveRecordToDatabaseAsync(dbContext, csvReader, cancellationToken); + } + } + } + } + + private async Task SaveRecordToDatabaseAsync(FairPlayCombinedDbContext dbContext, + CsvReader csvReader, CancellationToken cancellationToken) + { + var firstName = csvReader.GetField(0); + var lastName = csvReader.GetField(1); + var profileUrl = csvReader.GetField(2); + var emailAddress = csvReader.GetField(3); + var company = csvReader.GetField(4); + var position = csvReader.GetField(5); + + LinkedInConnection linkedInConnectionEntity = new() + { + ApplicationUserId = userProviderService.GetCurrentUserId() + }; + if (!String.IsNullOrWhiteSpace(firstName)) + { + linkedInConnectionEntity.FirstName = firstName; + } + + if (!String.IsNullOrWhiteSpace(lastName)) + { + linkedInConnectionEntity.LastName = lastName; + } + + if (!String.IsNullOrWhiteSpace(profileUrl)) + { + linkedInConnectionEntity.ProfileUrl = profileUrl; + } + + if (!String.IsNullOrWhiteSpace(emailAddress)) + { + linkedInConnectionEntity.EmailAddress = emailAddress; + } + + if (!String.IsNullOrWhiteSpace(company)) + { + linkedInConnectionEntity.Company = company; + } + + if (!String.IsNullOrWhiteSpace(position)) + { + linkedInConnectionEntity.Position = position; + } + if (!String.IsNullOrWhiteSpace(linkedInConnectionEntity.FirstName)) + { + logger.LogInformation("Adding record"); + await dbContext.LinkedInConnection.AddAsync(linkedInConnectionEntity, + cancellationToken); + logger.LogInformation("Saving record to database"); + await dbContext.SaveChangesAsync(cancellationToken); + } + } + + private bool IsFirstNameHeader(ILogger logger, CsvReader csvReader) + { + bool couldRead = csvReader.TryGetField(0, out string? firstColumnText); + logger.LogInformation("Checking First Column Value: {Value}", firstColumnText); + if (!couldRead) + { + return false; + } + if (firstColumnText == "First Name") + { + logger.LogInformation("First Name Header found"); + return true; + }; + + return false; + } + } +} \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog index dd219a15..2d953105 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.refactorlog @@ -161,4 +161,11 @@ + + + + + + + \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj index 60f88e80..03915b9c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/FairPlayCombinedDb.sqlproj @@ -194,6 +194,7 @@ + diff --git a/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/LinkedInConnection.sql b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/LinkedInConnection.sql new file mode 100644 index 00000000..62bc6c82 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombinedDb/dbo/Tables/LinkedInConnection.sql @@ -0,0 +1,13 @@ +CREATE TABLE [dbo].[LinkedInConnection] +( + [LinkedInConnectionId] BIGINT NOT NULL CONSTRAINT PK_LinkedInConnection PRIMARY KEY IDENTITY, + [ApplicationUserId] NVARCHAR(450) NOT NULL, + [FirstName] NVARCHAR(50) NOT NULL, + [LastName] NVARCHAR(50) NULL, + [ProfileUrl] NVARCHAR(1000) NOT NULL, + [EmailAddress] NVARCHAR(50) NULL, + [Company] NVARCHAR(1000) NULL, + [Position] NVARCHAR(1000) NULL, + [ConnectedOn] DATE NOT NULL, + CONSTRAINT [FK_LinkedInConnection_AspNetUsers] FOREIGN KEY ([ApplicationUserId]) REFERENCES [dbo].[AspNetUsers]([Id]) +) From 444098bf5e7caf4290642f37800c72ba5d66d858 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 10 Oct 2024 08:48:50 -0600 Subject: [PATCH 19/27] Adding draft page to import connections --- .../User/LinkedInConnectionsImport.razor | 43 +++++++++++++++++++ .../Components/Layout/NavMenu.razor | 6 +++ .../FairPlayCRM/Program.cs | 2 +- .../FairPlayCombined.Common/Constants.cs | 2 + 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor new file mode 100644 index 00000000..2a81faba --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor @@ -0,0 +1,43 @@ +@using FairPlayCombined.Common +@using FairPlayCombined.Interfaces.Common +@attribute [Route(Constants.Routes.FairPlayCrmRoutes.UserRoutes.LinkedInConnectionsImport)] +@attribute [Authorize] + +@inject ILinkedInConnectionService linkedInConnectionService +@inject IToastService toastService + +

        LinkedInConnectionsImport

        + + + + +

        + Select file to import +

        + + +@code { + private bool IsBusy { get; set; } + private readonly CancellationTokenSource cancellationTokenSource = new(); + + private async Task OnFileSelectedAsync(InputFileChangeEventArgs inputFileChangeEventArgs) + { + try + { + this.IsBusy = true; + StateHasChanged(); + if (inputFileChangeEventArgs.FileCount == 1) + { + var stream = inputFileChangeEventArgs.File.OpenReadStream(); + await this.linkedInConnectionService + .ImportFromConnectionsFileAsync(stream, this.cancellationTokenSource.Token); + this.toastService.ShowSuccess("Connections have been imported"); + } + } + catch (Exception ex) + { + this.IsBusy = false; + StateHasChanged(); + } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor b/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor index 079c0f44..f44e72db 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor @@ -28,6 +28,10 @@ Icon="@(new Icons.Regular.Size20.Add())"> @localizer[CreateCompanyTextKey] + + @localizer[ImportLinkedInConnectionsTextKey] + @@ -108,5 +112,7 @@ public const string ListCompaniesTextKey = "ListCompaniesText"; [ResourceKey(defaultValue: "Create Company")] public const string CreateCompanyTextKey = "CreateCompanyText"; + [ResourceKey(defaultValue: "Import LinkedIn Connections")] + public const string ImportLinkedInConnectionsTextKey = "ImportLinkedInConnectionsText"; #endregion Resource Keys } \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCRM/Program.cs b/src/FairPlayCombinedSln/FairPlayCRM/Program.cs index fed1c44d..43c72dc6 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/Program.cs +++ b/src/FairPlayCombinedSln/FairPlayCRM/Program.cs @@ -11,7 +11,6 @@ using System.IO.Compression; using FairPlayCombined.Models.GoogleAuth; using FairPlayCombined.Services.Common; -using Google.Apis.YouTube.v3; using FairPlayCombined.DataAccess.Data; using FairPlayCombined.Interfaces; using FairPlayCombined.DataAccess.Interceptors; @@ -193,4 +192,5 @@ static void AddPlatformServices(WebApplicationBuilder builder) builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); + builder.Services.AddTransient(); } \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs b/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs index e02b40dc..d3b92d17 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs @@ -78,6 +78,8 @@ public static class UserRoutes public const string ListCompanies = $"/User/Companies/{nameof(ListCompanies)}"; public const string CreateCompany = $"/User/Companies/{nameof(CreateCompany)}"; + + public const string LinkedInConnectionsImport = $"/User/LinkedInConnectionsImport"; } } } From 7be266a6a758b2eee1f2b42b012075f82eea437a Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 10 Oct 2024 09:38:52 -0600 Subject: [PATCH 20/27] Fixing issue parsing dates --- .../Common/LinkedInConnectionService.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs index 9708241f..ae24ad07 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs @@ -56,6 +56,7 @@ private async Task SaveRecordToDatabaseAsync(FairPlayCombinedDbContext dbContext var emailAddress = csvReader.GetField(3); var company = csvReader.GetField(4); var position = csvReader.GetField(5); + var connectedOn = csvReader.GetField(6); LinkedInConnection linkedInConnectionEntity = new() { @@ -90,6 +91,12 @@ private async Task SaveRecordToDatabaseAsync(FairPlayCombinedDbContext dbContext { linkedInConnectionEntity.Position = position; } + if (!String.IsNullOrWhiteSpace(connectedOn)) + { + var connectedOnDate = DateOnly.ParseExact(connectedOn, "dd MMM yyyy", + CultureInfo.InvariantCulture); + linkedInConnectionEntity.ConnectedOn = connectedOnDate; + } if (!String.IsNullOrWhiteSpace(linkedInConnectionEntity.FirstName)) { logger.LogInformation("Adding record"); From 742093054b48583ea5811a79038d2c7ccb1cc31b Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 10 Oct 2024 18:50:40 -0600 Subject: [PATCH 21/27] Fixing loading indicator --- .../Components/Pages/User/LinkedInConnectionsImport.razor | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor index 2a81faba..6e8e0b33 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor @@ -35,6 +35,10 @@ } } catch (Exception ex) + { + this.toastService.ShowError(ex.Message); + } + finally { this.IsBusy = false; StateHasChanged(); From 89bfcdc608641ca08ef084be9a2267e75b0fc758 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Thu, 10 Oct 2024 20:38:23 -0600 Subject: [PATCH 22/27] Adding draft for showing LinkedIn connections list --- .../Pages/User/LinkedInConnectionList.razor | 102 ++++++++++++++++++ .../Components/Layout/NavMenu.razor | 6 ++ .../FairPlayCombined.Common/Constants.cs | 1 + .../Common/ILinkedInConnectionService.cs | 15 ++- .../CreateLinkedInConnectionModel.cs | 36 +++++++ .../LinkedInConnectionModel.cs | 38 +++++++ .../UpdateLinkedInConnectionModel.cs | 39 +++++++ .../Common/LinkedInConnectionService.cs | 26 ++++- 8 files changed, 257 insertions(+), 6 deletions(-) create mode 100644 src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionList.razor create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/CreateLinkedInConnectionModel.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/LinkedInConnectionModel.cs create mode 100644 src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/UpdateLinkedInConnectionModel.cs diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionList.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionList.razor new file mode 100644 index 00000000..1effb04e --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionList.razor @@ -0,0 +1,102 @@ +@implements IAsyncDisposable + +@using FairPlayCombined.Common +@using FairPlayCombined.Common.CustomAttributes +@using FairPlayCombined.Interfaces.Common +@using FairPlayCombined.Models.Common.Company +@using FairPlayCombined.Models.Common.LinkedInConnection +@using Microsoft.Extensions.Localization + +@attribute [Route(Constants.Routes.FairPlayCrmRoutes.UserRoutes.LinkedInConnectionList)] +@attribute [Authorize] + +@inject IStringLocalizer localizer +@inject ILinkedInConnectionService linkedInConnectionService + +@nameof(FairPlayCRM) - @localizer[LinkedInConnectionListPageTitleTextKey] + +

        + @localizer[LinkedInConnectionListPageTitleTextKey] +

        + + + +@if (this.ItemsProvider != null) +{ +
        +
        + + + + + + + + + + + + LinkedIn Profile + + + + +
        +
        + +} + +@code { + private GridItemsProvider? ItemsProvider { get; set; } + private PaginationState paginationState { get; set; } = new() + { + ItemsPerPage = FairPlayCombined.Common.Constants.Pagination.PageSize + }; + private readonly CancellationTokenSource cancellationTokenSource = new(); + private bool IsBusy { get; set; } + + protected override void OnInitialized() + { + ItemsProvider ??= async req => + { + this.IsBusy = true; + StateHasChanged(); + PaginationRequest paginationRequest = new() + { + PageSize = paginationState.ItemsPerPage, + StartIndex = req.StartIndex, + SortingItems = new SortingItem[] + { + new SortingItem() + { + PropertyName=nameof(LinkedInConnectionModel.FirstName), + SortType = FairPlayCombined.Common.GeneratorsAttributes.SortType.Ascending + }, + new SortingItem() + { + PropertyName=nameof(LinkedInConnectionModel.LastName), + SortType = FairPlayCombined.Common.GeneratorsAttributes.SortType.Ascending + } + } + }; + var items = await this.linkedInConnectionService.GetPaginatedLinkedInConnectionAsync(paginationRequest, this.cancellationTokenSource.Token); + var result = GridItemsProviderResult.From(items.Items!, items.TotalItems); + this.IsBusy = false; + StateHasChanged(); + return result; + }; + } + + public ValueTask DisposeAsync() + { + this.cancellationTokenSource.Cancel(throwOnFirstException: false); + this.cancellationTokenSource.Dispose(); + return ValueTask.CompletedTask; + } + + #region Resource Keys + [ResourceKey(defaultValue: "LinkedIn Connections List")] + public const string LinkedInConnectionListPageTitleTextKey = "LinkedInConnectionListPageTitleTextKey"; + #endregion Resource Keys +} diff --git a/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor b/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor index f44e72db..c28ba872 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM/Components/Layout/NavMenu.razor @@ -32,6 +32,10 @@ Icon="@(new Icons.Regular.Size20.CallConnecting())"> @localizer[ImportLinkedInConnectionsTextKey] + + @localizer[LinkedInConnectionListTextKey] + @@ -114,5 +118,7 @@ public const string CreateCompanyTextKey = "CreateCompanyText"; [ResourceKey(defaultValue: "Import LinkedIn Connections")] public const string ImportLinkedInConnectionsTextKey = "ImportLinkedInConnectionsText"; + [ResourceKey(defaultValue: "LinkedIn Connection List")] + public const string LinkedInConnectionListTextKey = "LinkedInConnectionListText"; #endregion Resource Keys } \ No newline at end of file diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs b/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs index d3b92d17..aa168a0e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/Constants.cs @@ -80,6 +80,7 @@ public static class UserRoutes public const string CreateCompany = $"/User/Companies/{nameof(CreateCompany)}"; public const string LinkedInConnectionsImport = $"/User/LinkedInConnectionsImport"; + public const string LinkedInConnectionList = $"/User/LinkedInConnectionList"; } } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs index b2bc6eba..f426173b 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/Common/ILinkedInConnectionService.cs @@ -1,7 +1,20 @@ -namespace FairPlayCombined.Interfaces.Common +using FairPlayCombined.Models.Common.LinkedInConnection; +using FairPlayCombined.Models.Pagination; +using Microsoft.EntityFrameworkCore.Internal; +using Microsoft.Extensions.Logging; + +namespace FairPlayCombined.Interfaces.Common { public interface ILinkedInConnectionService { Task ImportFromConnectionsFileAsync(Stream stream, CancellationToken cancellationToken); + Task CreateLinkedInConnectionAsync(CreateLinkedInConnectionModel createModel, + CancellationToken cancellationToken); + Task GetAllLinkedInConnectionAsync(CancellationToken cancellationToken); + Task GetLinkedInConnectionByIdAsync(long id, + CancellationToken cancellationToken); + Task DeleteLinkedInConnectionByIdAsync(long id, CancellationToken cancellationToken); + Task> GetPaginatedLinkedInConnectionAsync( + PaginationRequest paginationRequest, CancellationToken cancellationToken); } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/CreateLinkedInConnectionModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/CreateLinkedInConnectionModel.cs new file mode 100644 index 00000000..5eb63367 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/CreateLinkedInConnectionModel.cs @@ -0,0 +1,36 @@ +using FairPlayCombined.Common.GeneratorsAttributes; +using System.ComponentModel.DataAnnotations; + +namespace FairPlayCombined.Models.Common.LinkedInConnection +{ + public class CreateLinkedInConnectionModel : ICreateModel + { + [Required] + [StringLength(450)] + public string? ApplicationUserId { get; set; } + + [Required] + [StringLength(50)] + public string? FirstName { get; set; } + + [StringLength(50)] + public string? LastName { get; set; } + + [Required] + [StringLength(1000)] + [Url] + public string? ProfileUrl { get; set; } + + [StringLength(50)] + [EmailAddress] + public string? EmailAddress { get; set; } + + [StringLength(1000)] + public string? Company { get; set; } + + [StringLength(1000)] + public string? Position { get; set; } + + public DateOnly ConnectedOn { get; set; } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/LinkedInConnectionModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/LinkedInConnectionModel.cs new file mode 100644 index 00000000..d6627fe1 --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/LinkedInConnectionModel.cs @@ -0,0 +1,38 @@ +using FairPlayCombined.Common.GeneratorsAttributes; +using System.ComponentModel.DataAnnotations; + +namespace FairPlayCombined.Models.Common.LinkedInConnection +{ + public class LinkedInConnectionModel: IListModel + { + public long LinkedInConnectionId { get; set; } + + [Required] + [StringLength(450)] + public string? ApplicationUserId { get; set; } + + [Required] + [StringLength(50)] + public string? FirstName { get; set; } + + [StringLength(50)] + public string? LastName { get; set; } + + [Required] + [StringLength(1000)] + [Url] + public string? ProfileUrl { get; set; } + + [StringLength(50)] + public string? EmailAddress { get; set; } + [EmailAddress] + + [StringLength(1000)] + public string? Company { get; set; } + + [StringLength(1000)] + public string? Position { get; set; } + + public DateOnly ConnectedOn { get; set; } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/UpdateLinkedInConnectionModel.cs b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/UpdateLinkedInConnectionModel.cs new file mode 100644 index 00000000..496d8bfa --- /dev/null +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/Common/LinkedInConnection/UpdateLinkedInConnectionModel.cs @@ -0,0 +1,39 @@ +using FairPlayCombined.Common.GeneratorsAttributes; +using System.ComponentModel.DataAnnotations; + +namespace FairPlayCombined.Models.Common.LinkedInConnection +{ + public class UpdateLinkedInConnectionModel : IUpdateModel + { + [DeniedValues(default(long))] + public long LinkedInConnectionId { get; set; } + + [Required] + [StringLength(450)] + public string? ApplicationUserId { get; set; } + + [Required] + [StringLength(50)] + public string? FirstName { get; set; } + + [StringLength(50)] + public string? LastName { get; set; } + + [Required] + [StringLength(1000)] + [Url] + public string? ProfileUrl { get; set; } + + [StringLength(50)] + [EmailAddress] + public string? EmailAddress { get; set; } + + [StringLength(1000)] + public string? Company { get; set; } + + [StringLength(1000)] + public string? Position { get; set; } + + public DateOnly ConnectedOn { get; set; } + } +} diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs index ae24ad07..9f12b755 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs @@ -7,14 +7,30 @@ using System.Globalization; using FairPlayCombined.DataAccess.Models.dboSchema; using Microsoft.Extensions.Logging; +using FairPlayCombined.Common.GeneratorsAttributes; +using FairPlayCombined.Models.Common.LinkedInConnection; +using FairPlayCombined.Models.Pagination; namespace FairPlayCombined.Services.Common { - public class LinkedInConnectionService( - ILogger logger, - IDbContextFactory dbContextFactory, - IUserProviderService userProviderService) : ILinkedInConnectionService + [ServiceOfT< + CreateLinkedInConnectionModel, + UpdateLinkedInConnectionModel, + LinkedInConnectionModel, + FairPlayCombinedDbContext, + LinkedInConnection, + PaginationRequest, + PaginationOfT + >] + public partial class LinkedInConnectionService : BaseService, ILinkedInConnectionService { + private readonly IUserProviderService? userProviderService = null; + public LinkedInConnectionService(ILogger logger, + IDbContextFactory dbContextFactory, + IUserProviderService userProviderService):this(dbContextFactory, logger) + { + this.userProviderService = userProviderService; + } public async Task ImportFromConnectionsFileAsync(Stream stream, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -60,7 +76,7 @@ private async Task SaveRecordToDatabaseAsync(FairPlayCombinedDbContext dbContext LinkedInConnection linkedInConnectionEntity = new() { - ApplicationUserId = userProviderService.GetCurrentUserId() + ApplicationUserId = userProviderService!.GetCurrentUserId() }; if (!String.IsNullOrWhiteSpace(firstName)) { From b2929e9f464b91376d9760eb47c663ecc397d762 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 14 Oct 2024 17:44:15 -0600 Subject: [PATCH 23/27] Applying sonar cloud recommendations --- .../Pages/User/LinkedInConnectionsImport.razor | 10 +++++++++- .../Common/LinkedInConnectionService.cs | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor index 6e8e0b33..f6457a26 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/Components/Pages/User/LinkedInConnectionsImport.razor @@ -1,4 +1,6 @@ -@using FairPlayCombined.Common +@implements IAsyncDisposable + +@using FairPlayCombined.Common @using FairPlayCombined.Interfaces.Common @attribute [Route(Constants.Routes.FairPlayCrmRoutes.UserRoutes.LinkedInConnectionsImport)] @attribute [Authorize] @@ -44,4 +46,10 @@ StateHasChanged(); } } + + public ValueTask DisposeAsync() + { + this.cancellationTokenSource.Dispose(); + return ValueTask.CompletedTask; + } } diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs index 9f12b755..8168f592 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInConnectionService.cs @@ -52,7 +52,7 @@ public async Task ImportFromConnectionsFileAsync(Stream stream, CancellationToke logger.LogInformation("Read a new row"); if (!firstNameHeaderFound) { - firstNameHeaderFound = IsFirstNameHeader(logger, csvReader); + firstNameHeaderFound = IsFirstNameHeader(csvReader); } else { @@ -123,7 +123,7 @@ await dbContext.LinkedInConnection.AddAsync(linkedInConnectionEntity, } } - private bool IsFirstNameHeader(ILogger logger, CsvReader csvReader) + private bool IsFirstNameHeader(CsvReader csvReader) { bool couldRead = csvReader.TryGetField(0, out string? firstColumnText); logger.LogInformation("Checking First Column Value: {Value}", firstColumnText); @@ -135,7 +135,7 @@ private bool IsFirstNameHeader(ILogger logger, CsvRea { logger.LogInformation("First Name Header found"); return true; - }; + } return false; } From 1f9db2792628048046cea4da75eb7e9231086c73 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 14 Oct 2024 17:53:53 -0600 Subject: [PATCH 24/27] Applying SonarCloud recommendations --- .../FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor index 23c09461..57a99201 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/PayPal/PayPalCheckout.razor @@ -72,7 +72,7 @@ } [JSInvokable] - public async void ShowPayPalNotFoundError() + public async Task ShowPayPalNotFoundError() { await this.OnError.InvokeAsync(Localizer[PayPalNotFoundErrorTextKey]); } From 44cb9c9e85117ca249717fce204c0cedd1b67de3 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 14 Oct 2024 18:45:16 -0600 Subject: [PATCH 25/27] Upgrading Sonar package --- .../FairPlayAdminPortal/FairPlayAdminPortal.csproj | 2 +- .../FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj | 2 +- src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj | 2 +- .../FairPlayCombined.CitiesImporter.csproj | 2 +- .../FairPlayCombined.Common/FairPlayCombined.Common.csproj | 2 +- .../FairPlayCombined.DataAccess.csproj | 2 +- .../FairPlayCombined.DataExportService.csproj | 2 +- .../FairPlayCombined.DatabaseManager.csproj | 2 +- .../FairPlayCombined.Interfaces.csproj | 2 +- .../FairPlayCombined.LocalizationGenerator.csproj | 2 +- .../FairPlayCombined.MailDev.Hosting.csproj | 2 +- .../FairPlayCombined.Models/FairPlayCombined.Models.csproj | 2 +- .../FairPlayCombined.Services.Generators.csproj | 2 +- .../FairPlayCombined.Services/FairPlayCombined.Services.csproj | 2 +- .../FairPlayCombined.Shared/FairPlayCombined.Shared.csproj | 2 +- .../FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj | 2 +- .../FairPlayCombinedSln.AppHost.csproj | 2 +- .../FairPlayCombinedSln.ServiceDefaults.csproj | 2 +- .../FairPlayDating.TestDataGenerator.csproj | 2 +- src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj | 2 +- src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj | 2 +- .../FairPlaySocial.TestDataGenerator.csproj | 2 +- src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj | 2 +- .../FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj | 2 +- .../FairPlayTube.VideoIndexing.csproj | 2 +- src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj index 9a724b3d..9c68327e 100644 --- a/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj +++ b/src/FairPlayCombinedSln/FairPlayAdminPortal/FairPlayAdminPortal.csproj @@ -26,7 +26,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj index 0a1c0073..f9e62382 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayCRM.SharedUI/FairPlayCRM.SharedUI.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj index 4e573e08..92fb42df 100644 --- a/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj +++ b/src/FairPlayCombinedSln/FairPlayCRM/FairPlayCRM.csproj @@ -26,7 +26,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.CitiesImporter/FairPlayCombined.CitiesImporter.csproj b/src/FairPlayCombinedSln/FairPlayCombined.CitiesImporter/FairPlayCombined.CitiesImporter.csproj index 67180175..ee950274 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.CitiesImporter/FairPlayCombined.CitiesImporter.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.CitiesImporter/FairPlayCombined.CitiesImporter.csproj @@ -16,7 +16,7 @@ True - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj index 81b8231c..aefbb4be 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/FairPlayCombined.Common.csproj @@ -16,7 +16,7 @@ True - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj index 90a8bba5..ee820a46 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataAccess/FairPlayCombined.DataAccess.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj index e76a7f24..4ac3db95 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DataExportService/FairPlayCombined.DataExportService.csproj @@ -19,7 +19,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj index 584b444b..95fc3638 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.DatabaseManager/FairPlayCombined.DatabaseManager.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj index 630bd70b..e35b229c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Interfaces/FairPlayCombined.Interfaces.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/FairPlayCombined.LocalizationGenerator.csproj b/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/FairPlayCombined.LocalizationGenerator.csproj index 6a634936..5aef78ea 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/FairPlayCombined.LocalizationGenerator.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.LocalizationGenerator/FairPlayCombined.LocalizationGenerator.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj index aa09c6e0..7a2b3105 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.MailDev.Hosting/FairPlayCombined.MailDev.Hosting.csproj @@ -8,7 +8,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj index d2841436..16e18ad9 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Models/FairPlayCombined.Models.csproj @@ -23,7 +23,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/FairPlayCombined.Services.Generators.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/FairPlayCombined.Services.Generators.csproj index b4cf5ca2..7e449366 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/FairPlayCombined.Services.Generators.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/FairPlayCombined.Services.Generators.csproj @@ -28,7 +28,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj index 5d3316f4..9d377806 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/FairPlayCombined.Services.csproj @@ -38,7 +38,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj index 7f496864..b5798ee8 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Shared/FairPlayCombined.Shared.csproj @@ -16,7 +16,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj index fc4e395b..421f7839 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebApi/FairPlayCombined.WebApi.csproj @@ -17,7 +17,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj index c498dbac..ca5acdff 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.AppHost/FairPlayCombinedSln.AppHost.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj index 7345ca54..f13c544e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombinedSln.ServiceDefaults/FairPlayCombinedSln.ServiceDefaults.csproj @@ -29,7 +29,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj index 9d40ccb8..058aeef0 100644 --- a/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating.TestDataGenerator/FairPlayDating.TestDataGenerator.csproj @@ -20,7 +20,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj index 2e13b7b1..903091bd 100644 --- a/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj +++ b/src/FairPlayCombinedSln/FairPlayDating/FairPlayDating.csproj @@ -33,7 +33,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj b/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj index a707009f..b8ad5514 100644 --- a/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj +++ b/src/FairPlayCombinedSln/FairPlayShop/FairPlayShop.csproj @@ -18,7 +18,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/FairPlaySocial.TestDataGenerator.csproj b/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/FairPlaySocial.TestDataGenerator.csproj index 1d9e98c7..b5319664 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/FairPlaySocial.TestDataGenerator.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial.TestDataGenerator/FairPlaySocial.TestDataGenerator.csproj @@ -10,7 +10,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj index 34e5c3b5..351221d5 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial/FairPlaySocial.csproj @@ -22,7 +22,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj index 0afe2df9..a32bab61 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.SharedUI/FairPlayTube.SharedUI.csproj @@ -32,7 +32,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj index b44ce34e..9f6f473a 100644 --- a/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube.VideoIndexing/FairPlayTube.VideoIndexing.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj index 7e86ff8b..3ec16b0a 100644 --- a/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj +++ b/src/FairPlayCombinedSln/FairPlayTube/FairPlayTube.csproj @@ -26,7 +26,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive From 15765a0e0500c3dfa784cdadfa5d1734b312ed92 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 14 Oct 2024 18:50:20 -0600 Subject: [PATCH 26/27] Adding sonar package to missing projects. Applying sonar recommendation --- src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj | 4 ++++ src/FairPlayCombinedSln/FairPlayBudget/Program.cs | 2 +- .../FairPlayCombined.AspNetCore.Common.csproj | 4 ++++ .../FairPlayCombined.AutomatedTests.csproj | 4 ++++ .../FairPlayCombined.Migrations.csproj | 4 ++++ .../FairPlayCombined.Services.AI.csproj | 4 ++++ .../FairPlayCombined.SharedAuth.csproj | 4 ++++ .../FairPlayCombined.WebComponents.csproj | 4 ++++ .../FairPlaySocial.ClientServices.csproj | 4 ++++ 9 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj index 6c1e9f1c..c9b5176b 100644 --- a/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj +++ b/src/FairPlayCombinedSln/FairPlayBudget/FairPlayBudget.csproj @@ -13,6 +13,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayBudget/Program.cs b/src/FairPlayCombinedSln/FairPlayBudget/Program.cs index c554f1b3..4d049839 100644 --- a/src/FairPlayCombinedSln/FairPlayBudget/Program.cs +++ b/src/FairPlayCombinedSln/FairPlayBudget/Program.cs @@ -115,4 +115,4 @@ // Add additional endpoints required by the Identity /Account Razor components. app.MapAdditionalIdentityEndpoints(); -app.Run(); +await app.RunAsync(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AspNetCore.Common/FairPlayCombined.AspNetCore.Common.csproj b/src/FairPlayCombinedSln/FairPlayCombined.AspNetCore.Common/FairPlayCombined.AspNetCore.Common.csproj index 8c67c186..2f693754 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AspNetCore.Common/FairPlayCombined.AspNetCore.Common.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.AspNetCore.Common/FairPlayCombined.AspNetCore.Common.csproj @@ -23,6 +23,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj index 57e8268c..e0f347cf 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/FairPlayCombined.AutomatedTests.csproj @@ -39,6 +39,10 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj index 5126ae9d..fc131dd0 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Migrations/FairPlayCombined.Migrations.csproj @@ -8,6 +8,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services.AI/FairPlayCombined.Services.AI.csproj b/src/FairPlayCombinedSln/FairPlayCombined.Services.AI/FairPlayCombined.Services.AI.csproj index d296af68..2eccc7fd 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services.AI/FairPlayCombined.Services.AI.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services.AI/FairPlayCombined.Services.AI.csproj @@ -8,6 +8,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj index 50f1f996..13e203a2 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.SharedAuth/FairPlayCombined.SharedAuth.csproj @@ -17,6 +17,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj index 5fd12949..d877335e 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj +++ b/src/FairPlayCombinedSln/FairPlayCombined.WebComponents/FairPlayCombined.WebComponents.csproj @@ -14,6 +14,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/FairPlayCombinedSln/FairPlaySocial.ClientServices/FairPlaySocial.ClientServices.csproj b/src/FairPlayCombinedSln/FairPlaySocial.ClientServices/FairPlaySocial.ClientServices.csproj index d089f6c9..a9678a44 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial.ClientServices/FairPlaySocial.ClientServices.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial.ClientServices/FairPlaySocial.ClientServices.csproj @@ -14,6 +14,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + From a700ff8361c48ee2ab24a3ff8a6a9f910206b3b0 Mon Sep 17 00:00:00 2001 From: Eduardo Fonseca Date: Mon, 14 Oct 2024 21:38:18 -0600 Subject: [PATCH 27/27] fixing compilation issues --- .../CommonServices/LinkedInConnectionServiceTests.cs | 3 +-- .../ValidationAttributes/ProhibitDuplicateStringsAttribute.cs | 1 + .../ServiceOfTGenerator.cs | 2 +- .../FairPlayCombined.Services/Common/LinkedInClientService.cs | 2 ++ .../FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs index 17261b17..0dfd0468 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.AutomatedTests/ServicesTests/CommonServices/LinkedInConnectionServiceTests.cs @@ -80,8 +80,7 @@ public async Task Test_ImportFromConnectionsFileAsync() await dbContext.SaveChangesAsync(); TestUserProviderService.CurrentUserId = testUser.Id; var linkedInConnectionService = sp.GetRequiredService(); - var filePath = configuration["LinkedInConnectionsFilePath"]; - Stream fileStream = File.OpenRead(filePath!); + Stream fileStream = File.OpenRead(linkedInConnectionsFilePath!); await linkedInConnectionService.ImportFromConnectionsFileAsync( fileStream, CancellationToken.None); var connectionsCount = await dbContext.LinkedInConnection.CountAsync(); diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Common/ValidationAttributes/ProhibitDuplicateStringsAttribute.cs b/src/FairPlayCombinedSln/FairPlayCombined.Common/ValidationAttributes/ProhibitDuplicateStringsAttribute.cs index 3be4e15b..21b9a15c 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Common/ValidationAttributes/ProhibitDuplicateStringsAttribute.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Common/ValidationAttributes/ProhibitDuplicateStringsAttribute.cs @@ -2,6 +2,7 @@ namespace FairPlayCombined.Common.ValidationAttributes { + [AttributeUsage(AttributeTargets.Property)] public class ProhibitDuplicateStringsAttribute : ValidationAttribute { public override bool IsValid(object? value) diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/ServiceOfTGenerator.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/ServiceOfTGenerator.cs index 65c928fe..93f7ab59 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/ServiceOfTGenerator.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services.Generators/ServiceOfTGenerator.cs @@ -27,7 +27,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context) } #pragma warning disable S3776 // Cognitive Complexity of methods should not be too high - private void Execute(SourceProductionContext context, (Compilation Left, ImmutableArray Right) tuple) + private static void Execute(SourceProductionContext context, (Compilation Left, ImmutableArray Right) tuple) #pragma warning restore S3776 // Cognitive Complexity of methods should not be too high { var (compilation, list) = tuple; diff --git a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs index 0d332ecd..36bf8397 100644 --- a/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs +++ b/src/FairPlayCombinedSln/FairPlayCombined.Services/Common/LinkedInClientService.cs @@ -17,6 +17,7 @@ public class LinkedInClientService( { private async Task GetAccessTokenAsync(IDbContextFactory dbContextFactory, IUserProviderService userProviderService) { + logger.LogInformation("Start of method: {MethodName}", nameof(GetAccessTokenAsync)); var userId = userProviderService.GetCurrentUserId(); var dbContext = await dbContextFactory.CreateDbContextAsync(); var accessTokenEntity = await @@ -24,6 +25,7 @@ private async Task GetAccessTokenAsync(IDbContextFactory p.UserId == userId && p.LoginProvider == "LinkedIn" && p.Name == "access_token"); + logger.LogInformation("End of method: {MethodName}", nameof(GetAccessTokenAsync)); return accessTokenEntity; } public async Task GetUserInfoAsync(CancellationToken cancellationToken) diff --git a/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj b/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj index 805e8a19..209bb9f6 100644 --- a/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj +++ b/src/FairPlayCombinedSln/FairPlaySocial.MAUI/FairPlaySocial.MAUI.csproj @@ -56,6 +56,7 @@ +