Compare commits

...

58 Commits

Author SHA1 Message Date
Kalana B. Thilakarathna dc7e7a70fc Add FlatPaymentController with RESTful payment endpoints
Introduced FlatPaymentController under Distribution.Features.Payment, providing GET and POST endpoints at /api/payments. Supports listing, retrieving, and creating payments with filtering and error handling. Business logic is delegated to PaymentService.
2026-08-26 20:18:58 +05:30
Kalana B. Thilakarathna 83d3272784 frontend fully integreated with the backend 2026-08-25 23:47:33 +05:30
DeepnaPooja 1bee5f91c6 Merge branches 'feat/authentication' and 'dev' of https://gitea.hexdive.com/New_REP_SYSTEM/ERP_Distribution into dev 2026-08-25 22:46:27 +05:30
DeepnaPooja 08ad17f15b Document auth flow 2026-08-25 16:46:12 +05:30
DeepnaPooja 97a1db1343 Refactor auth to AuthHex 2026-08-25 16:46:05 +05:30
kalana_Thilakarathna 3268a50c3e Merge pull request 'Production' (#13) from production into dev
Reviewed-on: #13
2026-08-25 10:56:00 +00:00
Kalana B. Thilakarathna f1c036d1d8 frontend initiatewith shadcn uis 2026-08-25 16:20:50 +05:30
Kalana B. Thilakarathna 92fef1dfa8 Merge branch 'dev' into production 2026-08-25 16:12:06 +05:30
Kalana B. Thilakarathna bb33928661 auth clean up 2026-08-25 16:11:37 +05:30
DeepnaPooja b279a121ad Merge pull request 'Dev' (#12) from dev into production
Reviewed-on: #12
2026-08-25 10:15:19 +00:00
DeepnaPooja 916a2b8f0a Merge pull request 'Feat/returns & claims' (#11) from feat/returns-&-claims into dev
Reviewed-on: #11
2026-08-25 10:14:38 +00:00
DeepnaPooja 3caacf44d0 update md files 2026-08-25 15:38:22 +05:30
DeepnaPooja fe9ccb4de7 Update procurement docs 2026-08-25 14:48:02 +05:30
DeepnaPooja f244a04dc0 Add returns and claims 2026-08-25 14:47:51 +05:30
DeepnaPooja aa543d0d0d Merge pull request 'Production' (#10) from production into dev
Reviewed-on: #10
2026-08-25 05:42:16 +00:00
Kalana B. Thilakarathna 87146e4662 Merge branch 'dev' into production 2026-08-24 21:42:41 +05:30
Kalana B. Thilakarathna cefefcbc49 md update 2026-08-24 21:42:13 +05:30
Kalana B. Thilakarathna fcca03d0b2 Merge branch 'dev' into production 2026-08-24 21:38:13 +05:30
Kalana B. Thilakarathna 6d8b6b3e59 Add DeliveryTask, Payment, and Sale features
Implemented DeliveryTask, Payment, and Sale entities with full CRUD, business logic, and API endpoints. Updated Order/OrderItem for sale linkage and fulfillment tracking. Registered new DbSets and DI services. Revised documentation for delivery, sale, and payment workflows.
2026-08-24 21:34:57 +05:30
DeepnaPooja 3837facb02 Merge pull request 'Dev' (#9) from dev into production
Reviewed-on: #9
2026-08-24 11:29:34 +00:00
DeepnaPooja a833586e83 Merge pull request 'Feat/procurement' (#8) from feat/procurement into dev
Reviewed-on: #8
2026-08-24 11:28:48 +00:00
DeepnaPooja 3bc33ce08f Update procurement and master plan docs to match implementation 2026-08-24 16:52:26 +05:30
DeepnaPooja 870b412a06 Check stock availability when creating an order 2026-08-24 16:52:20 +05:30
DeepnaPooja 095d35e1b8 Add supplier evaluation and block delete when referenced by a purchase order 2026-08-24 16:52:12 +05:30
DeepnaPooja d7b03941fb Wire up procurement services in DI 2026-08-24 16:52:06 +05:30
DeepnaPooja 81a49e1a98 Add purchase return feature (returns received stock to a supplier) 2026-08-24 16:51:59 +05:30
DeepnaPooja 2995ce7012 Add goods receipt feature (creates stock from a purchase order) 2026-08-24 16:51:52 +05:30
DeepnaPooja db0850f1f0 Add purchase order feature (create/update/close/cancel/match-invoice) 2026-08-24 16:51:44 +05:30
DeepnaPooja 702dbeb39f Add procurement tables migration 2026-08-24 16:51:37 +05:30
DeepnaPooja c8d23afe59 Add procurement domain models (PurchaseOrder, GoodsReceipt, PurchaseReturn) 2026-08-24 16:51:22 +05:30
Kalana B. Thilakarathna ade41b4a60 Merge branch 'dev' into production 2026-08-24 11:24:06 +05:30
Kalana B. Thilakarathna ac1b2fbc4b loading event 2026-08-24 11:23:32 +05:30
Kalana B. Thilakarathna f381e7a634 Update docs: revise pending tasks and mark step 12 done
- 03_ride_lifecycle.md: Updated pending tasks note to only mention tests for new services, removing reference to database migrations.
- mainPlan.md: Changed status of "Store Management (Beyond CRUD)" (step 12) from "In Progress" to "Done".
2026-08-22 11:16:38 +05:30
DeepnaPooja 3680fc9035 Merge pull request 'Dev' (#6) from dev into production
Reviewed-on: #6
2026-08-21 08:52:16 +00:00
DeepnaPooja 6a0322570b Merge pull request 'Feat/promotions & trade' (#7) from feat/promotions-&-trade into dev
Reviewed-on: #7
2026-08-21 08:51:48 +00:00
DeepnaPooja dc4b1934e1 Wire store scheme eligibility and update docs 2026-08-21 14:14:14 +05:30
DeepnaPooja aabace1bba Add scheme APIs and application services 2026-08-21 14:14:07 +05:30
DeepnaPooja f7101800cd Add scheme data model and migrations 2026-08-21 14:10:40 +05:30
Kalana B. Thilakarathna f6211a8edd Merge branch 'production' of https://gitea.hexdive.com/New_REP_SYSTEM/ERP_Distribution into production 2026-08-21 02:08:50 +05:30
Kalana B. Thilakarathna c9f5006727 03_ride_lifecycle implemented and not tested 2026-08-21 02:08:11 +05:30
DeepnaPooja 942a39b0eb Merge pull request 'Feat/pricing & supplier' (#5) from feat/pricing_&_supplier into dev
Reviewed-on: #5
2026-08-20 12:08:05 +00:00
DeepnaPooja b2681d1236 Update pricing and store implementation plans 2026-08-20 17:29:11 +05:30
DeepnaPooja 63bc6e9cd8 Add pricing and supplier master data 2026-08-20 17:28:55 +05:30
DeepnaPooja 83bf715716 Merge pull request 'Dev' (#4) from dev into production
Reviewed-on: #4
2026-08-20 08:14:20 +00:00
DeepnaPooja 7a2494c156 Merge pull request 'Feat/store management' (#3) from feat/store_management into dev
Reviewed-on: #3
2026-08-20 08:13:40 +00:00
DeepnaPooja e3e331a2bb fix the running issue 2026-08-20 13:24:51 +05:30
DeepnaPooja 4e73dd7fb1 update store mngt.md 2026-08-20 13:10:46 +05:30
DeepnaPooja e88668beca Add store management workflows and KYC order gating 2026-08-20 13:08:00 +05:30
DeepnaPooja c1961ebea2 Add store KYC document management 2026-08-20 13:07:47 +05:30
DeepnaPooja cf9d2c2661 Add store credit and KYC data model 2026-08-20 13:07:27 +05:30
Kalana B. Thilakarathna 429a80b1ed Add planning docs for steps 10–23 and update roadmap
Added detailed implementation planning documents for steps 10–23, covering all major feature areas. Updated mainPlan.md to reference these steps, their dependencies, and planning files. No code changes—these documents clarify requirements and guide future development.
2026-08-20 10:04:09 +05:30
Kalana B. Thilakarathna f95fda3806 stock_ledger completed need to test 2026-08-20 09:42:33 +05:30
Kalana B. Thilakarathna aa7ea37ab6 main plan md update 2026-08-19 16:23:59 +05:30
DeepnaPooja d2390e7b12 Add md file features in region, route, store, fleet, pricing, procurement, SFA, promotions, returns, finance, reporting, notifications, integration, and mobile capabilities 2026-08-19 15:18:31 +05:30
Kalana B. Thilakarathna 4673d72d53 test project created 2026-08-19 14:40:04 +05:30
Kalana B. Thilakarathna 397af8fd59 item mng with sync 2026-08-19 12:49:04 +05:30
DeepnaPooja 45f374133f Refactor authorization folder structure 2026-08-19 11:39:44 +05:30
Kalana B. Thilakarathna 56cd93c341 md file and gap fix 2026-08-19 10:50:28 +05:30
664 changed files with 69126 additions and 4537 deletions
Submodule .claude/worktrees/agent-a203fc082069b1faf added at ade41b4a60
@@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Distribution\Distribution.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,99 @@
using Distribution.Features.Auth;
using Distribution.Features.User;
using Distribution.Infra.Authorization;
using Distribution.Models;
using Microsoft.AspNetCore.Identity;
using Moq;
using Xunit;
namespace Distribution.Tests.Services;
public class AuthServiceTests
{
private readonly Mock<IUserRepository> _userRepo = new();
private readonly Mock<IJwtTokenService> _tokenService = new();
private readonly AuthService _sut;
private readonly PasswordHasher<User> _hasher = new();
public AuthServiceTests()
{
_sut = new AuthService(_userRepo.Object, _tokenService.Object);
}
private User ActiveUserWithPassword(string password) => new()
{
Id = Guid.NewGuid(),
Username = "testuser",
FullName = "Test User",
IsActive = true,
FK_RoleId = Guid.NewGuid(),
PasswordHash = _hasher.HashPassword(null!, password),
Role = new Role { Name = "Sales", Level = 10 }
};
// LoginAsync
[Fact]
public async Task LoginAsync_ReturnsNull_WhenUserNotFound()
{
_userRepo.Setup(r => r.GetByUsernameAsync(It.IsAny<string>())).ReturnsAsync((User?)null);
var result = await _sut.LoginAsync(new LoginRequest("nobody", "pass"));
Assert.Null(result);
_tokenService.Verify(t => t.GenerateToken(It.IsAny<User>()), Times.Never);
}
[Fact]
public async Task LoginAsync_ReturnsNull_WhenUserIsInactive()
{
var user = ActiveUserWithPassword("secret");
user.IsActive = false;
_userRepo.Setup(r => r.GetByUsernameAsync("testuser")).ReturnsAsync(user);
var result = await _sut.LoginAsync(new LoginRequest("testuser", "secret"));
Assert.Null(result);
_tokenService.Verify(t => t.GenerateToken(It.IsAny<User>()), Times.Never);
}
[Fact]
public async Task LoginAsync_ReturnsNull_WhenPasswordIsWrong()
{
var user = ActiveUserWithPassword("correct");
_userRepo.Setup(r => r.GetByUsernameAsync("testuser")).ReturnsAsync(user);
var result = await _sut.LoginAsync(new LoginRequest("testuser", "wrong"));
Assert.Null(result);
_tokenService.Verify(t => t.GenerateToken(It.IsAny<User>()), Times.Never);
}
[Fact]
public async Task LoginAsync_ReturnsLoginResponse_WhenCredentialsAreValid()
{
var user = ActiveUserWithPassword("secret");
_userRepo.Setup(r => r.GetByUsernameAsync("testuser")).ReturnsAsync(user);
_tokenService.Setup(t => t.GenerateToken(user)).Returns("jwt-token");
var result = await _sut.LoginAsync(new LoginRequest("testuser", "secret"));
Assert.NotNull(result);
Assert.Equal("jwt-token", result.Token);
Assert.Equal(user.Id, result.UserId);
Assert.Equal("testuser", result.Username);
Assert.Equal("Sales", result.RoleName);
}
[Fact]
public async Task LoginAsync_CallsGenerateToken_OnSuccess()
{
var user = ActiveUserWithPassword("pass");
_userRepo.Setup(r => r.GetByUsernameAsync(It.IsAny<string>())).ReturnsAsync(user);
_tokenService.Setup(t => t.GenerateToken(user)).Returns("token");
await _sut.LoginAsync(new LoginRequest("testuser", "pass"));
_tokenService.Verify(t => t.GenerateToken(user), Times.Once);
}
}
@@ -0,0 +1,259 @@
using Distribution.Features.Item;
using Distribution.Infra.UoW;
using Distribution.Models;
using Moq;
using Xunit;
namespace Distribution.Tests.Services;
public class ItemServiceTests
{
private readonly Mock<IItemRepository> _repo = new();
private readonly Mock<IUnitOfWork> _uow = new();
private readonly ItemService _sut;
public ItemServiceTests()
{
_sut = new ItemService(_repo.Object, _uow.Object);
}
private static Item ManualItem(string sku = "SKU-001") => new()
{
Id = Guid.NewGuid(),
Sku = sku,
Name = "Test Item",
IsActive = true,
SyncSource = SyncSource.Manual,
FK_CategoryId = Guid.NewGuid(),
FK_BaseUomId = Guid.NewGuid(),
Category = new Category { Name = "Cat" },
BaseUom = new Uom { Name = "Each" },
Conversions = []
};
private static Item ErpItem() => new()
{
Id = Guid.NewGuid(),
Sku = "ERP-001",
Name = "Erp Item",
IsActive = true,
SyncSource = SyncSource.Erp,
FK_CategoryId = Guid.NewGuid(),
FK_BaseUomId = Guid.NewGuid(),
Category = new Category { Name = "Cat" },
BaseUom = new Uom { Name = "Each" },
Conversions = []
};
private static Item InactiveItem() => new()
{
Id = Guid.NewGuid(),
Sku = "OLD-001",
Name = "Old",
IsActive = false,
SyncSource = SyncSource.Manual,
FK_CategoryId = Guid.NewGuid(),
FK_BaseUomId = Guid.NewGuid(),
Category = new Category { Name = "Cat" },
BaseUom = new Uom { Name = "Each" },
Conversions = []
};
private static CreateItemRequest SampleCreateRequest(string sku = "SKU-001") =>
new(sku, "Test Item", null, Guid.NewGuid(), null, null, Guid.NewGuid(), null, null);
// CreateAsync
[Fact]
public async Task CreateAsync_Throws_WhenSkuAlreadyExists()
{
_repo.Setup(r => r.SkuExistsAsync(It.IsAny<string>(), It.IsAny<Guid?>())).ReturnsAsync(true);
await Assert.ThrowsAsync<InvalidOperationException>(
() => _sut.CreateAsync(SampleCreateRequest("DUP")));
_repo.Verify(r => r.AddAsync(It.IsAny<Item>()), Times.Never);
}
[Fact]
public async Task CreateAsync_SetsManualSyncSource()
{
var item = ManualItem();
_repo.Setup(r => r.SkuExistsAsync(It.IsAny<string>(), It.IsAny<Guid?>())).ReturnsAsync(false);
_repo.Setup(r => r.AddAsync(It.IsAny<Item>())).Returns(Task.CompletedTask);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(item);
await _sut.CreateAsync(SampleCreateRequest());
_repo.Verify(r => r.AddAsync(It.Is<Item>(i => i.SyncSource == SyncSource.Manual)), Times.Once);
}
[Fact]
public async Task CreateAsync_BeginsAndCommitsTransaction()
{
var item = ManualItem();
_repo.Setup(r => r.SkuExistsAsync(It.IsAny<string>(), It.IsAny<Guid?>())).ReturnsAsync(false);
_repo.Setup(r => r.AddAsync(It.IsAny<Item>())).Returns(Task.CompletedTask);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(item);
await _sut.CreateAsync(SampleCreateRequest());
_uow.Verify(u => u.BeginAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
[Fact]
public async Task CreateAsync_Rollbacks_OnAddException()
{
_repo.Setup(r => r.SkuExistsAsync(It.IsAny<string>(), It.IsAny<Guid?>())).ReturnsAsync(false);
_repo.Setup(r => r.AddAsync(It.IsAny<Item>())).ThrowsAsync(new Exception("db error"));
await Assert.ThrowsAsync<Exception>(() => _sut.CreateAsync(SampleCreateRequest()));
_uow.Verify(u => u.RollbackAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Never);
}
// UpdateAsync
[Fact]
public async Task UpdateAsync_ReturnsNull_WhenItemNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Item?)null);
var result = await _sut.UpdateAsync(Guid.NewGuid(),
new UpdateItemRequest("Name", null, Guid.NewGuid(), null, null, Guid.NewGuid(), null));
Assert.Null(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task UpdateAsync_ReturnsNull_WhenItemInactive()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(InactiveItem());
var result = await _sut.UpdateAsync(Guid.NewGuid(),
new UpdateItemRequest("Name", null, Guid.NewGuid(), null, null, Guid.NewGuid(), null));
Assert.Null(result);
}
[Fact]
public async Task UpdateAsync_ReturnsNull_WhenItemIsErpSynced()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(ErpItem());
var result = await _sut.UpdateAsync(Guid.NewGuid(),
new UpdateItemRequest("Name", null, Guid.NewGuid(), null, null, Guid.NewGuid(), null));
Assert.Null(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task UpdateAsync_UpdatesFields_AndCommits()
{
var item = ManualItem();
_repo.Setup(r => r.GetByIdAsync(item.Id)).ReturnsAsync(item);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(item);
var catId = Guid.NewGuid();
var uomId = Guid.NewGuid();
item.Category = new Category { Name = "Cat" };
item.BaseUom = new Uom { Name = "Each" };
var result = await _sut.UpdateAsync(item.Id,
new UpdateItemRequest("Updated", "desc", catId, null, null, uomId, 9.99m));
_uow.Verify(u => u.BeginAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
// DeleteAsync
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenItemNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Item?)null);
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenItemInactive()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(InactiveItem());
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
}
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenItemIsErpSynced()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(ErpItem());
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task DeleteAsync_CallsRemove_AndCommits_ForManualItem()
{
var item = ManualItem();
_repo.Setup(r => r.GetByIdAsync(item.Id)).ReturnsAsync(item);
var result = await _sut.DeleteAsync(item.Id);
Assert.True(result);
_repo.Verify(r => r.Remove(item), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
// ReplaceConversionsAsync
[Fact]
public async Task ReplaceConversionsAsync_ReturnsNull_WhenItemNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Item?)null);
var result = await _sut.ReplaceConversionsAsync(Guid.NewGuid(),
new ReplaceConversionsRequest([]));
Assert.Null(result);
}
[Fact]
public async Task ReplaceConversionsAsync_ReturnsNull_WhenItemIsErpSynced()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(ErpItem());
var result = await _sut.ReplaceConversionsAsync(Guid.NewGuid(),
new ReplaceConversionsRequest([]));
Assert.Null(result);
_repo.Verify(r => r.ReplaceConversionsAsync(It.IsAny<Guid>(), It.IsAny<List<UomConversion>>()), Times.Never);
}
[Fact]
public async Task ReplaceConversionsAsync_CallsReplace_AndCommits()
{
var item = ManualItem();
_repo.Setup(r => r.GetByIdAsync(item.Id)).ReturnsAsync(item);
_repo.Setup(r => r.ReplaceConversionsAsync(It.IsAny<Guid>(), It.IsAny<List<UomConversion>>()))
.Returns(Task.CompletedTask);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(item);
await _sut.ReplaceConversionsAsync(item.Id, new ReplaceConversionsRequest([]));
_repo.Verify(r => r.ReplaceConversionsAsync(item.Id, It.IsAny<List<UomConversion>>()), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
}
@@ -0,0 +1,229 @@
using Distribution.Features.Order;
using Distribution.Infra.Authorization;
using Distribution.Infra.UoW;
using Distribution.Models;
using Moq;
using Xunit;
namespace Distribution.Tests.Services;
public class OrderServiceTests
{
private readonly Mock<IOrderRepository> _repo = new();
private readonly Mock<IUnitOfWork> _uow = new();
private readonly Mock<ICurrentUserService> _currentUser = new();
private readonly Mock<IScopeAccessService> _scopeAccess = new();
private readonly OrderService _sut;
public OrderServiceTests()
{
_sut = new OrderService(_repo.Object, _uow.Object, _currentUser.Object, _scopeAccess.Object);
}
private static Order ActiveOrder(Guid storeId) => new()
{
Id = Guid.NewGuid(),
FK_StoreId = storeId,
OrderDate = DateTime.Now,
TotalAmount = 100,
IsActive = true
};
private void SetupGlobalUser(Guid userId)
{
_currentUser.Setup(u => u.UserId).Returns(userId);
_currentUser.Setup(u => u.RoleLevel).Returns(50);
}
private void SetupScopedUser(Guid userId)
{
_currentUser.Setup(u => u.UserId).Returns(userId);
_currentUser.Setup(u => u.RoleLevel).Returns(10);
}
// GetAllAsync
[Fact]
public async Task GetAllAsync_GlobalUser_ReturnsAllActiveOrders()
{
var userId = Guid.NewGuid();
var storeA = Guid.NewGuid();
var storeB = Guid.NewGuid();
SetupGlobalUser(userId);
var orders = new List<Order> { ActiveOrder(storeA), ActiveOrder(storeB) };
_repo.Setup(r => r.GetAllAsync()).ReturnsAsync(orders);
_repo.Setup(r => r.GetItemsByOrderIdAsync(It.IsAny<Guid>())).ReturnsAsync([]);
var result = await _sut.GetAllAsync();
Assert.Equal(2, result.Count);
}
[Fact]
public async Task GetAllAsync_ScopedUser_FiltersToAccessibleStores()
{
var userId = Guid.NewGuid();
var accessibleStore = Guid.NewGuid();
var restrictedStore = Guid.NewGuid();
SetupScopedUser(userId);
_scopeAccess.Setup(s => s.GetAccessibleStoreIdsAsync(userId)).ReturnsAsync([accessibleStore]);
var orders = new List<Order> { ActiveOrder(accessibleStore), ActiveOrder(restrictedStore) };
_repo.Setup(r => r.GetAllAsync()).ReturnsAsync(orders);
_repo.Setup(r => r.GetItemsByOrderIdAsync(It.IsAny<Guid>())).ReturnsAsync([]);
var result = await _sut.GetAllAsync();
Assert.Single(result);
Assert.Equal(accessibleStore, result[0].StoreId);
}
[Fact]
public async Task GetAllAsync_FiltersOutInactiveOrders()
{
var userId = Guid.NewGuid();
SetupGlobalUser(userId);
var inactiveOrder = ActiveOrder(Guid.NewGuid());
inactiveOrder.IsActive = false;
_repo.Setup(r => r.GetAllAsync()).ReturnsAsync([inactiveOrder]);
_repo.Setup(r => r.GetItemsByOrderIdAsync(It.IsAny<Guid>())).ReturnsAsync([]);
var result = await _sut.GetAllAsync();
Assert.Empty(result);
}
// GetByIdAsync
[Fact]
public async Task GetByIdAsync_ReturnsNull_WhenOrderNotFound()
{
SetupGlobalUser(Guid.NewGuid());
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Order?)null);
var result = await _sut.GetByIdAsync(Guid.NewGuid());
Assert.Null(result);
}
[Fact]
public async Task GetByIdAsync_ReturnsNull_WhenUserLacksStoreScope()
{
var userId = Guid.NewGuid();
var storeId = Guid.NewGuid();
SetupScopedUser(userId);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(ActiveOrder(storeId));
_scopeAccess.Setup(s => s.HasStoreScopeAsync(userId, storeId)).ReturnsAsync(false);
var result = await _sut.GetByIdAsync(Guid.NewGuid());
Assert.Null(result);
}
[Fact]
public async Task GetByIdAsync_ReturnsOrder_WhenGlobalUser()
{
var userId = Guid.NewGuid();
var order = ActiveOrder(Guid.NewGuid());
SetupGlobalUser(userId);
_repo.Setup(r => r.GetByIdAsync(order.Id)).ReturnsAsync(order);
_repo.Setup(r => r.GetItemsByOrderIdAsync(order.Id)).ReturnsAsync([]);
var result = await _sut.GetByIdAsync(order.Id);
Assert.NotNull(result);
Assert.Equal(order.Id, result.Id);
}
// CreateAsync
[Fact]
public async Task CreateAsync_ReturnsNull_WhenUserLacksStoreScope()
{
var userId = Guid.NewGuid();
var storeId = Guid.NewGuid();
SetupScopedUser(userId);
_scopeAccess.Setup(s => s.HasStoreScopeAsync(userId, storeId)).ReturnsAsync(false);
var result = await _sut.CreateAsync(
new CreateOrderRequest(storeId, DateTime.Now, 100, []));
Assert.Null(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task CreateAsync_CreatesOrder_WhenGlobalUser()
{
var userId = Guid.NewGuid();
var storeId = Guid.NewGuid();
SetupGlobalUser(userId);
_repo.Setup(r => r.AddAsync(It.IsAny<Order>())).Returns(Task.CompletedTask);
_repo.Setup(r => r.AddItemsAsync(It.IsAny<IEnumerable<OrderItem>>())).Returns(Task.CompletedTask);
var result = await _sut.CreateAsync(
new CreateOrderRequest(storeId, DateTime.Now, 250, []));
Assert.NotNull(result);
Assert.Equal(storeId, result.StoreId);
Assert.Equal(250, result.TotalAmount);
_uow.Verify(u => u.BeginAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
[Fact]
public async Task CreateAsync_Rollbacks_OnException()
{
var userId = Guid.NewGuid();
SetupGlobalUser(userId);
_repo.Setup(r => r.AddAsync(It.IsAny<Order>())).ThrowsAsync(new Exception("db error"));
await Assert.ThrowsAsync<Exception>(() =>
_sut.CreateAsync(new CreateOrderRequest(Guid.NewGuid(), DateTime.Now, 100, [])));
_uow.Verify(u => u.RollbackAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Never);
}
// DeleteAsync
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenOrderNotFound()
{
SetupGlobalUser(Guid.NewGuid());
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Order?)null);
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
}
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenUserLacksStoreScope()
{
var userId = Guid.NewGuid();
var storeId = Guid.NewGuid();
SetupScopedUser(userId);
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(ActiveOrder(storeId));
_scopeAccess.Setup(s => s.HasStoreScopeAsync(userId, storeId)).ReturnsAsync(false);
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task DeleteAsync_RemovesOrder_WhenAuthorized()
{
var userId = Guid.NewGuid();
var order = ActiveOrder(Guid.NewGuid());
SetupGlobalUser(userId);
_repo.Setup(r => r.GetByIdAsync(order.Id)).ReturnsAsync(order);
var result = await _sut.DeleteAsync(order.Id);
Assert.True(result);
_repo.Verify(r => r.Remove(order), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
}
@@ -0,0 +1,194 @@
using Distribution.Features.Region;
using Distribution.Infra.UoW;
using Distribution.Models;
using Moq;
using Xunit;
namespace Distribution.Tests.Services;
public class RegionServiceTests
{
private readonly Mock<IRegionRepository> _repo = new();
private readonly Mock<IUnitOfWork> _uow = new();
private readonly RegionService _sut;
public RegionServiceTests()
{
_sut = new RegionService(_repo.Object, _uow.Object);
}
private static Region ActiveRegion(string name = "North") =>
new() { Id = Guid.NewGuid(), Name = name, IsActive = true };
private static Region InactiveRegion() =>
new() { Id = Guid.NewGuid(), Name = "Old", IsActive = false };
// GetAllAsync
[Fact]
public async Task GetAllAsync_ReturnsOnlyActiveRegions()
{
_repo.Setup(r => r.GetAllAsync()).ReturnsAsync([ActiveRegion(), InactiveRegion()]);
var result = await _sut.GetAllAsync();
Assert.Single(result);
Assert.True(result[0].IsActive);
}
[Fact]
public async Task GetAllAsync_ReturnsEmpty_WhenNoneActive()
{
_repo.Setup(r => r.GetAllAsync()).ReturnsAsync([InactiveRegion()]);
var result = await _sut.GetAllAsync();
Assert.Empty(result);
}
// GetByIdAsync
[Fact]
public async Task GetByIdAsync_ReturnsNull_WhenNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Region?)null);
var result = await _sut.GetByIdAsync(Guid.NewGuid());
Assert.Null(result);
}
[Fact]
public async Task GetByIdAsync_ReturnsNull_WhenInactive()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(InactiveRegion());
var result = await _sut.GetByIdAsync(Guid.NewGuid());
Assert.Null(result);
}
[Fact]
public async Task GetByIdAsync_ReturnsResponse_WhenActiveRegionFound()
{
var region = ActiveRegion("South");
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
var result = await _sut.GetByIdAsync(region.Id);
Assert.NotNull(result);
Assert.Equal("South", result.Name);
Assert.Equal(region.Id, result.Id);
}
// CreateAsync
[Fact]
public async Task CreateAsync_AddsRegion_AndCommits()
{
var request = new CreateRegionRequest("East");
var result = await _sut.CreateAsync(request);
_uow.Verify(u => u.BeginAsync(default), Times.Once);
_repo.Verify(r => r.AddAsync(It.Is<Region>(x => x.Name == "East")), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
Assert.Equal("East", result.Name);
}
[Fact]
public async Task CreateAsync_Rollbacks_WhenAddThrows()
{
_repo.Setup(r => r.AddAsync(It.IsAny<Region>())).ThrowsAsync(new Exception("db error"));
await Assert.ThrowsAsync<Exception>(() => _sut.CreateAsync(new CreateRegionRequest("X")));
_uow.Verify(u => u.RollbackAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Never);
}
// UpdateAsync
[Fact]
public async Task UpdateAsync_ReturnsNull_WhenNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Region?)null);
var result = await _sut.UpdateAsync(Guid.NewGuid(), new UpdateRegionRequest("New"));
Assert.Null(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task UpdateAsync_ReturnsNull_WhenInactive()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(InactiveRegion());
var result = await _sut.UpdateAsync(Guid.NewGuid(), new UpdateRegionRequest("New"));
Assert.Null(result);
}
[Fact]
public async Task UpdateAsync_UpdatesName_AndCommits()
{
var region = ActiveRegion("Old Name");
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
var result = await _sut.UpdateAsync(region.Id, new UpdateRegionRequest("New Name"));
Assert.NotNull(result);
Assert.Equal("New Name", result.Name);
_uow.Verify(u => u.BeginAsync(default), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
// DeleteAsync
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenNotFound()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync((Region?)null);
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
_uow.Verify(u => u.BeginAsync(default), Times.Never);
}
[Fact]
public async Task DeleteAsync_ReturnsFalse_WhenInactive()
{
_repo.Setup(r => r.GetByIdAsync(It.IsAny<Guid>())).ReturnsAsync(InactiveRegion());
var result = await _sut.DeleteAsync(Guid.NewGuid());
Assert.False(result);
}
[Fact]
public async Task DeleteAsync_CallsRemove_AndCommits()
{
var region = ActiveRegion();
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
var result = await _sut.DeleteAsync(region.Id);
Assert.True(result);
_repo.Verify(r => r.Remove(region), Times.Once);
_uow.Verify(u => u.CommitAsync(default), Times.Once);
}
[Fact]
public async Task DeleteAsync_Rollbacks_WhenRemoveThrows()
{
var region = ActiveRegion();
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
_repo.Setup(r => r.Remove(It.IsAny<Region>())).Throws(new Exception("db error"));
await Assert.ThrowsAsync<Exception>(() => _sut.DeleteAsync(region.Id));
_uow.Verify(u => u.RollbackAsync(default), Times.Once);
}
}
@@ -0,0 +1,163 @@
using Distribution.Infra.Authorization;
using Moq;
using Xunit;
namespace Distribution.Tests.Services;
public class ScopeAccessServiceTests
{
private readonly Mock<IScopeRepository> _repo = new();
private readonly ScopeAccessService _sut;
private readonly Guid _userId = Guid.NewGuid();
public ScopeAccessServiceTests()
{
_sut = new ScopeAccessService(_repo.Object);
}
// Delegation tests
[Fact]
public async Task HasStoreScopeAsync_DelegatesToRepository()
{
var storeId = Guid.NewGuid();
_repo.Setup(r => r.HasStoreScopeAsync(_userId, storeId)).ReturnsAsync(true);
var result = await _sut.HasStoreScopeAsync(_userId, storeId);
Assert.True(result);
_repo.Verify(r => r.HasStoreScopeAsync(_userId, storeId), Times.Once);
}
[Fact]
public async Task HasRouteScopeAsync_DelegatesToRepository()
{
var routeId = Guid.NewGuid();
_repo.Setup(r => r.HasRouteScopeAsync(_userId, routeId)).ReturnsAsync(false);
var result = await _sut.HasRouteScopeAsync(_userId, routeId);
Assert.False(result);
}
[Fact]
public async Task HasRegionScopeAsync_DelegatesToRepository()
{
var regionId = Guid.NewGuid();
_repo.Setup(r => r.HasRegionScopeAsync(_userId, regionId)).ReturnsAsync(true);
var result = await _sut.HasRegionScopeAsync(_userId, regionId);
Assert.True(result);
}
// GetAccessibleStoreIdsAsync
[Fact]
public async Task GetAccessibleStoreIdsAsync_ReturnsEmpty_WhenNoAssignments()
{
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Empty(result);
}
[Fact]
public async Task GetAccessibleStoreIdsAsync_ReturnsDirectStores()
{
var storeId = Guid.NewGuid();
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([storeId]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Single(result);
Assert.Contains(storeId, result);
}
[Fact]
public async Task GetAccessibleStoreIdsAsync_IncludesStoresViaRoute()
{
var routeId = Guid.NewGuid();
var storeViaRoute = Guid.NewGuid();
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([routeId]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid> { routeId })).ReturnsAsync([storeViaRoute]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid>())).ReturnsAsync([]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Contains(storeViaRoute, result);
}
[Fact]
public async Task GetAccessibleStoreIdsAsync_IncludesStoresViaRegion()
{
var regionId = Guid.NewGuid();
var routeViaRegion = Guid.NewGuid();
var storeViaRegion = Guid.NewGuid();
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([regionId]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid>())).ReturnsAsync([]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(new List<Guid> { regionId })).ReturnsAsync([routeViaRegion]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid> { routeViaRegion })).ReturnsAsync([storeViaRegion]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Contains(storeViaRegion, result);
}
[Fact]
public async Task GetAccessibleStoreIdsAsync_DeduplicatesStores()
{
var sharedStoreId = Guid.NewGuid();
var routeId = Guid.NewGuid();
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([sharedStoreId]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([routeId]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid> { routeId })).ReturnsAsync([sharedStoreId]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(It.IsAny<List<Guid>>())).ReturnsAsync([]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid>())).ReturnsAsync([]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Single(result);
Assert.Equal(sharedStoreId, result[0]);
}
[Fact]
public async Task GetAccessibleStoreIdsAsync_CombinesAllSources()
{
var directStore = Guid.NewGuid();
var routeStore = Guid.NewGuid();
var regionStore = Guid.NewGuid();
var routeId = Guid.NewGuid();
var regionId = Guid.NewGuid();
var routeViaRegion = Guid.NewGuid();
_repo.Setup(r => r.GetDirectStoreIdsAsync(_userId)).ReturnsAsync([directStore]);
_repo.Setup(r => r.GetRouteIdsAsync(_userId)).ReturnsAsync([routeId]);
_repo.Setup(r => r.GetRegionIdsAsync(_userId)).ReturnsAsync([regionId]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid> { routeId })).ReturnsAsync([routeStore]);
_repo.Setup(r => r.GetRouteIdsByRegionIdsAsync(new List<Guid> { regionId })).ReturnsAsync([routeViaRegion]);
_repo.Setup(r => r.GetStoreIdsByRouteIdsAsync(new List<Guid> { routeViaRegion })).ReturnsAsync([regionStore]);
var result = await _sut.GetAccessibleStoreIdsAsync(_userId);
Assert.Equal(3, result.Count);
Assert.Contains(directStore, result);
Assert.Contains(routeStore, result);
Assert.Contains(regionStore, result);
}
}
Binary file not shown.
@@ -0,0 +1,799 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v9.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v9.0": {
"Distribution.Tests/1.0.0": {
"dependencies": {
"Distribution": "1.0.0",
"Microsoft.NET.Test.Sdk": "17.12.0",
"Moq": "4.20.72",
"xunit": "2.9.3"
},
"runtime": {
"Distribution.Tests.dll": {}
}
},
"Castle.Core/5.1.1": {
"runtime": {
"lib/net6.0/Castle.Core.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.1.1.0"
}
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer/9.0.0": {
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52903"
}
}
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"dependencies": {
"Microsoft.OpenApi": "1.6.22"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52903"
}
}
},
"Microsoft.CodeCoverage/17.12.0": {
"runtime": {
"lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.524.48002"
}
}
},
"Microsoft.EntityFrameworkCore/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.0"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.0": {
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.EntityFrameworkCore.Relational/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "9.0.0"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Protocols": "8.0.1",
"System.IdentityModel.Tokens.Jwt": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Logging": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.NET.Test.Sdk/17.12.0": {
"dependencies": {
"Microsoft.CodeCoverage": "17.12.0",
"Microsoft.TestPlatform.TestHost": "17.12.0"
}
},
"Microsoft.OpenApi/1.6.22": {
"runtime": {
"lib/netstandard2.0/Microsoft.OpenApi.dll": {
"assemblyVersion": "1.6.22.0",
"fileVersion": "1.6.22.0"
}
}
},
"Microsoft.TestPlatform.ObjectModel/17.12.0": {
"runtime": {
"lib/netcoreapp3.1/Microsoft.TestPlatform.CoreUtilities.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/Microsoft.TestPlatform.PlatformAbstractions.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
}
},
"resources": {
"lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "cs"
},
"lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "cs"
},
"lib/netcoreapp3.1/de/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "de"
},
"lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "de"
},
"lib/netcoreapp3.1/es/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "es"
},
"lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "es"
},
"lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "fr"
},
"lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "fr"
},
"lib/netcoreapp3.1/it/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "it"
},
"lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "it"
},
"lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "ja"
},
"lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "ja"
},
"lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "ko"
},
"lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "ko"
},
"lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "pl"
},
"lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "pl"
},
"lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "pt-BR"
},
"lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "pt-BR"
},
"lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "ru"
},
"lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "ru"
},
"lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "tr"
},
"lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "tr"
},
"lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "zh-Hans"
},
"lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "zh-Hans"
},
"lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll": {
"locale": "zh-Hant"
},
"lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.TestPlatform.TestHost/17.12.0": {
"dependencies": {
"Microsoft.TestPlatform.ObjectModel": "17.12.0",
"Newtonsoft.Json": "13.0.1"
},
"runtime": {
"lib/netcoreapp3.1/Microsoft.TestPlatform.CommunicationUtilities.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/Microsoft.TestPlatform.CrossPlatEngine.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/Microsoft.TestPlatform.Utilities.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/Microsoft.VisualStudio.TestPlatform.Common.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
},
"lib/netcoreapp3.1/testhost.dll": {
"assemblyVersion": "15.0.0.0",
"fileVersion": "17.1200.24.56501"
}
},
"resources": {
"lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "cs"
},
"lib/netcoreapp3.1/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "cs"
},
"lib/netcoreapp3.1/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "cs"
},
"lib/netcoreapp3.1/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "de"
},
"lib/netcoreapp3.1/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "de"
},
"lib/netcoreapp3.1/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "de"
},
"lib/netcoreapp3.1/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "es"
},
"lib/netcoreapp3.1/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "es"
},
"lib/netcoreapp3.1/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "es"
},
"lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "fr"
},
"lib/netcoreapp3.1/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "fr"
},
"lib/netcoreapp3.1/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "fr"
},
"lib/netcoreapp3.1/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "it"
},
"lib/netcoreapp3.1/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "it"
},
"lib/netcoreapp3.1/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "it"
},
"lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "ja"
},
"lib/netcoreapp3.1/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "ja"
},
"lib/netcoreapp3.1/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "ja"
},
"lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "ko"
},
"lib/netcoreapp3.1/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "ko"
},
"lib/netcoreapp3.1/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "ko"
},
"lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "pl"
},
"lib/netcoreapp3.1/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "pl"
},
"lib/netcoreapp3.1/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "pl"
},
"lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "pt-BR"
},
"lib/netcoreapp3.1/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "pt-BR"
},
"lib/netcoreapp3.1/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "pt-BR"
},
"lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "ru"
},
"lib/netcoreapp3.1/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "ru"
},
"lib/netcoreapp3.1/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "ru"
},
"lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "tr"
},
"lib/netcoreapp3.1/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "tr"
},
"lib/netcoreapp3.1/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "tr"
},
"lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "zh-Hans"
},
"lib/netcoreapp3.1/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "zh-Hans"
},
"lib/netcoreapp3.1/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "zh-Hans"
},
"lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll": {
"locale": "zh-Hant"
},
"lib/netcoreapp3.1/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll": {
"locale": "zh-Hant"
},
"lib/netcoreapp3.1/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Moq/4.20.72": {
"dependencies": {
"Castle.Core": "5.1.1"
},
"runtime": {
"lib/net6.0/Moq.dll": {
"assemblyVersion": "4.20.72.0",
"fileVersion": "4.20.72.0"
}
}
},
"MySqlConnector/2.4.0": {
"runtime": {
"lib/net9.0/MySqlConnector.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.4.0.0"
}
}
},
"Newtonsoft.Json/13.0.1": {
"runtime": {
"lib/netstandard2.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.1.25517"
}
}
},
"Pomelo.EntityFrameworkCore.MySql/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "9.0.0",
"MySqlConnector": "2.4.0"
},
"runtime": {
"lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.0.0"
}
}
},
"Swashbuckle.AspNetCore/7.3.1": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "7.3.1",
"Swashbuckle.AspNetCore.SwaggerGen": "7.3.1",
"Swashbuckle.AspNetCore.SwaggerUI": "7.3.1"
}
},
"Swashbuckle.AspNetCore.Swagger/7.3.1": {
"dependencies": {
"Microsoft.OpenApi": "1.6.22"
},
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.Swagger.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"Swashbuckle.AspNetCore.SwaggerGen/7.3.1": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "7.3.1"
},
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"Swashbuckle.AspNetCore.SwaggerUI/7.3.1": {
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.0.1",
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"xunit/2.9.3": {
"dependencies": {
"xunit.assert": "2.9.3",
"xunit.core": "2.9.3"
}
},
"xunit.abstractions/2.0.3": {
"runtime": {
"lib/netstandard2.0/xunit.abstractions.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.0.0"
}
}
},
"xunit.assert/2.9.3": {
"runtime": {
"lib/net6.0/xunit.assert.dll": {
"assemblyVersion": "2.9.3.0",
"fileVersion": "2.9.3.0"
}
}
},
"xunit.core/2.9.3": {
"dependencies": {
"xunit.extensibility.core": "2.9.3",
"xunit.extensibility.execution": "2.9.3"
}
},
"xunit.extensibility.core/2.9.3": {
"dependencies": {
"xunit.abstractions": "2.0.3"
},
"runtime": {
"lib/netstandard1.1/xunit.core.dll": {
"assemblyVersion": "2.9.3.0",
"fileVersion": "2.9.3.0"
}
}
},
"xunit.extensibility.execution/2.9.3": {
"dependencies": {
"xunit.extensibility.core": "2.9.3"
},
"runtime": {
"lib/netstandard1.1/xunit.execution.dotnet.dll": {
"assemblyVersion": "2.9.3.0",
"fileVersion": "2.9.3.0"
}
}
},
"Distribution/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "9.0.0",
"Microsoft.AspNetCore.OpenApi": "9.0.0",
"Pomelo.EntityFrameworkCore.MySql": "9.0.0",
"Swashbuckle.AspNetCore": "7.3.1"
},
"runtime": {
"Distribution.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"Distribution.Tests/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Castle.Core/5.1.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
"path": "castle.core/5.1.1",
"hashPath": "castle.core.5.1.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Authentication.JwtBearer/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bs+1Pq3vQdS2lTyxNUd9fEhtMsq3eLUpK36k2t56iDMVrk6OrAoFtvrQrTK0Y0OetTcJrUkGU7hBlf+ORzHLqQ==",
"path": "microsoft.aspnetcore.authentication.jwtbearer/9.0.0",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.9.0.0.nupkg.sha512"
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==",
"path": "microsoft.aspnetcore.openapi/9.0.0",
"hashPath": "microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512"
},
"Microsoft.CodeCoverage/17.12.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4svMznBd5JM21JIG2xZKGNanAHNXplxf/kQDFfLHXQ3OnpJkayRK/TjacFjA+EYmoyuNXHo/sOETEfcYtAzIrA==",
"path": "microsoft.codecoverage/17.12.0",
"hashPath": "microsoft.codecoverage.17.12.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==",
"path": "microsoft.entityframeworkcore/9.0.0",
"hashPath": "microsoft.entityframeworkcore.9.0.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==",
"path": "microsoft.entityframeworkcore.abstractions/9.0.0",
"hashPath": "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Relational/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==",
"path": "microsoft.entityframeworkcore.relational/9.0.0",
"hashPath": "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==",
"path": "microsoft.identitymodel.abstractions/8.0.1",
"hashPath": "microsoft.identitymodel.abstractions.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==",
"path": "microsoft.identitymodel.jsonwebtokens/8.0.1",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==",
"path": "microsoft.identitymodel.logging/8.0.1",
"hashPath": "microsoft.identitymodel.logging.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==",
"path": "microsoft.identitymodel.protocols/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==",
"path": "microsoft.identitymodel.protocols.openidconnect/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.openidconnect.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==",
"path": "microsoft.identitymodel.tokens/8.0.1",
"hashPath": "microsoft.identitymodel.tokens.8.0.1.nupkg.sha512"
},
"Microsoft.NET.Test.Sdk/17.12.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kt/PKBZ91rFCWxVIJZSgVLk+YR+4KxTuHf799ho8WNiK5ZQpJNAEZCAWX86vcKrs+DiYjiibpYKdGZP6+/N17w==",
"path": "microsoft.net.test.sdk/17.12.0",
"hashPath": "microsoft.net.test.sdk.17.12.0.nupkg.sha512"
},
"Microsoft.OpenApi/1.6.22": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==",
"path": "microsoft.openapi/1.6.22",
"hashPath": "microsoft.openapi.1.6.22.nupkg.sha512"
},
"Microsoft.TestPlatform.ObjectModel/17.12.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TDqkTKLfQuAaPcEb3pDDWnh7b3SyZF+/W9OZvWFp6eJCIiiYFdSB6taE2I6tWrFw5ywhzOb6sreoGJTI6m3rSQ==",
"path": "microsoft.testplatform.objectmodel/17.12.0",
"hashPath": "microsoft.testplatform.objectmodel.17.12.0.nupkg.sha512"
},
"Microsoft.TestPlatform.TestHost/17.12.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-MiPEJQNyADfwZ4pJNpQex+t9/jOClBGMiCiVVFuELCMSX2nmNfvUor3uFVxNNCg30uxDP8JDYfPnMXQzsfzYyg==",
"path": "microsoft.testplatform.testhost/17.12.0",
"hashPath": "microsoft.testplatform.testhost.17.12.0.nupkg.sha512"
},
"Moq/4.20.72": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
"path": "moq/4.20.72",
"hashPath": "moq.4.20.72.nupkg.sha512"
},
"MySqlConnector/2.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==",
"path": "mysqlconnector/2.4.0",
"hashPath": "mysqlconnector.2.4.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A==",
"path": "newtonsoft.json/13.0.1",
"hashPath": "newtonsoft.json.13.0.1.nupkg.sha512"
},
"Pomelo.EntityFrameworkCore.MySql/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==",
"path": "pomelo.entityframeworkcore.mysql/9.0.0",
"hashPath": "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512"
},
"Swashbuckle.AspNetCore/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6u8w+UXp/sF89xQjfydWw6znQrUpbpFOmEIs8ODE+S0bV+mCQ9dNP4mk+HRsGHylpDaP5KSYSCEfFSgluLXHsA==",
"path": "swashbuckle.aspnetcore/7.3.1",
"hashPath": "swashbuckle.aspnetcore.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.Swagger/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-jQuJ8kVbq+YE8WsJE3RwWHlF1kasp0QkA9Gl6NeNLICrhcgN8IQIthMufYW6t/4hpcN5cBIdES5jCEV81WjHbA==",
"path": "swashbuckle.aspnetcore.swagger/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swagger.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerGen/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xs7Pznb3SSjZy7HpThE0ILqECfQFsGDHOrRoIYD/j67ktdRR1juDG4AMyidXXCOipgzHanZoF+nFrc+Nmjqjyw==",
"path": "swashbuckle.aspnetcore.swaggergen/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swaggergen.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerUI/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hs6C+lmNEzipOA1WPQpIaGvvoXjUbnoevbv6l7o9ZQE8SNF8ggjOmK6NB6cYdMcEvk0uBeKl4Qq/BnRt5MFVqg==",
"path": "swashbuckle.aspnetcore.swaggerui/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swaggerui.7.3.1.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==",
"path": "system.identitymodel.tokens.jwt/8.0.1",
"hashPath": "system.identitymodel.tokens.jwt.8.0.1.nupkg.sha512"
},
"xunit/2.9.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==",
"path": "xunit/2.9.3",
"hashPath": "xunit.2.9.3.nupkg.sha512"
},
"xunit.abstractions/2.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg==",
"path": "xunit.abstractions/2.0.3",
"hashPath": "xunit.abstractions.2.0.3.nupkg.sha512"
},
"xunit.assert/2.9.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA==",
"path": "xunit.assert/2.9.3",
"hashPath": "xunit.assert.2.9.3.nupkg.sha512"
},
"xunit.core/2.9.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==",
"path": "xunit.core/2.9.3",
"hashPath": "xunit.core.2.9.3.nupkg.sha512"
},
"xunit.extensibility.core/2.9.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
"path": "xunit.extensibility.core/2.9.3",
"hashPath": "xunit.extensibility.core.2.9.3.nupkg.sha512"
},
"xunit.extensibility.execution/2.9.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
"path": "xunit.extensibility.execution/2.9.3",
"hashPath": "xunit.extensibility.execution.2.9.3.nupkg.sha512"
},
"Distribution/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}
@@ -0,0 +1,19 @@
{
"runtimeOptions": {
"tfm": "net9.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "9.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "9.0.0"
}
],
"configProperties": {
"System.Reflection.NullabilityInfoContext.IsSupported": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}
@@ -0,0 +1,879 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v9.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v9.0": {
"Distribution/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "9.0.0",
"Microsoft.AspNetCore.OpenApi": "9.0.0",
"Microsoft.EntityFrameworkCore.Design": "9.0.0",
"Pomelo.EntityFrameworkCore.MySql": "9.0.0",
"Swashbuckle.AspNetCore": "7.3.1"
},
"runtime": {
"Distribution.dll": {}
}
},
"Humanizer.Core/2.14.1": {
"runtime": {
"lib/net6.0/Humanizer.dll": {
"assemblyVersion": "2.14.0.0",
"fileVersion": "2.14.1.48190"
}
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer/9.0.0": {
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52903"
}
}
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"dependencies": {
"Microsoft.OpenApi": "1.6.22"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52903"
}
}
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"runtime": {
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Build.Locator/1.7.8": {
"runtime": {
"lib/net6.0/Microsoft.Build.Locator.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.7.8.28074"
}
}
},
"Microsoft.CodeAnalysis.Common/4.8.0": {
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
}
},
"resources": {
"lib/net7.0/cs/Microsoft.CodeAnalysis.resources.dll": {
"locale": "cs"
},
"lib/net7.0/de/Microsoft.CodeAnalysis.resources.dll": {
"locale": "de"
},
"lib/net7.0/es/Microsoft.CodeAnalysis.resources.dll": {
"locale": "es"
},
"lib/net7.0/fr/Microsoft.CodeAnalysis.resources.dll": {
"locale": "fr"
},
"lib/net7.0/it/Microsoft.CodeAnalysis.resources.dll": {
"locale": "it"
},
"lib/net7.0/ja/Microsoft.CodeAnalysis.resources.dll": {
"locale": "ja"
},
"lib/net7.0/ko/Microsoft.CodeAnalysis.resources.dll": {
"locale": "ko"
},
"lib/net7.0/pl/Microsoft.CodeAnalysis.resources.dll": {
"locale": "pl"
},
"lib/net7.0/pt-BR/Microsoft.CodeAnalysis.resources.dll": {
"locale": "pt-BR"
},
"lib/net7.0/ru/Microsoft.CodeAnalysis.resources.dll": {
"locale": "ru"
},
"lib/net7.0/tr/Microsoft.CodeAnalysis.resources.dll": {
"locale": "tr"
},
"lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll": {
"locale": "zh-Hans"
},
"lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.CodeAnalysis.CSharp/4.8.0": {
"dependencies": {
"Microsoft.CodeAnalysis.Common": "4.8.0"
},
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.CSharp.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
}
},
"resources": {
"lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "cs"
},
"lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "de"
},
"lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "es"
},
"lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "fr"
},
"lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "it"
},
"lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "ja"
},
"lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "ko"
},
"lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "pl"
},
"lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "pt-BR"
},
"lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "ru"
},
"lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "tr"
},
"lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "zh-Hans"
},
"lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": {
"dependencies": {
"Humanizer.Core": "2.14.1",
"Microsoft.CodeAnalysis.CSharp": "4.8.0",
"Microsoft.CodeAnalysis.Common": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0"
},
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.CSharp.Workspaces.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
}
},
"resources": {
"lib/net7.0/cs/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "cs"
},
"lib/net7.0/de/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "de"
},
"lib/net7.0/es/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "es"
},
"lib/net7.0/fr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "fr"
},
"lib/net7.0/it/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "it"
},
"lib/net7.0/ja/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "ja"
},
"lib/net7.0/ko/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "ko"
},
"lib/net7.0/pl/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "pl"
},
"lib/net7.0/pt-BR/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "pt-BR"
},
"lib/net7.0/ru/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "ru"
},
"lib/net7.0/tr/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "tr"
},
"lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "zh-Hans"
},
"lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": {
"dependencies": {
"Humanizer.Core": "2.14.1",
"Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"Microsoft.CodeAnalysis.Common": "4.8.0",
"System.Composition": "7.0.0"
},
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.Workspaces.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
}
},
"resources": {
"lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "cs"
},
"lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "de"
},
"lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "es"
},
"lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "fr"
},
"lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "it"
},
"lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "ja"
},
"lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "ko"
},
"lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "pl"
},
"lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "pt-BR"
},
"lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "ru"
},
"lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "tr"
},
"lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "zh-Hans"
},
"lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": {
"dependencies": {
"Microsoft.CodeAnalysis.Common": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.Common": "4.8.0"
},
"runtime": {
"lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
},
"lib/net7.0/Microsoft.CodeAnalysis.Workspaces.MSBuild.dll": {
"assemblyVersion": "4.8.0.0",
"fileVersion": "4.800.23.55801"
}
},
"resources": {
"lib/net7.0/cs/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "cs"
},
"lib/net7.0/de/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "de"
},
"lib/net7.0/es/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "es"
},
"lib/net7.0/fr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "fr"
},
"lib/net7.0/it/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "it"
},
"lib/net7.0/ja/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "ja"
},
"lib/net7.0/ko/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "ko"
},
"lib/net7.0/pl/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "pl"
},
"lib/net7.0/pt-BR/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "pt-BR"
},
"lib/net7.0/ru/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "ru"
},
"lib/net7.0/tr/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "tr"
},
"lib/net7.0/zh-Hans/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "zh-Hans"
},
"lib/net7.0/zh-Hant/Microsoft.CodeAnalysis.Workspaces.MSBuild.BuildHost.resources.dll": {
"locale": "zh-Hant"
}
}
},
"Microsoft.EntityFrameworkCore/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Abstractions": "9.0.0"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.0": {
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.EntityFrameworkCore.Design/9.0.0": {
"dependencies": {
"Humanizer.Core": "2.14.1",
"Microsoft.Build.Locator": "1.7.8",
"Microsoft.CodeAnalysis.CSharp": "4.8.0",
"Microsoft.CodeAnalysis.CSharp.Workspaces": "4.8.0",
"Microsoft.CodeAnalysis.Workspaces.MSBuild": "4.8.0",
"Microsoft.EntityFrameworkCore.Relational": "9.0.0",
"Microsoft.Extensions.DependencyModel": "9.0.0",
"Mono.TextTemplating": "3.0.0"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Design.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.EntityFrameworkCore.Relational/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore": "9.0.0"
},
"runtime": {
"lib/net8.0/Microsoft.EntityFrameworkCore.Relational.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52902"
}
}
},
"Microsoft.Extensions.DependencyModel/9.0.0": {
"runtime": {
"lib/net9.0/Microsoft.Extensions.DependencyModel.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52809"
}
}
},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Protocols": "8.0.1",
"System.IdentityModel.Tokens.Jwt": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Logging": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.OpenApi/1.6.22": {
"runtime": {
"lib/netstandard2.0/Microsoft.OpenApi.dll": {
"assemblyVersion": "1.6.22.0",
"fileVersion": "1.6.22.0"
}
}
},
"Mono.TextTemplating/3.0.0": {
"dependencies": {
"System.CodeDom": "6.0.0"
},
"runtime": {
"lib/net6.0/Mono.TextTemplating.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.1"
}
}
},
"MySqlConnector/2.4.0": {
"runtime": {
"lib/net9.0/MySqlConnector.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.4.0.0"
}
}
},
"Pomelo.EntityFrameworkCore.MySql/9.0.0": {
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "9.0.0",
"MySqlConnector": "2.4.0"
},
"runtime": {
"lib/net8.0/Pomelo.EntityFrameworkCore.MySql.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.0.0"
}
}
},
"Swashbuckle.AspNetCore/7.3.1": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "7.3.1",
"Swashbuckle.AspNetCore.SwaggerGen": "7.3.1",
"Swashbuckle.AspNetCore.SwaggerUI": "7.3.1"
}
},
"Swashbuckle.AspNetCore.Swagger/7.3.1": {
"dependencies": {
"Microsoft.OpenApi": "1.6.22"
},
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.Swagger.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"Swashbuckle.AspNetCore.SwaggerGen/7.3.1": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "7.3.1"
},
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"Swashbuckle.AspNetCore.SwaggerUI/7.3.1": {
"runtime": {
"lib/net9.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
"assemblyVersion": "7.3.1.0",
"fileVersion": "7.3.1.1111"
}
}
},
"System.CodeDom/6.0.0": {
"runtime": {
"lib/net6.0/System.CodeDom.dll": {
"assemblyVersion": "6.0.0.0",
"fileVersion": "6.0.21.52210"
}
}
},
"System.Composition/7.0.0": {
"dependencies": {
"System.Composition.AttributedModel": "7.0.0",
"System.Composition.Convention": "7.0.0",
"System.Composition.Hosting": "7.0.0",
"System.Composition.Runtime": "7.0.0",
"System.Composition.TypedParts": "7.0.0"
}
},
"System.Composition.AttributedModel/7.0.0": {
"runtime": {
"lib/net7.0/System.Composition.AttributedModel.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Composition.Convention/7.0.0": {
"dependencies": {
"System.Composition.AttributedModel": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Composition.Convention.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Composition.Hosting/7.0.0": {
"dependencies": {
"System.Composition.Runtime": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Composition.Hosting.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Composition.Runtime/7.0.0": {
"runtime": {
"lib/net7.0/System.Composition.Runtime.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Composition.TypedParts/7.0.0": {
"dependencies": {
"System.Composition.AttributedModel": "7.0.0",
"System.Composition.Hosting": "7.0.0",
"System.Composition.Runtime": "7.0.0"
},
"runtime": {
"lib/net7.0/System.Composition.TypedParts.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.0.1",
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
}
}
},
"libraries": {
"Distribution/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.Authentication.JwtBearer/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-bs+1Pq3vQdS2lTyxNUd9fEhtMsq3eLUpK36k2t56iDMVrk6OrAoFtvrQrTK0Y0OetTcJrUkGU7hBlf+ORzHLqQ==",
"path": "microsoft.aspnetcore.authentication.jwtbearer/9.0.0",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.9.0.0.nupkg.sha512"
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==",
"path": "microsoft.aspnetcore.openapi/9.0.0",
"hashPath": "microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512"
},
"Microsoft.Bcl.AsyncInterfaces/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3aeMZ1N0lJoSyzqiP03hqemtb1BijhsJADdobn/4nsMJ8V1H+CrpuduUe4hlRdx+ikBQju1VGjMD1GJ3Sk05Eg==",
"path": "microsoft.bcl.asyncinterfaces/7.0.0",
"hashPath": "microsoft.bcl.asyncinterfaces.7.0.0.nupkg.sha512"
},
"Microsoft.Build.Locator/1.7.8": {
"type": "package",
"serviceable": true,
"sha512": "sha512-sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog==",
"path": "microsoft.build.locator/1.7.8",
"hashPath": "microsoft.build.locator.1.7.8.nupkg.sha512"
},
"Microsoft.CodeAnalysis.Common/4.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/jR+e/9aT+BApoQJABlVCKnnggGQbvGh7BKq2/wI1LamxC+LbzhcLj4Vj7gXCofl1n4E521YfF9w0WcASGg/KA==",
"path": "microsoft.codeanalysis.common/4.8.0",
"hashPath": "microsoft.codeanalysis.common.4.8.0.nupkg.sha512"
},
"Microsoft.CodeAnalysis.CSharp/4.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-+3+qfdb/aaGD8PZRCrsdobbzGs1m9u119SkkJt8e/mk3xLJz/udLtS2T6nY27OTXxBBw10HzAbC8Z9w08VyP/g==",
"path": "microsoft.codeanalysis.csharp/4.8.0",
"hashPath": "microsoft.codeanalysis.csharp.4.8.0.nupkg.sha512"
},
"Microsoft.CodeAnalysis.CSharp.Workspaces/4.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3amm4tq4Lo8/BGvg9p3BJh3S9nKq2wqCXfS7138i69TUpo/bD+XvD0hNurpEBtcNZhi1FyutiomKJqVF39ugYA==",
"path": "microsoft.codeanalysis.csharp.workspaces/4.8.0",
"hashPath": "microsoft.codeanalysis.csharp.workspaces.4.8.0.nupkg.sha512"
},
"Microsoft.CodeAnalysis.Workspaces.Common/4.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LXyV+MJKsKRu3FGJA3OmSk40OUIa/dQCFLOnm5X8MNcujx7hzGu8o+zjXlb/cy5xUdZK2UKYb9YaQ2E8m9QehQ==",
"path": "microsoft.codeanalysis.workspaces.common/4.8.0",
"hashPath": "microsoft.codeanalysis.workspaces.common.4.8.0.nupkg.sha512"
},
"Microsoft.CodeAnalysis.Workspaces.MSBuild/4.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IEYreI82QZKklp54yPHxZNG9EKSK6nHEkeuf+0Asie9llgS1gp0V1hw7ODG+QyoB7MuAnNQHmeV1Per/ECpv6A==",
"path": "microsoft.codeanalysis.workspaces.msbuild/4.8.0",
"hashPath": "microsoft.codeanalysis.workspaces.msbuild.4.8.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-wpG+nfnfDAw87R3ovAsUmjr3MZ4tYXf6bFqEPVAIKE6IfPml3DS//iX0DBnf8kWn5ZHSO5oi1m4d/Jf+1LifJQ==",
"path": "microsoft.entityframeworkcore/9.0.0",
"hashPath": "microsoft.entityframeworkcore.9.0.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Abstractions/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-fnmifFL8KaA4ZNLCVgfjCWhZUFxkrDInx5hR4qG7Q8IEaSiy/6VOSRFyx55oH7MV4y7wM3J3EE90nSpcVBI44Q==",
"path": "microsoft.entityframeworkcore.abstractions/9.0.0",
"hashPath": "microsoft.entityframeworkcore.abstractions.9.0.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Design/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Pqo8I+yHJ3VQrAoY0hiSncf+5P7gN/RkNilK5e+/K/yKh+yAWxdUAI6t0TG26a9VPlCa9FhyklzyFvRyj3YG9A==",
"path": "microsoft.entityframeworkcore.design/9.0.0",
"hashPath": "microsoft.entityframeworkcore.design.9.0.0.nupkg.sha512"
},
"Microsoft.EntityFrameworkCore.Relational/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-j+msw6fWgAE9M3Q/5B9Uhv7pdAdAQUvFPJAiBJmoy+OXvehVbfbCE8ftMAa51Uo2ZeiqVnHShhnv4Y4UJJmUzA==",
"path": "microsoft.entityframeworkcore.relational/9.0.0",
"hashPath": "microsoft.entityframeworkcore.relational.9.0.0.nupkg.sha512"
},
"Microsoft.Extensions.DependencyModel/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-saxr2XzwgDU77LaQfYFXmddEDRUKHF4DaGMZkNB3qjdVSZlax3//dGJagJkKrGMIPNZs2jVFXITyCCR6UHJNdA==",
"path": "microsoft.extensions.dependencymodel/9.0.0",
"hashPath": "microsoft.extensions.dependencymodel.9.0.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==",
"path": "microsoft.identitymodel.abstractions/8.0.1",
"hashPath": "microsoft.identitymodel.abstractions.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==",
"path": "microsoft.identitymodel.jsonwebtokens/8.0.1",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==",
"path": "microsoft.identitymodel.logging/8.0.1",
"hashPath": "microsoft.identitymodel.logging.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==",
"path": "microsoft.identitymodel.protocols/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==",
"path": "microsoft.identitymodel.protocols.openidconnect/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.openidconnect.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==",
"path": "microsoft.identitymodel.tokens/8.0.1",
"hashPath": "microsoft.identitymodel.tokens.8.0.1.nupkg.sha512"
},
"Microsoft.OpenApi/1.6.22": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aBvunmrdu/x+4CaA/UP1Jx4xWGwk4kymhoIRnn2Vp+zi5/KOPQJ9EkSXHRUr01WcGKtYl3Au7XfkPJbU1G2sjQ==",
"path": "microsoft.openapi/1.6.22",
"hashPath": "microsoft.openapi.1.6.22.nupkg.sha512"
},
"Mono.TextTemplating/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YqueG52R/Xej4VVbKuRIodjiAhV0HR/XVbLbNrJhCZnzjnSjgMJ/dCdV0akQQxavX6hp/LC6rqLGLcXeQYU7XA==",
"path": "mono.texttemplating/3.0.0",
"hashPath": "mono.texttemplating.3.0.0.nupkg.sha512"
},
"MySqlConnector/2.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-78M+gVOjbdZEDIyXQqcA7EYlCGS3tpbUELHvn6638A2w0pkPI625ixnzsa5staAd3N9/xFmPJtkKDYwsXpFi/w==",
"path": "mysqlconnector/2.4.0",
"hashPath": "mysqlconnector.2.4.0.nupkg.sha512"
},
"Pomelo.EntityFrameworkCore.MySql/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-cl7S4s6CbJno0LjNxrBHNc2xxmCliR5i40ATPZk/eTywVaAbHCbdc9vbGc3QThvwGjHqrDHT8vY9m1VF/47o0g==",
"path": "pomelo.entityframeworkcore.mysql/9.0.0",
"hashPath": "pomelo.entityframeworkcore.mysql.9.0.0.nupkg.sha512"
},
"Swashbuckle.AspNetCore/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6u8w+UXp/sF89xQjfydWw6znQrUpbpFOmEIs8ODE+S0bV+mCQ9dNP4mk+HRsGHylpDaP5KSYSCEfFSgluLXHsA==",
"path": "swashbuckle.aspnetcore/7.3.1",
"hashPath": "swashbuckle.aspnetcore.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.Swagger/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-jQuJ8kVbq+YE8WsJE3RwWHlF1kasp0QkA9Gl6NeNLICrhcgN8IQIthMufYW6t/4hpcN5cBIdES5jCEV81WjHbA==",
"path": "swashbuckle.aspnetcore.swagger/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swagger.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerGen/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xs7Pznb3SSjZy7HpThE0ILqECfQFsGDHOrRoIYD/j67ktdRR1juDG4AMyidXXCOipgzHanZoF+nFrc+Nmjqjyw==",
"path": "swashbuckle.aspnetcore.swaggergen/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swaggergen.7.3.1.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerUI/7.3.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-hs6C+lmNEzipOA1WPQpIaGvvoXjUbnoevbv6l7o9ZQE8SNF8ggjOmK6NB6cYdMcEvk0uBeKl4Qq/BnRt5MFVqg==",
"path": "swashbuckle.aspnetcore.swaggerui/7.3.1",
"hashPath": "swashbuckle.aspnetcore.swaggerui.7.3.1.nupkg.sha512"
},
"System.CodeDom/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-CPc6tWO1LAer3IzfZufDBRL+UZQcj5uS207NHALQzP84Vp/z6wF0Aa0YZImOQY8iStY0A2zI/e3ihKNPfUm8XA==",
"path": "system.codedom/6.0.0",
"hashPath": "system.codedom.6.0.0.nupkg.sha512"
},
"System.Composition/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tRwgcAkDd85O8Aq6zHDANzQaq380cek9lbMg5Qma46u5BZXq/G+XvIYmu+UI+BIIZ9zssXLYrkTykEqxxvhcmg==",
"path": "system.composition/7.0.0",
"hashPath": "system.composition.7.0.0.nupkg.sha512"
},
"System.Composition.AttributedModel/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2QzClqjElKxgI1jK1Jztnq44/8DmSuTSGGahXqQ4TdEV0h9s2KikQZIgcEqVzR7OuWDFPGLHIprBJGQEPr8fAQ==",
"path": "system.composition.attributedmodel/7.0.0",
"hashPath": "system.composition.attributedmodel.7.0.0.nupkg.sha512"
},
"System.Composition.Convention/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-IMhTlpCs4HmlD8B+J8/kWfwX7vrBBOs6xyjSTzBlYSs7W4OET4tlkR/Sg9NG8jkdJH9Mymq0qGdYS1VPqRTBnQ==",
"path": "system.composition.convention/7.0.0",
"hashPath": "system.composition.convention.7.0.0.nupkg.sha512"
},
"System.Composition.Hosting/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eB6gwN9S+54jCTBJ5bpwMOVerKeUfGGTYCzz3QgDr1P55Gg/Wb27ShfPIhLMjmZ3MoAKu8uUSv6fcCdYJTN7Bg==",
"path": "system.composition.hosting/7.0.0",
"hashPath": "system.composition.hosting.7.0.0.nupkg.sha512"
},
"System.Composition.Runtime/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-aZJ1Zr5Txe925rbo4742XifEyW0MIni1eiUebmcrP3HwLXZ3IbXUj4MFMUH/RmnJOAQiS401leg/2Sz1MkApDw==",
"path": "system.composition.runtime/7.0.0",
"hashPath": "system.composition.runtime.7.0.0.nupkg.sha512"
},
"System.Composition.TypedParts/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZK0KNPfbtxVceTwh+oHNGUOYV2WNOHReX2AXipuvkURC7s/jPwoWfsu3SnDBDgofqbiWr96geofdQ2erm/KTHg==",
"path": "system.composition.typedparts/7.0.0",
"hashPath": "system.composition.typedparts.7.0.0.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==",
"path": "system.identitymodel.tokens.jwt/8.0.1",
"hashPath": "system.identitymodel.tokens.jwt.8.0.1.nupkg.sha512"
}
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
{
"runtimeOptions": {
"tfm": "net9.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "9.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "9.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Reflection.NullabilityInfoContext.IsSupported": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}
@@ -0,0 +1 @@
{"Version":1,"ManifestType":"Build","Endpoints":[]}
Binary file not shown.
@@ -0,0 +1,18 @@
{
"ConnectionStrings": {
"DefaultConnection": "Server=187.127.102.190;Port=3306;Database=distribution;User=kalana;Password=kalana@hexdive"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Jwt": {
"Key": "CHANGE_ME_dev_only_replace_with_a_long_random_secret_before_deploying",
"Issuer": "Distribution.Api",
"Audience": "Distribution.Api",
"ExpiryMinutes": 120
}
}
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More