From 8e6c810b32632868d34df0b57dd235670b2a3756 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 05:47:24 +0000 Subject: [PATCH 01/38] Bump @babel/core from 7.27.3 to 7.27.4 in /Auth/LearningHub.Nhs.Auth Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.27.3 to 7.27.4. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.27.4/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-version: 7.27.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Auth/LearningHub.Nhs.Auth/package-lock.json | 34 ++++++++++----------- Auth/LearningHub.Nhs.Auth/package.json | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/package-lock.json b/Auth/LearningHub.Nhs.Auth/package-lock.json index b0fd361..21f8a65 100644 --- a/Auth/LearningHub.Nhs.Auth/package-lock.json +++ b/Auth/LearningHub.Nhs.Auth/package-lock.json @@ -16,7 +16,7 @@ "node": "^22" }, "devDependencies": { - "@babel/core": "^7.27.3", + "@babel/core": "^7.27.4", "@babel/preset-env": "^7.27.2", "babel-core": "^4.7.16", "babel-loader": "^8.2.2", @@ -74,9 +74,9 @@ } }, "node_modules/@babel/core": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", - "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", "dev": true, "license": "MIT", "dependencies": { @@ -85,10 +85,10 @@ "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.3", - "@babel/parser": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.3", + "@babel/traverse": "^7.27.4", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -371,9 +371,9 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", - "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", + "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -385,9 +385,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", - "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", + "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", "dev": true, "license": "MIT", "dependencies": { @@ -1506,15 +1506,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", - "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.3", + "@babel/parser": "^7.27.4", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", diff --git a/Auth/LearningHub.Nhs.Auth/package.json b/Auth/LearningHub.Nhs.Auth/package.json index 774c644..1f99ad1 100644 --- a/Auth/LearningHub.Nhs.Auth/package.json +++ b/Auth/LearningHub.Nhs.Auth/package.json @@ -26,7 +26,7 @@ "node": "^22" }, "devDependencies": { - "@babel/core": "^7.27.3", + "@babel/core": "^7.27.4", "@babel/preset-env": "^7.27.2", "babel-core": "^4.7.16", "babel-loader": "^8.2.2", From d82e9aa73674603803861a48396ee9d258da03c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 05:58:30 +0000 Subject: [PATCH 02/38] Bump sass from 1.89.0 to 1.89.1 in /Auth/LearningHub.Nhs.Auth (#185) Bumps [sass](https://github.com/sass/dart-sass) from 1.89.0 to 1.89.1. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.89.0...1.89.1) --- updated-dependencies: - dependency-name: sass dependency-version: 1.89.1 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Auth/LearningHub.Nhs.Auth/package-lock.json | 8 ++++---- Auth/LearningHub.Nhs.Auth/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/package-lock.json b/Auth/LearningHub.Nhs.Auth/package-lock.json index b0fd361..04360c1 100644 --- a/Auth/LearningHub.Nhs.Auth/package-lock.json +++ b/Auth/LearningHub.Nhs.Auth/package-lock.json @@ -25,7 +25,7 @@ "cross-env": "^7.0.3", "css-loader": "^5.2.4", "file-loader": "^6.2.0", - "sass": "^1.89.0", + "sass": "^1.89.1", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-loader": "^9.5.2", @@ -5997,9 +5997,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.0.tgz", - "integrity": "sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==", + "version": "1.89.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.1.tgz", + "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/Auth/LearningHub.Nhs.Auth/package.json b/Auth/LearningHub.Nhs.Auth/package.json index 774c644..59f156e 100644 --- a/Auth/LearningHub.Nhs.Auth/package.json +++ b/Auth/LearningHub.Nhs.Auth/package.json @@ -35,7 +35,7 @@ "cross-env": "^7.0.3", "css-loader": "^5.2.4", "file-loader": "^6.2.0", - "sass": "^1.89.0", + "sass": "^1.89.1", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-loader": "^9.5.2", From 9d3aee13c1c99358c66c9d0eeb0d83c3ea73e882 Mon Sep 17 00:00:00 2001 From: Binon Date: Tue, 3 Jun 2025 15:56:53 +0100 Subject: [PATCH 03/38] Enabled central package management --- .../LearningHub.Nhs.Auth.Tests.csproj | 27 +- .../LearningHub.Nhs.Auth.csproj | 278 +++++++++--------- Directory.Build.props | 2 +- Directory.Packages.props | 49 +++ ...ub.Nhs.UserApi.Repository.Interface.csproj | 16 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 20 +- ...gHub.Nhs.UserAPI.Services.Interface.csproj | 16 +- ...gHub.Nhs.UserApi.Services.UnitTests.csproj | 34 +-- .../LearningHub.Nhs.UserApi.Services.csproj | 21 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 15 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 27 +- .../LearningHub.Nhs.UserApi.csproj | 40 ++- 12 files changed, 273 insertions(+), 272 deletions(-) create mode 100644 Directory.Packages.props diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index ec6d6ad..4544d37 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -1,32 +1,27 @@ - - + net8.0 true false - x64 + x64 - - - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + \ No newline at end of file diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index 2933aee..8fe3ee6 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -1,145 +1,133 @@ - - - - net8.0 - 00EF27C2-ECB6-4E37-A6B6-58E4E6189D0E - true - x64 - - - - - - - - - - - - - - - - - - - - - - - - - - - Never - - - - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - Always - - - Always - - - - - - - - - - - - - - + + + net8.0 + 00EF27C2-ECB6-4E37-A6B6-58E4E6189D0E + true + x64 + + + + + + + + + + + + + + + + + + + + + + + Never + + + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + Always + + + Always + + + + + + + + + + + \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 041b430..d153dde 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ $(SolutionDir)StyleCop.ruleset - + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props new file mode 100644 index 0000000..c94d0a7 --- /dev/null +++ b/Directory.Packages.props @@ -0,0 +1,49 @@ + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 29a3a90..60f0b5d 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -1,23 +1,19 @@ - - + net8.0 true false - x64 + x64 - - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 5921669..7d254b8 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -1,25 +1,21 @@ - - + net8.0 true false - x64 + x64 - - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 29a3a90..60f0b5d 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -1,23 +1,19 @@ - - + net8.0 true false - x64 + x64 - - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index a61a661..2bcf2e7 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -1,37 +1,33 @@ - - + net8.0 - true + true enable enable - x64 + x64 false - - - - - - - - - - - + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index 670491b..a81d32a 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -1,27 +1,24 @@ - - + net8.0 true false - x64 + x64 - - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index ecfe311..04b48b4 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -1,19 +1,16 @@ - - + net8.0 true false - x64 + x64 - - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 5c215c5..4eb125a 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -1,37 +1,32 @@ - - + net8.0 - true + true enable enable - x64 + x64 false - - - - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index c707f5a..f98d757 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -1,43 +1,37 @@ - - + net8.0 InProcess true - x64 + x64 - LearningHub.Nhs.UserApi.xml - - Always - - - - - - - - - - + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + - @@ -45,12 +39,14 @@ - Never - - + + + + + \ No newline at end of file From 03ea146cdddf4e47b7f53a6d2f47d45a8573d4bd Mon Sep 17 00:00:00 2001 From: Binon Date: Fri, 6 Jun 2025 15:25:10 +0100 Subject: [PATCH 04/38] Added nuget.config file --- LearningHub.Nhs.UserApi.sln | 2 ++ nuget.config | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 nuget.config diff --git a/LearningHub.Nhs.UserApi.sln b/LearningHub.Nhs.UserApi.sln index adb65c7..9775d9c 100644 --- a/LearningHub.Nhs.UserApi.sln +++ b/LearningHub.Nhs.UserApi.sln @@ -6,6 +6,8 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{683CA47A-9041-4CB9-B436-CD20BD40EB34}" ProjectSection(SolutionItems) = preProject Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props + nuget.config = nuget.config StyleCop.json = StyleCop.json StyleCop.ruleset = StyleCop.ruleset EndProjectSection diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..4b5a055 --- /dev/null +++ b/nuget.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7ab67b01ca0b908eadfea33ee630a4db0a7eae6b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 04:27:30 +0000 Subject: [PATCH 05/38] Bump core-js from 3.42.0 to 3.43.0 in /Auth/LearningHub.Nhs.Auth (#187) Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.42.0 to 3.43.0. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/commits/v3.43.0/packages/core-js) --- updated-dependencies: - dependency-name: core-js dependency-version: 3.43.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Auth/LearningHub.Nhs.Auth/package-lock.json | 8 ++++---- Auth/LearningHub.Nhs.Auth/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/package-lock.json b/Auth/LearningHub.Nhs.Auth/package-lock.json index 04360c1..869ff97 100644 --- a/Auth/LearningHub.Nhs.Auth/package-lock.json +++ b/Auth/LearningHub.Nhs.Auth/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "babel-polyfill": "^6.26.0", "concurrently": "^7.2.0", - "core-js": "^3.42.0", + "core-js": "^3.43.0", "nhsuk-frontend": "^7.0.0", "node": "^22" }, @@ -3515,9 +3515,9 @@ "license": "MIT" }, "node_modules/core-js": { - "version": "3.42.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", - "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", "hasInstallScript": true, "license": "MIT", "funding": { diff --git a/Auth/LearningHub.Nhs.Auth/package.json b/Auth/LearningHub.Nhs.Auth/package.json index 59f156e..f5fe38b 100644 --- a/Auth/LearningHub.Nhs.Auth/package.json +++ b/Auth/LearningHub.Nhs.Auth/package.json @@ -21,7 +21,7 @@ "dependencies": { "babel-polyfill": "^6.26.0", "concurrently": "^7.2.0", - "core-js": "^3.42.0", + "core-js": "^3.43.0", "nhsuk-frontend": "^7.0.0", "node": "^22" }, From 871b86e3b8329748a668d2e76db5e2a11f1f8a01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 04:27:36 +0000 Subject: [PATCH 06/38] Bump sass from 1.89.1 to 1.89.2 in /Auth/LearningHub.Nhs.Auth (#188) Bumps [sass](https://github.com/sass/dart-sass) from 1.89.1 to 1.89.2. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.89.1...1.89.2) --- updated-dependencies: - dependency-name: sass dependency-version: 1.89.2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Auth/LearningHub.Nhs.Auth/package-lock.json | 8 ++++---- Auth/LearningHub.Nhs.Auth/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/package-lock.json b/Auth/LearningHub.Nhs.Auth/package-lock.json index 869ff97..7111190 100644 --- a/Auth/LearningHub.Nhs.Auth/package-lock.json +++ b/Auth/LearningHub.Nhs.Auth/package-lock.json @@ -25,7 +25,7 @@ "cross-env": "^7.0.3", "css-loader": "^5.2.4", "file-loader": "^6.2.0", - "sass": "^1.89.1", + "sass": "^1.89.2", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-loader": "^9.5.2", @@ -5997,9 +5997,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.1.tgz", - "integrity": "sha512-eMLLkl+qz7tx/0cJ9wI+w09GQ2zodTkcE/aVfywwdlRcI3EO19xGnbmJwg/JMIm+5MxVJ6outddLZ4Von4E++Q==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/Auth/LearningHub.Nhs.Auth/package.json b/Auth/LearningHub.Nhs.Auth/package.json index f5fe38b..ae20178 100644 --- a/Auth/LearningHub.Nhs.Auth/package.json +++ b/Auth/LearningHub.Nhs.Auth/package.json @@ -35,7 +35,7 @@ "cross-env": "^7.0.3", "css-loader": "^5.2.4", "file-loader": "^6.2.0", - "sass": "^1.89.1", + "sass": "^1.89.2", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-loader": "^9.5.2", From 8e3adf09c4daeef5a2143b20b4ef7ee2d33e9763 Mon Sep 17 00:00:00 2001 From: binon Date: Thu, 12 Jun 2025 10:34:52 +0100 Subject: [PATCH 07/38] Update continuous-integration-workflow.yml --- .github/workflows/continuous-integration-workflow.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index baa6759..3293c61 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -18,7 +18,9 @@ jobs: dotnet-version: 8.0.x - name: Add Azure artifact - run: dotnet nuget add source 'https://pkgs.dev.azure.com/e-LfH/_packaging/LearningHubFeed/nuget/v3/index.json' --name 'LearningHubFeed' --username 'kevin.whittaker' --password ${{ secrets.AZURE_DEVOPS_PAT }} --store-password-in-clear-text + run: | + dotnet nuget remove source LearningHubFeed || true + dotnet nuget add source 'https://pkgs.dev.azure.com/e-LfH/_packaging/LearningHubFeed/nuget/v3/index.json' --name 'LearningHubFeed' --username 'kevin.whittaker' --password ${{ secrets.AZURE_DEVOPS_PAT }} --store-password-in-clear-text - name: Use NuGet 5.8 uses: nuget/setup-nuget@v1 From 63a8b3e9c26679b8b59f115fbbcf91212e21f7a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 11:19:18 +0000 Subject: [PATCH 08/38] Bump AutoMapper and 19 others Bumps AutoMapper to 12.0.1, 14.0.0 Bumps AutoMapper.Extensions.Microsoft.DependencyInjection to 12.0.1 Bumps Azure.Extensions.AspNetCore.DataProtection.Blobs from 1.4.0 to 1.5.0 Bumps Azure.Extensions.AspNetCore.DataProtection.Keys from 1.3.0 to 1.6.0 Bumps Azure.Identity from 1.13.2 to 1.14.0 Bumps EntityFrameworkCore.Testing.Moq from 5.0.0 to 9.0.1 Bumps FluentValidation from 11.11.0 to 12.0.0 Bumps Microsoft.ApplicationInsights.AspNetCore from 2.22.0 to 2.23.0 Bumps Microsoft.AspNetCore.Authentication.JwtBearer from 6.0.0 to 7.0.0 Bumps Microsoft.AspNetCore.Authentication.OpenIdConnect from 6.0.0 to 7.0.0 Bumps Microsoft.AspNetCore.Mvc.NewtonsoftJson from 6.0.36 to 7.0.0 Bumps Microsoft.EntityFrameworkCore from 7.0.20 to 9.0.0 Bumps Microsoft.Extensions.Caching.StackExchangeRedis from 6.0.0 to 7.0.0 Bumps Microsoft.Extensions.Logging.Console from 6.0.0 to 7.0.0 Bumps Microsoft.NET.Test.Sdk from 17.12.0 to 17.14.1 Bumps Microsoft.TestPlatform.TestHost from 17.12.0 to 17.14.1 Bumps Microsoft.VisualStudio.Web.CodeGeneration.Design from 6.0.0 to 7.0.0 Bumps NLog.Web.AspNetCore from 4.15.0 to 5.5.0 Bumps Swashbuckle.AspNetCore from 7.2.0 to 9.0.1 Bumps xunit.runner.visualstudio from 3.0.1 to 3.1.1 --- updated-dependencies: - dependency-name: AutoMapper dependency-version: 14.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: AutoMapper dependency-version: 12.0.1 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: AutoMapper.Extensions.Microsoft.DependencyInjection dependency-version: 12.0.1 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: AutoMapper.Extensions.Microsoft.DependencyInjection dependency-version: 12.0.1 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Azure.Extensions.AspNetCore.DataProtection.Blobs dependency-version: 1.5.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Azure.Extensions.AspNetCore.DataProtection.Keys dependency-version: 1.6.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Azure.Identity dependency-version: 1.14.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: EntityFrameworkCore.Testing.Moq dependency-version: 9.0.1 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.EntityFrameworkCore dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: FluentValidation dependency-version: 12.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.ApplicationInsights.AspNetCore dependency-version: 2.23.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.AspNetCore.Authentication.JwtBearer dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.AspNetCore.Authentication.OpenIdConnect dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.AspNetCore.Mvc.NewtonsoftJson dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Caching.StackExchangeRedis dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 17.14.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.TestPlatform.TestHost dependency-version: 17.14.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.VisualStudio.Web.CodeGeneration.Design dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: NLog.Web.AspNetCore dependency-version: 5.5.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Swashbuckle.AspNetCore dependency-version: 9.0.1 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: xunit.runner.visualstudio dependency-version: 3.1.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Directory.Packages.props | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index c94d0a7..9b09313 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,38 +12,38 @@ - - - - - + + + + + - - + + - - - - - + + + + + - - - - - + + + + + - + - + - + \ No newline at end of file From 43de1f08c7f7535f39721346a1185b89c78bf61e Mon Sep 17 00:00:00 2001 From: Binon Date: Tue, 17 Jun 2025 12:41:33 +0100 Subject: [PATCH 09/38] upgrading database proj version --- Hee.UserProfile.Database/Hee.UserProfile.Database.sqlproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hee.UserProfile.Database/Hee.UserProfile.Database.sqlproj b/Hee.UserProfile.Database/Hee.UserProfile.Database.sqlproj index b8cf3b5..df6c02e 100644 --- a/Hee.UserProfile.Database/Hee.UserProfile.Database.sqlproj +++ b/Hee.UserProfile.Database/Hee.UserProfile.Database.sqlproj @@ -16,7 +16,7 @@ 1033, CI BySchemaAndSchemaType True - v4.5.2 + v4.8 CS Properties False From 6662c0156fd42df793b0e0695808d8ab3e1e94e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:09:10 +0000 Subject: [PATCH 10/38] Bump AutoMapper and 7 others Bumps AutoMapper from 12.0.1 to 14.0.0 Bumps Microsoft.AspNetCore.Authentication.JwtBearer from 7.0.0 to 8.0.17 Bumps Microsoft.AspNetCore.Authentication.OpenIdConnect from 7.0.0 to 8.0.17 Bumps Microsoft.AspNetCore.Mvc.NewtonsoftJson from 7.0.0 to 8.0.17 Bumps Microsoft.EntityFrameworkCore.SqlServer from 7.0.0 to 9.0.0 Bumps Microsoft.Extensions.Caching.StackExchangeRedis from 7.0.0 to 9.0.0 Bumps Microsoft.Extensions.Logging.Console from 7.0.0 to 9.0.0 Bumps Microsoft.VisualStudio.Web.CodeGeneration.Design from 7.0.0 to 9.0.0 --- updated-dependencies: - dependency-name: AutoMapper dependency-version: 14.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.AspNetCore.Authentication.JwtBearer dependency-version: 8.0.17 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.AspNetCore.Authentication.OpenIdConnect dependency-version: 8.0.17 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.AspNetCore.Mvc.NewtonsoftJson dependency-version: 8.0.17 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.EntityFrameworkCore.SqlServer dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Caching.StackExchangeRedis dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.VisualStudio.Web.CodeGeneration.Design dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- Directory.Packages.props | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 9b09313..3aad9eb 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -24,17 +24,17 @@ - - - + + + - + - - + + - + From 7de18dead7f7a359ef4fb9d42a7c93b3b34799dd Mon Sep 17 00:00:00 2001 From: Binon Date: Tue, 17 Jun 2025 15:30:18 +0100 Subject: [PATCH 11/38] Adding solution file --- LearningHub.Nhs.UserApi.sln | 1 - 1 file changed, 1 deletion(-) diff --git a/LearningHub.Nhs.UserApi.sln b/LearningHub.Nhs.UserApi.sln index 9775d9c..77a9165 100644 --- a/LearningHub.Nhs.UserApi.sln +++ b/LearningHub.Nhs.UserApi.sln @@ -7,7 +7,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ProjectSection(SolutionItems) = preProject Directory.Build.props = Directory.Build.props Directory.Packages.props = Directory.Packages.props - nuget.config = nuget.config StyleCop.json = StyleCop.json StyleCop.ruleset = StyleCop.ruleset EndProjectSection From c60993318351a1a6bef70f70ac02cc1d62081944 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 14:39:34 +0000 Subject: [PATCH 12/38] Bump AutoMapper and 4 others Bumps AutoMapper from 12.0.1 to 14.0.0 Bumps Microsoft.EntityFrameworkCore from 9.0.0 to 9.0.6 Bumps Microsoft.EntityFrameworkCore.SqlServer from 9.0.0 to 9.0.6 Bumps Microsoft.Extensions.Caching.StackExchangeRedis from 9.0.0 to 9.0.6 Bumps Microsoft.Extensions.Logging.Console from 9.0.0 to 9.0.6 --- updated-dependencies: - dependency-name: AutoMapper dependency-version: 14.0.0 dependency-type: direct:production update-type: version-update:semver-major - dependency-name: Microsoft.EntityFrameworkCore dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.EntityFrameworkCore.SqlServer dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Caching.StackExchangeRedis dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 9.0.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- Directory.Packages.props | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 3aad9eb..b18204b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -27,11 +27,11 @@ - - + + - - + + From 9b0e3e7d0918104da74220c85009216735883852 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Wed, 18 Jun 2025 10:07:05 +0100 Subject: [PATCH 13/38] Update Directory.Packages.props -Automapper --- Directory.Packages.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index b18204b..66aac1b 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -12,8 +12,8 @@ - - + + @@ -46,4 +46,4 @@ - \ No newline at end of file + From f56f1bdd04f2c8ba3d8f191dbfab03b40df31623 Mon Sep 17 00:00:00 2001 From: Colin Beeby Date: Wed, 18 Jun 2025 11:50:19 +0100 Subject: [PATCH 14/38] Added client config section for moodlepgvle --- Auth/LearningHub.Nhs.Auth/appsettings.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Auth/LearningHub.Nhs.Auth/appsettings.json b/Auth/LearningHub.Nhs.Auth/appsettings.json index f4daca9..533cb08 100644 --- a/Auth/LearningHub.Nhs.Auth/appsettings.json +++ b/Auth/LearningHub.Nhs.Auth/appsettings.json @@ -203,6 +203,23 @@ "RequireConsent": false, "RequirePkce": false, "AllowOfflineAccess": true + }, + "moodlepgvle": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "authorization_code" ], + "RedirectUris": [ "/auth/oidc/" ], + "PostLogoutUris": [ "/login/logout.php" ], + "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "/login/logout.php", + "FrontChannelLogoutSessionRequired": true, + "FrontChannelLogoutUri": "/login/logout.php", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": true } }, "IdsClients": { From d9e214f8950cfed99ad55c9014abf3ad5f76fb57 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Wed, 2 Jul 2025 10:08:42 +0100 Subject: [PATCH 15/38] Revert "Automatic version update dependabot To RC" --- Auth/LearningHub.Nhs.Auth/package-lock.json | 34 ++++++++++----------- Auth/LearningHub.Nhs.Auth/package.json | 2 +- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/package-lock.json b/Auth/LearningHub.Nhs.Auth/package-lock.json index 8b81771..7111190 100644 --- a/Auth/LearningHub.Nhs.Auth/package-lock.json +++ b/Auth/LearningHub.Nhs.Auth/package-lock.json @@ -16,7 +16,7 @@ "node": "^22" }, "devDependencies": { - "@babel/core": "^7.27.4", + "@babel/core": "^7.27.3", "@babel/preset-env": "^7.27.2", "babel-core": "^4.7.16", "babel-loader": "^8.2.2", @@ -74,9 +74,9 @@ } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.3.tgz", + "integrity": "sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==", "dev": true, "license": "MIT", "dependencies": { @@ -85,10 +85,10 @@ "@babel/generator": "^7.27.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", + "@babel/helpers": "^7.27.3", + "@babel/parser": "^7.27.3", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", + "@babel/traverse": "^7.27.3", "@babel/types": "^7.27.3", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -371,9 +371,9 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.4.tgz", - "integrity": "sha512-Y+bO6U+I7ZKaM5G5rDUZiYfUvQPUibYmAFe7EnKdnKBbVXDZxvp+MWOH5gYciY0EPk4EScsuFMQBbEfpdRKSCQ==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.3.tgz", + "integrity": "sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==", "dev": true, "license": "MIT", "dependencies": { @@ -385,9 +385,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.4.tgz", - "integrity": "sha512-BRmLHGwpUqLFR2jzx9orBuX/ABDkj2jLKOXrHDTN2aOKL+jFDDKaRNo9nyYsIl9h/UE/7lMKdDjKQQyxKKDZ7g==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz", + "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==", "dev": true, "license": "MIT", "dependencies": { @@ -1506,15 +1506,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.3.tgz", + "integrity": "sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/parser": "^7.27.3", "@babel/template": "^7.27.2", "@babel/types": "^7.27.3", "debug": "^4.3.1", diff --git a/Auth/LearningHub.Nhs.Auth/package.json b/Auth/LearningHub.Nhs.Auth/package.json index 75d6761..ae20178 100644 --- a/Auth/LearningHub.Nhs.Auth/package.json +++ b/Auth/LearningHub.Nhs.Auth/package.json @@ -26,7 +26,7 @@ "node": "^22" }, "devDependencies": { - "@babel/core": "^7.27.4", + "@babel/core": "^7.27.3", "@babel/preset-env": "^7.27.2", "babel-core": "^4.7.16", "babel-loader": "^8.2.2", From 0b2189b74d82ec161d373c957be12962afb023ad Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Wed, 2 Jul 2025 15:46:18 +0100 Subject: [PATCH 16/38] Fixes --- .../LearningHub.Nhs.Auth.Tests.csproj | 27 +- .../LearningHub.Nhs.Auth.csproj | 278 +++++++++--------- Directory.Build.props | 2 +- Directory.Packages.props | 2 +- ...ub.Nhs.UserApi.Repository.Interface.csproj | 16 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 20 +- ...gHub.Nhs.UserAPI.Services.Interface.csproj | 16 +- ...gHub.Nhs.UserApi.Services.UnitTests.csproj | 34 ++- .../LearningHub.Nhs.UserApi.Services.csproj | 21 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 15 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 27 +- .../LearningHub.Nhs.UserApi.csproj | 40 +-- 12 files changed, 273 insertions(+), 225 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index 4544d37..ec6d6ad 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -1,27 +1,32 @@ - + + net8.0 true false - x64 + x64 + + - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive + - \ No newline at end of file + + diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index 8fe3ee6..2933aee 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -1,133 +1,145 @@ - - - net8.0 - 00EF27C2-ECB6-4E37-A6B6-58E4E6189D0E - true - x64 - - - - - - - - - - - - - - - - - - - - - - - Never - - - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - true - PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - Always - - - Always - - - - - - - - - - - \ No newline at end of file + + + + net8.0 + 00EF27C2-ECB6-4E37-A6B6-58E4E6189D0E + true + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + Never + + + + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + true + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + Always + + + Always + + + + + + + + + + + + + + diff --git a/Directory.Build.props b/Directory.Build.props index d153dde..041b430 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ $(SolutionDir)StyleCop.ruleset - + \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index 66aac1b..305229f 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,7 +1,7 @@ - true + false diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 60f0b5d..29a3a90 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -1,19 +1,23 @@ - + + net8.0 true false - x64 + x64 + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 7d254b8..5921669 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -1,21 +1,25 @@ - + + net8.0 true false - x64 + x64 + - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 60f0b5d..29a3a90 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -1,19 +1,23 @@ - + + net8.0 true false - x64 + x64 + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index 2bcf2e7..a61a661 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -1,33 +1,37 @@ - + + net8.0 - true + true enable enable - x64 + x64 false + - - - - - - - - - - + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all + - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index a81d32a..670491b 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -1,24 +1,27 @@ - + + net8.0 true false - x64 + x64 + - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + + - \ No newline at end of file + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index 04b48b4..ecfe311 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -1,16 +1,19 @@ - + + net8.0 true false - x64 + x64 + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 4eb125a..5c215c5 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -1,32 +1,37 @@ - + + net8.0 - true + true enable enable - x64 + x64 false + - - - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all + + - \ No newline at end of file + + diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index f98d757..c707f5a 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -1,37 +1,43 @@ - + + net8.0 InProcess true - x64 + x64 + LearningHub.Nhs.UserApi.xml + + Always + - - - - - - - - - + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + + @@ -39,14 +45,12 @@ + Never - - - - - + + \ No newline at end of file From 3193e5a9d83f6da45dd015da5d2bb60975e9fef7 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Mon, 14 Jul 2025 16:30:07 +0100 Subject: [PATCH 17/38] TD-5752: Issue showing 'Your password has been changed' when logged out from the moodle screen --- .../LearningHub.Nhs.Auth/Controllers/HomeController.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/Controllers/HomeController.cs b/Auth/LearningHub.Nhs.Auth/Controllers/HomeController.cs index aa0937f..9d1ae11 100644 --- a/Auth/LearningHub.Nhs.Auth/Controllers/HomeController.cs +++ b/Auth/LearningHub.Nhs.Auth/Controllers/HomeController.cs @@ -83,18 +83,18 @@ public async Task Error() /// /// IsPasswordUpdateMethod. /// - /// The Logout. + /// The PasswordUpdate. /// The . [HttpGet] - public IActionResult SetIsPasswordUpdate(bool isLogout) + public IActionResult SetIsPasswordUpdate(bool isPasswordUpdate) { - if (isLogout) + if (isPasswordUpdate) { - this.webSettings.IsPasswordUpdate = false; + this.webSettings.IsPasswordUpdate = true; } else { - this.webSettings.IsPasswordUpdate = true; + this.webSettings.IsPasswordUpdate = false; } var redirectUri = $"{this.webSettings.LearningHubWebClient}Home/UserLogout"; From de78ea15cea4666cfefa1f9d1448c57bae64ac90 Mon Sep 17 00:00:00 2001 From: Colin Beeby Date: Wed, 16 Jul 2025 14:52:53 +0100 Subject: [PATCH 18/38] Added moodlemooc stanza to appsettings.json --- Auth/LearningHub.Nhs.Auth/appsettings.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Auth/LearningHub.Nhs.Auth/appsettings.json b/Auth/LearningHub.Nhs.Auth/appsettings.json index 533cb08..8f45884 100644 --- a/Auth/LearningHub.Nhs.Auth/appsettings.json +++ b/Auth/LearningHub.Nhs.Auth/appsettings.json @@ -220,6 +220,23 @@ "RequireConsent": false, "RequirePkce": false, "AllowOfflineAccess": true + }, + "moodlemooc": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "authorization_code" ], + "RedirectUris": [ "/auth/oidc/" ], + "PostLogoutUris": [ "/login/logout.php" ], + "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "/login/logout.php", + "FrontChannelLogoutSessionRequired": true, + "FrontChannelLogoutUri": "/login/logout.php", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": true } }, "IdsClients": { From 24d65226518bc8b6b7893452da25c87e1fdd631d Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Wed, 23 Jul 2025 11:17:33 +0100 Subject: [PATCH 19/38] TD-5752: # Need to revert the code # Code to test the logout issue from Moodle --- Auth/LearningHub.Nhs.Auth/Controllers/AccountController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Auth/LearningHub.Nhs.Auth/Controllers/AccountController.cs b/Auth/LearningHub.Nhs.Auth/Controllers/AccountController.cs index 123fe1a..3018203 100644 --- a/Auth/LearningHub.Nhs.Auth/Controllers/AccountController.cs +++ b/Auth/LearningHub.Nhs.Auth/Controllers/AccountController.cs @@ -277,7 +277,7 @@ public async Task Logout(LogoutInputModel model) { UserId = userId, UserHistoryTypeId = (int)UserHistoryType.Logout, - Detail = @"User logged out", + Detail = @"User logged out" + this.webSettings.IsPasswordUpdate + " " + vm.TriggerExternalSignout, }; await this.UserService.StoreUserHistoryAsync(userHistory); From b58df6a988fa0f5bb531454326dfa992c3d83be7 Mon Sep 17 00:00:00 2001 From: Frank C <115793157+frank-hee@users.noreply.github.com> Date: Thu, 31 Jul 2025 14:26:11 +0100 Subject: [PATCH 20/38] consolidate .nhsuk overrides into new scss file --- .../Styles/nhsuk/common.scss | 157 --------- .../{layout.scss => nhsuk-overrides.scss} | 299 ++++++++++++++---- .../Views/Shared/LearningHub/_Layout.cshtml | 2 +- .../Views/Shared/_SsoLayout.cshtml | 2 +- 4 files changed, 245 insertions(+), 215 deletions(-) rename Auth/LearningHub.Nhs.Auth/Styles/nhsuk/{layout.scss => nhsuk-overrides.scss} (66%) diff --git a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss index ed13eb8..c256ae6 100644 --- a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss +++ b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss @@ -1,80 +1,4 @@ @use "../abstracts/all" as *; -@use "nhsuk" as *; - -.nhsuk-u-font-style-italic { - font-style: italic; -} - -.nhsuk-button--red { - background-color: $nhsuk-red !important; - - &:hover { - background-color: $nhsuk-red-hover !important; - border-color: $nhsuk-red-hover !important; - } -} - -.nhsuk-button--beta-login { - background-color: $nhsuk-blue; - box-shadow: 0 4px 0 #002f5c; -} - -.nhsuk-button--beta-login:hover { - background-color: $nhsuk-btn-blue-hover; -} - -// By default, the text on reverse (white) buttons turns white once clicked, rendering them invisible. -.nhsuk-button--reverse:visited { - color: $nhsuk-black -} - -.nhsuk-back-link { - padding: px2rem(20) 0; - margin-bottom: 0; -} - -.nhsuk-radios__divider { - text-align: left; - width: unset; -} - -.nhsuk-radios__item label { - font-family: $font-stack; -} - -/* Conditional radio buttons - Note: The nhsuk-radios__conditional element needs to be a SIBLING of the radio button input element - otherwise the CSS selector won't work. See Views/Bookmark/Move.cshtml for a usage example. - The NHSUK component (nhsuk-radios__conditional) requires JavaScript to work. These tweaks allow it to work without. -*/ -.nhsuk-radios__conditional { - display: none; - margin-left: -22px; - margin-top: 8px; -} - -.nhsuk-radios__input:checked ~ .nhsuk-radios__conditional { - display: block !important; -} - -/* jquery unbobtrusive validation style over */ -.nhsuk-error-summary__list li { - color: $nhsuk-red; -} - -.nhsuk-form-group.input-validation-error { - @extend .nhsuk-form-group--error; -} - -.nhsuk-input.input-validation-error { - @extend .nhsuk-input--error -} - -.nhsuk-input:focus { - border: 2px solid #212b32; - box-shadow: inset 0 0 0 2px; - outline: 4px solid #ffeb3b; /* 1 */ - outline-offset: 0; -} .display--hide { display: none !important; @@ -119,81 +43,6 @@ display: block !important; } - -.nhsuk-bg-light-blue { - background-color: $nhsuk-light-blue-color; -} - -.nhsuk-bg-pale-blue { - background-color: $nhsuk-pale-blue-color; -} - -.nhsuk-bg-white { - background-color: $color_nhsuk-white; -} - -.nhsuk-width-container.search-width-container { - max-width: px2rem(752); - margin: 0 auto; - padding-left: px2rem(68); - padding-right: px2rem(68); -} - -/* One third column layout that switches to full width at the small desktop breakpoint (990px) instead of mobile. */ -.nhsuk-grid-column-one-third-small-desktop { - @extend .nhsuk-grid-column-one-third; - width: 33.3333333333% !important; - - @media (max-width: px2rem(990)) { - width: 100% !important; - } -} - - -/* Tweaks to styling for single card view. */ -@media(min-width: 768px) and (max-width: 990px) { - .nhsuk-card-group .nhsuk-grid-column-one-third-small-desktop { - max-width: 600px !important; - } - - .nhsuk-card-group--centred { - justify-content: center !important; - } -} - -.nhsuk-card-banner-container { - padding-bottom: 42.86%; - position: relative; -} - -.nhsuk-card-banner { - height: 100%; - object-fit: cover; - object-position: left; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; -} - -.nhsuk-card-banner-empty { - background-color: $nhsuk-pale-blue-color; - border-bottom: 1px solid #d8dde0; -} - -.nhsuk-error-message.error-message--margin-bottom-1 { - margin-bottom: nhsuk-spacing(1); -} - -.nhsuk-u-margin-bottom-2point5 { - margin-bottom: 12px; - - @media(max-width: 641px) { - margin-bottom: 10px; - } -} - .word-break__break-word { word-break: break-word; } @@ -203,12 +52,6 @@ justify-content: space-between; } -.nhsuk-button--no-shrink { - white-space: nowrap; - margin-top: auto !important; - margin-bottom: auto !important; -} - .modal-footer--buttons { justify-content: space-between !important; padding-left: 16px !important; diff --git a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/layout.scss b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss similarity index 66% rename from Auth/LearningHub.Nhs.Auth/Styles/nhsuk/layout.scss rename to Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss index 50b3c2b..d97f0f3 100644 --- a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/layout.scss +++ b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss @@ -1,34 +1,175 @@ @use "../abstracts/all" as *; @use "nhsuk" as *; -.nhsuk-header { - padding: 0 px2rem(32); +// Overrides due to +// - specific element updates (listed first) +// - Highly customised header +// - Beta banner +// - Footer padding update +// +// Header customisation not needed with current frontend package +// +// - FGC 31/07/25 + +.nhsuk-u-font-style-italic { + font-style: italic; } -.nhsuk-width-container.app-width-container { - max-width: px2rem(1208); - margin: 0 auto; - padding-left: px2rem(32); - padding-right: px2rem(32); +.nhsuk-button--red { + background-color: $nhsuk-red !important; + + &:hover { + background-color: $nhsuk-red-hover !important; + border-color: $nhsuk-red-hover !important; + } } -.nhsuk-header .nhsuk-width-container.app-width-container { - max-width: px2rem(1144); - margin: 0 auto; +.nhsuk-button--beta-login { + background-color: $nhsuk-blue; + box-shadow: 0 4px 0 #002f5c; } -.nhsuk-width-container.app-width-container.beta-banner { - padding: px2rem(8) px2rem(32); - max-width: px2rem(1208); +.nhsuk-button--beta-login:hover { + background-color: $nhsuk-btn-blue-hover; +} + +// By default, the text on reverse (white) buttons turns white once clicked, rendering them invisible. +.nhsuk-button--reverse:visited { + color: $nhsuk-black +} + +.nhsuk-back-link { + padding: px2rem(20) 0; + margin-bottom: 0; +} + +.nhsuk-radios__divider { + text-align: left; + width: unset; +} + +.nhsuk-radios__item label { + font-family: $font-stack; +} + +/* Conditional radio buttons - Note: The nhsuk-radios__conditional element needs to be a SIBLING of the radio button input element + otherwise the CSS selector won't work. See Views/Bookmark/Move.cshtml for a usage example. + The NHSUK component (nhsuk-radios__conditional) requires JavaScript to work. These tweaks allow it to work without. +*/ +.nhsuk-radios__conditional { + display: none; + margin-left: -22px; + margin-top: 8px; +} + +.nhsuk-radios__input:checked ~ .nhsuk-radios__conditional { + display: block !important; +} + +/* jquery unbobtrusive validation style over */ +.nhsuk-error-summary__list li { + color: $nhsuk-red; +} + +.nhsuk-form-group.input-validation-error { + @extend .nhsuk-form-group--error; +} + +.nhsuk-input.input-validation-error { + @extend .nhsuk-input--error +} + +.nhsuk-input:focus { + border: 2px solid #212b32; + box-shadow: inset 0 0 0 2px; + outline: 4px solid #ffeb3b; /* 1 */ + outline-offset: 0; +} + +.nhsuk-bg-light-blue { + background-color: $nhsuk-light-blue-color; +} + +.nhsuk-bg-pale-blue { + background-color: $nhsuk-pale-blue-color; +} + +.nhsuk-bg-white { + background-color: $color_nhsuk-white; +} + +.nhsuk-width-container.search-width-container { + max-width: px2rem(752); margin: 0 auto; + padding-left: px2rem(68); + padding-right: px2rem(68); } -.nhsuk-header .nhsuk-header__container::after { - content: none; +/* One third column layout that switches to full width at the small desktop breakpoint (990px) instead of mobile. */ +.nhsuk-grid-column-one-third-small-desktop { + @extend .nhsuk-grid-column-one-third; + width: 33.3333333333% !important; + + @media (max-width: px2rem(990)) { + width: 100% !important; + } } -.nhsuk-header__navigation.app-width-container { - max-width: px2rem(1144); +/* Tweaks to styling for single card view. */ +@media(min-width: 768px) and (max-width: 990px) { + .nhsuk-card-group .nhsuk-grid-column-one-third-small-desktop { + max-width: 600px !important; + } + + .nhsuk-card-group--centred { + justify-content: center !important; + } +} + +.nhsuk-card-banner-container { + padding-bottom: 42.86%; + position: relative; +} + +.nhsuk-card-banner { + height: 100%; + object-fit: cover; + object-position: left; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.nhsuk-card-banner-empty { + background-color: $nhsuk-pale-blue-color; + border-bottom: 1px solid #d8dde0; +} + +.nhsuk-error-message.error-message--margin-bottom-1 { + margin-bottom: nhsuk-spacing(1); +} + +.nhsuk-u-margin-bottom-2point5 { + margin-bottom: 12px; + + @media(max-width: 641px) { + margin-bottom: 10px; + } +} + +.nhsuk-button--no-shrink { + white-space: nowrap; + margin-top: auto !important; + margin-bottom: auto !important; +} + +.nhsuk-width-container.app-width-container { + max-width: px2rem(1208); + margin: 0 auto; + padding-left: px2rem(32); + padding-right: px2rem(32); } .app-width-container--full { @@ -40,6 +181,27 @@ padding: 0 } +// +// Header updates start here +// + +.nhsuk-header { + padding: 0 px2rem(32); +} + +.nhsuk-header .nhsuk-width-container.app-width-container { + max-width: px2rem(1144); + margin: 0 auto; +} + +.nhsuk-header .nhsuk-header__container::after { + content: none; +} + +.nhsuk-header__navigation.app-width-container { + max-width: px2rem(1144); +} + .nhsuk-header__container.app-width-container { display: flex; justify-content: space-between; @@ -58,8 +220,8 @@ flex: 1 0 0; } -.nhsuk-header__logo .nhsuk-header__link--service { - display:inline-flex; +.nhsuk-header__logo .nhsuk-header__link--service { + display: inline-flex; } .nhsuk-header__service-name { @@ -90,7 +252,7 @@ height: px2rem(18); text-align: center; border-radius: px2rem(9); - padding:px2rem(1) px2rem(3) 0; + padding: px2rem(1) px2rem(3) 0; } .nhsuk-header__menu { @@ -107,6 +269,47 @@ color: #fff; } +#header-dropdown-menu-control { + opacity: 0; + position: absolute; +} + +#header-dropdown-menu-control:checked ~ .nhsuk-header__navigation:not(.js-show) { + display: block +} + +#header-mobile-search-control { + display: none; +} + +.nhsuk-header__break { + display: none; +} + +.nhsuk-header__mobile-only-nav { + display: none; +} + +.nhsuk-header__mobile-break { + display: none; +} + +.nhsuk-header__navigation-item--current { + a { + font-weight: bold; + } +} + +.nhsuk-width-container.app-width-container.beta-banner { + padding: px2rem(8) px2rem(32); + max-width: px2rem(1208); + margin: 0 auto; +} + +// +// Beta banner updates +// + .beta-banner { background-color: $color_nhsuk-grey-5; color: $nhsuk-text-color; @@ -118,7 +321,7 @@ } .beta-banner + div { - border-top:1px solid $color_nhsuk-grey-3; + border-top: 1px solid $color_nhsuk-grey-3; } .beta-banner__beta-box { @@ -137,48 +340,28 @@ font-size: px2rem(16); } +// +// Footer updates +// + .nhsuk-footer { padding: px2rem(48) 0; } - -#header-dropdown-menu-control { - opacity: 0; - position: absolute; -} - -#header-dropdown-menu-control:checked ~ .nhsuk-header__navigation:not(.js-show) { - display: block -} - -#header-mobile-search-control { - display: none; -} - -.nhsuk-header__break { - display: none; -} - -.nhsuk-header__mobile-only-nav { - display: none; -} - -.nhsuk-header__mobile-break { - display: none; -} - -.nhsuk-header__navigation-item--current { - a { - font-weight: bold; - } -} .nhsuk-footer__copyright { float: left; text-align: left; } + +// +// Responsive updates +// + /* large desktop */ @media (min-width: px2rem(990)) { + // entirely headers + .nhsuk-header__navigation-item--current a { border-bottom: 4px solid $nhsuk-grey-lighter; font-weight: normal; @@ -196,6 +379,8 @@ /* small desktop */ @media (max-width: px2rem(989)) { + // entirely headers + .nhsuk-header__container { flex-wrap: wrap; } @@ -261,7 +446,7 @@ text-align: center; margin: 0; right: 0; - font-weight:600; + font-weight: 600; } .nhsuk-header__search-form { @@ -286,7 +471,7 @@ background: $nhsuk-error-color; color: $nhsuk-white; min-width: px2rem(18); - width:fit-content; + width: fit-content; height: px2rem(18); text-align: center; border-radius: px2rem(9); @@ -326,12 +511,14 @@ /* mobile */ @media (max-width: px2rem(640)) { + //entirely headers + .nhsuk-header__not-mobile { display: none; } .nhsuk-header__logo { - max-width:none; + max-width: none; } .nhsuk-header__mobile-only-nav { @@ -391,7 +578,7 @@ } .nhsuk-header__search .nhsuk-search__submit { - padding-top:nhsuk-spacing(1); + padding-top: nhsuk-spacing(1); } .nhsuk-header__menu { diff --git a/Auth/LearningHub.Nhs.Auth/Views/Shared/LearningHub/_Layout.cshtml b/Auth/LearningHub.Nhs.Auth/Views/Shared/LearningHub/_Layout.cshtml index 880d880..ce37bda 100644 --- a/Auth/LearningHub.Nhs.Auth/Views/Shared/LearningHub/_Layout.cshtml +++ b/Auth/LearningHub.Nhs.Auth/Views/Shared/LearningHub/_Layout.cshtml @@ -20,7 +20,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/Views/Shared/_SsoLayout.cshtml b/Auth/LearningHub.Nhs.Auth/Views/Shared/_SsoLayout.cshtml index 513a6fd..559ee2a 100644 --- a/Auth/LearningHub.Nhs.Auth/Views/Shared/_SsoLayout.cshtml +++ b/Auth/LearningHub.Nhs.Auth/Views/Shared/_SsoLayout.cshtml @@ -14,7 +14,7 @@ @ViewData["Title"] - Learning Hub Authentication - + From 98f85e4141e3e9b6da77c73785f26c67c67d67b5 Mon Sep 17 00:00:00 2001 From: Frank C <115793157+frank-hee@users.noreply.github.com> Date: Thu, 31 Jul 2025 14:33:19 +0100 Subject: [PATCH 21/38] auto formatting new code --- Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss | 3 ++- Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss index c256ae6..5b87bdf 100644 --- a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss +++ b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/common.scss @@ -60,10 +60,11 @@ margin-top: auto !important; margin-bottom: auto !important; } + .validation-summary-valid { display: none; } .field-validation-valid { display: none !important; -} \ No newline at end of file +} diff --git a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss index d97f0f3..a048c03 100644 --- a/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss +++ b/Auth/LearningHub.Nhs.Auth/Styles/nhsuk/nhsuk-overrides.scss @@ -606,4 +606,4 @@ .nhsuk-width-container.nhsuk-header__container.app-width-container { padding-bottom: 0; } -} \ No newline at end of file +} From c4c89b95c726cd7f8bba7fd8f7a3990051d3d807 Mon Sep 17 00:00:00 2001 From: Arunima George Date: Wed, 20 Aug 2025 16:13:09 +0100 Subject: [PATCH 22/38] TD-5761: Revised My Account screen implementation --- .../LearningHub.Nhs.Auth.Tests.csproj | 2 +- .../LearningHub.Nhs.Auth.csproj | 2 +- ...ub.Nhs.UserApi.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 2 +- .../ICountryService.cs | 16 ++++++++++ .../IElfhUserService.cs | 8 +++++ ...gHub.Nhs.UserAPI.Services.Interface.csproj | 2 +- ...gHub.Nhs.UserApi.Services.UnitTests.csproj | 2 +- .../CountryService.cs | 30 +++++++++++++++++++ .../ElfhUserService.cs | 20 +++++++++++++ .../LearningHub.Nhs.UserApi.Services.csproj | 2 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 2 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 2 +- .../Controllers/CountryController.cs | 28 +++++++++++++++++ .../Controllers/ElfhUserController.cs | 13 ++++++++ .../LearningHub.Nhs.UserApi.csproj | 2 +- 16 files changed, 125 insertions(+), 10 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index ec6d6ad..d5df667 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index 2933aee..d2cf97a 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -101,7 +101,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 29a3a90..90e9ad6 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 5921669..4abd4a0 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/ICountryService.cs b/LearningHub.Nhs.UserApi.Services.Interface/ICountryService.cs index 8b950f7..9da2394 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/ICountryService.cs +++ b/LearningHub.Nhs.UserApi.Services.Interface/ICountryService.cs @@ -39,5 +39,21 @@ public interface ICountryService /// The . /// Task> GetFilteredAsync(string filter); + + /// + /// The get all. + /// + /// + /// The . + /// + Task> GetAllUKCountries(); + + /// + /// The get all. + /// + /// + /// The . + /// + Task> GetAllNonUKCountries(); } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services.Interface/IElfhUserService.cs b/LearningHub.Nhs.UserApi.Services.Interface/IElfhUserService.cs index 9f77a64..ae510eb 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/IElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services.Interface/IElfhUserService.cs @@ -520,5 +520,13 @@ public interface IElfhUserService /// currentUserId. /// The . Task CheckSamePrimaryemailIsPendingToValidate(string secondaryEmail, int currentUserId); + + /// + /// Update MyAccount Personal Details. + /// + /// personalDetailsViewModel. + /// currentUserId. + /// The . + Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel personalDetailsViewModel, int currentUserId); } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 29a3a90..90e9ad6 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index a61a661..a090e17 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services/CountryService.cs b/LearningHub.Nhs.UserApi.Services/CountryService.cs index 5e2eb60..27d290b 100644 --- a/LearningHub.Nhs.UserApi.Services/CountryService.cs +++ b/LearningHub.Nhs.UserApi.Services/CountryService.cs @@ -79,5 +79,35 @@ public async Task> GetFilteredAsync(string filter) return countryList; } + + /// + /// Get All UK Countries. + /// + /// List of countries. + public async Task> GetAllUKCountries() + { + var items = this.countryRepository.GetAll() + .Where(c => c.Deleted == false && c.Numeric == "826") + .OrderBy(r => r.DisplayOrder); + + var countryList = await this.mapper.ProjectTo(items).ToListWithNoLockAsync(); + + return countryList; + } + + /// + /// Get All Non UK Countries. + /// + /// List of countries. + public async Task> GetAllNonUKCountries() + { + var items = this.countryRepository.GetAll() + .Where(c => c.Deleted == false && c.Numeric != "826") + .OrderBy(r => r.DisplayOrder); + + var countryList = await this.mapper.ProjectTo(items).ToListWithNoLockAsync(); + + return countryList; + } } } diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 1e42f93..624c545 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -968,6 +968,26 @@ public async Task CheckSamePrimaryemailIsPendingToValidate(string secondar return false; } + /// + /// Update MyAccount PersonalDetails. + /// + /// personalDetailsViewModel. + /// currentUserId. + /// The . + public async Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel personalDetailsViewModel, int currentUserId) + { + User user = await this.elfhUserRepository.GetByIdAsync(personalDetailsViewModel.UserId); + user.FirstName = personalDetailsViewModel.FirstName; + user.LastName = personalDetailsViewModel.LastName; + user.PreferredName = personalDetailsViewModel.PreferredName; + if (!string.IsNullOrEmpty(personalDetailsViewModel.SecondaryEmailAddress)) + { + user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; + } + + await this.elfhUserRepository.UpdateAsync(currentUserId, user); + } + private async Task ValidateAsync(CreateOpenAthensLinkToLhUser newUserDetails) { var registrationValidator = new CreateLinkedOpenAthensUserValidator(); diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index 670491b..ef123db 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index ecfe311..f5f2819 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 5c215c5..9993831 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi/Controllers/CountryController.cs b/LearningHub.Nhs.UserApi/Controllers/CountryController.cs index e2430d5..8af9d92 100644 --- a/LearningHub.Nhs.UserApi/Controllers/CountryController.cs +++ b/LearningHub.Nhs.UserApi/Controllers/CountryController.cs @@ -83,5 +83,33 @@ public async Task GetFiltered(string filter) var list = await this.countryService.GetFilteredAsync(filter); return this.Ok(list); } + + /// + /// Get a list of Uk Country records. + /// + /// + /// The . + /// + [HttpGet] + [Route("GetAllUKCountries")] + public async Task GetAllUKCountries() + { + var list = await this.countryService.GetAllUKCountries(); + return this.Ok(list); + } + + /// + /// Get a list of non Uk Country records. + /// + /// + /// The . + /// + [HttpGet] + [Route("GetAllNonUKCountries")] + public async Task GetAllNonUKCountries() + { + var list = await this.countryService.GetAllNonUKCountries(); + return this.Ok(list); + } } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi/Controllers/ElfhUserController.cs b/LearningHub.Nhs.UserApi/Controllers/ElfhUserController.cs index e2441d1..7532c80 100644 --- a/LearningHub.Nhs.UserApi/Controllers/ElfhUserController.cs +++ b/LearningHub.Nhs.UserApi/Controllers/ElfhUserController.cs @@ -923,5 +923,18 @@ public async Task UpgradeAsFullAccessUser(int userId, string emai var result = await this.securityService.UpgradeAsFullAccessUser(userId, email); return this.Ok(result); } + + /// + /// Update MyAccount Personal Details. + /// + /// personalDetailsViewModel. + /// The . + [HttpPut] + [Route("UpdateMyAccountPersonalDetails")] + public async Task UpdateMyAccountPersonalDetails([FromBody] PersonalDetailsViewModel personalDetailsViewModel) + { + await this.elfhUserService.UpdateMyAccountPersonalDetails(personalDetailsViewModel, this.CurrentUserId); + return this.Ok(); + } } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index c707f5a..89a319d 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -23,7 +23,7 @@ - + From 1e88d5c448dd862445fa4e279362964a9cc01ffe Mon Sep 17 00:00:00 2001 From: Arunima George Date: Fri, 5 Sep 2025 11:50:08 +0100 Subject: [PATCH 23/38] TD-6134: My account personal details page issues --- .../UserRoleUpgradeRepository.cs | 2 +- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Repository/UserRoleUpgradeRepository.cs b/LearningHub.Nhs.UserApi.Repository/UserRoleUpgradeRepository.cs index 920c996..fe5453e 100644 --- a/LearningHub.Nhs.UserApi.Repository/UserRoleUpgradeRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository/UserRoleUpgradeRepository.cs @@ -37,7 +37,7 @@ public IQueryable GetByUserIdAsync(int userId) public IQueryable GetByEmailAddressAsync(string emailAddress, int userId) { return this.DbContext.Set() - .Where(n => n.UserId == userId && n.EmailAddress == emailAddress && n.Deleted == false && n.UpgradeDate == null) + .Where(n => n.UserId == userId && n.EmailAddress.ToLower() == emailAddress.ToLower() && n.Deleted == false && n.UpgradeDate == null) .AsNoTracking(); } } diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 624c545..36a3688 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -980,10 +980,7 @@ public async Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel person user.FirstName = personalDetailsViewModel.FirstName; user.LastName = personalDetailsViewModel.LastName; user.PreferredName = personalDetailsViewModel.PreferredName; - if (!string.IsNullOrEmpty(personalDetailsViewModel.SecondaryEmailAddress)) - { - user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; - } + user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; await this.elfhUserRepository.UpdateAsync(currentUserId, user); } From a80cee648365fca4fc66289159dad7b6b3104ca5 Mon Sep 17 00:00:00 2001 From: Arunima George Date: Thu, 2 Oct 2025 10:39:56 +0100 Subject: [PATCH 24/38] TD-6133: Fixed issues on 'My Account - My employment details' screen --- .../LearningHub.Nhs.Auth.Tests.csproj | 2 +- Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 2 +- .../LearningHub.Nhs.UserAPI.Services.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Services.UnitTests.csproj | 2 +- .../LearningHub.Nhs.UserApi.Services.csproj | 2 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 2 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 2 +- LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index d5df667..537152f 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index d2cf97a..b8d40b6 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -101,7 +101,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 90e9ad6..c27c9a8 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 4abd4a0..141c1ef 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 90e9ad6..c27c9a8 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index a090e17..fffc2eb 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index ef123db..4fae482 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index f5f2819..6de208c 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 9993831..e23f0cd 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index 89a319d..d264eed 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -23,7 +23,7 @@ - + From edf20930b8d3b1841bca9a044f3eeba6f115d579 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:38:29 +0100 Subject: [PATCH 25/38] fixes --- .../LearningHub.Nhs.Auth.Tests.csproj | 2 +- Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 2 +- .../LearningHub.Nhs.UserAPI.Services.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Services.UnitTests.csproj | 2 +- .../LearningHub.Nhs.UserApi.Services.csproj | 2 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 2 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 2 +- LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index 537152f..ee12d1f 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index b8d40b6..cd3df81 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -101,7 +101,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index c27c9a8..41c2944 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 141c1ef..27ea6ec 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index c27c9a8..41c2944 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index fffc2eb..0aab24b 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index 4fae482..c2d2db3 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -8,7 +8,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index 6de208c..d4654b4 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -8,7 +8,7 @@ - + all diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index e23f0cd..38cdec7 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -10,7 +10,7 @@ - + diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index d264eed..bba58e4 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -23,7 +23,7 @@ - + From c167cf19d69343b63dbfc4af909c947313a2ffba Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Fri, 10 Oct 2025 16:10:54 +0100 Subject: [PATCH 26/38] TD-6335 --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 36a3688..361aa0d 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -237,7 +237,7 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = await this.elfhUserRepository.UpdateAsync(id, user); - await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + // await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } /// @@ -250,7 +250,7 @@ public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token await this.elfhUserRepository.UpdateAsync(id, user); - await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + // await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } /// @@ -977,8 +977,6 @@ public async Task CheckSamePrimaryemailIsPendingToValidate(string secondar public async Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel personalDetailsViewModel, int currentUserId) { User user = await this.elfhUserRepository.GetByIdAsync(personalDetailsViewModel.UserId); - user.FirstName = personalDetailsViewModel.FirstName; - user.LastName = personalDetailsViewModel.LastName; user.PreferredName = personalDetailsViewModel.PreferredName; user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; From dddfb6eed1e56f6d5106171925c69eb13fb6104b Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Fri, 10 Oct 2025 16:15:37 +0100 Subject: [PATCH 27/38] TD-6335 --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 361aa0d..37c40b7 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -237,7 +237,7 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = await this.elfhUserRepository.UpdateAsync(id, user); - // await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } /// @@ -250,7 +250,7 @@ public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token await this.elfhUserRepository.UpdateAsync(id, user); - // await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } /// From 6f4b124e4f4221175321476ffc7b680d81d59ca0 Mon Sep 17 00:00:00 2001 From: Arunima George Date: Thu, 23 Oct 2025 16:25:14 +0100 Subject: [PATCH 28/38] TD-6391: Modified the calls to update elfh Hub DB UserTbl records during authentication --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 37c40b7..55f6a48 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -231,13 +231,15 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = { var user = await this.elfhUserRepository.GetByIdAsync(id); - user.LoginTimes++; - user.PasswordLifeCounter = 0; - user.SecurityLifeCounter = 0; + if (user.PasswordLifeCounter != 0 || user.SecurityLifeCounter != 0) + { + user.PasswordLifeCounter = 0; + user.SecurityLifeCounter = 0; - await this.elfhUserRepository.UpdateAsync(id, user); + await this.elfhUserRepository.UpdateAsync(id, user); - await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + } } /// @@ -245,7 +247,6 @@ public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token { var user = await this.elfhUserRepository.GetByIdAsync(id); - user.LoginTimes++; user.PasswordLifeCounter++; await this.elfhUserRepository.UpdateAsync(id, user); From 97f86673ba448c051cc592ec27f2820d5536faf0 Mon Sep 17 00:00:00 2001 From: OluwatobiAwe Date: Thu, 30 Oct 2025 15:50:33 +0000 Subject: [PATCH 29/38] Repository and SP update for user authentication request --- .../LH/IUserRepository.cs | 12 ++++++++++ ...ub.Nhs.UserApi.Repository.Interface.csproj | 2 +- .../LH/LearningHubDbContext.cs | 6 +++++ .../LH/UserRepository.cs | 22 +++++++++++++++++++ .../LearningHub.Nhs.UserApi.Repository.csproj | 2 +- ...gHub.Nhs.UserAPI.Services.Interface.csproj | 2 +- ...gHub.Nhs.UserApi.Services.UnitTests.csproj | 2 +- .../ElfhUserService.cs | 10 ++++----- .../LearningHub.Nhs.UserApi.Services.csproj | 2 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 2 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 2 +- .../Controllers/AuthenticationController.cs | 18 +++++++-------- .../LearningHub.Nhs.UserApi.csproj | 2 +- 13 files changed, 61 insertions(+), 23 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs index 0653111..73e979b 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs @@ -1,6 +1,7 @@ namespace LearningHub.Nhs.UserApi.Repository.Interface.LH { using System.Threading.Tasks; + using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; /// @@ -18,5 +19,16 @@ public interface IUserRepository : IGenericLHRepository /// The . /// Task GetByIdAsync(int id); + + /// + /// The get user detail for the authentication. + /// + /// + /// username. + /// + /// + /// The . + /// + Task GetUserDetailForAuthentication(string username); } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 41c2944..413c32c 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs b/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs index d6732ef..36040c3 100644 --- a/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs +++ b/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs @@ -1,5 +1,6 @@ namespace LearningHub.Nhs.UserApi.Repository.LH { + using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; using LearningHub.Nhs.Models.Entities.External; using LearningHub.Nhs.Models.Entities.Messaging; @@ -50,6 +51,11 @@ public LearningHubDbContext(LearningHubDbContextOptions options) /// public virtual DbSet EmailTemplate { get; set; } + /// + /// Gets or sets the UserAuthentiate Dto. + /// + public virtual DbSet UserAuthenticateDto { get; set; } + /// /// The on model creating. /// diff --git a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs index 6950d36..fffd70d 100644 --- a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs @@ -1,9 +1,13 @@ namespace LearningHub.Nhs.UserApi.Repository.LH { + using System.Data; + using System.Linq; using System.Threading.Tasks; + using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; using LearningHub.Nhs.UserApi.Repository; using LearningHub.Nhs.UserApi.Repository.Interface.LH; + using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; /// @@ -26,5 +30,23 @@ public async Task GetByIdAsync(int id) { return await this.DbContext.User.FirstOrDefaultWithNoLockAsync(n => n.Id == id); } + + /// + /// The get user detail for the authentication. + /// + /// + /// username. + /// + /// + /// The . + /// + public async Task GetUserDetailForAuthentication(string username) + { + var param0 = new SqlParameter("@userName", SqlDbType.VarChar) { Value = username }; + + var userAuthenticateDto = await this.DbContext.UserAuthenticateDto.FromSqlRaw("elfh.proc_UserDetailForAuthenticationByUserName @userName", param0).AsNoTracking().ToListAsync(); + + return userAuthenticateDto.FirstOrDefault(); + } } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index 27ea6ec..b4158fb 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 41c2944..413c32c 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index 0aab24b..695f6a9 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -13,7 +13,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 37c40b7..3355412 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -187,7 +187,7 @@ public async Task GetUserIdByUsernameAsync(string userName) /// public async Task GetUserDetailForAuthenticateAsync(string userName) { - return await this.elfhUserRepository.GetUserDetailForAuthentication(userName); + return await this.lhUserRepository.GetUserDetailForAuthentication(userName); } /// @@ -229,13 +229,13 @@ public async Task GetUserRoleAsync(int id) /// public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = default) { - var user = await this.elfhUserRepository.GetByIdAsync(id); + var user = await this.lhUserRepository.GetByIdAsync(id); user.LoginTimes++; user.PasswordLifeCounter = 0; user.SecurityLifeCounter = 0; - await this.elfhUserRepository.UpdateAsync(id, user); + await this.lhUserRepository.UpdateAsync(id, user); await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } @@ -243,12 +243,12 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = /// public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token = default) { - var user = await this.elfhUserRepository.GetByIdAsync(id); + var user = await this.lhUserRepository.GetByIdAsync(id); user.LoginTimes++; user.PasswordLifeCounter++; - await this.elfhUserRepository.UpdateAsync(id, user); + await this.lhUserRepository.UpdateAsync(id, user); await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index c2d2db3..f93538b 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -9,7 +9,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index d4654b4..5811f0b 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 38cdec7..0855ec5 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs b/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs index 86b45dc..49040e7 100644 --- a/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs +++ b/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs @@ -53,11 +53,10 @@ public async Task AuthenticateElfhHubAsync([FromBody] Login login { var loginResult = await this.authenticationService.AuthenticateAsync(login); - if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) - { - await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); - } - + // if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) + // { + // await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); + // } return this.Ok(loginResult); } @@ -81,11 +80,10 @@ public async Task AuthenticateSsoAsync([FromBody] LoginSso reques var loginResult = await this.authenticationService.CheckUserCredentialsSsoAsync(request.UserId); - if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) - { - await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); - } - + // if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) + // { + // await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); + // } return this.Ok(loginResult); } diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index bba58e4..3011dd5 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -26,7 +26,7 @@ - + From f0f7a1a8338b502ff8cb8e6fd1b145a49ec5fdf1 Mon Sep 17 00:00:00 2001 From: OluwatobiAwe Date: Fri, 31 Oct 2025 02:36:47 +0000 Subject: [PATCH 30/38] moved elfh db query to LH call LH database SP in place of elfh efcore query --- .../LH/IUserRepository.cs | 23 +++++++++++++++++++ .../LH/UserRepository.cs | 18 +++++++++++++++ .../ElfhUserService.cs | 15 ++++++------ 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs index 73e979b..82c8457 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs @@ -1,6 +1,7 @@ namespace LearningHub.Nhs.UserApi.Repository.Interface.LH { using System.Threading.Tasks; + using elfhHub.Nhs.Models.Common; using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; @@ -20,6 +21,28 @@ public interface IUserRepository : IGenericLHRepository /// Task GetByIdAsync(int id); + /// + /// The get user id by username async. + /// + /// + /// The username. + /// + /// + /// The . + /// + Task GetUserIdByUsernameAsync(string username); + + /// + /// The get by open athens id. + /// + /// + /// The open athens id. + /// + /// + /// The . + /// + Task GetByOpenAthensIdAsync(string openAthensId); + /// /// The get user detail for the authentication. /// diff --git a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs index fffd70d..6bb479e 100644 --- a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs @@ -3,6 +3,7 @@ using System.Data; using System.Linq; using System.Threading.Tasks; + using elfhHub.Nhs.Models.Common; using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; using LearningHub.Nhs.UserApi.Repository; @@ -31,6 +32,23 @@ public async Task GetByIdAsync(int id) return await this.DbContext.User.FirstOrDefaultWithNoLockAsync(n => n.Id == id); } + /// + public async Task GetUserIdByUsernameAsync(string username) + { + return await this.DbContext.User.AsNoTracking().Where(n => n.UserName == username).Select(n => n.Id).FirstOrDefaultWithNoLockAsync(); + } + + /// + public async Task GetByOpenAthensIdAsync(string openAthensId) + { + var param = new SqlParameter("@OpenAthensId", openAthensId); + + return await this.DbContext.Set() + .FromSqlRaw("EXEC elfh.proc_GetUserByOpenAthensId @OpenAthensId", param) + .AsNoTracking() + .FirstOrDefaultAsync(); + } + /// /// The get user detail for the authentication. /// diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 3355412..915e2b2 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -158,14 +158,13 @@ public async Task GetByOpenAthensIdAsync(string openAthensId) return null; } - var user = await this.elfhUserRepository.GetByOpenAthensIdAsync(openAthensId); + var user = await this.lhUserRepository.GetByOpenAthensIdAsync(openAthensId); - if (user != null) - { - await this.SyncLHUserAsync(user.Id, user.UserName); - } - - return user?.ToBasicUser(); + // if (user != null) + // { + // await this.SyncLHUserAsync(user.Id, user.UserName); + // } + return user; } /// @@ -181,7 +180,7 @@ public async Task GetByUsernameAsync(string userName, UserIncludeCollectio /// The . public async Task GetUserIdByUsernameAsync(string userName) { - return await this.elfhUserRepository.GetUserIdByUsernameAsync(userName); + return await this.lhUserRepository.GetUserIdByUsernameAsync(userName); } /// From fdab0342bf31ab89c652c836b4acfeb327423008 Mon Sep 17 00:00:00 2001 From: AnjuJose011 <154979799+AnjuJose011@users.noreply.github.com> Date: Mon, 3 Nov 2025 14:28:51 +0000 Subject: [PATCH 31/38] fixes --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index a38049b..8def9f5 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -235,7 +235,7 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = user.PasswordLifeCounter = 0; user.SecurityLifeCounter = 0; - await this.lhUserRepository.UpdateAsync(id, user); + await this.lhUserRepository.UpdateAsync(id, user); await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } From 8d91aa7c2c8fb10149ba158a22861d9cd7676287 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Mon, 10 Nov 2025 13:52:59 +0000 Subject: [PATCH 32/38] Reverted User profile migration changes --- .../LH/IUserRepository.cs | 35 -------------- .../LH/LearningHubDbContext.cs | 6 --- .../LH/UserRepository.cs | 40 ---------------- .../ElfhUserService.cs | 48 ++++++++++--------- .../Controllers/AuthenticationController.cs | 18 +++---- 5 files changed, 35 insertions(+), 112 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs index 82c8457..0653111 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LH/IUserRepository.cs @@ -1,8 +1,6 @@ namespace LearningHub.Nhs.UserApi.Repository.Interface.LH { using System.Threading.Tasks; - using elfhHub.Nhs.Models.Common; - using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; /// @@ -20,38 +18,5 @@ public interface IUserRepository : IGenericLHRepository /// The . /// Task GetByIdAsync(int id); - - /// - /// The get user id by username async. - /// - /// - /// The username. - /// - /// - /// The . - /// - Task GetUserIdByUsernameAsync(string username); - - /// - /// The get by open athens id. - /// - /// - /// The open athens id. - /// - /// - /// The . - /// - Task GetByOpenAthensIdAsync(string openAthensId); - - /// - /// The get user detail for the authentication. - /// - /// - /// username. - /// - /// - /// The . - /// - Task GetUserDetailForAuthentication(string username); } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs b/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs index 36040c3..d6732ef 100644 --- a/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs +++ b/LearningHub.Nhs.UserApi.Repository/LH/LearningHubDbContext.cs @@ -1,6 +1,5 @@ namespace LearningHub.Nhs.UserApi.Repository.LH { - using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; using LearningHub.Nhs.Models.Entities.External; using LearningHub.Nhs.Models.Entities.Messaging; @@ -51,11 +50,6 @@ public LearningHubDbContext(LearningHubDbContextOptions options) /// public virtual DbSet EmailTemplate { get; set; } - /// - /// Gets or sets the UserAuthentiate Dto. - /// - public virtual DbSet UserAuthenticateDto { get; set; } - /// /// The on model creating. /// diff --git a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs index 6bb479e..6950d36 100644 --- a/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs +++ b/LearningHub.Nhs.UserApi.Repository/LH/UserRepository.cs @@ -1,14 +1,9 @@ namespace LearningHub.Nhs.UserApi.Repository.LH { - using System.Data; - using System.Linq; using System.Threading.Tasks; - using elfhHub.Nhs.Models.Common; - using elfhHub.Nhs.Models.Dto; using LearningHub.Nhs.Models.Entities; using LearningHub.Nhs.UserApi.Repository; using LearningHub.Nhs.UserApi.Repository.Interface.LH; - using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; /// @@ -31,40 +26,5 @@ public async Task GetByIdAsync(int id) { return await this.DbContext.User.FirstOrDefaultWithNoLockAsync(n => n.Id == id); } - - /// - public async Task GetUserIdByUsernameAsync(string username) - { - return await this.DbContext.User.AsNoTracking().Where(n => n.UserName == username).Select(n => n.Id).FirstOrDefaultWithNoLockAsync(); - } - - /// - public async Task GetByOpenAthensIdAsync(string openAthensId) - { - var param = new SqlParameter("@OpenAthensId", openAthensId); - - return await this.DbContext.Set() - .FromSqlRaw("EXEC elfh.proc_GetUserByOpenAthensId @OpenAthensId", param) - .AsNoTracking() - .FirstOrDefaultAsync(); - } - - /// - /// The get user detail for the authentication. - /// - /// - /// username. - /// - /// - /// The . - /// - public async Task GetUserDetailForAuthentication(string username) - { - var param0 = new SqlParameter("@userName", SqlDbType.VarChar) { Value = username }; - - var userAuthenticateDto = await this.DbContext.UserAuthenticateDto.FromSqlRaw("elfh.proc_UserDetailForAuthenticationByUserName @userName", param0).AsNoTracking().ToListAsync(); - - return userAuthenticateDto.FirstOrDefault(); - } } } \ No newline at end of file diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 8def9f5..d515a5b 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -158,13 +158,14 @@ public async Task GetByOpenAthensIdAsync(string openAthensId) return null; } - var user = await this.lhUserRepository.GetByOpenAthensIdAsync(openAthensId); + var user = await this.elfhUserRepository.GetByOpenAthensIdAsync(openAthensId); - // if (user != null) - // { - // await this.SyncLHUserAsync(user.Id, user.UserName); - // } - return user; + if (user != null) + { + await this.SyncLHUserAsync(user.Id, user.UserName); + } + + return user?.ToBasicUser(); } /// @@ -180,13 +181,13 @@ public async Task GetByUsernameAsync(string userName, UserIncludeCollectio /// The . public async Task GetUserIdByUsernameAsync(string userName) { - return await this.lhUserRepository.GetUserIdByUsernameAsync(userName); + return await this.elfhUserRepository.GetUserIdByUsernameAsync(userName); } /// public async Task GetUserDetailForAuthenticateAsync(string userName) { - return await this.lhUserRepository.GetUserDetailForAuthentication(userName); + return await this.elfhUserRepository.GetUserDetailForAuthentication(userName); } /// @@ -228,27 +229,26 @@ public async Task GetUserRoleAsync(int id) /// public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = default) { - var user = await this.lhUserRepository.GetByIdAsync(id); + var user = await this.elfhUserRepository.GetByIdAsync(id); - if (user.PasswordLifeCounter != 0 || user.SecurityLifeCounter != 0) - { - user.PasswordLifeCounter = 0; - user.SecurityLifeCounter = 0; + user.LoginTimes++; + user.PasswordLifeCounter = 0; + user.SecurityLifeCounter = 0; - await this.lhUserRepository.UpdateAsync(id, user); + await this.elfhUserRepository.UpdateAsync(id, user); - await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); - } + await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } /// public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token = default) { - var user = await this.lhUserRepository.GetByIdAsync(id); + var user = await this.elfhUserRepository.GetByIdAsync(id); + user.LoginTimes++; user.PasswordLifeCounter++; - await this.lhUserRepository.UpdateAsync(id, user); + await this.elfhUserRepository.UpdateAsync(id, user); await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); } @@ -958,14 +958,14 @@ public async Task ValidateUserRoleUpgrade(string currentPrimaryEmail, stri /// public async Task CheckSamePrimaryemailIsPendingToValidate(string secondaryEmail, int currentUserId) { - var userRoleUpgrades = this.userRoleUpgradeRepository.GetByEmailAddressAsync(secondaryEmail, currentUserId); + var userRoleUpgrades = this.userRoleUpgradeRepository.GetByEmailAddressAsync(secondaryEmail, currentUserId); - if (userRoleUpgrades.Count() > 0) - { + if (userRoleUpgrades.Count() > 0) + { return true; - } + } - return false; + return false; } /// @@ -977,6 +977,8 @@ public async Task CheckSamePrimaryemailIsPendingToValidate(string secondar public async Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel personalDetailsViewModel, int currentUserId) { User user = await this.elfhUserRepository.GetByIdAsync(personalDetailsViewModel.UserId); + user.FirstName = personalDetailsViewModel.FirstName; + user.LastName = personalDetailsViewModel.LastName; user.PreferredName = personalDetailsViewModel.PreferredName; user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; diff --git a/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs b/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs index 49040e7..86b45dc 100644 --- a/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs +++ b/LearningHub.Nhs.UserApi/Controllers/AuthenticationController.cs @@ -53,10 +53,11 @@ public async Task AuthenticateElfhHubAsync([FromBody] Login login { var loginResult = await this.authenticationService.AuthenticateAsync(login); - // if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) - // { - // await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); - // } + if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) + { + await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); + } + return this.Ok(loginResult); } @@ -80,10 +81,11 @@ public async Task AuthenticateSsoAsync([FromBody] LoginSso reques var loginResult = await this.authenticationService.CheckUserCredentialsSsoAsync(request.UserId); - // if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) - // { - // await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); - // } + if (loginResult.IsAuthenticated && !string.IsNullOrWhiteSpace(loginResult.UserName)) + { + await this.elfhUserService.SyncLHUserAsync(loginResult.UserId, loginResult.UserName); + } + return this.Ok(loginResult); } From e3d268ad8781192a8a7fba814b0e4b80a9593d15 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Mon, 10 Nov 2025 14:08:47 +0000 Subject: [PATCH 33/38] Modified the calls to update elfh Hub DB UserTbl records during authentication --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index d515a5b..1cc3838 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -231,13 +231,15 @@ public async Task RecordSuccessfulSigninAsync(int id, CancellationToken token = { var user = await this.elfhUserRepository.GetByIdAsync(id); - user.LoginTimes++; - user.PasswordLifeCounter = 0; - user.SecurityLifeCounter = 0; + if (user.PasswordLifeCounter != 0 || user.SecurityLifeCounter != 0) + { + user.PasswordLifeCounter = 0; + user.SecurityLifeCounter = 0; - await this.elfhUserRepository.UpdateAsync(id, user); + await this.elfhUserRepository.UpdateAsync(id, user); - await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + await this.InvalidateElfhUserCacheAsync(user.Id, user.UserName, token); + } } /// @@ -245,7 +247,6 @@ public async Task RecordUnsuccessfulSigninAsync(int id, CancellationToken token { var user = await this.elfhUserRepository.GetByIdAsync(id); - user.LoginTimes++; user.PasswordLifeCounter++; await this.elfhUserRepository.UpdateAsync(id, user); From b44e78e02c753b25e83f1766f1b208627ce76492 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Tue, 11 Nov 2025 15:04:24 +0000 Subject: [PATCH 34/38] Added the missed code --- LearningHub.Nhs.UserApi.Services/ElfhUserService.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs index 1cc3838..05fc896 100644 --- a/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs +++ b/LearningHub.Nhs.UserApi.Services/ElfhUserService.cs @@ -978,8 +978,6 @@ public async Task CheckSamePrimaryemailIsPendingToValidate(string secondar public async Task UpdateMyAccountPersonalDetails(PersonalDetailsViewModel personalDetailsViewModel, int currentUserId) { User user = await this.elfhUserRepository.GetByIdAsync(personalDetailsViewModel.UserId); - user.FirstName = personalDetailsViewModel.FirstName; - user.LastName = personalDetailsViewModel.LastName; user.PreferredName = personalDetailsViewModel.PreferredName; user.AltEmailAddress = personalDetailsViewModel.SecondaryEmailAddress; From b772521053c2aa31ff455a466db4ba5c9e88ecc6 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Wed, 26 Nov 2025 10:08:54 +0000 Subject: [PATCH 35/38] TD-6384: CORS Policy updated for Moodle --- Auth/LearningHub.Nhs.Auth/Program.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Auth/LearningHub.Nhs.Auth/Program.cs b/Auth/LearningHub.Nhs.Auth/Program.cs index 04759f5..0b8aba5 100644 --- a/Auth/LearningHub.Nhs.Auth/Program.cs +++ b/Auth/LearningHub.Nhs.Auth/Program.cs @@ -24,6 +24,7 @@ builder.Host.UseNLog(); string corsOriginUrl = builder.Configuration.GetValue("LearningHubAuthConfig:AuthClients:learninghubopenapi:BaseUrl"); +string corsMoodleUrl = builder.Configuration.GetValue("MoodleAPIConfig:BaseUrl"); builder.Services.AddCors(options => { @@ -34,6 +35,17 @@ .AllowAnyHeader()); }); +builder.Services.AddCors(options => +{ + options.AddPolicy("MoodleCORS", builder => + { + builder.WithOrigins(corsMoodleUrl) + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); +}); + builder.Services.ConfigureServices(builder.Configuration, builder.Environment); GlobalDiagnosticsContext.Set("connectionString", builder.Configuration.GetSection("ASPNETCORE_ConnectionStrings")["NLogDb"]); @@ -72,6 +84,8 @@ app.UseCors("CorsPolicy"); +app.UseCors("MoodleCORS"); + app.UseCookiePolicy(); app.UseHttpsRedirection(); From 2a151981cbb9dc5c1563cd4c57f5e3a9909eef6f Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Thu, 27 Nov 2025 11:00:24 +0000 Subject: [PATCH 36/38] Added the blank line --- Auth/LearningHub.Nhs.Auth/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Auth/LearningHub.Nhs.Auth/Program.cs b/Auth/LearningHub.Nhs.Auth/Program.cs index 0b8aba5..fb7cd6b 100644 --- a/Auth/LearningHub.Nhs.Auth/Program.cs +++ b/Auth/LearningHub.Nhs.Auth/Program.cs @@ -24,6 +24,7 @@ builder.Host.UseNLog(); string corsOriginUrl = builder.Configuration.GetValue("LearningHubAuthConfig:AuthClients:learninghubopenapi:BaseUrl"); + string corsMoodleUrl = builder.Configuration.GetValue("MoodleAPIConfig:BaseUrl"); builder.Services.AddCors(options => From 98210930762118e9507f9c38ad5cc3c8070febed Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Mon, 1 Dec 2025 13:09:08 +0000 Subject: [PATCH 37/38] Reverted the CORS policy code for moodle --- Auth/LearningHub.Nhs.Auth/Program.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth/Program.cs b/Auth/LearningHub.Nhs.Auth/Program.cs index fb7cd6b..04759f5 100644 --- a/Auth/LearningHub.Nhs.Auth/Program.cs +++ b/Auth/LearningHub.Nhs.Auth/Program.cs @@ -25,8 +25,6 @@ string corsOriginUrl = builder.Configuration.GetValue("LearningHubAuthConfig:AuthClients:learninghubopenapi:BaseUrl"); -string corsMoodleUrl = builder.Configuration.GetValue("MoodleAPIConfig:BaseUrl"); - builder.Services.AddCors(options => { options.AddPolicy( @@ -36,17 +34,6 @@ .AllowAnyHeader()); }); -builder.Services.AddCors(options => -{ - options.AddPolicy("MoodleCORS", builder => - { - builder.WithOrigins(corsMoodleUrl) - .AllowAnyHeader() - .AllowAnyMethod() - .AllowCredentials(); - }); -}); - builder.Services.ConfigureServices(builder.Configuration, builder.Environment); GlobalDiagnosticsContext.Set("connectionString", builder.Configuration.GetSection("ASPNETCORE_ConnectionStrings")["NLogDb"]); @@ -85,8 +72,6 @@ app.UseCors("CorsPolicy"); -app.UseCors("MoodleCORS"); - app.UseCookiePolicy(); app.UseHttpsRedirection(); From 3eee74f4ca6feca7341df8c25270e9d0cb0a0252 Mon Sep 17 00:00:00 2001 From: swapnamol-abraham Date: Thu, 19 Mar 2026 10:01:01 +0000 Subject: [PATCH 38/38] MIB Integration into LH - TD-6911 --- .../LearningHub.Nhs.Auth.Tests.csproj | 2 +- .../LearningHub.Nhs.Auth.csproj | 2 +- Auth/LearningHub.Nhs.Auth/Program.cs | 15 + Auth/LearningHub.Nhs.Auth/appsettings.json | 368 ++++++++++-------- ...ub.Nhs.UserApi.Repository.Interface.csproj | 2 +- .../LearningHub.Nhs.UserApi.Repository.csproj | 2 +- ...gHub.Nhs.UserAPI.Services.Interface.csproj | 2 +- ...gHub.Nhs.UserApi.Services.UnitTests.csproj | 2 +- .../LearningHub.Nhs.UserApi.Services.csproj | 2 +- .../LearningHub.Nhs.UserApi.Shared.csproj | 2 +- .../LearningHub.Nhs.UserApi.UnitTests.csproj | 2 +- .../LearningHub.Nhs.UserApi.csproj | 2 +- 12 files changed, 221 insertions(+), 182 deletions(-) diff --git a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj index ee12d1f..8396508 100644 --- a/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj +++ b/Auth/LearningHub.Nhs.Auth.Tests/LearningHub.Nhs.Auth.Tests.csproj @@ -10,7 +10,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj index cd3df81..55206bc 100644 --- a/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj +++ b/Auth/LearningHub.Nhs.Auth/LearningHub.Nhs.Auth.csproj @@ -106,7 +106,7 @@ - + diff --git a/Auth/LearningHub.Nhs.Auth/Program.cs b/Auth/LearningHub.Nhs.Auth/Program.cs index 04759f5..e8e8172 100644 --- a/Auth/LearningHub.Nhs.Auth/Program.cs +++ b/Auth/LearningHub.Nhs.Auth/Program.cs @@ -34,6 +34,21 @@ .AllowAnyHeader()); }); +string moodleInstanceBridgeOrigin = builder.Configuration.GetValue("LearningHubAuthConfig:AuthClients:moodleinstancebridge:BaseUrl"); + +builder.Services.AddCors(options => +{ + options.AddPolicy("CorsPolicy", policy => + { + policy.WithOrigins( + corsOriginUrl, + moodleInstanceBridgeOrigin) + .AllowAnyHeader() + .AllowAnyMethod() + .AllowCredentials(); + }); +}); + builder.Services.ConfigureServices(builder.Configuration, builder.Environment); GlobalDiagnosticsContext.Set("connectionString", builder.Configuration.GetSection("ASPNETCORE_ConnectionStrings")["NLogDb"]); diff --git a/Auth/LearningHub.Nhs.Auth/appsettings.json b/Auth/LearningHub.Nhs.Auth/appsettings.json index 8f45884..59273cd 100644 --- a/Auth/LearningHub.Nhs.Auth/appsettings.json +++ b/Auth/LearningHub.Nhs.Auth/appsettings.json @@ -66,179 +66,203 @@ }, "AuthClientIdentityKey": "", "AuthTimeout": 20, - "AuthClients": { - "learninghubadmin": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": false, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": false, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": false - }, - "learninghubwebclient": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": false, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": false, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": false - }, - "migrationTool": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "", "" ], - "RedirectUris": [], - "PostLogoutUris": [], - "AllowedScopes": [ "", "", "", "" ], - "BackChannelLogoutSessionRequired": false, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": false, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": false - }, - "learninghubwebclient_local": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": false, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": false, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": false - }, - "learninghubadmin_local": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": false, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": false, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": false - }, - "userprofileclient": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": true, - "AllowOfflineAccess": true - }, - "learninghubopenapi": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": true, - "AllowOfflineAccess": true - }, - "digitallearningsolutions": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "" ], - "RedirectUris": [ "" ], - "PostLogoutUris": [ "" ], - "AllowedScopes": [ "", "", "", "", "" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": true, - "AllowOfflineAccess": true - }, - "moodle": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "authorization_code" ], - "RedirectUris": [ "/auth/oidc/" ], - "PostLogoutUris": [ "/login/logout.php" ], - "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "/login/logout.php", - "FrontChannelLogoutSessionRequired": true, - "FrontChannelLogoutUri": "/login/logout.php", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": true - }, - "moodlepgvle": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "authorization_code" ], - "RedirectUris": [ "/auth/oidc/" ], - "PostLogoutUris": [ "/login/logout.php" ], - "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "/login/logout.php", - "FrontChannelLogoutSessionRequired": true, - "FrontChannelLogoutUri": "/login/logout.php", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": true - }, - "moodlemooc": { - "BaseUrl": "", - "ClientName": "", - "ClientSecret": "", - "AllowedGrantTypes": [ "authorization_code" ], - "RedirectUris": [ "/auth/oidc/" ], - "PostLogoutUris": [ "/login/logout.php" ], - "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], - "BackChannelLogoutSessionRequired": true, - "BackChannelLogoutUri": "/login/logout.php", - "FrontChannelLogoutSessionRequired": true, - "FrontChannelLogoutUri": "/login/logout.php", - "UpdateAccessTokenClaimsOnRefresh": true, - "RequireConsent": false, - "RequirePkce": false, - "AllowOfflineAccess": true - } + "AuthClients": { + "learninghubadmin": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": false, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": false, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": false + }, + "learninghubwebclient": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": false, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": false, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": false }, + "migrationTool": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "", "" ], + "RedirectUris": [], + "PostLogoutUris": [], + "AllowedScopes": [ "", "", "", "" ], + "BackChannelLogoutSessionRequired": false, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": false, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": false + }, + "learninghubwebclient_local": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": false, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": false, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": false + }, + "learninghubadmin_local": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": false, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": false, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": false + }, + "userprofileclient": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": true, + "AllowOfflineAccess": true + }, + "learninghubopenapi": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": true, + "AllowOfflineAccess": true + }, + "digitallearningsolutions": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "" ], + "RedirectUris": [ "" ], + "PostLogoutUris": [ "" ], + "AllowedScopes": [ "", "", "", "", "" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": true, + "AllowOfflineAccess": true + }, + "moodle": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "authorization_code" ], + "RedirectUris": [ "/auth/oidc/" ], + "PostLogoutUris": [ "/login/logout.php" ], + "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "/login/logout.php", + "FrontChannelLogoutSessionRequired": true, + "FrontChannelLogoutUri": "/login/logout.php", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": true + }, + "moodlepgvle": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "authorization_code" ], + "RedirectUris": [ "/auth/oidc/" ], + "PostLogoutUris": [ "/login/logout.php" ], + "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "/login/logout.php", + "FrontChannelLogoutSessionRequired": true, + "FrontChannelLogoutUri": "/login/logout.php", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": true + }, + "moodlemooc": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ "authorization_code" ], + "RedirectUris": [ "/auth/oidc/" ], + "PostLogoutUris": [ "/login/logout.php" ], + "AllowedScopes": [ "openid", "profile", "learninghubapi", "userapi", "roles", "learningcredentialsapi" ], + "BackChannelLogoutSessionRequired": true, + "BackChannelLogoutUri": "/login/logout.php", + "FrontChannelLogoutSessionRequired": true, + "FrontChannelLogoutUri": "/login/logout.php", + "UpdateAccessTokenClaimsOnRefresh": true, + "RequireConsent": false, + "RequirePkce": false, + "AllowOfflineAccess": true + }, + "moodleinstancebridge": { + "BaseUrl": "", + "ClientName": "", + "ClientSecret": "", + "AllowedGrantTypes": [ + "authorization_code" + ], + "RedirectUris": [ + "" + ], + "AllowedCorsOrigins": [ + "" + ], + "AllowedScopes": [ + "openid", + "profile", + "learninghubapi", + "userapi", + "roles" + ], + "RequirePkce": true, + "RequireConsent": false, + "AllowOfflineAccess": true + } + }, "IdsClients": { "eLfH": { "ClientDescription": "e-Learning for Healthcare Hub", diff --git a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj index 413c32c..d3f232b 100644 --- a/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Repository.Interface/LearningHub.Nhs.UserApi.Repository.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj index b4158fb..b643a23 100644 --- a/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj +++ b/LearningHub.Nhs.UserApi.Repository/LearningHub.Nhs.UserApi.Repository.csproj @@ -9,7 +9,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj index 413c32c..d3f232b 100644 --- a/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj +++ b/LearningHub.Nhs.UserApi.Services.Interface/LearningHub.Nhs.UserAPI.Services.Interface.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj index 695f6a9..561a9d5 100644 --- a/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.Services.UnitTests/LearningHub.Nhs.UserApi.Services.UnitTests.csproj @@ -13,7 +13,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj index f93538b..b70eb72 100644 --- a/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj +++ b/LearningHub.Nhs.UserApi.Services/LearningHub.Nhs.UserApi.Services.csproj @@ -9,7 +9,7 @@ - + diff --git a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj index 5811f0b..bb7513e 100644 --- a/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj +++ b/LearningHub.Nhs.UserApi.Shared/LearningHub.Nhs.UserApi.Shared.csproj @@ -9,7 +9,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj index 0855ec5..966df90 100644 --- a/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj +++ b/LearningHub.Nhs.UserApi.UnitTests/LearningHub.Nhs.UserApi.UnitTests.csproj @@ -11,7 +11,7 @@ - + diff --git a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj index 3011dd5..cfb5230 100644 --- a/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj +++ b/LearningHub.Nhs.UserApi/LearningHub.Nhs.UserApi.csproj @@ -26,7 +26,7 @@ - +