Browse Source

合并代码

master
2017875139 3 years ago
parent
commit
8daf499742
  1. 14
      sample/Tenant.Api.Contracts/DDD/Domain/Consts/TenantConnectionStringConsts.cs
  2. 9
      sample/Tenant.Api.Contracts/DDD/Domain/Consts/TenantConsts.cs
  3. 11
      sample/Tenant.Api.Contracts/DDD/Domain/Shared/TenantEto.cs
  4. 13
      sample/Tenant.Api.Contracts/Tenant.Api.Contracts.csproj
  5. 7
      sample/Tenant.Api/DDD/Application/TenantAppService.cs
  6. 8
      sample/Tenant.Api/DDD/Domain/TenantAggregation/ITenantManager.cs
  7. 56
      sample/Tenant.Api/DDD/Domain/TenantAggregation/Tenant.cs
  8. 36
      sample/Tenant.Api/DDD/Domain/TenantAggregation/TenantConnectionString.cs
  9. 44
      sample/Tenant.Api/DDD/Domain/TenantAggregation/TenantManager.cs
  10. 13
      sample/Tenant.Api/TenantMappingProfile.cs

14
sample/Tenant.Api.Contracts/DDD/Domain/Consts/TenantConnectionStringConsts.cs

@ -0,0 +1,14 @@
namespace Tenant.Api.DDD.Domain.Consts;
public static class TenantConnectionStringConsts
{
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxNameLength { get; set; } = 64;
/// <summary>
/// Default value: 1024
/// </summary>
public static int MaxValueLength { get; set; } = 1024;
}

9
sample/Tenant.Api.Contracts/DDD/Domain/Consts/TenantConsts.cs

@ -0,0 +1,9 @@
namespace Tenant.Api.DDD.Domain.Consts;
public static class TenantConsts
{
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxNameLength { get; set; } = 64;
}

11
sample/Tenant.Api.Contracts/DDD/Domain/Shared/TenantEto.cs

@ -0,0 +1,11 @@
using System;
namespace Tenant.Api.DDD.Domain.Shared;
[Serializable]
public class TenantEto
{
public Guid Id { get; set; }
public string Name { get; set; }
}

13
sample/Tenant.Api.Contracts/Tenant.Api.Contracts.csproj

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="DDD\Application\Dtos\" />
</ItemGroup>
</Project>

7
sample/Tenant.Api/DDD/Application/TenantAppService.cs

@ -0,0 +1,7 @@
using Easy.DDD.Application;
namespace Tenant.Api.DDD.Application;
public class TenantAppService : IApiService
{
}

8
sample/Tenant.Api/DDD/Domain/TenantAggregation/ITenantManager.cs

@ -0,0 +1,8 @@
namespace Tenant.Api.DDD.Domain.TenantAggregate;
public interface ITenantManager
{
Task<Tenant> CreateAsync(string name);
Task ChangeNameAsync(Tenant tenant, string name);
}

56
sample/Tenant.Api/DDD/Domain/TenantAggregation/Tenant.cs

@ -0,0 +1,56 @@
using Easy;
using Easy.DDD.Domain.Entities;
using Tenant.Api.DDD.Domain.Consts;
namespace Tenant.Api.DDD.Domain.TenantAggregation;
public class Tenant : AggregateRoot<Guid>
{
public virtual string Name { get; protected set; }
public virtual List<TenantConnectionString> ConnectionStrings { get; protected set; }
protected Tenant()
{
}
protected internal Tenant(Guid id, string name)
: base(id)
{
SetName(name);
ConnectionStrings = new List<TenantConnectionString>();
}
public virtual void SetConnectionString(string name, string connectionString)
{
var tenantConnectionString = ConnectionStrings.FirstOrDefault(x => x.Name == name);
if (tenantConnectionString != null)
{
tenantConnectionString.SetValue(connectionString);
}
else
{
ConnectionStrings.Add(new TenantConnectionString(Id, name, connectionString));
}
}
public virtual void RemoveConnectionString(string name)
{
var tenantConnectionString = ConnectionStrings.FirstOrDefault(x => x.Name == name);
if (tenantConnectionString != null)
{
ConnectionStrings.Remove(tenantConnectionString);
}
}
protected internal virtual void SetName(string name)
{
Name = Check.NotNullOrWhiteSpace(name, nameof(name), TenantConsts.MaxNameLength);
}
}

36
sample/Tenant.Api/DDD/Domain/TenantAggregation/TenantConnectionString.cs

@ -0,0 +1,36 @@
using Easy;
using Easy.DDD.Domain.Entities;
using Tenant.Api.DDD.Domain.Consts;
namespace Tenant.Api.DDD.Domain.TenantAggregation;
public class TenantConnectionString : Entity
{
public virtual Guid TenantId { get; protected set; }
public virtual string Name { get; protected set; }
public virtual string Value { get; protected set; }
protected TenantConnectionString()
{
}
public TenantConnectionString(Guid tenantId, string name, string value)
{
TenantId = tenantId;
Name = Check.NotNullOrWhiteSpace(name, nameof(name), TenantConnectionStringConsts.MaxNameLength);
SetValue(value);
}
public virtual void SetValue(string value)
{
Value = Check.NotNullOrWhiteSpace(value, nameof(value), TenantConnectionStringConsts.MaxValueLength);
}
public override object[] GetKeys()
{
return new object[] { TenantId, Name };
}
}

44
sample/Tenant.Api/DDD/Domain/TenantAggregation/TenantManager.cs

@ -0,0 +1,44 @@
using Easy;
using Easy.DDD.Domain.Repositories;
using Easy.Guids;
using Microsoft.EntityFrameworkCore;
namespace Tenant.Api.DDD.Domain.TenantAggregation;
public class TenantManager
{
public IRepository<Tenant> TenantRepository { get; }
protected IGuidGenerator GuidGenerator { get; }
public TenantManager(IRepository<Tenant> tenantRepository)
{
TenantRepository = tenantRepository;
}
public virtual async Task<Tenant> CreateAsync(string name)
{
Check.NotNull(name, nameof(name));
await ValidateNameAsync(name);
return new Tenant(GuidGenerator.Create(), name);
}
public virtual async Task ChangeNameAsync(Tenant tenant, string name)
{
Check.NotNull(tenant, nameof(tenant));
Check.NotNull(name, nameof(name));
await ValidateNameAsync(name, tenant.Id);
tenant.SetName(name);
}
protected virtual async Task ValidateNameAsync(string name, Guid? expectedId = null)
{
var tenant = await TenantRepository
.Where(o => o.Name == name)
.Include(x => x.ConnectionStrings)
.OrderBy(t => t.Id)
.FirstOrDefaultAsync();
When.Is(tenant != null && tenant.Id != expectedId, "重复的租户名称: " + name);
}
}

13
sample/Tenant.Api/TenantMappingProfile.cs

@ -0,0 +1,13 @@
using AutoMapper;
using Tenant.Api.DDD.Domain.Shared;
namespace Tenant.Api.DDD.Domain;
public class TenantMappingProfile : Profile
{
public TenantMappingProfile()
{
CreateMap<TenantAggregate.Tenant, TenantEto>();
}
}
Loading…
Cancel
Save