Add SetActiveStatusAsync, and update DTOs for active status management.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Distribution.Features.Scheme;
|
||||
using Distribution.Features.Stock;
|
||||
using Distribution.Infra.Authorization;
|
||||
using Distribution.Infra.UoW;
|
||||
using Distribution.Models;
|
||||
@@ -23,21 +24,20 @@ public class StoreService(IStoreRepository repo, IUnitOfWork uow, ICurrentUserSe
|
||||
new(s.Id, s.FK_RouteId, s.OwnerName, s.StoreName, s.StoreAddress, s.Latitude, s.Longitude, s.OneTimeAmount, s.CreditAmount,
|
||||
s.CreditLimit, s.OutstandingBalance, s.Segment, s.KycStatus, s.IsActive, s.CreatedAt);
|
||||
|
||||
public async Task<List<StoreResponse>> GetAllAsync()
|
||||
public async Task<PagedResponse<StoreResponse>> GetAllAsync(
|
||||
Guid? routeId, KycStatus? kycStatus, string? search, int page, int pageSize)
|
||||
{
|
||||
var stores = (await repo.GetAllAsync()).Where(s => s.IsActive).ToList();
|
||||
if (!HasGlobalScope && currentUser.UserId is not null)
|
||||
{
|
||||
var accessibleStoreIds = (await scopeAccess.GetAccessibleStoreIdsAsync(currentUser.UserId.Value)).ToHashSet();
|
||||
stores = stores.Where(s => accessibleStoreIds.Contains(s.Id)).ToList();
|
||||
}
|
||||
return stores.Select(ToResponse).ToList();
|
||||
// Deactivated stores stay visible in the list showing Inactive — deactivate never
|
||||
// removes the row, only marks it (same rule as Orders, see testbug.md #42).
|
||||
var total = await repo.GetCountAsync(routeId, kycStatus, search);
|
||||
var stores = await repo.GetAllAsync(routeId, kycStatus, search, page, pageSize);
|
||||
return new PagedResponse<StoreResponse>(page, pageSize, total, stores.Select(ToResponse).ToList());
|
||||
}
|
||||
|
||||
public async Task<StoreResponse?> GetByIdAsync(Guid id)
|
||||
{
|
||||
var store = await repo.GetByIdAsync(id);
|
||||
if (store is null || !store.IsActive) return null;
|
||||
if (store is null) return null;
|
||||
//if (!await HasStoreScopeAsync(id)) return null;
|
||||
return ToResponse(store);
|
||||
}
|
||||
@@ -72,7 +72,7 @@ public class StoreService(IStoreRepository repo, IUnitOfWork uow, ICurrentUserSe
|
||||
public async Task<StoreResponse?> UpdateAsync(Guid id, UpdateStoreRequest request, CancellationToken ct = default)
|
||||
{
|
||||
var store = await repo.GetByIdAsync(id);
|
||||
if (store is null || !store.IsActive) return null;
|
||||
if (store is null) return null;
|
||||
if (!await HasStoreScopeAsync(id)) return null;
|
||||
store.FK_RouteId = request.RouteId;
|
||||
store.OwnerName = request.OwnerName;
|
||||
@@ -82,6 +82,7 @@ public class StoreService(IStoreRepository repo, IUnitOfWork uow, ICurrentUserSe
|
||||
store.Longitude = request.Longitude;
|
||||
store.OneTimeAmount = request.OneTimeAmount;
|
||||
store.CreditAmount = request.CreditAmount;
|
||||
store.IsActive = request.IsActive;
|
||||
await uow.BeginAsync(ct);
|
||||
try
|
||||
{
|
||||
@@ -205,10 +206,32 @@ public class StoreService(IStoreRepository repo, IUnitOfWork uow, ICurrentUserSe
|
||||
return ToResponse(store);
|
||||
}
|
||||
|
||||
public async Task<StoreResponse?> SetActiveStatusAsync(Guid id, bool isActive, CancellationToken ct = default)
|
||||
{
|
||||
var store = await repo.GetByIdAsync(id);
|
||||
if (store is null) return null;
|
||||
if (!await HasStoreScopeAsync(id)) return null;
|
||||
|
||||
store.IsActive = isActive;
|
||||
|
||||
await uow.BeginAsync(ct);
|
||||
try
|
||||
{
|
||||
repo.Update(store);
|
||||
await uow.CommitAsync(ct);
|
||||
}
|
||||
catch
|
||||
{
|
||||
await uow.RollbackAsync(ct);
|
||||
throw;
|
||||
}
|
||||
return ToResponse(store);
|
||||
}
|
||||
|
||||
public async Task<List<StoreVisitHistoryItem>?> GetVisitHistoryAsync(Guid id)
|
||||
{
|
||||
var store = await repo.GetByIdAsync(id);
|
||||
if (store is null || !store.IsActive) return null;
|
||||
if (store is null) return null;
|
||||
if (!await HasStoreScopeAsync(id)) return null;
|
||||
|
||||
var visits = await routeRepo.GetVisitsByStoreIdAsync(id);
|
||||
|
||||
Reference in New Issue
Block a user