diff --git a/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj b/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj
index 6e5f1ae..c6baf26 100644
--- a/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj
+++ b/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj
@@ -30,6 +30,8 @@
+
+
diff --git a/AAIntegration.SimmonsBank.API/Configs/EnvelopeFundConfig.cs b/AAIntegration.SimmonsBank.API/Configs/EnvelopeFundConfig.cs
deleted file mode 100644
index 7fb0dd5..0000000
--- a/AAIntegration.SimmonsBank.API/Configs/EnvelopeFundConfig.cs
+++ /dev/null
@@ -1,6 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Configs;
-
-public class EnvelopeFundConfig
-{
- public int CheckIntervalInMinutes { get; set; }
-}
diff --git a/AAIntegration.SimmonsBank.API/Configs/PuppeteerConfig.cs b/AAIntegration.SimmonsBank.API/Configs/PuppeteerConfig.cs
new file mode 100644
index 0000000..5881e6a
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Configs/PuppeteerConfig.cs
@@ -0,0 +1,27 @@
+namespace AAIntegration.SimmonsBank.API.Configs;
+
+public class PuppeteerConfig
+{
+ public int KeepAliveIntervalMinutes { get; set; }
+ public int CheckForNewDataIntervalMinutes { get; set; }
+ public int TaskCheckIntervalMinutes { get; set; }
+ public string SimmonsBankBaseUrl { get; set; }
+ public int BrowserOperationTimeoutSeconds { get; set; }
+ public bool Headless { get; set; }
+}
+
+public class PuppeteerConfigConstants
+{
+ public const string KeepAliveIntervalMinutes = "KeepAliveIntervalMinutes";
+ public const string CheckForNewDataIntervalMinutes = "CheckForNewDataIntervalMinutes";
+ public const string TaskCheckIntervalMinutes = "TaskCheckIntervalMinutes";
+ public const string SimmonsBankBaseUrl = "SimmonsBankBaseUrl";
+ public const string BrowserOperationTimeoutSeconds = "BrowserOperationTimeoutSeconds";
+ public const string Headless = "Headless";
+}
+
+public class PuppeteerConstants
+{
+ public const string BROWSER_CACHE_KEY = "BrowserCacheKey";
+ public const string USER_SB_ID = "UserSimmonsBankId";
+}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Controllers/AccountController.cs b/AAIntegration.SimmonsBank.API/Controllers/AccountController.cs
index 6ec6680..edf8959 100644
--- a/AAIntegration.SimmonsBank.API/Controllers/AccountController.cs
+++ b/AAIntegration.SimmonsBank.API/Controllers/AccountController.cs
@@ -1,91 +1,66 @@
namespace AAIntegration.SimmonsBank.API.Controllers;
-using AutoMapper;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
using AAIntegration.SimmonsBank.API.Models.Accounts;
using AAIntegration.SimmonsBank.API.Services;
-using AAIntegration.SimmonsBank.API.Config;
using System.Collections.Generic;
using AAIntegration.SimmonsBank.API.Entities;
using Microsoft.AspNetCore.Authorization;
using System.Security.Claims;
+using System.Threading.Tasks;
+using AAIntegration.SimmonsBank.API.Models.Transactions;
[Authorize]
[ApiController]
[Route("[controller]")]
public class AccountsController : ControllerBase
{
- private IAccountService _accountService;
private IUserService _userService;
- private IMapper _mapper;
- private readonly AppSettings _appSettings;
private readonly ILogger _logger;
+ private IPuppeteerService _puppeteerService;
public AccountsController(
- IAccountService accountService,
IUserService userService,
- IMapper mapper,
- IOptions appSettings,
- ILogger logger)
+ ILogger logger,
+ IPuppeteerService puppeteerService)
{
- _accountService = accountService;
_userService = userService;
- _mapper = mapper;
- _appSettings = appSettings.Value;
_logger = logger;
+ _puppeteerService = puppeteerService;
}
[HttpGet]
- public IActionResult GetAll()
+ public async Task GetAllAsync()
{
- List accountDtos = new List();
-
- foreach (Account acc in _accountService.GetAll(GetCurrentUserId()))
- accountDtos.Add(_mapper.Map(acc));
-
- return Ok(accountDtos);
+ List accounts = await _puppeteerService.GetAccounts(GetCurrentUser());
+ return Ok(accounts);
}
- [HttpGet("{id}")]
- public IActionResult GetById(int id)
+ [HttpGet("{account_guid}")]
+ public async Task GetByGUIDAsync(string account_guid)
{
- Account account = _accountService.GetById(id, GetCurrentUserId());
- return Ok(_mapper.Map(account));
+ return Ok(await GetAccountAsync(account_guid));
}
- [HttpPost]
- public IActionResult Create([FromBody]AccountCreateRequest model)
+ [HttpGet("{account_guid}/transactions")]
+ public async Task GetTransactionsAsync(string account_guid, uint offset = 0, uint limit = 500)
{
- _accountService.Create(model, GetCurrentUserId());
- return Ok(new { message = "account created" });
- }
-
- [HttpPut("{id}")]
- public IActionResult Update(int id, [FromBody]AccountUpdateRequest model)
- {
- _accountService.Update(id, model, GetCurrentUserId());
- return Ok(new { message = "account updated" });
- }
-
- [HttpDelete("{id}")]
- public IActionResult Delete(int id)
- {
- _accountService.Delete(id, GetCurrentUserId());
- return Ok(new { message = "account deleted" });
+ List transactions = await _puppeteerService.GetTransactions(GetCurrentUser(), (await GetAccountAsync(account_guid)).Id, offset, limit);
+ return Ok(transactions);
}
// Helpers
- private int GetCurrentUserId()
+ private async Task GetAccountAsync(string account_guid)
+ {
+ List accounts = await _puppeteerService.GetAccounts(GetCurrentUser());
+ AccountDTO account = accounts.FirstOrDefault(a => a.Id == account_guid) ?? throw new KeyNotFoundException("Account not found");
+ return account;
+ }
+
+ private User GetCurrentUser()
{
string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
-
- if (apiKey is null)
- _logger.LogInformation($"ApiKey: is null");
-
- _logger.LogInformation($"apiKey: {apiKey}");
-
- return _userService.GetUser(apiKey).Id;
+ return _userService.GetUser(apiKey);
}
}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Controllers/TransactionController.cs b/AAIntegration.SimmonsBank.API/Controllers/TransactionController.cs
deleted file mode 100644
index b8a7383..0000000
--- a/AAIntegration.SimmonsBank.API/Controllers/TransactionController.cs
+++ /dev/null
@@ -1,109 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Controllers;
-
-using AutoMapper;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Extensions.Options;
-using AAIntegration.SimmonsBank.API.Models.Transactions;
-using AAIntegration.SimmonsBank.API.Services;
-using AAIntegration.SimmonsBank.API.Config;
-using System.Runtime.InteropServices;
-using AAIntegration.SimmonsBank.API.Entities;
-using System.Collections.Generic;
-using Microsoft.AspNetCore.Authorization;
-using System.Security.Claims;
-
-[Authorize]
-[ApiController]
-[Route("[controller]")]
-public class TransactionsController : ControllerBase
-{
- private ITransactionService _transactionService;
- private IUserService _userService;
- private IMapper _mapper;
- private readonly AppSettings _appSettings;
- private readonly ILogger _logger;
-
- public TransactionsController(
- ITransactionService transactionService,
- IUserService userService,
- IMapper mapper,
- IOptions appSettings,
- ILogger logger)
- {
- _transactionService = transactionService;
- _userService = userService;
- _mapper = mapper;
- _appSettings = appSettings.Value;
- _logger = logger;
- }
-
- [HttpGet]
- public IActionResult GetAll(int? accountId = null)
- {
- List transactionDtos = new List();
-
- foreach (Transaction tran in _transactionService.GetAll(this.GetCurrentUserId()))
- {
- if (accountId.HasValue
- && (tran.DebitAccount == null || tran.DebitAccount.Id != accountId)
- && (tran.CreditAccount == null || tran.CreditAccount.Id != accountId))
- continue;
-
- transactionDtos.Add(_mapper.Map(tran));
- }
-
- // Sort by Date
- transactionDtos.Sort((t1, t2) => t2.Date.CompareTo(t1.Date));
-
- return Ok(transactionDtos);
- }
-
- [HttpGet("{id}")]
- public IActionResult GetById(int id)
- {
- Transaction tran = _transactionService.GetById(id, this.GetCurrentUserId());
- return Ok(_mapper.Map(tran));
- }
-
- [HttpPost("BulkAdd")]
- public IActionResult BulkCreate([FromBody]List model)
- {
- List trans = _transactionService.BulkCreate(model, this.GetCurrentUserId()).ToList();
- return Ok(new { message = $"{trans.Count()} transaction(s) created." });
- }
-
- [HttpPost]
- public IActionResult Create([FromBody]TransactionCreate model)
- {
- Transaction tran = _transactionService.Create(model, this.GetCurrentUserId());
- return Ok(new { message = $"transaction '{tran.Description}' created with id '{tran.Id}'." });
- }
-
- [HttpPut("{id}")]
- public IActionResult Update(int id, [FromBody]TransactionUpdateRequest model)
- {
- _transactionService.Update(id, model, this.GetCurrentUserId());
- return Ok(new { message = $"transaction with id '{id}' updated" });
- }
-
- [HttpDelete("{id}")]
- public IActionResult Delete(int id)
- {
- _transactionService.Delete(id, this.GetCurrentUserId());
- return Ok(new { message = "transaction deleted" });
- }
-
- // Helpers
-
- private int GetCurrentUserId()
- {
- string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
-
- if (apiKey is null)
- _logger.LogInformation($"ApiKey: is null");
-
- _logger.LogInformation($"apiKey: {apiKey}");
-
- return _userService.GetUser(apiKey).Id;
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Controllers/UserController.cs b/AAIntegration.SimmonsBank.API/Controllers/UserController.cs
index 409ee33..72c80b7 100644
--- a/AAIntegration.SimmonsBank.API/Controllers/UserController.cs
+++ b/AAIntegration.SimmonsBank.API/Controllers/UserController.cs
@@ -58,13 +58,6 @@ public class UsersController : ControllerBase
private string GetCurrentUserApiKey()
{
- string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
-
- if (apiKey is null)
- _logger.LogInformation($"ApiKey: is null");
-
- _logger.LogInformation($"apiKey: {apiKey}");
-
- return apiKey;
+ return User.FindFirstValue(ClaimTypes.NameIdentifier);
}
}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Entities/Account.cs b/AAIntegration.SimmonsBank.API/Entities/Account.cs
deleted file mode 100644
index cf4bb8b..0000000
--- a/AAIntegration.SimmonsBank.API/Entities/Account.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Text.Json.Serialization;
-
-namespace AAIntegration.SimmonsBank.API.Entities;
-
-public class Account
-{
- public int Id { get; set; }
- public string Name { get; set; }
- public decimal Balance { get; set; }
- public string ExternalAccountNumber { get; set; }
- public User Owner { get; set; }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Entities/Transaction.cs b/AAIntegration.SimmonsBank.API/Entities/Transaction.cs
deleted file mode 100644
index 68f527b..0000000
--- a/AAIntegration.SimmonsBank.API/Entities/Transaction.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Collections.Generic;
-using AAIntegration.SimmonsBank.API.Services;
-
-namespace AAIntegration.SimmonsBank.API.Entities;
-
-public class Transaction
-{
- public int Id { get; set; }
- public DateTime Date { get; set; }
- public DateTime CreatedOn { get; set; }
- public DateTime UpdatedOn { get; set; }
- public string ExternalId { get; set; }
- public string Description { get; set; }
- public Account? DebitAccount { get; set; }
- public Account? CreditAccount { get; set; }
- public decimal Amount { get; set; }
- public bool IsPending { get; set; }
- public User Owner { get; set; }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Helpers/AutoMapperProfile.cs b/AAIntegration.SimmonsBank.API/Helpers/AutoMapperProfile.cs
index 39e63a4..d3e2e9e 100644
--- a/AAIntegration.SimmonsBank.API/Helpers/AutoMapperProfile.cs
+++ b/AAIntegration.SimmonsBank.API/Helpers/AutoMapperProfile.cs
@@ -3,14 +3,9 @@ namespace AAIntegration.SimmonsBank.API.Config;
using AutoMapper;
using AAIntegration.SimmonsBank.API.Entities;
using AAIntegration.SimmonsBank.API.Models.Users;
-using AAIntegration.SimmonsBank.API.Models.Accounts;
-using AAIntegration.SimmonsBank.API.Services;
-using System.Runtime.Serialization;
-using AAIntegration.SimmonsBank.API.Models.Transactions;
public class AutoMapperProfile : Profile
{
-
public AutoMapperProfile()
{ // UserUpdateRequest -> User
CreateMap()
@@ -26,55 +21,5 @@ public class AutoMapperProfile : Profile
return true;
}
));
-
- // AccountUpdateRequest -> Account
- CreateMap();
-
- // AccountCreateRequest -> Account
- CreateMap();
- /*.ForMember(
- dest => dest.OwnerId,
- opt => opt.MapFrom(src => src.Owner)
- );
- /*.ForAllMembers(x => x.Condition(
- (src, dest, prop) =>
- {
- // ignore both null & empty string properties
- if (prop == null) return false;
- if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
-
- return true;
- }
- ))*/
-
- // Account -> AccountGet
- CreateMap()
- .ForAllMembers(x => x.Condition(
- (src, dest, prop) =>
- {
- // ignore both null & empty string properties
- if (prop == null) return false;
- if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
-
- return true;
- }
- ));
-
-
- // Transaction -> TransactionDto
- CreateMap()
- .ForMember(dest => dest.DebitAccountId, opt => opt.MapFrom(src => src.DebitAccount.Id))
- .ForMember(dest => dest.CreditAccountId, opt => opt.MapFrom(src => src.CreditAccount.Id))
- .ForAllMembers(x => x.Condition(
- (src, dest, prop) =>
- {
- // ignore both null & empty string properties
- if (prop == null) return false;
- if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
-
- return true;
- }
- ));
-
}
}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Helpers/DataContext.cs b/AAIntegration.SimmonsBank.API/Helpers/DataContext.cs
index 2e4ebd1..1e82cd5 100644
--- a/AAIntegration.SimmonsBank.API/Helpers/DataContext.cs
+++ b/AAIntegration.SimmonsBank.API/Helpers/DataContext.cs
@@ -31,6 +31,4 @@ public class DataContext : DbContext
}*/
public DbSet Users { get; set; }
- public DbSet Accounts { get; set; }
- public DbSet Transactions { get; set; }
}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountCreateRequest.cs b/AAIntegration.SimmonsBank.API/Models/Accounts/AccountCreateRequest.cs
deleted file mode 100644
index 24cc71e..0000000
--- a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountCreateRequest.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Models.Accounts;
-
-using System.ComponentModel.DataAnnotations;
-using System.Runtime.InteropServices;
-using AAIntegration.SimmonsBank.API.Entities;
-
-public class AccountCreateRequest
-{
- public string Name { get; set; }
- public string InitialBalance { get; set; }
- public int Currency { get; set; }
- public string ExternalAccountNumber { get; set; }
- public int Owner { get; set; }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountDTO.cs b/AAIntegration.SimmonsBank.API/Models/Accounts/AccountDTO.cs
index 91278bb..6a6915f 100644
--- a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountDTO.cs
+++ b/AAIntegration.SimmonsBank.API/Models/Accounts/AccountDTO.cs
@@ -7,8 +7,13 @@ namespace AAIntegration.SimmonsBank.API.Models.Accounts;
public class AccountDTO
{
- public int Id { get; set; }
+ public string Id { get; set; }
public string Name { get; set; }
- public decimal Balance { get; set; }
- public string ExternalAccountNumber { get; set; }
+ public string Numbers { get; set; }
+ public decimal? Balance { get; set; }
+ public decimal? AvailableBalance { get; set; }
+ public string AccountType { get; set; }
+ public string AccountSubType { get; set; }
+ public DateTime? PaymentDueDate { get; set; }
+ public decimal? PaymentDueAmount { get; set; }
}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountUpdateRequest.cs b/AAIntegration.SimmonsBank.API/Models/Accounts/AccountUpdateRequest.cs
deleted file mode 100644
index 5a6f983..0000000
--- a/AAIntegration.SimmonsBank.API/Models/Accounts/AccountUpdateRequest.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Models.Accounts;
-
-public class AccountUpdateRequest
-{
- public string? Name { get; set; } = null;
- public string? Balance { get; set; } = null;
- public string? ExternalAccountNumber { get; set; } = null;
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionCreate.cs b/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionCreate.cs
deleted file mode 100644
index b5ceda3..0000000
--- a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionCreate.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using System.Collections.Generic;
-using System.Runtime;
-using AAIntegration.SimmonsBank.API.Services;
-
-namespace AAIntegration.SimmonsBank.API.Models.Transactions;
-
-public class TransactionCreate
-{
- public DateTime Date { get; set; }
- public string ExternalId { get; set; }
- public string Description { get; set; }
- public int? DebitAccount { get; set; }
- public int? CreditAccount { get; set; }
- public decimal Amount { get; set; }
- public bool IsPending { get; set; }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDTO.cs b/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDTO.cs
new file mode 100644
index 0000000..04031d8
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDTO.cs
@@ -0,0 +1,21 @@
+using System.Collections.Generic;
+using System.Runtime;
+using AAIntegration.SimmonsBank.API.Services;
+
+namespace AAIntegration.SimmonsBank.API.Models.Transactions;
+
+public class TransactionDTO
+{
+ public string Id { get; set; }
+ public string AccountId { get; set; }
+ public string Type { get; set; }
+ public decimal? Amount { get; set; }
+ public decimal? RunningBalance { get; set; }
+ public DateTime? DatePosted { get; set; }
+ public DateTime? Date { get; set; }
+ public DateTime? LastUpdated { get; set; }
+ public string PendingStatus { get; set; }
+ public string Memo { get; set; }
+ public string FilteredMemo { get; set; }
+ public string DisplayName { get; set; }
+}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDto.cs b/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDto.cs
deleted file mode 100644
index 3315364..0000000
--- a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionDto.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Collections.Generic;
-using System.Runtime;
-using AAIntegration.SimmonsBank.API.Services;
-
-namespace AAIntegration.SimmonsBank.API.Models.Transactions;
-
-public class TransactionDto
-{
- public int Id { get; set; }
- public DateTime Date { get; set; }
- public DateTime CreatedOn { get; set; }
- public DateTime UpdatedOn { get; set; }
- public string ExternalId { get; set; }
- public string Description { get; set; }
- public int DebitAccountId { get; set; }
- public int CreditAccountId { get; set; }
- public decimal Amount { get; set; }
- public bool IsPending { get; set; }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionUpdateRequest.cs b/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionUpdateRequest.cs
deleted file mode 100644
index c926ff5..0000000
--- a/AAIntegration.SimmonsBank.API/Models/Transactions/TransactionUpdateRequest.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System.ComponentModel.DataAnnotations;
-using AAIntegration.SimmonsBank.API.Entities;
-
-namespace AAIntegration.SimmonsBank.API.Models.Transactions;
-
-public class TransactionUpdateRequest
-{
- public DateTime? Date { get; set; } = null;
- public string? ExternalId { get; set; } = null;
- public string? Description { get; set; } = null;
- public int? DebitAccount { get; set; } = null;
- public int? CreditAccount { get; set; } = null;
- public decimal? Amount { get; set; } = null;
- public bool? IsPending { get; set; } = null;
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Processes/IPuppeteerProcess.cs b/AAIntegration.SimmonsBank.API/Processes/IPuppeteerProcess.cs
new file mode 100644
index 0000000..8e53020
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Processes/IPuppeteerProcess.cs
@@ -0,0 +1,12 @@
+using System.Threading.Tasks;
+using AAIntegration.SimmonsBank.API.Entities;
+using AAIntegration.SimmonsBank.API.Services;
+
+namespace AAIntegration.SimmonsBank.API.Processes;
+
+public interface IPuppeteerProcess
+{
+ void SetService(IPuppeteerService puppeteerService);
+ void SetStoppingToken(CancellationToken stoppingToken);
+ Task StayLoggedIn(User user);
+}
diff --git a/AAIntegration.SimmonsBank.API/Processes/PuppeteerProcess.cs b/AAIntegration.SimmonsBank.API/Processes/PuppeteerProcess.cs
new file mode 100644
index 0000000..945df93
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Processes/PuppeteerProcess.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using AAIntegration.SimmonsBank.API.Configs;
+using AAIntegration.SimmonsBank.API.Entities;
+using AAIntegration.SimmonsBank.API.Models.Transactions;
+using AAIntegration.SimmonsBank.API.Services;
+using Internal;
+using Microsoft.Extensions.Caching.Memory;
+using Microsoft.Extensions.Options;
+using PuppeteerSharp;
+using OtpNet;
+using System.Text;
+
+namespace AAIntegration.SimmonsBank.API.Processes;
+
+public class PuppeteerProcess : IPuppeteerProcess
+{
+ private readonly PuppeteerConfig _config;
+ private readonly ILogger _logger;
+ private readonly IMemoryCache _memoryCache;
+ private const string DASHBOARD_SELECTOR = "body > banno-web > bannoweb-layout > bannoweb-dashboard";
+ private CancellationToken _stoppingToken;
+ private IPuppeteerService _puppeteerService;
+
+ public PuppeteerProcess(
+ IOptions config,
+ ILogger logger,
+ IMemoryCache memoryCache)
+ {
+ _config = config.Value;
+ _logger = logger;
+ _memoryCache = memoryCache;
+ _stoppingToken = new CancellationToken();
+ }
+
+ public void SetService(IPuppeteerService puppeteerService)
+ {
+ _puppeteerService = puppeteerService;
+ }
+
+ public void SetStoppingToken(CancellationToken stoppingToken)
+ {
+ _stoppingToken = stoppingToken;
+ }
+
+ public async Task StayLoggedIn(User user)
+ {
+ string prefix = $"Task::StayLoggedIn - {user.Id} - ";
+
+ if (!await _puppeteerService.IsLoggedIn(user, _stoppingToken))
+ {
+ _logger.LogInformation(prefix + "User is not logged in");
+ await _puppeteerService.Login(user, _stoppingToken);
+ }
+ else
+ {
+ _logger.LogInformation(prefix + "User is still logged in");
+ }
+ }
+
+ // Helper Functions
+
+ private async Task Delay(int milliseconds)
+ {
+ await Task.Delay(TimeSpan.FromMilliseconds(milliseconds), _stoppingToken);
+ }
+}
diff --git a/AAIntegration.SimmonsBank.API/Program.cs b/AAIntegration.SimmonsBank.API/Program.cs
index 9b4d164..21a435d 100644
--- a/AAIntegration.SimmonsBank.API/Program.cs
+++ b/AAIntegration.SimmonsBank.API/Program.cs
@@ -11,6 +11,8 @@ using Microsoft.IdentityModel.Tokens;
using System.Text;
//using Microsoft.Build.Framework;
using Microsoft.AspNetCore.Authorization;
+using AAIntegration.SimmonsBank.API.Processes;
+using AAIntegration.SimmonsBank.API.Workers;
internal class Program
{
@@ -68,7 +70,7 @@ internal class Program
// Configure strongly typed settings object
builder.Services.Configure(builder.Configuration.GetSection("AppSettings"));
- builder.Services.Configure(builder.Configuration.GetSection("EnvelopeFund"));
+ builder.Services.Configure(builder.Configuration.GetSection("Puppeteer"));
builder.Services.Configure(builder.Configuration.GetSection("ActiveAllocator:Database"));
DatabaseConfig dbConfig = builder.Configuration.GetSection("ActiveAllocator:Database").Get();
@@ -78,13 +80,16 @@ internal class Program
opt.UseNpgsql(dbConfig.GetConnectionString()));
builder.Services.AddScoped();
- builder.Services.AddScoped();
- builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
+ builder.Services.AddScoped();
builder.Services.AddScoped();
+ builder.Services.AddSingleton();
+
+ builder.Services.AddHostedService();
+
var app = builder.Build();
// Apply Database Migrations - This is NOT recommended for multi-node deployment!!!
diff --git a/AAIntegration.SimmonsBank.API/Services/AccountService.cs b/AAIntegration.SimmonsBank.API/Services/AccountService.cs
deleted file mode 100644
index 8cd6497..0000000
--- a/AAIntegration.SimmonsBank.API/Services/AccountService.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Services;
-
-using AutoMapper;
-using BCrypt.Net;
-using AAIntegration.SimmonsBank.API.Entities;
-using AAIntegration.SimmonsBank.API.Config;
-using AAIntegration.SimmonsBank.API.Models.Accounts;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System;
-using Internal;
-using Microsoft.EntityFrameworkCore;
-
-public interface IAccountService
-{
- IEnumerable GetAll(int ownerId);
- Account GetById(int accountId, int ownerId);
- void Create(AccountCreateRequest model, int ownerId);
- void Update(int accountId, AccountUpdateRequest model, int ownerId);
- void Delete(int accountId, int ownerId);
-}
-
-public class AccountService : IAccountService
-{
- private DataContext _context;
- private readonly IMapper _mapper;
- private IUserService _userService;
-
- public AccountService(
- DataContext context,
- IMapper mapper,
- IUserService userService)
- {
- _context = context;
- _mapper = mapper;
- _userService = userService;
- }
-
- public IEnumerable GetAll(int ownerId)
- {
- return _context.Accounts
- .Include(x => x.Owner)
- .Where(x => x.Owner.Id == ownerId);
- }
-
- public Account GetById(int accountId, int ownerId)
- {
- return getAccount(accountId, ownerId);
- }
-
- public void Create(AccountCreateRequest model, int ownerId)
- {
- // Check that account with same name or same external number doesn't exist
- IEnumerable accountsWithSameName = _context.Accounts
- .Include(x => x.Owner)
- .Where(x => x.Name.ToUpper() == model.Name.ToUpper() && x.Owner.Id == ownerId);
-
- if (accountsWithSameName.Count() > 0)
- throw new AppException("Account with name '" + model.Name + "' already exists");
-
- if (!string.IsNullOrWhiteSpace(model.ExternalAccountNumber))
- {
- IEnumerable matches = _context.Accounts
- .Include(x => x.Owner)
- .Where(x => x.ExternalAccountNumber == model.ExternalAccountNumber && x.Owner.Id == ownerId);
-
- if (matches.Count() > 0)
- throw new AppException("Account with external account number '" + model.ExternalAccountNumber + "' already exists under account named '" + matches.First().Name + "'");
- }
-
- Account account = new Account {
- Name = model.Name,
- Balance = Convert.ToDecimal(model.InitialBalance),
- ExternalAccountNumber = model.ExternalAccountNumber,
- Owner = getOwner(ownerId)
- };
-
- _context.Accounts.Add(account);
- _context.SaveChanges();
- }
-
- public void Update(int accountId, AccountUpdateRequest model, int ownerId)
- {
- Account account = getAccount(accountId, ownerId);
-
- // validate
- if (model.Name != account.Name && _context.Accounts
- .Include(x => x.Owner)
- .Any(x => x.Name == model.Name && x.Owner.Id == ownerId))
- throw new AppException("Account with the name '" + model.Name + "' already exists");
-
- // Name
- if (!string.IsNullOrWhiteSpace(model.Name))
- account.Name = model.Name;
-
- // External Account Number
- if (!string.IsNullOrWhiteSpace(model.ExternalAccountNumber))
- account.ExternalAccountNumber = model.ExternalAccountNumber;
-
- _context.Accounts.Update(account);
- _context.SaveChanges();
- }
-
- public void Delete(int accountId, int ownerId)
- {
- var account = getAccount(accountId, ownerId);
- _context.Accounts.Remove(account);
- _context.SaveChanges();
- }
-
- // helper methods
-
- private Account getAccount(int id, int ownerId)
- {
- var account = _context.Accounts
- .Include(x => x.Owner)
- .FirstOrDefault(x => x.Id == id && x.Owner.Id == ownerId);
- if (account == null) throw new KeyNotFoundException("Account not found");
- return account;
- }
-
- private User getOwner(int ownerId)
- {
- User? owner = _context.Users.Find(ownerId);
-
- if (owner == null)
- throw new AppException($"Owner with ID of '{ownerId}' could not be found");
-
- return owner;
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Services/CacheService.cs b/AAIntegration.SimmonsBank.API/Services/CacheService.cs
index 7c05a37..fa5f7c7 100644
--- a/AAIntegration.SimmonsBank.API/Services/CacheService.cs
+++ b/AAIntegration.SimmonsBank.API/Services/CacheService.cs
@@ -1,22 +1,29 @@
namespace AAIntegration.SimmonsBank.API.Services;
+using AAIntegration.SimmonsBank.API.Config;
+using AAIntegration.SimmonsBank.API.Entities;
using Microsoft.Extensions.Caching.Memory;
public interface ICacheService
{
int GetClientIdFromApiKey(string apiKey);
+ T GetCachedUserValue(User user, string cacheKey, T fallback);
+ void SetCachedUserValue(User user, string cacheKey, T value);
}
public class CacheService : ICacheService
{
+ private DataContext _context;
private readonly IMemoryCache _memoryCache;
- private readonly IUserService _userService;
private readonly ILogger _logger;
- public CacheService(IMemoryCache memoryCache, IUserService userService, ILogger logger)
+ public CacheService(
+ DataContext context,
+ IMemoryCache memoryCache,
+ ILogger logger)
{
+ _context = context;
_memoryCache = memoryCache;
- _userService = userService;
_logger = logger;
}
@@ -26,7 +33,9 @@ public class CacheService : ICacheService
{
_logger.LogInformation($"Could not find API key '{apiKey}' in cache.");
- internalKeys = _userService.GetAllApiKeys();
+ internalKeys = _context.Users
+ .Where(u => u.ApiKey != null)
+ .ToDictionary(u => u.ApiKey, u => u.Id);
_logger.LogInformation("Updated cache with new key list.");
PrintInternalKeys(internalKeys);
@@ -42,6 +51,36 @@ public class CacheService : ICacheService
return clientId;
}
+
+ public T GetCachedUserValue(User user, string cacheKey, T fallback)
+ {
+ if (_memoryCache.TryGetValue>(cacheKey, out var internalKeys))
+ {
+ internalKeys ??= new Dictionary();
+ List> list = internalKeys.Where(x => x.Key == user.Id).ToList();
+
+ if (list.Count > 0 && list.First().Value != null)
+ {
+ _logger.LogInformation($"Found the '{typeof(T)}' type cached for user with id '{user.Id}' in cache '{cacheKey}'.");
+ return list.First().Value;
+ }
+ }
+
+ return fallback;
+ }
+
+ public void SetCachedUserValue(User user, string cacheKey, T value)
+ {
+ _memoryCache.TryGetValue>(cacheKey, out var internalKeys);
+ internalKeys ??= new Dictionary();
+
+ if (internalKeys.ContainsKey(user.Id))
+ internalKeys[user.Id] = value;
+ else
+ internalKeys.Add(user.Id, value);
+
+ _memoryCache.Set(cacheKey, internalKeys);
+ }
// helpers
diff --git a/AAIntegration.SimmonsBank.API/Services/PuppeteerService.cs b/AAIntegration.SimmonsBank.API/Services/PuppeteerService.cs
new file mode 100644
index 0000000..70a74ba
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Services/PuppeteerService.cs
@@ -0,0 +1,344 @@
+namespace AAIntegration.SimmonsBank.API.Services;
+
+using AutoMapper;
+using BCrypt.Net;
+using AAIntegration.SimmonsBank.API.Entities;
+using AAIntegration.SimmonsBank.API.Config;
+using AAIntegration.SimmonsBank.API.Models.Users;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using Microsoft.EntityFrameworkCore.Internal;
+using Microsoft.IdentityModel.Tokens;
+using System.Text;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+using Microsoft.Extensions.Options;
+using System.Security.Cryptography;
+using PuppeteerSharp;
+using AAIntegration.SimmonsBank.API.Configs;
+using Microsoft.Extensions.Caching.Memory;
+using OtpNet;
+using Newtonsoft.Json.Linq;
+using NuGet.Protocol;
+using Microsoft.Extensions.Logging;
+using NuGet.Protocol.Core.Types;
+using AAIntegration.SimmonsBank.API.Models.Accounts;
+using AAIntegration.SimmonsBank.API.Models.Transactions;
+
+public interface IPuppeteerService
+{
+ Task Login(User user, CancellationToken cancellationToken);
+ Task IsLoggedIn(User user, CancellationToken cancellationToken);
+ Task> GetAccounts(User user);
+ Task> GetTransactions(User user, string accountGuid, uint offset = 0, uint limit = 500);
+}
+
+public class PuppeteerService : IPuppeteerService
+{
+ private const string API_BASE_PATH = "/a/consumer/api/v0";
+ private const string DASHBOARD_SELECTOR = "body > banno-web > bannoweb-layout > bannoweb-dashboard";
+ private const string USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
+ private readonly PuppeteerConfig _config;
+ private readonly ILogger _logger;
+ private readonly IMemoryCache _memoryCache;
+ private DataContext _context;
+ private readonly IMapper _mapper;
+ private readonly IOptions _appSettings;
+ private readonly ICacheService _cacheService;
+
+ public PuppeteerService(
+ IOptions config,
+ ILogger logger,
+ IMemoryCache memoryCache,
+ DataContext context,
+ IMapper mapper,
+ IOptions appSettings,
+ ICacheService cacheService)
+ {
+ _config = config.Value;
+ _logger = logger;
+ _memoryCache = memoryCache;
+ _context = context;
+ _mapper = mapper;
+ _appSettings = appSettings;
+ _cacheService = cacheService;
+ }
+
+ public async Task Login(User user, CancellationToken cancellationToken)
+ {
+ string prefix = $"Task::Login - {user.Id} - ";
+ TimeSpan timeout = TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds);
+
+ // Setup Page
+ IBrowser browser = await GetUserBrowserAsync(user, cancellationToken);
+ await using IPage page = await browser.NewPageAsync();
+ await page.SetUserAgentAsync(USER_AGENT);
+ await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
+ WaitUntilNavigation[] waitUntils = { WaitUntilNavigation.Networkidle0 };
+
+ // Navigate to login screen
+ await page.GoToAsync(_config.SimmonsBankBaseUrl + "/login");
+
+ try
+ {
+ // Type username
+ string selector = "#username";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ await page.TypeAsync(selector, user.SimmonsBankUsername);
+
+ // Press 1st Submit Button
+ selector = "jha-button";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ await page.ClickAsync(selector);
+
+ // Type password
+ selector = "#password";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ await page.TypeAsync(selector, user.SimmonsBankPassword);
+
+ // Click SignIn button - In Chrome -> JS Path worked well
+ selector = "#login-password-form > bannoweb-flex-wrapper:nth-child(5) > div > jha-button";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ IElementHandle signInButton = await page.QuerySelectorAsync(selector);
+
+ if (signInButton != null)
+ {
+ await signInButton.ClickAsync();
+ }
+ else
+ {
+ _logger.LogError(prefix + "Failed to find Sign-In button");
+ return false;
+ }
+
+ await page.WaitForNetworkIdleAsync();
+
+ // Find TOTP input
+ selector = "body > banno-web > bannoweb-login > bannoweb-login-steps > bannoweb-two-factor-verify > jha-slider > jha-slider-content > jha-slider-pane:nth-child(4) > bannoweb-two-factor-enter-code > article > form > jha-form-floating-group > input[type=text]";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ //await Delay(150);
+
+ // Generate TOTP code
+ Totp totpInstance = new Totp(Base32Encoding.ToBytes(user.MFAKey));
+ string totpCode = totpInstance.ComputeTotp();
+
+ // Type TOTP code
+ IElementHandle totpInput = await page.QuerySelectorAsync(selector);
+ await totpInput.TypeAsync(totpCode);
+
+ // Setup response handling
+ page.Response += LoginResponseHandler;
+ async void LoginResponseHandler(object sender, ResponseCreatedEventArgs args)
+ {
+ //IPage page = sender as IPage;
+ page.Response -= LoginResponseHandler;
+
+ JToken json = await args.Response.JsonAsync();
+ string userId = json["id"].Value();
+ _cacheService.SetCachedUserValue(user, PuppeteerConstants.USER_SB_ID, userId);
+ }
+
+ // Click Verify Button
+ selector = "body > banno-web > bannoweb-login > bannoweb-login-steps > bannoweb-two-factor-verify > jha-slider > jha-slider-content > jha-slider-pane:nth-child(4) > bannoweb-two-factor-enter-code > article > form > jha-button";
+ await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
+ IElementHandle verifyButton = await page.QuerySelectorAsync(selector);
+ if (verifyButton != null)
+ {
+ await verifyButton.ClickAsync();
+ }
+ else
+ {
+ _logger.LogError(prefix + "Failed to find Verify button");
+ return false;
+ }
+
+ try
+ {
+ await page.WaitForSelectorAsync(DASHBOARD_SELECTOR).WaitAsync(timeout, cancellationToken);
+ }
+ catch(TimeoutException)
+ {
+ _logger.LogWarning(prefix + $"Dashboard isn't loading after login");
+ return false;
+ }
+
+ _logger.LogInformation(prefix + $"Login success");
+ return true;
+
+ }
+ catch (TaskCanceledException)
+ {
+ _logger.LogError(prefix + $"Login Task was canceled");
+ }
+ catch (TimeoutException ex)
+ {
+ //_logger.LogWarning($"Login Task timed out for user '{user.Id}' after {timeout} seconds");
+ _logger.LogError(0, ex, prefix + $"Login Task timed out after {timeout} seconds");
+ return false;
+ }
+ finally
+ {
+ await page.CloseAsync();
+ }
+
+ return false;
+ }
+
+ public async Task IsLoggedIn(User user, CancellationToken cancellationToken)
+ {
+ string prefix = $"Task::IsLoggedIn - {user.Id} - ";
+
+ // Get User ID
+ string userSbId = _cacheService.GetCachedUserValue(user, PuppeteerConstants.USER_SB_ID, "");
+ if (string.IsNullOrWhiteSpace(userSbId))
+ {
+ //_logger.LogInformation(prefix + $"User SimmonsBank ID not found. User is not logged in.");
+ return false;
+ }
+
+ // Setup Page
+ IBrowser browser = await GetUserBrowserAsync(user, cancellationToken);
+ await using IPage page = await browser.NewPageAsync();
+ await page.SetUserAgentAsync(USER_AGENT);
+ await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
+
+ // Fetch accounts
+ string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + "/users/" + userSbId + "/accounts";
+
+ try
+ {
+ IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds), cancellationToken);
+ //_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
+ return response.Status == System.Net.HttpStatusCode.OK;
+ }
+ catch(TaskCanceledException)
+ {
+ _logger.LogError(prefix + $"Task was canceled");
+ }
+ catch(TimeoutException)
+ {
+ _logger.LogError(prefix + $"Request to '{url}' timed out");
+ }
+
+ return false;
+ }
+
+ public async Task> GetAccounts(User user)
+ {
+ string prefix = $"Task::GetAccounts - {user.Id} - ";
+
+ // Get User ID
+ string userSbId = _cacheService.GetCachedUserValue(user, PuppeteerConstants.USER_SB_ID, "");
+ if (string.IsNullOrWhiteSpace(userSbId))
+ {
+ _logger.LogWarning(prefix + $"User SimmonsBank ID not found. User is not logged in.");
+ return null;
+ }
+
+ // Setup Page
+ IBrowser browser = await GetUserBrowserAsync(user, new CancellationToken());
+ await using IPage page = await browser.NewPageAsync();
+ await page.SetUserAgentAsync(USER_AGENT);
+ await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
+
+ // Fetch accounts
+ string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + "/users/" + userSbId + "/accounts";
+
+ try
+ {
+ IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds));
+ //_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
+
+ if (response.Status == System.Net.HttpStatusCode.OK)
+ {
+ JToken accounts = await response.JsonAsync();
+ return accounts.SelectToken("accounts").ToObject>();
+ }
+ else
+ _logger.LogError(prefix + $"Received unexpected status code '{response.Status}'");
+ }
+ catch(TaskCanceledException)
+ {
+ _logger.LogError(prefix + $"Task was canceled");
+ }
+ catch(TimeoutException)
+ {
+ _logger.LogError(prefix + $"Request to '{url}' timed out");
+ }
+
+ return null;
+ }
+
+ public async Task> GetTransactions(User user, string accountGuid, uint offset = 0, uint limit = 500)
+ {
+ string prefix = $"Task::GetTransactions - {user.Id} - ";
+
+ // Get User ID
+ string userSbId = _cacheService.GetCachedUserValue(user, PuppeteerConstants.USER_SB_ID, "");
+ if (string.IsNullOrWhiteSpace(userSbId))
+ {
+ _logger.LogWarning(prefix + $"User SimmonsBank ID not found. User is not logged in.");
+ return null;
+ }
+
+ // Setup Page
+ IBrowser browser = await GetUserBrowserAsync(user, new CancellationToken());
+ await using IPage page = await browser.NewPageAsync();
+ await page.SetUserAgentAsync(USER_AGENT);
+ await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
+
+ // Fetch transactions
+ string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + $"/users/{userSbId}/accounts/{accountGuid}/transactions?offset={offset}&limit={limit}";
+
+ try
+ {
+ IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds));
+ //_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
+
+ if (response.Status == System.Net.HttpStatusCode.OK)
+ {
+ JToken transactions = await response.JsonAsync();
+ return transactions.SelectToken("transactions").ToObject>();
+ }
+ else
+ _logger.LogError(prefix + $"Received unexpected status code '{response.Status}'");
+ }
+ catch(TaskCanceledException)
+ {
+ _logger.LogError(prefix + $"Task was canceled");
+ }
+ catch(TimeoutException)
+ {
+ _logger.LogError(prefix + $"Request to '{url}' timed out");
+ }
+
+ return null;
+ }
+
+ // Helper / Private Functions
+
+ private async Task GetUserBrowserAsync(User user, CancellationToken cancellationToken)
+ {
+ IBrowser cachedBrowser = _cacheService.GetCachedUserValue(user, PuppeteerConstants.BROWSER_CACHE_KEY, null);
+
+ if (cachedBrowser != null)
+ return cachedBrowser;
+
+ //_logger.LogInformation($"Could NOT find the browser for user with id '{user.Id}'. About to create one...");
+
+ using var browserFetcher = new BrowserFetcher();
+ await browserFetcher.DownloadAsync().WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds * 20), cancellationToken);
+
+ var options = new LaunchOptions {
+ Headless = _config.Headless,
+ IgnoreHTTPSErrors = true,
+ };
+
+ IBrowser browser = await Puppeteer.LaunchAsync(options).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds), cancellationToken);
+
+ _cacheService.SetCachedUserValue(user, PuppeteerConstants.BROWSER_CACHE_KEY, browser);
+
+ return browser;
+ }
+}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Services/TransactionService.cs b/AAIntegration.SimmonsBank.API/Services/TransactionService.cs
deleted file mode 100644
index e4a0f13..0000000
--- a/AAIntegration.SimmonsBank.API/Services/TransactionService.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-namespace AAIntegration.SimmonsBank.API.Services;
-
-using AutoMapper;
-using BCrypt.Net;
-using AAIntegration.SimmonsBank.API.Entities;
-using AAIntegration.SimmonsBank.API.Config;
-using AAIntegration.SimmonsBank.API.Models.Transactions;
-using System.Collections;
-using System.Collections.Generic;
-using System.Linq;
-using System;
-using Microsoft.EntityFrameworkCore;
-using Internal;
-using System.Collections.Immutable;
-
-public interface ITransactionService
-{
- IEnumerable GetAll(int ownerId);
- Transaction GetById(int id, int ownerId);
- IEnumerable BulkCreate(List model, int ownerId);
- Transaction Create(TransactionCreate model, int ownerId, bool errorOnFail = true);
- void Update(int id, TransactionUpdateRequest model, int ownerId);
- void Delete(int id, int ownerId);
-}
-
-public class TransactionService : ITransactionService
-{
- private DataContext _context;
- private readonly IMapper _mapper;
- private readonly ILogger _logger;
-
- public TransactionService(
- DataContext context,
- IMapper mapper,
- ILogger logger)
- {
- _context = context;
- _mapper = mapper;
- _logger = logger;
- }
-
- public IEnumerable GetAll(int ownerId)
- {
- return _context.Transactions
- .Include(t => t.DebitAccount)
- .Include(t => t.CreditAccount)
- .Include(t => t.Owner)
- .Where(x => x.Owner.Id == ownerId);
- }
-
- public Transaction GetById(int id, int ownerId)
- {
- return getTransaction(id, ownerId);
- }
-
- private Account prepareAccount(int? accountId)
- {
- if (accountId == null || accountId.Value == 0)
- {
- return null;
- }
-
- Account account = _context.Accounts.Find(accountId.Value);
- if (account == null)
- throw new AppException("Could not find account with ID of '" + accountId.Value + "'.");
-
- return account;
- }
-
- public IEnumerable BulkCreate(List model, int ownerId)
- {
- List transactions = new List();
-
- foreach (TransactionCreate tr in model)
- {
- var tran = this.Create(tr, ownerId, false);
- if (tran != null)
- transactions.Add(tran);
- }
-
- return transactions;
- }
-
- public Transaction Create(TransactionCreate model, int ownerId, bool errorOnFail = true)
- {
- Transaction transaction = new Transaction {
- Description = model.Description,
- Date = model.Date.Date.ToUniversalTime(),
- CreatedOn = DateTime.UtcNow,
- UpdatedOn = DateTime.UtcNow,
- ExternalId = string.IsNullOrWhiteSpace(model.ExternalId) ? "" : model.ExternalId,
- DebitAccount = prepareAccount(model.DebitAccount),
- CreditAccount = prepareAccount(model.CreditAccount),
- Amount = Convert.ToDecimal(model.Amount),
- Owner = this.getOwner(ownerId),
- IsPending = model.IsPending
- };
-
- if (this.ValidateTransaction(transaction, ownerId, errorOnFail) == false)
- {
- _logger.LogInformation($"Aborted adding transaction '{transaction.Description}'.");
- return null;
- }
-
- // At this point transaction itself is valid
-
- _context.Transactions.Add(transaction);
- _context.SaveChanges();
-
- _logger.LogInformation("New transaction successfully created.");
-
- return transaction;
- }
-
- public void Update(int id, TransactionUpdateRequest model, int ownerId)
- {
- Transaction transaction = getTransaction(id, ownerId);
-
- // Transaction.Date
- if (model.Date.HasValue)
- transaction.Date = model.Date.Value;
-
- // Transaction.ExternalId
- if (model.ExternalId != null)
- transaction.ExternalId = model.ExternalId;
-
- // Transaction.Description
- if (model.Description != null)
- transaction.Description = model.Description;
-
- // Transaction.DebitAccount
- if (model.DebitAccount.HasValue)
- transaction.DebitAccount = prepareAccount(model.DebitAccount);
-
- // Transaction.CreditAccount
- if (model.CreditAccount.HasValue)
- transaction.CreditAccount = prepareAccount(model.CreditAccount.Value);
-
- // Transaction.Amount
- if (model.Amount.HasValue)
- transaction.Amount = model.Amount.Value;
-
- // Transaction.IsPending
- if (model.IsPending.HasValue)
- transaction.IsPending = model.IsPending.Value;
-
- this.ValidateTransaction(transaction, ownerId);
-
- transaction.UpdatedOn = DateTime.UtcNow;
-
- _context.Transactions.Update(transaction);
- _context.SaveChanges();
-
- _logger.LogInformation($"Transaction '{id}' successfully updated.");
- }
-
- public void Delete(int id, int ownerId)
- {
- var transaction = getTransaction(id, ownerId);
- _context.Transactions.Remove(transaction);
- _context.SaveChanges();
- }
-
- // helpers
-
- private bool ErrorOrFalse(bool error, string errorMessage)
- {
- if (error)
- throw new AppException(errorMessage);
-
- _logger.LogWarning(errorMessage);
- return false;
- }
-
- private bool ValidateTransaction(Transaction transaction, int ownerId, bool errorOnFail = true)
- {
- // There has to be at least 1 specified account
- if (transaction.DebitAccount == null && transaction.CreditAccount == null)
- return ErrorOrFalse(errorOnFail, "There must be an envelope or account chosen for a transaction.");
-
- // Accounts cannot be the same
- if (transaction.DebitAccount != null && transaction.CreditAccount != null &&
- transaction.DebitAccount.Id == transaction.CreditAccount.Id)
- return ErrorOrFalse(errorOnFail, "The debit and credit accounts of a transaction cannot be the same.");
-
- // Transaction Duplication Check - External ID
- if (!string.IsNullOrWhiteSpace(transaction.ExternalId)
- && _context.Transactions
- .Include(x => x.Owner)
- .Any(x => x.ExternalId == transaction.ExternalId && x.Owner.Id == ownerId))
- return ErrorOrFalse(errorOnFail, "Transaction with the external ID '" + transaction.ExternalId + "' already exists");
-
- // Transaction Duplication Check - All other fields
- /*if (_context.Transactions.Any(x =>
- x.Description == transaction.Description
- && x.Date == transaction.Date
- && x.DebitAccount == transaction.DebitAccount
- && x.CreditAccount == transaction.CreditAccount
- && x.Amount == transaction.Amount))
- {
- return ErrorOrFalse(errorOnFail, "Transaction with the same fields already exists");
- }*/
-
- return true;
- }
-
- private Transaction getTransaction(int id, int ownerId)
- {
- var transaction = _context.Transactions
- .Include(t => t.DebitAccount)
- .Include(t => t.CreditAccount)
- .Include(t => t.Owner)
- .FirstOrDefault(t => t.Id == id && t.Owner.Id == ownerId);
-
- if (transaction == null)
- throw new KeyNotFoundException("Transaction not found");
-
- return transaction;
- }
-
- private User getOwner(int ownerId)
- {
- User? owner = _context.Users.Find(ownerId);
-
- if (owner == null)
- throw new AppException($"Owner with ID of '{ownerId}' could not be found");
-
- return owner;
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/Services/UserService.cs b/AAIntegration.SimmonsBank.API/Services/UserService.cs
index 16d0774..51ea72c 100644
--- a/AAIntegration.SimmonsBank.API/Services/UserService.cs
+++ b/AAIntegration.SimmonsBank.API/Services/UserService.cs
@@ -1,58 +1,30 @@
namespace AAIntegration.SimmonsBank.API.Services;
-using AutoMapper;
-using BCrypt.Net;
using AAIntegration.SimmonsBank.API.Entities;
using AAIntegration.SimmonsBank.API.Config;
using AAIntegration.SimmonsBank.API.Models.Users;
using System;
-using System.Collections;
using System.Collections.Generic;
-using Microsoft.EntityFrameworkCore.Internal;
-using Microsoft.IdentityModel.Tokens;
-using System.Text;
-using System.IdentityModel.Tokens.Jwt;
-using System.Security.Claims;
-using Microsoft.Extensions.Options;
using System.Security.Cryptography;
public interface IUserService
{
- // New Based way
string Create(UserCreateRequest model);
void Update(string apiKey, UserUpdateRequest model);
void Delete(string apiKey);
Dictionary GetAllApiKeys();
User GetUser(string ApiKey);
-
- /* Other cringe way
- AuthenticateResponse Authenticate(AuthenticateRequest model);
- void Register(RegisterRequest model);
IEnumerable GetAll();
- User GetById(int id);
- void Update(int id, UserUpdateRequest model);
- void Delete(int id);
- Dictionary GetAllApiKeys();
- string GetUserApiKey(int id);
- void InvalidateApiKey(string apiKey);
- string CreateUserApiKey(int id);
- */
}
public class UserService : IUserService
{
private DataContext _context;
- private readonly IMapper _mapper;
- private readonly IOptions _appSettings;
public UserService(
- DataContext context,
- IMapper mapper,
- IOptions appSettings)
+ DataContext context)
{
_context = context;
- _mapper = mapper;
- _appSettings = appSettings;
}
public string Create(UserCreateRequest model)
@@ -116,6 +88,11 @@ public class UserService : IUserService
return user;
}
+ public IEnumerable GetAll()
+ {
+ return _context.Users;
+ }
+
// helper methods
private User getUser(int id)
@@ -124,7 +101,7 @@ public class UserService : IUserService
return user;
}
- private const string _prefix = "CT-";
+ private const string _prefix = "SB-";
private const int _numberOfSecureBytesToGenerate = 32;
private const int _lengthOfKey = 32;
diff --git a/AAIntegration.SimmonsBank.API/Workers/PuppeteerWorker.cs b/AAIntegration.SimmonsBank.API/Workers/PuppeteerWorker.cs
new file mode 100644
index 0000000..561c543
--- /dev/null
+++ b/AAIntegration.SimmonsBank.API/Workers/PuppeteerWorker.cs
@@ -0,0 +1,143 @@
+using System;
+using AAIntegration.SimmonsBank.API.Configs;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Options;
+using AAIntegration.SimmonsBank.API.Processes;
+using AAIntegration.SimmonsBank.API.Services;
+using AAIntegration.SimmonsBank.API.Entities;
+using Microsoft.Extensions.Caching.Memory;
+
+namespace AAIntegration.SimmonsBank.API.Workers;
+
+public class PuppeteerWorker : BackgroundService
+{
+ private readonly PuppeteerConfig _config;
+ private readonly IPuppeteerProcess _puppeteerProcess;
+ private readonly ILogger _logger;
+ private readonly IMemoryCache _memoryCache;
+ private readonly IServiceScopeFactory _serviceScopeFactory;
+
+ public PuppeteerWorker(
+ IOptions config,
+ IPuppeteerProcess puppeteerProcess,
+ ILogger logger,
+ IMemoryCache memoryCache,
+ IServiceScopeFactory serviceScopeFactory)
+ {
+ _config = config.Value;
+ _puppeteerProcess = puppeteerProcess;
+ _logger = logger;
+ _memoryCache = memoryCache;
+ _serviceScopeFactory = serviceScopeFactory;
+ }
+
+ private IUserService _userService;
+ private IPuppeteerService _puppeteerService;
+
+ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
+ {
+ DateTime? lastExecutedOn = null;
+ bool operationOccurred = false;
+
+ using (var scope = _serviceScopeFactory.CreateScope())
+ {
+ _userService = scope.ServiceProvider.GetService();
+ _puppeteerService = scope.ServiceProvider.GetService();
+ _puppeteerProcess.SetStoppingToken(stoppingToken);
+ _puppeteerProcess.SetService(_puppeteerService);
+
+ // This is how we keep the app running (in the background)
+ while (!stoppingToken.IsCancellationRequested)
+ {
+ // Keep Alive processing
+ operationOccurred = await ProcessUsersKeepalive();
+
+
+ _logger.LogInformation($"Operation occurred? {operationOccurred}");
+
+ // If no operation occurred, waits before looping again
+ if (lastExecutedOn != null && operationOccurred == false)
+ {
+ await Task.Delay(TimeSpan.FromMinutes(_config.TaskCheckIntervalMinutes), stoppingToken);
+ }
+
+ lastExecutedOn = DateTime.UtcNow;
+ _logger.LogInformation("PuppeteerWorker executed at: {time}", DateTimeOffset.Now);
+ }
+ }
+ }
+
+ private async Task ProcessUsersKeepalive()
+ {
+ bool operationOccurred = false;
+
+ foreach (User user in _userService.GetAll().ToList())
+ {
+ int ka = _config.KeepAliveIntervalMinutes;
+ int uka = (int)DateTime.UtcNow.Subtract(GetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id)).TotalMinutes;
+
+ //_logger.LogInformation($"KeepAlive configured to {ka}. This user hasn't been kept alive in {uka} minute(s).");
+
+ if (_config.KeepAliveIntervalMinutes <= (int)DateTime.UtcNow.Subtract(GetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id)).TotalMinutes)
+ {
+ await _puppeteerProcess.StayLoggedIn(user);
+ SetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id, DateTime.UtcNow);
+ operationOccurred = true;
+ _logger.LogInformation($"Operation set to true because of user {user.Id}");
+ }
+ }
+
+ return operationOccurred;
+ }
+
+ private DateTime GetUserLastExecution(string cacheKey, int userId)
+ {
+ var internalKeys = GetLastExecutionCachedDictionary(cacheKey);
+
+ if (!internalKeys.TryGetValue(userId, out var lastExecution))
+ {
+ _logger.LogInformation($"Could not find userId in '{cacheKey}' cache. Returning '{DateTime.MinValue}'.");
+ return DateTime.MinValue;
+ }
+
+ _logger.LogInformation($"Just got user {userId} from cache with value {lastExecution}");
+ return lastExecution;
+ }
+
+ private void SetUserLastExecution(string cacheKey, int userId, DateTime lastExecution)
+ {
+ var internalKeys = GetLastExecutionCachedDictionary(cacheKey);
+
+ if (internalKeys.ContainsKey(userId))
+ internalKeys[userId] = lastExecution;
+ else
+ internalKeys.Add(userId, lastExecution);
+
+ _memoryCache.Set(cacheKey, internalKeys);
+ _logger.LogInformation($"Just set user {userId} into cache with value {lastExecution}");
+ }
+
+ private Dictionary GetLastExecutionCachedDictionary(string cacheKey)
+ {
+ // Sets cache if no dictionary is found
+ if (!_memoryCache.TryGetValue>(cacheKey, out var internalKeys))
+ {
+ internalKeys = _userService.GetAll()
+ .ToDictionary(u => u.Id, u => DateTime.MinValue);
+ _memoryCache.Set(cacheKey, internalKeys);
+ _logger.LogInformation($"Updated users in '{cacheKey}' cache with new id list.");
+ }
+
+ return internalKeys;
+ }
+
+ private void PrintCacheValues(string cacheKey)
+ {
+ _logger.LogInformation($"Printing cache values from '{cacheKey}'");
+ Dictionary internalKeys = GetLastExecutionCachedDictionary(cacheKey);
+ foreach (KeyValuePair entry in internalKeys)
+ {
+ _logger.LogInformation($" {entry.Key} <=> {entry.Value}");
+ }
+ }
+}
diff --git a/AAIntegration.SimmonsBank.API/appsettings.json b/AAIntegration.SimmonsBank.API/appsettings.json
index cb4ae10..c9ca35f 100644
--- a/AAIntegration.SimmonsBank.API/appsettings.json
+++ b/AAIntegration.SimmonsBank.API/appsettings.json
@@ -25,7 +25,12 @@
"Secret": "5de80277015f9fd564c4d1cc2cf827dbb1774cd66e7d79aa258d9c35a9f67f32fc6cf0dc24244242bd9501288e0fd69e315b",
"APIUrl": "https://localhost:7260"
},
- "EnvelopeFund": {
- "CheckIntervalInMinutes": 10
+ "Puppeteer": {
+ "Headless": true,
+ "BrowserOperationTimeoutSeconds": 5,
+ "TaskCheckIntervalMinutes": 1,
+ "KeepAliveIntervalMinutes": 1,
+ "CheckForNewDataIntervalMinutes": 15,
+ "SimmonsBankBaseUrl": "https://login.simmonsbank.com"
}
}
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API
deleted file mode 100755
index d8951c8..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.deps.json b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.deps.json
deleted file mode 100644
index 2fb49f4..0000000
--- a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.deps.json
+++ /dev/null
@@ -1,536 +0,0 @@
-{
- "runtimeTarget": {
- "name": ".NETCoreApp,Version=v7.0",
- "signature": ""
- },
- "compilationOptions": {},
- "targets": {
- ".NETCoreApp,Version=v7.0": {
- "AAIntegration.SimmonsBank.API/1.0.0": {
- "dependencies": {
- "Microsoft.AspNetCore.Authorization": "7.0.0",
- "Microsoft.AspNetCore.OpenApi": "7.0.15",
- "Microsoft.EntityFrameworkCore": "7.0.0",
- "Microsoft.EntityFrameworkCore.Design": "7.0.0",
- "Microsoft.IdentityModel.Tokens": "7.0.0",
- "Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.0",
- "Swashbuckle.AspNetCore": "6.5.0"
- },
- "runtime": {
- "AAIntegration.SimmonsBank.API.dll": {}
- }
- },
- "Humanizer.Core/2.14.1": {
- "runtime": {
- "lib/net6.0/Humanizer.dll": {
- "assemblyVersion": "2.14.0.0",
- "fileVersion": "2.14.1.48190"
- }
- }
- },
- "Microsoft.AspNetCore.Authorization/7.0.0": {
- "dependencies": {
- "Microsoft.AspNetCore.Metadata": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
- }
- },
- "Microsoft.AspNetCore.Metadata/7.0.0": {},
- "Microsoft.AspNetCore.OpenApi/7.0.15": {
- "dependencies": {
- "Microsoft.OpenApi": "1.4.3"
- },
- "runtime": {
- "lib/net7.0/Microsoft.AspNetCore.OpenApi.dll": {
- "assemblyVersion": "7.0.15.0",
- "fileVersion": "7.0.1523.60110"
- }
- }
- },
- "Microsoft.EntityFrameworkCore/7.0.0": {
- "dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "7.0.0",
- "Microsoft.EntityFrameworkCore.Analyzers": "7.0.0",
- "Microsoft.Extensions.Caching.Memory": "7.0.0",
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.Logging": "7.0.0"
- },
- "runtime": {
- "lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.22.51807"
- }
- }
- },
- "Microsoft.EntityFrameworkCore.Abstractions/7.0.0": {
- "runtime": {
- "lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.22.51807"
- }
- }
- },
- "Microsoft.EntityFrameworkCore.Analyzers/7.0.0": {},
- "Microsoft.EntityFrameworkCore.Design/7.0.0": {
- "dependencies": {
- "Humanizer.Core": "2.14.1",
- "Microsoft.EntityFrameworkCore.Relational": "7.0.0",
- "Microsoft.Extensions.DependencyModel": "7.0.0",
- "Mono.TextTemplating": "2.2.1"
- },
- "runtime": {
- "lib/net6.0/Microsoft.EntityFrameworkCore.Design.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.22.51807"
- }
- }
- },
- "Microsoft.EntityFrameworkCore.Relational/7.0.0": {
- "dependencies": {
- "Microsoft.EntityFrameworkCore": "7.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
- },
- "runtime": {
- "lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.22.51807"
- }
- }
- },
- "Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
- "Microsoft.Extensions.Caching.Abstractions/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.Primitives": "7.0.0"
- }
- },
- "Microsoft.Extensions.Caching.Memory/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.Primitives": "7.0.0"
- }
- },
- "Microsoft.Extensions.DependencyInjection/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": {},
- "Microsoft.Extensions.DependencyModel/7.0.0": {
- "dependencies": {
- "System.Text.Encodings.Web": "7.0.0",
- "System.Text.Json": "7.0.0"
- },
- "runtime": {
- "lib/net7.0/Microsoft.Extensions.DependencyModel.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.22.51805"
- }
- }
- },
- "Microsoft.Extensions.Logging/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
- }
- },
- "Microsoft.Extensions.Logging.Abstractions/7.0.0": {},
- "Microsoft.Extensions.Options/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
- }
- },
- "Microsoft.Extensions.Primitives/7.0.0": {},
- "Microsoft.IdentityModel.Abstractions/7.0.0": {
- "runtime": {
- "lib/net6.0/Microsoft.IdentityModel.Abstractions.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.0.40911"
- }
- }
- },
- "Microsoft.IdentityModel.Logging/7.0.0": {
- "dependencies": {
- "Microsoft.IdentityModel.Abstractions": "7.0.0"
- },
- "runtime": {
- "lib/net6.0/Microsoft.IdentityModel.Logging.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.0.40911"
- }
- }
- },
- "Microsoft.IdentityModel.Tokens/7.0.0": {
- "dependencies": {
- "Microsoft.IdentityModel.Logging": "7.0.0"
- },
- "runtime": {
- "lib/net6.0/Microsoft.IdentityModel.Tokens.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.0.40911"
- }
- }
- },
- "Microsoft.OpenApi/1.4.3": {
- "runtime": {
- "lib/netstandard2.0/Microsoft.OpenApi.dll": {
- "assemblyVersion": "1.4.3.0",
- "fileVersion": "1.4.3.0"
- }
- }
- },
- "Mono.TextTemplating/2.2.1": {
- "dependencies": {
- "System.CodeDom": "4.4.0"
- },
- "runtime": {
- "lib/netstandard2.0/Mono.TextTemplating.dll": {
- "assemblyVersion": "2.2.0.0",
- "fileVersion": "2.2.1.1"
- }
- }
- },
- "Npgsql/7.0.0": {
- "dependencies": {
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- },
- "runtime": {
- "lib/net7.0/Npgsql.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.0.0"
- }
- }
- },
- "Npgsql.EntityFrameworkCore.PostgreSQL/7.0.0": {
- "dependencies": {
- "Microsoft.EntityFrameworkCore": "7.0.0",
- "Microsoft.EntityFrameworkCore.Abstractions": "7.0.0",
- "Microsoft.EntityFrameworkCore.Relational": "7.0.0",
- "Npgsql": "7.0.0"
- },
- "runtime": {
- "lib/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
- "assemblyVersion": "7.0.0.0",
- "fileVersion": "7.0.0.0"
- }
- }
- },
- "Swashbuckle.AspNetCore/6.5.0": {
- "dependencies": {
- "Microsoft.Extensions.ApiDescription.Server": "6.0.5",
- "Swashbuckle.AspNetCore.Swagger": "6.5.0",
- "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0",
- "Swashbuckle.AspNetCore.SwaggerUI": "6.5.0"
- }
- },
- "Swashbuckle.AspNetCore.Swagger/6.5.0": {
- "dependencies": {
- "Microsoft.OpenApi": "1.4.3"
- },
- "runtime": {
- "lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll": {
- "assemblyVersion": "6.5.0.0",
- "fileVersion": "6.5.0.0"
- }
- }
- },
- "Swashbuckle.AspNetCore.SwaggerGen/6.5.0": {
- "dependencies": {
- "Swashbuckle.AspNetCore.Swagger": "6.5.0"
- },
- "runtime": {
- "lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
- "assemblyVersion": "6.5.0.0",
- "fileVersion": "6.5.0.0"
- }
- }
- },
- "Swashbuckle.AspNetCore.SwaggerUI/6.5.0": {
- "runtime": {
- "lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
- "assemblyVersion": "6.5.0.0",
- "fileVersion": "6.5.0.0"
- }
- }
- },
- "System.CodeDom/4.4.0": {
- "runtime": {
- "lib/netstandard2.0/System.CodeDom.dll": {
- "assemblyVersion": "4.0.0.0",
- "fileVersion": "4.6.25519.3"
- }
- }
- },
- "System.Runtime.CompilerServices.Unsafe/6.0.0": {},
- "System.Text.Encodings.Web/7.0.0": {},
- "System.Text.Json/7.0.0": {
- "dependencies": {
- "System.Text.Encodings.Web": "7.0.0"
- }
- }
- }
- },
- "libraries": {
- "AAIntegration.SimmonsBank.API/1.0.0": {
- "type": "project",
- "serviceable": false,
- "sha512": ""
- },
- "Humanizer.Core/2.14.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==",
- "path": "humanizer.core/2.14.1",
- "hashPath": "humanizer.core.2.14.1.nupkg.sha512"
- },
- "Microsoft.AspNetCore.Authorization/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-0O7C7XHj+17Q0geMpnpRC0fnnALH2Yhaa2SAzX00OkeF2NZ/+zWoDymbSnepg1qhueufUivihZiVGtMeq5Zywg==",
- "path": "microsoft.aspnetcore.authorization/7.0.0",
- "hashPath": "microsoft.aspnetcore.authorization.7.0.0.nupkg.sha512"
- },
- "Microsoft.AspNetCore.Metadata/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-ut2azlKz7BQpCKu6AiwKEjMHpRWoD4qu2Ff/n6KagjFsyDAfZY7lgYJ158vr4O0jXet6pV1uF1q3jmXvki0OlA==",
- "path": "microsoft.aspnetcore.metadata/7.0.0",
- "hashPath": "microsoft.aspnetcore.metadata.7.0.0.nupkg.sha512"
- },
- "Microsoft.AspNetCore.OpenApi/7.0.15": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-5AnwJuy7lBaoDhos9SYzLxsGO/s8LsAnP1DR0JSUp1zGzBGnHJEgT4IafAk24PnveKgkiVwh77t5+dU652rwxA==",
- "path": "microsoft.aspnetcore.openapi/7.0.15",
- "hashPath": "microsoft.aspnetcore.openapi.7.0.15.nupkg.sha512"
- },
- "Microsoft.EntityFrameworkCore/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-9W+IfmAzMrp2ZpKZLhgTlWljSBM9Erldis1us61DAGi+L7Q6vilTbe1G2zDxtYO8F2H0I0Qnupdx5Cp4s2xoZw==",
- "path": "microsoft.entityframeworkcore/7.0.0",
- "hashPath": "microsoft.entityframeworkcore.7.0.0.nupkg.sha512"
- },
- "Microsoft.EntityFrameworkCore.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Pfu3Zjj5+d2Gt27oE9dpGiF/VobBB+s5ogrfI9sBsXQE1SG49RqVz5+IyeNnzhyejFrPIQsPDRMchhcojy4Hbw==",
- "path": "microsoft.entityframeworkcore.abstractions/7.0.0",
- "hashPath": "microsoft.entityframeworkcore.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.EntityFrameworkCore.Analyzers/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Qkd2H+jLe37o5ku+LjT6qf7kAHY75Yfn2bBDQgqr13DTOLYpEy1Mt93KPFjaZvIu/srEcbfGGMRL7urKm5zN8Q==",
- "path": "microsoft.entityframeworkcore.analyzers/7.0.0",
- "hashPath": "microsoft.entityframeworkcore.analyzers.7.0.0.nupkg.sha512"
- },
- "Microsoft.EntityFrameworkCore.Design/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-fEEU/zZ/VblZRQxHNZxgGKVtEtOGqEAmuHkACV1i0H031bM8PQKTS7PlKPVOgg0C1v+6yeHoIAGGgbAvG9f7kw==",
- "path": "microsoft.entityframeworkcore.design/7.0.0",
- "hashPath": "microsoft.entityframeworkcore.design.7.0.0.nupkg.sha512"
- },
- "Microsoft.EntityFrameworkCore.Relational/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-eQiYygtR2xZ0Uy7KtiFRHpoEx/U8xNwbNRgu1pEJgSxbJLtg6tDL1y2YcIbSuIRSNEljXIIHq/apEhGm1QL70g==",
- "path": "microsoft.entityframeworkcore.relational/7.0.0",
- "hashPath": "microsoft.entityframeworkcore.relational.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.ApiDescription.Server/6.0.5": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==",
- "path": "microsoft.extensions.apidescription.server/6.0.5",
- "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
- },
- "Microsoft.Extensions.Caching.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
- "path": "microsoft.extensions.caching.abstractions/7.0.0",
- "hashPath": "microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Caching.Memory/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
- "path": "microsoft.extensions.caching.memory/7.0.0",
- "hashPath": "microsoft.extensions.caching.memory.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
- "path": "microsoft.extensions.configuration.abstractions/7.0.0",
- "hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.DependencyInjection/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
- "path": "microsoft.extensions.dependencyinjection/7.0.0",
- "hashPath": "microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
- "path": "microsoft.extensions.dependencyinjection.abstractions/7.0.0",
- "hashPath": "microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.DependencyModel/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
- "path": "microsoft.extensions.dependencymodel/7.0.0",
- "hashPath": "microsoft.extensions.dependencymodel.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Logging/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
- "path": "microsoft.extensions.logging/7.0.0",
- "hashPath": "microsoft.extensions.logging.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Logging.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
- "path": "microsoft.extensions.logging.abstractions/7.0.0",
- "hashPath": "microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Options/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
- "path": "microsoft.extensions.options/7.0.0",
- "hashPath": "microsoft.extensions.options.7.0.0.nupkg.sha512"
- },
- "Microsoft.Extensions.Primitives/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
- "path": "microsoft.extensions.primitives/7.0.0",
- "hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
- },
- "Microsoft.IdentityModel.Abstractions/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-7iSWSRR72VKeonFdfDi43Lvkca98Y0F3TmmWhRSuHbkjk/IKUSO0Qd272LQFZpi5eDNQNbUXy3o4THXhOAU6cw==",
- "path": "microsoft.identitymodel.abstractions/7.0.0",
- "hashPath": "microsoft.identitymodel.abstractions.7.0.0.nupkg.sha512"
- },
- "Microsoft.IdentityModel.Logging/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-6I35Kt2/PQZAyUYLo3+QgT/LubZ5/4Ojelkbyo8KKdDgjMbVocAx2B3P5V7iMCz+rsAe/RLr6ql87QKnHtI+aw==",
- "path": "microsoft.identitymodel.logging/7.0.0",
- "hashPath": "microsoft.identitymodel.logging.7.0.0.nupkg.sha512"
- },
- "Microsoft.IdentityModel.Tokens/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-dxYqmmFLsjBQZ6F6a4XDzrZ1CTxBRFVigJvWiNtXiIsT6UlYMxs9ONMaGx9XKzcxmcgEQ2ADuCqKZduz0LR9Hw==",
- "path": "microsoft.identitymodel.tokens/7.0.0",
- "hashPath": "microsoft.identitymodel.tokens.7.0.0.nupkg.sha512"
- },
- "Microsoft.OpenApi/1.4.3": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-rURwggB+QZYcSVbDr7HSdhw/FELvMlriW10OeOzjPT7pstefMo7IThhtNtDudxbXhW+lj0NfX72Ka5EDsG8x6w==",
- "path": "microsoft.openapi/1.4.3",
- "hashPath": "microsoft.openapi.1.4.3.nupkg.sha512"
- },
- "Mono.TextTemplating/2.2.1": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
- "path": "mono.texttemplating/2.2.1",
- "hashPath": "mono.texttemplating.2.2.1.nupkg.sha512"
- },
- "Npgsql/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-tOBFksJZ2MiEz8xtDUgS5IG19jVO3nSP15QDYWiiGpXHe0PsLoQBts2Sg3hHKrrLTuw+AjsJz9iKvvGNHyKDIg==",
- "path": "npgsql/7.0.0",
- "hashPath": "npgsql.7.0.0.nupkg.sha512"
- },
- "Npgsql.EntityFrameworkCore.PostgreSQL/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-CyUNlFZmtX2Kmw8XK5Tlx5eVUCzWJ+zJHErxZiMo2Y8zCRuH9+/OMGwG+9Mmp5zD5p3Ifbi5Pp3btsqoDDkSZQ==",
- "path": "npgsql.entityframeworkcore.postgresql/7.0.0",
- "hashPath": "npgsql.entityframeworkcore.postgresql.7.0.0.nupkg.sha512"
- },
- "Swashbuckle.AspNetCore/6.5.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
- "path": "swashbuckle.aspnetcore/6.5.0",
- "hashPath": "swashbuckle.aspnetcore.6.5.0.nupkg.sha512"
- },
- "Swashbuckle.AspNetCore.Swagger/6.5.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-XWmCmqyFmoItXKFsQSwQbEAsjDKcxlNf1l+/Ki42hcb6LjKL8m5Db69OTvz5vLonMSRntYO1XLqz0OP+n3vKnA==",
- "path": "swashbuckle.aspnetcore.swagger/6.5.0",
- "hashPath": "swashbuckle.aspnetcore.swagger.6.5.0.nupkg.sha512"
- },
- "Swashbuckle.AspNetCore.SwaggerGen/6.5.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-Y/qW8Qdg9OEs7V013tt+94OdPxbRdbhcEbw4NiwGvf4YBcfhL/y7qp/Mjv/cENsQ2L3NqJ2AOu94weBy/h4KvA==",
- "path": "swashbuckle.aspnetcore.swaggergen/6.5.0",
- "hashPath": "swashbuckle.aspnetcore.swaggergen.6.5.0.nupkg.sha512"
- },
- "Swashbuckle.AspNetCore.SwaggerUI/6.5.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-OvbvxX+wL8skxTBttcBsVxdh73Fag4xwqEU2edh4JMn7Ws/xJHnY/JB1e9RoCb6XpDxUF3hD9A0Z1lEUx40Pfw==",
- "path": "swashbuckle.aspnetcore.swaggerui/6.5.0",
- "hashPath": "swashbuckle.aspnetcore.swaggerui.6.5.0.nupkg.sha512"
- },
- "System.CodeDom/4.4.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==",
- "path": "system.codedom/4.4.0",
- "hashPath": "system.codedom.4.4.0.nupkg.sha512"
- },
- "System.Runtime.CompilerServices.Unsafe/6.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
- "path": "system.runtime.compilerservices.unsafe/6.0.0",
- "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
- },
- "System.Text.Encodings.Web/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
- "path": "system.text.encodings.web/7.0.0",
- "hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
- },
- "System.Text.Json/7.0.0": {
- "type": "package",
- "serviceable": true,
- "sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
- "path": "system.text.json/7.0.0",
- "hashPath": "system.text.json.7.0.0.nupkg.sha512"
- }
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
deleted file mode 100644
index d327046..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
deleted file mode 100644
index e452446..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.runtimeconfig.json b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.runtimeconfig.json
deleted file mode 100644
index d486bb2..0000000
--- a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.runtimeconfig.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "runtimeOptions": {
- "tfm": "net7.0",
- "frameworks": [
- {
- "name": "Microsoft.NETCore.App",
- "version": "7.0.0"
- },
- {
- "name": "Microsoft.AspNetCore.App",
- "version": "7.0.0"
- }
- ],
- "configProperties": {
- "System.GC.Server": true,
- "System.Reflection.NullabilityInfoContext.IsSupported": true,
- "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
- }
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll
deleted file mode 100755
index c9a7ef8..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll
deleted file mode 100755
index 20f2ff8..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll
deleted file mode 100755
index a89f247..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Design.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Design.dll
deleted file mode 100755
index 8adf225..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Design.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Relational.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Relational.dll
deleted file mode 100755
index 44538e5..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Relational.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll
deleted file mode 100755
index 94a49a4..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.Extensions.DependencyModel.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.Extensions.DependencyModel.dll
deleted file mode 100755
index c4fe0b9..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.Extensions.DependencyModel.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Abstractions.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Abstractions.dll
deleted file mode 100755
index b1e3e4c..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Abstractions.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Logging.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Logging.dll
deleted file mode 100755
index 3447d4f..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Logging.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Tokens.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Tokens.dll
deleted file mode 100755
index a0d6d60..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Tokens.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll
deleted file mode 100755
index 1e0998d..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll
deleted file mode 100755
index d5a4b3c..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
deleted file mode 100755
index 493fbdc..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll
deleted file mode 100755
index c3bd706..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.Swagger.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.Swagger.dll
deleted file mode 100755
index fd052a3..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.Swagger.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll
deleted file mode 100755
index 2ea00ee..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll
deleted file mode 100755
index 0571d0f..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll
deleted file mode 100755
index 3128b6a..0000000
Binary files a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.Development.json b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.Development.json
deleted file mode 100644
index 0c208ae..0000000
--- a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.Development.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.AspNetCore": "Warning"
- }
- }
-}
diff --git a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.json b/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.json
deleted file mode 100644
index fe27cc7..0000000
--- a/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "Logging": {
- "LogLevel": {
- "Default": "Information",
- "Microsoft.AspNetCore": "Warning"
- }
- },
- "AllowedHosts": "*",
- "AppSettings": {
- "Secret": "5de80277015f9fd564c4d1cc2cf827dbb1774cd66e7d79aa258d9c35a9f67f32fc6cf0dc24244242bd9501288e0fd69e315b",
- "APIUrl": "https://localhost:5279"
- },
- "Database": {
- "Host": "localhost",
- "Name": "AAISB_DB",
- "User": "postgres",
- "Password": "nqA3UV3CliLLHpLL",
- "Port": "15432"
- }
-}
diff --git a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.dgspec.json b/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.dgspec.json
deleted file mode 100644
index db6a622..0000000
--- a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.dgspec.json
+++ /dev/null
@@ -1,143 +0,0 @@
-{
- "format": 1,
- "restore": {
- "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj": {}
- },
- "projects": {
- "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj": {
- "version": "1.0.0",
- "restore": {
- "projectUniqueName": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
- "projectName": "AAIntegration.SimmonsBank.API",
- "projectPath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
- "packagesPath": "/home/william/.nuget/packages/",
- "outputPath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/",
- "projectStyle": "PackageReference",
- "configFilePaths": [
- "/home/william/.nuget/NuGet/NuGet.Config"
- ],
- "originalTargetFrameworks": [
- "net7.0"
- ],
- "sources": {
- "https://api.nuget.org/v3/index.json": {}
- },
- "frameworks": {
- "net7.0": {
- "targetAlias": "net7.0",
- "projectReferences": {}
- }
- },
- "warningProperties": {
- "warnAsError": [
- "NU1605"
- ]
- }
- },
- "frameworks": {
- "net7.0": {
- "targetAlias": "net7.0",
- "dependencies": {
- "AutoMapper": {
- "target": "Package",
- "version": "[12.0.1, )"
- },
- "AutoMapper.Extensions.Microsoft.DependencyInjection": {
- "target": "Package",
- "version": "[12.0.1, )"
- },
- "BCrypt.Net": {
- "target": "Package",
- "version": "[0.1.0, )"
- },
- "Microsoft.AspNetCore.Authentication.JwtBearer": {
- "target": "Package",
- "version": "[7.0.16, )"
- },
- "Microsoft.AspNetCore.SpaProxy": {
- "target": "Package",
- "version": "[7.0.13, )"
- },
- "Microsoft.EntityFrameworkCore": {
- "target": "Package",
- "version": "[7.0.9, )"
- },
- "Microsoft.EntityFrameworkCore.Design": {
- "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
- "suppressParent": "All",
- "target": "Package",
- "version": "[7.0.9, )"
- },
- "Microsoft.IdentityModel.Tokens": {
- "target": "Package",
- "version": "[6.35.0, )"
- },
- "Microsoft.NET.Build.Containers": {
- "target": "Package",
- "version": "[7.0.400, )"
- },
- "Microsoft.VisualStudio.Web.CodeGeneration.Design": {
- "target": "Package",
- "version": "[7.0.8, )"
- },
- "Npgsql.EntityFrameworkCore.PostgreSQL": {
- "target": "Package",
- "version": "[7.0.4, )"
- },
- "Swashbuckle.AspNetCore": {
- "target": "Package",
- "version": "[6.5.0, )"
- },
- "System.IdentityModel.Tokens.Jwt": {
- "target": "Package",
- "version": "[6.35.0, )"
- }
- },
- "imports": [
- "net461",
- "net462",
- "net47",
- "net471",
- "net472",
- "net48",
- "net481"
- ],
- "assetTargetFallback": true,
- "warn": true,
- "downloadDependencies": [
- {
- "name": "Microsoft.AspNetCore.App.Ref",
- "version": "[7.0.15, 7.0.15]"
- },
- {
- "name": "Microsoft.AspNetCore.App.Runtime.linux-x64",
- "version": "[7.0.15, 7.0.15]"
- },
- {
- "name": "Microsoft.NETCore.App.Host.linux-x64",
- "version": "[7.0.15, 7.0.15]"
- },
- {
- "name": "Microsoft.NETCore.App.Runtime.linux-x64",
- "version": "[7.0.15, 7.0.15]"
- }
- ],
- "frameworkReferences": {
- "Microsoft.AspNetCore.App": {
- "privateAssets": "none"
- },
- "Microsoft.NETCore.App": {
- "privateAssets": "all"
- }
- },
- "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/7.0.115/RuntimeIdentifierGraph.json"
- }
- },
- "runtimes": {
- "linux-x64": {
- "#import": []
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.props b/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.props
deleted file mode 100644
index 741abfd..0000000
--- a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.props
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- True
- NuGet
- $(MSBuildThisFileDirectory)project.assets.json
- /home/william/.nuget/packages/
- /home/william/.nuget/packages/
- PackageReference
- 6.4.2
-
-
-
-
-
-
-
-
-
-
-
-
- /home/william/.nuget/packages/microsoft.extensions.apidescription.server/6.0.5
- /home/william/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.3
- /home/william/.nuget/packages/microsoft.codeanalysis.analyzerutilities/3.3.0
-
-
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.targets b/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.targets
deleted file mode 100644
index a07a096..0000000
--- a/AAIntegration.SimmonsBank.API/obj/AAIntegration.SimmonsBank.API.csproj.nuget.g.targets
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
deleted file mode 100644
index 4257f4b..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/.NETCoreApp,Version=v7.0.AssemblyAttributes.cs
+++ /dev/null
@@ -1,4 +0,0 @@
-//
-using System;
-using System.Reflection;
-[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfo.cs b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfo.cs
deleted file mode 100644
index c6485ba..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfo.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Reflection;
-
-[assembly: System.Reflection.AssemblyCompanyAttribute("AAIntegration.SimmonsBank.API")]
-[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
-[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
-[assembly: System.Reflection.AssemblyProductAttribute("AAIntegration.SimmonsBank.API")]
-[assembly: System.Reflection.AssemblyTitleAttribute("AAIntegration.SimmonsBank.API")]
-[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
-
-// Generated by the MSBuild WriteCodeFragment class.
-
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfoInputs.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfoInputs.cache
deleted file mode 100644
index 9d10b67..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfoInputs.cache
+++ /dev/null
@@ -1 +0,0 @@
-ccf0192c63cd8318a7ee7a5d81133f2750591ae8
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GeneratedMSBuildEditorConfig.editorconfig b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GeneratedMSBuildEditorConfig.editorconfig
deleted file mode 100644
index 2f80461..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GeneratedMSBuildEditorConfig.editorconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-is_global = true
-build_property.TargetFramework = net7.0
-build_property.TargetPlatformMinVersion =
-build_property.UsingMicrosoftNETSdkWeb = true
-build_property.ProjectTypeGuids =
-build_property.InvariantGlobalization =
-build_property.PlatformNeutralAssembly =
-build_property.EnforceExtendedAnalyzerRules =
-build_property._SupportedPlatformList = Linux,macOS,Windows
-build_property.RootNamespace = AAIntegration.SimmonsBank.API
-build_property.RootNamespace = AAIntegration.SimmonsBank.API
-build_property.ProjectDir = /home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/
-build_property.RazorLangVersion = 7.0
-build_property.SupportLocalizedComponentNames =
-build_property.GenerateRazorMetadataSourceChecksumAttributes =
-build_property.MSBuildProjectDirectory = /home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API
-build_property._RazorSourceGeneratorDebug =
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GlobalUsings.g.cs b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GlobalUsings.g.cs
deleted file mode 100644
index 025530a..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GlobalUsings.g.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-global using global::Microsoft.AspNetCore.Builder;
-global using global::Microsoft.AspNetCore.Hosting;
-global using global::Microsoft.AspNetCore.Http;
-global using global::Microsoft.AspNetCore.Routing;
-global using global::Microsoft.Extensions.Configuration;
-global using global::Microsoft.Extensions.DependencyInjection;
-global using global::Microsoft.Extensions.Hosting;
-global using global::Microsoft.Extensions.Logging;
-global using global::System;
-global using global::System.Collections.Generic;
-global using global::System.IO;
-global using global::System.Linq;
-global using global::System.Net.Http;
-global using global::System.Net.Http.Json;
-global using global::System.Threading;
-global using global::System.Threading.Tasks;
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cache
deleted file mode 100644
index e69de29..0000000
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cs b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cs
deleted file mode 100644
index 7a8df11..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-using System;
-using System.Reflection;
-
-[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")]
-[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")]
-
-// Generated by the MSBuild WriteCodeFragment class.
-
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.assets.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.assets.cache
deleted file mode 100644
index f6a4143..0000000
Binary files a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.assets.cache and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.AssemblyReference.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.AssemblyReference.cache
deleted file mode 100644
index 76a709a..0000000
Binary files a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.AssemblyReference.cache and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CopyComplete b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CopyComplete
deleted file mode 100644
index e69de29..0000000
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CoreCompileInputs.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CoreCompileInputs.cache
deleted file mode 100644
index d9c1ce3..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CoreCompileInputs.cache
+++ /dev/null
@@ -1 +0,0 @@
-bd7d70d00f668e0d8bf64847deff236ad4b0c3cc
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.FileListAbsolute.txt b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.FileListAbsolute.txt
deleted file mode 100644
index b460a41..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.FileListAbsolute.txt
+++ /dev/null
@@ -1,46 +0,0 @@
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.Development.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.deps.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.runtimeconfig.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Design.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Relational.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.Extensions.DependencyModel.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Abstractions.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Logging.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Tokens.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.Swagger.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.AssemblyReference.cache
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GeneratedMSBuildEditorConfig.editorconfig
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfoInputs.cache
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfo.cs
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CoreCompileInputs.cache
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cs
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cache
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.AAIntegration.SimmonsBank.API.Microsoft.AspNetCore.StaticWebAssets.props
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.build.AAIntegration.SimmonsBank.API.props
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.AAIntegration.SimmonsBank.API.props
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.AAIntegration.SimmonsBank.API.props
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.pack.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.build.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.development.json
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/scopedcss/bundle/AAIntegration.SimmonsBank.API.styles.css
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CopyComplete
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/refint/AAIntegration.SimmonsBank.API.dll
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.genruntimeconfig.cache
-/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/ref/AAIntegration.SimmonsBank.API.dll
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.dll b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
deleted file mode 100644
index d327046..0000000
Binary files a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.dll and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.genruntimeconfig.cache b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.genruntimeconfig.cache
deleted file mode 100644
index 5f870de..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.genruntimeconfig.cache
+++ /dev/null
@@ -1 +0,0 @@
-73736abff76b35e69e45e19ba4a468a4281d3a6a
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
deleted file mode 100644
index e452446..0000000
Binary files a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/apphost b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/apphost
deleted file mode 100755
index d8951c8..0000000
Binary files a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/apphost and /dev/null differ
diff --git a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json b/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json
deleted file mode 100644
index 45e6d67..0000000
--- a/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json
+++ /dev/null
@@ -1,18648 +0,0 @@
-{
- "SerializedFilePath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json",
- "FilePath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
- "Configuration": {
- "ConfigurationName": "MVC-3.0",
- "LanguageVersion": "7.0",
- "Extensions": [
- {
- "ExtensionName": "MVC-3.0"
- }
- ]
- },
- "ProjectWorkspaceState": {
- "TagHelpers": [
- {
- "HashCode": 1609458209,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n Combines the behaviors of and ,\n so that it displays the page matching the specified route but only if the user\n is authorized to see it.\n \n Additionally, this component supplies a cascading parameter of type ,\n which makes the user's current authentication state available to descendants.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "AuthorizeRouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "NotAuthorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotAuthorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorizing",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorizing",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Resource",
- "TypeName": "System.Object",
- "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Resource",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "RouteData",
- "TypeName": "Microsoft.AspNetCore.Components.RouteData",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "RouteData",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DefaultLayout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "DefaultLayout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -491557804,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n Combines the behaviors of and ,\n so that it displays the page matching the specified route but only if the user\n is authorized to see it.\n \n Additionally, this component supplies a cascading parameter of type ,\n which makes the user's current authentication state available to descendants.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "NotAuthorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotAuthorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorizing",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorizing",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Resource",
- "TypeName": "System.Object",
- "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Resource",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "RouteData",
- "TypeName": "Microsoft.AspNetCore.Components.RouteData",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "RouteData",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DefaultLayout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "DefaultLayout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -2115874921,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotAuthorized",
- "ParentTag": "AuthorizeRouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1172263241,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotAuthorized",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.NotAuthorized",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -251515451,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorizing",
- "ParentTag": "AuthorizeRouteView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 231285252,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorizing",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeRouteView.Authorizing",
- "Common.TypeNameIdentifier": "AuthorizeRouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 742776728,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n Displays differing content depending on the user's authorization status.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "Policy",
- "TypeName": "System.String",
- "Documentation": "\n \n The policy name that determines whether the content can be displayed.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Policy",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Roles",
- "TypeName": "System.String",
- "Documentation": "\n \n A comma delimited list of roles that are allowed to display the content.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Roles",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "NotAuthorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotAuthorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorizing",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorizing",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Resource",
- "TypeName": "System.Object",
- "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Resource",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -410110985,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n Displays differing content depending on the user's authorization status.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "Policy",
- "TypeName": "System.String",
- "Documentation": "\n \n The policy name that determines whether the content can be displayed.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Policy",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Roles",
- "TypeName": "System.String",
- "Documentation": "\n \n A comma delimited list of roles that are allowed to display the content.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Roles",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "NotAuthorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotAuthorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorized",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorized",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Authorizing",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Authorizing",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Resource",
- "TypeName": "System.Object",
- "Documentation": "\n \n The resource to which access is being controlled.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Resource",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1496365382,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1294825650,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.ChildContent",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1147376349,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotAuthorized",
- "ParentTag": "AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -509220185,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is not authorized.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotAuthorized",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'NotAuthorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.NotAuthorized",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 319584605,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorized",
- "ParentTag": "AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'Authorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -932051387,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed if the user is authorized.\n If you specify a value for this parameter, do not also specify a value for .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorized",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'Authorized' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorized",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 746176739,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorizing",
- "ParentTag": "AuthorizeView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1480175170,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content that will be displayed while asynchronous authorization is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Authorizing",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.AuthorizeView.Authorizing",
- "Common.TypeNameIdentifier": "AuthorizeView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 1390955865,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "CascadingAuthenticationState"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
- "Common.TypeNameIdentifier": "CascadingAuthenticationState",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1089941022,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState",
- "Common.TypeNameIdentifier": "CascadingAuthenticationState",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -942630891,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "CascadingAuthenticationState"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
- "Common.TypeNameIdentifier": "CascadingAuthenticationState",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 331311379,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Authorization",
- "Documentation": "\n \n The content to which the authentication state should be provided.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Authorization.CascadingAuthenticationState.ChildContent",
- "Common.TypeNameIdentifier": "CascadingAuthenticationState",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Authorization",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -662212303,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.CascadingValue",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that provides a cascading value to all descendant components.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "CascadingValue"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content to which the value should be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n The value to be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Name",
- "TypeName": "System.String",
- "Documentation": "\n \n Optionally gives a name to the provided value. Descendant components\n will be able to receive the value by specifying this name.\n \n If no name is specified, then descendant components will receive the\n value based the type of value they are requesting.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Name",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "IsFixed",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n If true, indicates that will not change. This is a\n performance optimization that allows the framework to skip setting up\n change notifications. Set this flag only if you will not change\n during the component's lifetime.\n \n ",
- "Metadata": {
- "Common.PropertyName": "IsFixed",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
- "Common.TypeNameIdentifier": "CascadingValue",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.GenericTyped": "True",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1943968937,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.CascadingValue",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that provides a cascading value to all descendant components.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.CascadingValue"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.CascadingValue component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n The content to which the value should be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n The value to be provided.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Name",
- "TypeName": "System.String",
- "Documentation": "\n \n Optionally gives a name to the provided value. Descendant components\n will be able to receive the value by specifying this name.\n \n If no name is specified, then descendant components will receive the\n value based the type of value they are requesting.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Name",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "IsFixed",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n If true, indicates that will not change. This is a\n performance optimization that allows the framework to skip setting up\n change notifications. Set this flag only if you will not change\n during the component's lifetime.\n \n ",
- "Metadata": {
- "Common.PropertyName": "IsFixed",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue",
- "Common.TypeNameIdentifier": "CascadingValue",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.GenericTyped": "True",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1347370380,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n The content to which the value should be provided.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "CascadingValue"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
- "Common.TypeNameIdentifier": "CascadingValue",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 1346182096,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n The content to which the value should be provided.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "Microsoft.AspNetCore.Components.CascadingValue"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.CascadingValue.ChildContent",
- "Common.TypeNameIdentifier": "CascadingValue",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 545682312,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that renders another component dynamically according to its\n parameter.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "DynamicComponent"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "Type",
- "TypeName": "System.Type",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the type of the component to be rendered. The supplied type must\n implement .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Type",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Parameters",
- "TypeName": "System.Collections.Generic.IDictionary",
- "Documentation": "\n \n Gets or sets a dictionary of parameters to be passed to the component.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Parameters",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
- "Common.TypeNameIdentifier": "DynamicComponent",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1796349880,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.DynamicComponent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that renders another component dynamically according to its\n parameter.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.DynamicComponent"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "Type",
- "TypeName": "System.Type",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the type of the component to be rendered. The supplied type must\n implement .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Type",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Parameters",
- "TypeName": "System.Collections.Generic.IDictionary",
- "Documentation": "\n \n Gets or sets a dictionary of parameters to be passed to the component.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Parameters",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.DynamicComponent",
- "Common.TypeNameIdentifier": "DynamicComponent",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -100983486,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.LayoutView",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Displays the specified content inside the specified layout and any further\n nested layouts.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "LayoutView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Gets or sets the content to display.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Layout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of the layout in which to display the content.\n The type must implement and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Layout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
- "Common.TypeNameIdentifier": "LayoutView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -681069779,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.LayoutView",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Displays the specified content inside the specified layout and any further\n nested layouts.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.LayoutView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Gets or sets the content to display.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Layout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of the layout in which to display the content.\n The type must implement and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Layout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView",
- "Common.TypeNameIdentifier": "LayoutView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -552512924,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "LayoutView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
- "Common.TypeNameIdentifier": "LayoutView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1450042199,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "Microsoft.AspNetCore.Components.LayoutView"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.LayoutView.ChildContent",
- "Common.TypeNameIdentifier": "LayoutView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -377053912,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.RouteView",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Displays the specified page component, rendering it inside its layout\n and any further nested layouts.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "RouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "RouteData",
- "TypeName": "Microsoft.AspNetCore.Components.RouteData",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "RouteData",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DefaultLayout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "DefaultLayout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
- "Common.TypeNameIdentifier": "RouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1544200839,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.RouteView",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Displays the specified page component, rendering it inside its layout\n and any further nested layouts.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.RouteView"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "RouteData",
- "TypeName": "Microsoft.AspNetCore.Components.RouteData",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the route data. This determines the page that will be\n displayed and the parameter values that will be supplied to the page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "RouteData",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RouteData"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DefaultLayout",
- "TypeName": "System.Type",
- "Documentation": "\n \n Gets or sets the type of a layout to be used if the page does not\n declare any layout. If specified, the type must implement \n and accept a parameter named .\n \n ",
- "Metadata": {
- "Common.PropertyName": "DefaultLayout",
- "Common.GloballyQualifiedTypeName": "global::System.Type"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.RouteView",
- "Common.TypeNameIdentifier": "RouteView",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1168727710,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that supplies route data corresponding to the current navigation state.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Router"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AppAssembly",
- "TypeName": "System.Reflection.Assembly",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the assembly that should be searched for components matching the URI.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AppAssembly",
- "Common.GloballyQualifiedTypeName": "global::System.Reflection.Assembly"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAssemblies",
- "TypeName": "System.Collections.Generic.IEnumerable",
- "Documentation": "\n \n Gets or sets a collection of additional assemblies that should be searched for components\n that can match URIs.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAssemblies",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IEnumerable"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "NotFound",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotFound",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Found",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Found",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Navigating",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Navigating",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnNavigateAsync",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a handler that should be called before navigating to a new page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnNavigateAsync",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "PreferExactMatches",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n Gets or sets a flag to indicate whether route matching should prefer exact matches\n over wildcards.\n This property is obsolete and configuring it does nothing.\n \n ",
- "Metadata": {
- "Common.PropertyName": "PreferExactMatches",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1949090136,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n A component that supplies route data corresponding to the current navigation state.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Routing.Router"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AppAssembly",
- "TypeName": "System.Reflection.Assembly",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the assembly that should be searched for components matching the URI.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AppAssembly",
- "Common.GloballyQualifiedTypeName": "global::System.Reflection.Assembly"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAssemblies",
- "TypeName": "System.Collections.Generic.IEnumerable",
- "Documentation": "\n \n Gets or sets a collection of additional assemblies that should be searched for components\n that can match URIs.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAssemblies",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IEnumerable"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "NotFound",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
- "Metadata": {
- "Common.PropertyName": "NotFound",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Found",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "IsEditorRequired": true,
- "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Found",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Navigating",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Navigating",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnNavigateAsync",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a handler that should be called before navigating to a new page.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnNavigateAsync",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "PreferExactMatches",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n Gets or sets a flag to indicate whether route matching should prefer exact matches\n over wildcards.\n This property is obsolete and configuring it does nothing.\n \n ",
- "Metadata": {
- "Common.PropertyName": "PreferExactMatches",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1471076104,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotFound",
- "ParentTag": "Router"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -896158498,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display when no match is found for the requested route.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "NotFound",
- "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.NotFound",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -711546968,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.Found",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Found",
- "ParentTag": "Router"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'Found' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Found",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 1697922391,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.Found",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Gets or sets the content to display when a match is found for the requested route.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Found",
- "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'Found' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Found",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 612119160,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Navigating",
- "ParentTag": "Router"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 1194967104,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
- "AssemblyName": "Microsoft.AspNetCore.Components",
- "Documentation": "\n \n Get or sets the content to display when asynchronous navigation is in progress.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Navigating",
- "ParentTag": "Microsoft.AspNetCore.Components.Routing.Router"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Routing.Router.Navigating",
- "Common.TypeNameIdentifier": "Router",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Routing",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -160143733,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
- "AssemblyName": "Microsoft.AspNetCore.Components.Forms",
- "Documentation": "\n \n Adds Data Annotations validation support to an .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "DataAnnotationsValidator"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
- "Common.TypeNameIdentifier": "DataAnnotationsValidator",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1165914937,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
- "AssemblyName": "Microsoft.AspNetCore.Components.Forms",
- "Documentation": "\n \n Adds Data Annotations validation support to an .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator"
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.DataAnnotationsValidator",
- "Common.TypeNameIdentifier": "DataAnnotationsValidator",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 135404518,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.EditForm",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n Renders a form element that cascades an to descendants.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "EditForm"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created form element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "EditContext",
- "TypeName": "Microsoft.AspNetCore.Components.Forms.EditContext",
- "Documentation": "\n \n Supplies the edit context explicitly. If using this parameter, do not\n also supply , since the model value will be taken\n from the property.\n \n ",
- "Metadata": {
- "Common.PropertyName": "EditContext",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.EditContext"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Model",
- "TypeName": "System.Object",
- "Documentation": "\n \n Specifies the top-level model object for the form. An edit context will\n be constructed for this model. If using this parameter, do not also supply\n a value for .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Model",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted.\n \n If using this parameter, you are responsible for triggering any validation\n manually, e.g., by calling .\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnValidSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be valid.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnValidSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnInvalidSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be invalid.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnInvalidSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm",
- "Common.TypeNameIdentifier": "EditForm",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -2116725859,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.EditForm",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n Renders a form element that cascades an to descendants.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.EditForm"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created form element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "EditContext",
- "TypeName": "Microsoft.AspNetCore.Components.Forms.EditContext",
- "Documentation": "\n \n Supplies the edit context explicitly. If using this parameter, do not\n also supply , since the model value will be taken\n from the property.\n \n ",
- "Metadata": {
- "Common.PropertyName": "EditContext",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.EditContext"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Model",
- "TypeName": "System.Object",
- "Documentation": "\n \n Specifies the top-level model object for the form. An edit context will\n be constructed for this model. If using this parameter, do not also supply\n a value for .\n \n ",
- "Metadata": {
- "Common.PropertyName": "Model",
- "Common.GloballyQualifiedTypeName": "global::System.Object"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted.\n \n If using this parameter, you are responsible for triggering any validation\n manually, e.g., by calling .\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnValidSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be valid.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnValidSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "OnInvalidSubmit",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n A callback that will be invoked when the form is submitted and the\n is determined to be invalid.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnInvalidSubmit",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for all child content expressions.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm",
- "Common.TypeNameIdentifier": "EditForm",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1836259642,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "EditForm"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
- "Common.TypeNameIdentifier": "EditForm",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": -1554169027,
- "Kind": "Components.ChildContent",
- "Name": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n Specifies the content to be rendered inside this .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "ChildContent",
- "ParentTag": "Microsoft.AspNetCore.Components.Forms.EditForm"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.ChildContent",
- "Name": "Context",
- "TypeName": "System.String",
- "Documentation": "Specifies the parameter name for the 'ChildContent' child content expression.",
- "Metadata": {
- "Components.ChildContentParameterName": "True",
- "Common.PropertyName": "Context"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.EditForm.ChildContent",
- "Common.TypeNameIdentifier": "EditForm",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.IsSpecialKind": "Components.ChildContent",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.None"
- }
- },
- {
- "HashCode": 575389025,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing values.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputCheckbox"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueChanged",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
- "Common.TypeNameIdentifier": "InputCheckbox",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 926043404,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing values.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "System.Boolean",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "global::System.Boolean"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueChanged",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputCheckbox",
- "Common.TypeNameIdentifier": "InputCheckbox",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 698269952,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputDate",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing date values.\n Supported types are and .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputDate"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputDate component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Type",
- "TypeName": "Microsoft.AspNetCore.Components.Forms.InputDateType",
- "IsEnum": true,
- "Documentation": "\n \n Gets or sets the type of HTML input to be rendered.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Type",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.InputDateType"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ParsingErrorMessage",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ParsingErrorMessage",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Common.PropertyName": "ValueChanged",
- "Components.EventCallback": "True",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputDate",
- "Common.TypeNameIdentifier": "InputDate",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -930024230,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputDate",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing date values.\n Supported types are and .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.InputDate"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputDate component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Type",
- "TypeName": "Microsoft.AspNetCore.Components.Forms.InputDateType",
- "IsEnum": true,
- "Documentation": "\n \n Gets or sets the type of HTML input to be rendered.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Type",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.Forms.InputDateType"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ParsingErrorMessage",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ParsingErrorMessage",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Common.PropertyName": "ValueChanged",
- "Components.EventCallback": "True",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputDate",
- "Common.TypeNameIdentifier": "InputDate",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -438909764,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputFile",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n A component that wraps the HTML file input element and supplies a for each file's contents.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputFile"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "OnChange",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets the event callback that will be invoked when the collection of selected files changes.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnChange",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputFile",
- "Common.TypeNameIdentifier": "InputFile",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1901426514,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputFile",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n A component that wraps the HTML file input element and supplies a for each file's contents.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.InputFile"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "OnChange",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets the event callback that will be invoked when the collection of selected files changes.\n \n ",
- "Metadata": {
- "Common.PropertyName": "OnChange",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Components.EventCallback": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IDictionary"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputFile",
- "Common.TypeNameIdentifier": "InputFile",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1021987688,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputNumber",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing numeric values.\n Supported numeric types are , , , , , .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputNumber"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputNumber component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ParsingErrorMessage",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ParsingErrorMessage",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Common.PropertyName": "ValueChanged",
- "Components.EventCallback": "True",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputNumber",
- "Common.TypeNameIdentifier": "InputNumber",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1994693326,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputNumber",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component for editing numeric values.\n Supported numeric types are , , , , , .\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.InputNumber"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputNumber component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ParsingErrorMessage",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the error message used when displaying an a parsing error.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ParsingErrorMessage",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Common.PropertyName": "ValueChanged",
- "Components.EventCallback": "True",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the display name for this field.\n This value is used when generating error messages when the input value fails to parse correctly.\n \n ",
- "Metadata": {
- "Common.PropertyName": "DisplayName",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputNumber",
- "Common.TypeNameIdentifier": "InputNumber",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -32173286,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputRadio",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component used for selecting a value from a group of choices.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputRadio"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadio component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of this input.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Name",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the name of the parent input radio group.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Name",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadio",
- "Common.TypeNameIdentifier": "InputRadio",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": -1527936308,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputRadio",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n An input component used for selecting a value from a group of choices.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "Microsoft.AspNetCore.Components.Forms.InputRadio"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadio component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the input element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of this input.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Name",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the name of the parent input radio group.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Name",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- }
- ],
- "Metadata": {
- "Common.TypeName": "Microsoft.AspNetCore.Components.Forms.InputRadio",
- "Common.TypeNameIdentifier": "InputRadio",
- "Common.TypeNamespace": "Microsoft.AspNetCore.Components.Forms",
- "Components.GenericTyped": "True",
- "Components.NameMatch": "Components.FullyQualifiedNameMatch",
- "Runtime.Name": "Components.IComponent"
- }
- },
- {
- "HashCode": 1831029261,
- "Kind": "Components.Component",
- "Name": "Microsoft.AspNetCore.Components.Forms.InputRadioGroup",
- "AssemblyName": "Microsoft.AspNetCore.Components.Web",
- "Documentation": "\n \n Groups child components.\n \n ",
- "CaseSensitive": true,
- "TagMatchingRules": [
- {
- "TagName": "InputRadioGroup"
- }
- ],
- "BoundAttributes": [
- {
- "Kind": "Components.Component",
- "Name": "TValue",
- "TypeName": "System.Type",
- "Documentation": "Specifies the type of the type parameter TValue for the Microsoft.AspNetCore.Components.Forms.InputRadioGroup component.",
- "Metadata": {
- "Common.PropertyName": "TValue",
- "Components.TypeParameter": "True",
- "Components.TypeParameterIsCascading": "False"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ChildContent",
- "TypeName": "Microsoft.AspNetCore.Components.RenderFragment",
- "Documentation": "\n \n Gets or sets the child content to be rendering inside the .\n \n ",
- "Metadata": {
- "Common.PropertyName": "ChildContent",
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.RenderFragment",
- "Components.ChildContent": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Name",
- "TypeName": "System.String",
- "Documentation": "\n \n Gets or sets the name of the group.\n \n ",
- "Metadata": {
- "Common.PropertyName": "Name",
- "Common.GloballyQualifiedTypeName": "global::System.String"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "AdditionalAttributes",
- "TypeName": "System.Collections.Generic.IReadOnlyDictionary",
- "Documentation": "\n \n Gets or sets a collection of additional attributes that will be applied to the created element.\n \n ",
- "Metadata": {
- "Common.PropertyName": "AdditionalAttributes",
- "Common.GloballyQualifiedTypeName": "global::System.Collections.Generic.IReadOnlyDictionary"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "Value",
- "TypeName": "TValue",
- "Documentation": "\n \n Gets or sets the value of the input. This should be used with two-way binding.\n \n \n @bind-Value=\"model.PropertyName\"\n \n ",
- "Metadata": {
- "Common.PropertyName": "Value",
- "Common.GloballyQualifiedTypeName": "TValue",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueChanged",
- "TypeName": "Microsoft.AspNetCore.Components.EventCallback",
- "Documentation": "\n \n Gets or sets a callback that updates the bound value.\n \n ",
- "Metadata": {
- "Common.GloballyQualifiedTypeName": "global::Microsoft.AspNetCore.Components.EventCallback",
- "Common.PropertyName": "ValueChanged",
- "Components.EventCallback": "True",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "ValueExpression",
- "TypeName": "System.Linq.Expressions.Expression>",
- "Documentation": "\n \n Gets or sets an expression that identifies the bound value.\n \n ",
- "Metadata": {
- "Common.PropertyName": "ValueExpression",
- "Common.GloballyQualifiedTypeName": "global::System.Linq.Expressions.Expression>",
- "Components.GenericTyped": "True"
- }
- },
- {
- "Kind": "Components.Component",
- "Name": "DisplayName",
- "TypeName": "System.String",
- "Documentation": "\n