Fix GH action run (#285)

* Create dependabot.yml (#1)

* Use fake implementation on integration test

* Use fake implementation on integration test (#19)

* Update dotnet-core.yml (#14)

* Bump decode-uri-component from 0.2.0 to 0.2.2 in /wallet-spa (#23)

Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2.
- [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases)
- [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2)

---
updated-dependencies:
- dependency-name: decode-uri-component
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/setup-dotnet from 1 to 3 (#7)

Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 1 to 3.
- [Release notes](https://github.com/actions/setup-dotnet/releases)
- [Commits](https://github.com/actions/setup-dotnet/compare/v1...v3)

---
updated-dependencies:
- dependency-name: actions/setup-dotnet
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Branco Stracini <guilherme@guilhermebranco.com.br>

* Bump y18n from 4.0.0 to 4.0.3 in /wallet-spa (#4)

Bumps [y18n](https://github.com/yargs/y18n) from 4.0.0 to 4.0.3.
- [Release notes](https://github.com/yargs/y18n/releases)
- [Changelog](https://github.com/yargs/y18n/blob/y18n-v4.0.3/CHANGELOG.md)
- [Commits](https://github.com/yargs/y18n/compare/v4.0.0...y18n-v4.0.3)

---
updated-dependencies:
- dependency-name: y18n
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump axios from 0.19.2 to 0.21.2 in /wallet-spa (#2)

Bumps [axios](https://github.com/axios/axios) from 0.19.2 to 0.21.2.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v0.21.2/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v0.19.2...v0.21.2)

---
updated-dependencies:
- dependency-name: axios
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump ini from 1.3.5 to 1.3.8 in /wallet-spa (#3)

Bumps [ini](https://github.com/npm/ini) from 1.3.5 to 1.3.8.
- [Release notes](https://github.com/npm/ini/releases)
- [Changelog](https://github.com/npm/ini/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/ini/compare/v1.3.5...v1.3.8)

---
updated-dependencies:
- dependency-name: ini
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump elliptic from 6.5.3 to 6.5.4 in /wallet-spa (#5)

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump coverlet.msbuild from 3.1.0 to 3.2.0 (#11)

Bumps [coverlet.msbuild](https://github.com/coverlet-coverage/coverlet) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/coverlet-coverage/coverlet/releases)
- [Commits](https://github.com/coverlet-coverage/coverlet/compare/v3.1.0...v3.2.0)

---
updated-dependencies:
- dependency-name: coverlet.msbuild
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump xunit from 2.4.2-pre.12 to 2.4.2 (#12)

Bumps [xunit](https://github.com/xunit/xunit) from 2.4.2-pre.12 to 2.4.2.
- [Release notes](https://github.com/xunit/xunit/releases)
- [Commits](https://github.com/xunit/xunit/compare/2.4.2-pre.12...2.4.2)

---
updated-dependencies:
- dependency-name: xunit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Microsoft.Extensions.Http from 6.0.0 to 7.0.0 (#13)

Bumps [Microsoft.Extensions.Http](https://github.com/dotnet/runtime) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](https://github.com/dotnet/runtime/compare/v6.0.0...v7.0.0)

---
updated-dependencies:
- dependency-name: Microsoft.Extensions.Http
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Scrutor from 3.3.0 to 4.2.1 (#18)

Bumps [Scrutor](https://github.com/khellang/Scrutor) from 3.3.0 to 4.2.1.
- [Release notes](https://github.com/khellang/Scrutor/releases)
- [Commits](https://github.com/khellang/Scrutor/compare/v3.3.0...v4.2.1)

---
updated-dependencies:
- dependency-name: Scrutor
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Branco Stracini <guilherme@guilhermebranco.com.br>

* Bump qs from 6.5.2 to 6.5.3 in /wallet-spa (#20)

Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3.
- [Release notes](https://github.com/ljharb/qs/releases)
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3)

---
updated-dependencies:
- dependency-name: qs
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump minimist from 1.2.5 to 1.2.8 in /wallet-spa (#21)

Bumps [minimist](https://github.com/minimistjs/minimist) from 1.2.5 to 1.2.8.
- [Release notes](https://github.com/minimistjs/minimist/releases)
- [Changelog](https://github.com/minimistjs/minimist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.8)

---
updated-dependencies:
- dependency-name: minimist
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump json5 from 1.0.1 to 1.0.2 in /wallet-spa (#22)

Bumps [json5](https://github.com/json5/json5) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/json5/json5/releases)
- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)
- [Commits](https://github.com/json5/json5/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: json5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump terser from 4.8.0 to 4.8.1 in /wallet-spa (#26)

Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/compare/v4.8.0...v4.8.1)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump eventsource from 1.0.7 to 1.1.2 in /wallet-spa (#31)

Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.0.7 to 1.1.2.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.2)

---
updated-dependencies:
- dependency-name: eventsource
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump ansi-regex in /wallet-spa (#32)

Bumps [ansi-regex](https://github.com/chalk/ansi-regex), [ansi-regex](https://github.com/chalk/ansi-regex) and [ansi-regex](https://github.com/chalk/ansi-regex). These dependencies needed to be updated together.

Updates `ansi-regex` from 4.1.0 to 5.0.1
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v5.0.1)

Updates `ansi-regex` from 5.0.0 to 5.0.1
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v5.0.1)

Updates `ansi-regex` from 3.0.0 to 5.0.1
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v5.0.1)

---
updated-dependencies:
- dependency-name: ansi-regex
  dependency-type: indirect
- dependency-name: ansi-regex
  dependency-type: indirect
- dependency-name: ansi-regex
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump shell-quote and react-scripts in /wallet-spa (#30)

Bumps [shell-quote](https://github.com/ljharb/shell-quote) to 1.8.0 and updates ancestor dependency [react-scripts](https://github.com/facebook/create-react-app/tree/HEAD/packages/react-scripts). These dependencies need to be updated together.


Updates `shell-quote` from 1.7.2 to 1.8.0
- [Release notes](https://github.com/ljharb/shell-quote/releases)
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.7.2...v1.8.0)

Updates `react-scripts` from 3.4.3 to 5.0.1
- [Release notes](https://github.com/facebook/create-react-app/releases)
- [Changelog](https://github.com/facebook/create-react-app/blob/main/CHANGELOG-3.x.md)
- [Commits](https://github.com/facebook/create-react-app/commits/react-scripts@5.0.1/packages/react-scripts)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-type: indirect
- dependency-name: react-scripts
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Newtonsoft.Json from 13.0.1 to 13.0.3 (#16)

Bumps [Newtonsoft.Json](https://github.com/JamesNK/Newtonsoft.Json) from 13.0.1 to 13.0.3.
- [Release notes](https://github.com/JamesNK/Newtonsoft.Json/releases)
- [Commits](https://github.com/JamesNK/Newtonsoft.Json/compare/13.0.1...13.0.3)

---
updated-dependencies:
- dependency-name: Newtonsoft.Json
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump tar and node-sass in /wallet-spa (#36)

Bumps [tar](https://github.com/npm/node-tar) to 6.1.13 and updates ancestor dependency [node-sass](https://github.com/sass/node-sass). These dependencies need to be updated together.


Updates `tar` from 2.2.2 to 6.1.13
- [Release notes](https://github.com/npm/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/node-tar/compare/v2.2.2...v6.1.13)

Updates `node-sass` from 4.14.1 to 8.0.0
- [Release notes](https://github.com/sass/node-sass/releases)
- [Changelog](https://github.com/sass/node-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/node-sass/compare/v4.14.1...v8.0.0)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
- dependency-name: node-sass
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Branco Stracini <guilherme@guilhermebranco.com.br>

* Bump lodash from 4.17.20 to 4.17.21 in /wallet-spa (#37)

Bumps [lodash](https://github.com/lodash/lodash) from 4.17.20 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.20...4.17.21)

---
updated-dependencies:
- dependency-name: lodash
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump path-parse from 1.0.6 to 1.0.7 in /wallet-spa (#33)

Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Guilherme Branco Stracini <guilherme@guilhermebranco.com.br>

* Update to .NET 7

* Disable Nullable

* Update Nuget packages

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
Guilherme Branco Stracini 2023-03-23 12:45:18 +04:00 committed by GitHub
parent 433e68abe3
commit 1afb93bbfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
29 changed files with 13028 additions and 10071 deletions

25
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,25 @@
version: 2
updates:
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: weekly
open-pull-requests-limit: 10

View File

@ -8,8 +8,8 @@ jobs:
PersistenceModule__DefaultConnection: Server=localhost;User Id=sa;Password=<YourStrong!Passw0rd>;Database=Accounts;
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
- uses: actions/checkout@v3
- uses: actions/setup-dotnet@v3
with:
dotnet-version: '6.0.x'
include-prerelease: true

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>preview</LangVersion>
<NoWarn>$(NoWarn);CA1062;1591</NoWarn>
<Nullable>enable</Nullable>

View File

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>preview</LangVersion>
<NoWarn>$(NoWarn);CA1062;1591</NoWarn>
<Nullable>enable</Nullable>

View File

@ -57,7 +57,7 @@ public sealed class CurrencyExchangeService : ICurrencyExchange
private void ParseCurrencies(string responseJson)
{
JObject? rates = JObject.Parse(responseJson);
JObject rates = JObject.Parse(responseJson);
decimal eur = rates["rates"]![Currency.Euro.Code]!.Value<decimal>();
decimal cad = rates["rates"]![Currency.Canadian.Code]!.Value<decimal>();
decimal gbh = rates["rates"]![Currency.BritishPound.Code]!.Value<decimal>();

View File

@ -33,7 +33,7 @@ public sealed class ContextFactory : IDesignTimeDbContextFactory<MangaContext>
private static string ReadDefaultConnectionStringFromAppSettings()
{
string? envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
string envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory()))

View File

@ -62,7 +62,7 @@ public sealed class AccountRepository : IAccountRepository
/// <inheritdoc />
public async Task<IAccount> GetAccount(AccountId accountId)
{
Account? account = await this._context
Account account = await this._context
.Accounts
.Where(e => e.AccountId == accountId)
.Select(e => e)
@ -94,7 +94,7 @@ public sealed class AccountRepository : IAccountRepository
public async Task<IAccount> Find(AccountId accountId, string externalUserId)
{
Account? account = await this._context
Account account = await this._context
.Accounts
.Where(e => e.ExternalUserId == externalUserId && e.AccountId == accountId)
.Select(e => e)

View File

@ -40,7 +40,7 @@ public sealed class AccountRepositoryFake : IAccountRepository
/// <inheritdoc />
public async Task Delete(AccountId accountId)
{
Account? accountOld = this._context
Account accountOld = this._context
.Accounts
.SingleOrDefault(e => e.AccountId.Equals(accountId));
@ -59,7 +59,7 @@ public sealed class AccountRepositoryFake : IAccountRepository
public async Task<IAccount> Find(AccountId accountId, string externalUserId)
{
Account? account = this._context
Account account = this._context
.Accounts
.Where(e => e.ExternalUserId == externalUserId && e.AccountId.Equals(accountId))
.Select(e => e)
@ -77,7 +77,7 @@ public sealed class AccountRepositoryFake : IAccountRepository
/// <inheritdoc />
public async Task<IAccount> GetAccount(AccountId accountId)
{
Account? account = this._context
Account account = this._context
.Accounts
.SingleOrDefault(e => e.AccountId.Equals(accountId));
@ -105,7 +105,7 @@ public sealed class AccountRepositoryFake : IAccountRepository
/// <inheritdoc />
public async Task Update(Account account, Credit credit)
{
Account? accountOld = this._context
Account accountOld = this._context
.Accounts
.SingleOrDefault(e => e.AccountId.Equals(account.AccountId));
@ -124,7 +124,7 @@ public sealed class AccountRepositoryFake : IAccountRepository
/// <inheritdoc />
public async Task Update(Account account, Debit debit)
{
Account? accountOld = this._context
Account accountOld = this._context
.Accounts
.SingleOrDefault(e => e.AccountId.Equals(account.AccountId));

View File

@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>preview</LangVersion>
<NoWarn>$(NoWarn);CA1062;1591</NoWarn>
<Nullable>enable</Nullable>
<Nullable>disable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
@ -12,21 +12,21 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0">
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
</ItemGroup>

View File

@ -1,64 +1,64 @@
namespace WebApi.Modules.Common.FeatureFlags;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.FeatureManagement;
using Microsoft.FeatureManagement.Mvc;
namespace WebApi.Modules.Common.FeatureFlags;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.FeatureManagement;
using Microsoft.FeatureManagement.Mvc;
/// <summary>
/// Custom Controller Feature Provider.
/// </summary>
public sealed class CustomControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
{
private readonly IFeatureManager _featureManager;
public sealed class CustomControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
{
private readonly IFeatureManager _featureManager;
/// <summary>
/// Custom Controller Feature Provider constructor.
/// </summary>
public CustomControllerFeatureProvider(IFeatureManager featureManager) => this._featureManager = featureManager;
public CustomControllerFeatureProvider(IFeatureManager featureManager) => this._featureManager = featureManager;
/// <summary>
/// Populate Features.
/// </summary>
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
{
for (int i = feature.Controllers.Count - 1; i >= 0; i--)
{
Type controller = feature.Controllers[i].AsType();
foreach (CustomAttributeData customAttribute in controller.CustomAttributes)
{
if (customAttribute.AttributeType.FullName != typeof(FeatureGateAttribute).FullName)
{
continue;
}
CustomAttributeTypedArgument constructorArgument = customAttribute.ConstructorArguments.First();
if (!(constructorArgument.Value is IEnumerable arguments))
{
continue;
}
foreach (object? argumentValue in arguments)
{
CustomAttributeTypedArgument typedArgument = (CustomAttributeTypedArgument)argumentValue!;
CustomFeature typedArgumentValue = (CustomFeature)(int)typedArgument.Value!;
bool isFeatureEnabled = this._featureManager
.IsEnabledAsync(typedArgumentValue.ToString())
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
if (!isFeatureEnabled)
{
feature.Controllers.RemoveAt(i);
}
}
}
}
}
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
{
for (int i = feature.Controllers.Count - 1; i >= 0; i--)
{
Type controller = feature.Controllers[i].AsType();
foreach (CustomAttributeData customAttribute in controller.CustomAttributes)
{
if (customAttribute.AttributeType.FullName != typeof(FeatureGateAttribute).FullName)
{
continue;
}
CustomAttributeTypedArgument constructorArgument = customAttribute.ConstructorArguments.First();
if (!(constructorArgument.Value is IEnumerable arguments))
{
continue;
}
foreach (object argumentValue in arguments)
{
CustomAttributeTypedArgument typedArgument = (CustomAttributeTypedArgument)argumentValue!;
CustomFeature typedArgumentValue = (CustomFeature)(int)typedArgument.Value!;
bool isFeatureEnabled = this._featureManager
.IsEnabledAsync(typedArgumentValue.ToString())
.ConfigureAwait(false)
.GetAwaiter()
.GetResult();
if (!isFeatureEnabled)
{
feature.Controllers.RemoveAt(i);
}
}
}
}
}
}

View File

@ -1,45 +1,45 @@
namespace WebApi.Modules.Common;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace WebApi.Modules.Common;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
/// <summary>
/// </summary>
public static class LoggingExtensions
{
public static class LoggingExtensions
{
/// <summary>
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection AddInvalidRequestLogging(this IServiceCollection services)
{
services.Configure<ApiBehaviorOptions>(o =>
{
o.InvalidModelStateResponseFactory = actionContext =>
{
ILogger<Startup>? logger = actionContext
.HttpContext
.RequestServices
.GetRequiredService<ILogger<Startup>>();
List<string> errors = actionContext.ModelState
.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToList();
string jsonModelState = JsonSerializer.Serialize(errors);
logger.LogWarning("Invalid request.", jsonModelState);
ValidationProblemDetails problemDetails = new ValidationProblemDetails(actionContext.ModelState);
return new BadRequestObjectResult(problemDetails);
};
});
return services;
}
public static IServiceCollection AddInvalidRequestLogging(this IServiceCollection services)
{
services.Configure<ApiBehaviorOptions>(o =>
{
o.InvalidModelStateResponseFactory = actionContext =>
{
ILogger<Startup> logger = actionContext
.HttpContext
.RequestServices
.GetRequiredService<ILogger<Startup>>();
List<string> errors = actionContext.ModelState
.Values
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToList();
string jsonModelState = JsonSerializer.Serialize(errors);
logger.LogWarning("Invalid request.", jsonModelState);
ValidationProblemDetails problemDetails = new ValidationProblemDetails(actionContext.ModelState);
return new BadRequestObjectResult(problemDetails);
};
});
return services;
}
}

View File

@ -29,7 +29,7 @@ public sealed class AccountsController : ControllerBase, IOutputPort
private readonly Notification _notification;
private readonly ICloseAccountUseCase _useCase;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public AccountsController(ICloseAccountUseCase useCase, Notification notification)
{

View File

@ -28,7 +28,7 @@ public sealed class AccountsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public AccountsController(Notification notification) => this._notification = notification;

View File

@ -26,7 +26,7 @@ public sealed class AccountsController : ControllerBase, IOutputPort
{
private readonly IGetAccountsUseCase _useCase;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public AccountsController(IGetAccountsUseCase useCase) => this._useCase = useCase;

View File

@ -28,7 +28,7 @@ public sealed class AccountsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public AccountsController(Notification notification) => this._notification = notification;

View File

@ -30,7 +30,7 @@ public sealed class TransactionsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public TransactionsController(Notification notification) => this._notification = notification;

View File

@ -31,7 +31,7 @@ public sealed class TransactionsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public TransactionsController(Notification notification) => this._notification = notification;

View File

@ -31,7 +31,7 @@ public sealed class TransactionsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public TransactionsController(Notification notification) => this._notification = notification;

View File

@ -29,7 +29,7 @@ public sealed class AccountsController : ControllerBase, IOutputPort
{
private readonly Notification _notification;
private IActionResult? _viewModel;
private IActionResult _viewModel;
public AccountsController(Notification notification) => this._notification = notification;

View File

@ -1,10 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<LangVersion>preview</LangVersion>
<NoWarn>$(NoWarn);CA1062;1591;CA1801;S1128;S1481;S1075</NoWarn>
<Nullable>enable</Nullable>
<Nullable>disable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
@ -21,29 +21,29 @@
<ItemGroup>
<!-- Microsoft -->
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
<PackageReference Include="EPPlus" Version="6.1.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.0" />
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="2.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
<PackageReference Include="Microsoft.FeatureManagement.AspNetCore" Version="2.5.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="7.0.4" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
</ItemGroup>
<ItemGroup>
<!-- Third party -->
<PackageReference Include="prometheus-net.AspNetCore" Version="5.0.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
<PackageReference Include="EPPlus.Core" Version="1.5.4" />
<PackageReference Include="prometheus-net.AspNetCore" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<!-- Decorator injection comparison https://greatrexpectations.com/2018/10/25/decorators-in-net-core-with-dependency-injection -->
<PackageReference Include="Scrutor" Version="3.3.0" />
<PackageReference Include="Scrutor" Version="4.2.1" />
</ItemGroup>
<ItemGroup>

View File

@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<Nullable>disable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
@ -12,14 +12,14 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211109-03" />
<PackageReference Include="xunit" Version="2.4.2-pre.12" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.4" />
<PackageReference Include="coverlet.msbuild" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -63,8 +63,8 @@ public sealed class SunnyDayTests : IClassFixture<CustomWebApplicationFactory>
HttpClient client = this._factory.CreateClient();
FormUrlEncodedContent content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string?, string?>("amount", amount.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string?, string?>("currency", "USD")
new KeyValuePair<string, string>("amount", amount.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string, string>("currency", "USD")
});
HttpResponseMessage response = await client.PatchAsync($"api/v1/Transactions/{account}/Deposit", content)
@ -83,8 +83,8 @@ public sealed class SunnyDayTests : IClassFixture<CustomWebApplicationFactory>
FormUrlEncodedContent content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string?, string?>("amount", amount.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string?, string?>("currency", "USD")
new KeyValuePair<string, string>("amount", amount.ToString(CultureInfo.InvariantCulture)),
new KeyValuePair<string, string>("currency", "USD")
});
HttpResponseMessage response = await client.PatchAsync($"api/v1/Transactions/{account}/Withdraw", content)

View File

@ -1,9 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<Nullable>disable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
@ -12,14 +12,14 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211109-03" />
<PackageReference Include="xunit" Version="2.4.2-pre.12" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="6.0.0" />
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.4" />
<PackageReference Include="coverlet.msbuild" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -1,30 +1,30 @@
namespace IntegrationTests.CurrencyExchangeTests;
using System.Threading.Tasks;
using Domain.ValueObjects;
using Infrastructure.CurrencyExchange;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
namespace IntegrationTests.CurrencyExchangeTests;
using System.Threading.Tasks;
using Domain.ValueObjects;
using Infrastructure.CurrencyExchange;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
/// <summary>
/// </summary>
public sealed class ConvertEuroToDollarTests
{
[Fact]
public async Task Convert()
{
ServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient(CurrencyExchangeService.HttpClientName);
serviceCollection.AddSingleton<CurrencyExchangeService>();
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
CurrencyExchangeService sut = serviceProvider.GetRequiredService<CurrencyExchangeService>();
Money usdMoney = new Money(100, Currency.Euro);
Money actual = await sut.Convert(usdMoney, Currency.Dollar);
Assert.True(actual.Amount > 100);
Assert.Equal("USD", actual.Currency.Code);
}
public sealed class ConvertEuroToDollarTests
{
[Fact]
public async Task Convert()
{
ServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddHttpClient(CurrencyExchangeService.HttpClientName);
serviceCollection.AddSingleton<CurrencyExchangeFake>();
ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
CurrencyExchangeFake sut = serviceProvider.GetRequiredService<CurrencyExchangeFake>();
Money usdMoney = new Money(100, Currency.Euro);
Money actual = await sut.Convert(usdMoney, Currency.Dollar);
Assert.True(actual.Amount > 100);
Assert.Equal("USD", actual.Currency.Code);
}
}

View File

@ -1,32 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NeutralLanguage>en</NeutralLanguage>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211109-03" />
<PackageReference Include="xunit" Version="2.4.2-pre.12" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Application\Application.csproj" />
<ProjectReference Include="..\..\src\Infrastructure\Infrastructure.csproj" />
</ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NeutralLanguage>en</NeutralLanguage>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.4" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Application\Application.csproj" />
<ProjectReference Include="..\..\src\Infrastructure\Infrastructure.csproj" />
</ItemGroup>
</Project>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
<NullableReferenceTypes>true</NullableReferenceTypes>
@ -12,14 +12,14 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0-preview-20211109-03" />
<PackageReference Include="xunit" Version="2.4.2-pre.12" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
<PackageReference Include="coverlet.msbuild" Version="3.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net7.0</TargetFramework>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="IdentityServer4" Version="4.1.2" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="6.0.0" />
<PackageReference Include="Serilog.AspNetCore" Version="4.1.1-dev-00241" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="7.0.4" />
<PackageReference Include="Serilog.AspNetCore" Version="6.1.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -9,18 +9,18 @@
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
"@types/node": "^14.11.2",
"axios": "^0.19.0",
"axios": "^0.21.2",
"env-cmd": "^10.1.0",
"font-awesome": "^4.7.0",
"fontsource-roboto": "^3.0.3",
"jquery": "^3.4.1",
"node-sass": "^4.14.1",
"node-sass": "^8.0.0",
"oidc-client": "^1.8.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-bootstrap": "^0.25.0",
"react-router-dom": "^5.0.1",
"react-scripts": "3.4.3",
"react-scripts": "5.0.1",
"reactstrap": "^8.0.0"
},
"scripts": {