diff --git a/src/core/Deal.Api/Endpoints/OperatorTenantsEndpoints.cs b/src/core/Deal.Api/Endpoints/OperatorTenantsEndpoints.cs
index bafc30c..73f8f05 100644
--- a/src/core/Deal.Api/Endpoints/OperatorTenantsEndpoints.cs
+++ b/src/core/Deal.Api/Endpoints/OperatorTenantsEndpoints.cs
@@ -144,12 +144,7 @@ public static class OperatorTenantsEndpoints
return EndpointResults.Unauthorized(AuthHelpers.OperatorUnauthorizedDetail);
}
- TenantDetailDto? tenant = await tenantAdminService.GetAsync(id, ct);
- if (tenant is null)
- {
- return EndpointResults.NotFound(TenantNotFoundDetail);
- }
-
+ TenantDetailDto tenant = await tenantAdminService.GetAsync(id, ct);
return Results.Ok(tenant);
}
diff --git a/src/core/Deal.Modules.Tenants/Application/Services/TenantAdminService.cs b/src/core/Deal.Modules.Tenants/Application/Services/TenantAdminService.cs
index 7a4a553..70ec5f5 100644
--- a/src/core/Deal.Modules.Tenants/Application/Services/TenantAdminService.cs
+++ b/src/core/Deal.Modules.Tenants/Application/Services/TenantAdminService.cs
@@ -1,6 +1,7 @@
using Deal.Modules.Tenants.Application.Abstractions;
using Deal.Modules.Tenants.Application.Models;
using Deal.SharedKernel;
+using Deal.SharedKernel.Errors;
using Deal.SharedKernel.Utilities;
namespace Deal.Modules.Tenants.Application.Services;
@@ -17,6 +18,9 @@ public sealed class TenantAdminService(
// Случайные байты одноразового пароля владельца: 12 → ровно 16 символов Base64Url (как InviteCodeGenerator).
private const int InitialPasswordRandomByteCount = 12;
+ // Имя сущности для текста ошибки «не найдено» (пользователь = тенант с его окружением).
+ private const string TenantEntityName = "Пользователь";
+
///
/// Создаёт тенанта оператором
///
@@ -103,14 +107,12 @@ public sealed class TenantAdminService(
/// Детали тенанта с пользователями
///
/// Идентификатор тенанта.
- /// Детали и пользователи тенанта (по CreatedAt) или null, если тенанта нет.
- public async Task GetAsync(Guid id, CancellationToken ct)
+ /// Детали и пользователи тенанта (по CreatedAt).
+ /// Тенант не найден.
+ public async Task GetAsync(Guid id, CancellationToken ct)
{
- var tenant = await tenantRepository.FindByIdAsync(id, ct);
- if (tenant is null)
- {
- return null;
- }
+ var tenant = await tenantRepository.FindByIdAsync(id, ct)
+ ?? throw new NotFoundException(TenantEntityName, id.ToString("N"));
IReadOnlyList users = await authStore.ListUsersByTenantIdAsync(id, ct);
return new TenantDetailDto(tenant.Id, tenant.Name, tenant.Status, tenant.CreatedAt, users);
diff --git a/src/core/tests/Deal.Tests.Unit/Modules/Tenants/TenantAdminServiceTests.cs b/src/core/tests/Deal.Tests.Unit/Modules/Tenants/TenantAdminServiceTests.cs
index e0cb343..111639f 100644
--- a/src/core/tests/Deal.Tests.Unit/Modules/Tenants/TenantAdminServiceTests.cs
+++ b/src/core/tests/Deal.Tests.Unit/Modules/Tenants/TenantAdminServiceTests.cs
@@ -1,7 +1,8 @@
+using Deal.Modules.Tenants.Application.Abstractions;
using Deal.Modules.Tenants.Application.Models;
using Deal.Modules.Tenants.Application.Services;
+using Deal.SharedKernel.Errors;
using Deal.Tests.Unit.Support;
-using Deal.Modules.Tenants.Application.Abstractions;
namespace Deal.Tests.Unit.Modules.Tenants;
@@ -148,11 +149,12 @@ public sealed class TenantAdminServiceTests
}
[Fact]
- public async Task GetAsync_ForUnknownTenant_ReturnsNull()
+ public async Task GetAsync_ForUnknownTenant_ThrowsNotFound()
{
var service = NewService(new TestTenantStore(), new TestAuthStore());
- Assert.Null(await service.GetAsync(Guid.NewGuid(), CancellationToken.None));
+ await Assert.ThrowsAsync(
+ () => service.GetAsync(Guid.NewGuid(), CancellationToken.None));
}
[Fact]