added DbTenantPartner

This commit is contained in:
pavelbannov 2023-08-16 18:42:56 +03:00
parent c0f3860ee9
commit d7897fa890
7 changed files with 160 additions and 11 deletions

View File

@ -39,6 +39,7 @@ public class TenantRegistrationInfo
public string PasswordHash { get; set; }
public EmployeeActivationStatus ActivationStatus { get; set; }
public string HostedRegion { get; set; }
public string PartnerId { get; set; }
public string AffiliateId { get; set; }
public TenantIndustry Industry { get; set; }
public bool Spam { get; set; }

View File

@ -220,9 +220,9 @@ public class DbTenantService : ITenantService
var dbTenant = _mapper.Map<Tenant, DbTenant>(tenant);
dbTenant.Id = 0;
dbTenant = tenantDbContext.Tenants.Add(dbTenant).Entity;
await tenantDbContext.SaveChangesAsync();
tenant.Id = dbTenant.Id;
}
else
@ -256,6 +256,30 @@ public class DbTenantService : ITenantService
await tenantDbContext.SaveChangesAsync();
}
if (string.IsNullOrEmpty(tenant.PartnerId) && string.IsNullOrEmpty(tenant.AffiliateId) && string.IsNullOrEmpty(tenant.Campaign))
{
var p = tenantDbContext.TenantPartner
.Where(r => r.TenantId == tenant.Id)
.FirstOrDefault();
if (p != null)
{
tenantDbContext.TenantPartner.Remove(p);
}
}
else
{
var tenantPartner = new DbTenantPartner
{
TenantId = tenant.Id,
PartnerId = tenant.PartnerId,
AffiliateId = tenant.AffiliateId,
Campaign = tenant.Campaign
};
tenantDbContext.TenantPartner.Add(tenantPartner);
}
await tx.CommitAsync();
}).GetAwaiter()
.GetResult();
@ -299,7 +323,7 @@ public class DbTenantService : ITenantService
await tx.CommitAsync();
}).GetAwaiter()
.GetResult();
.GetResult();
}
public IEnumerable<TenantVersion> GetTenantVersions()
@ -358,7 +382,7 @@ public class DbTenantService : ITenantService
}
await tenantDbContext.SaveChangesAsync();
await tx.CommitAsync();
}).GetAwaiter()
.GetResult();

View File

@ -30,6 +30,7 @@ public class TenantDbContext : DbContext
{
public DbSet<DbTenant> Tenants { get; set; }
public DbSet<DbTenantVersion> TenantVersion { get; set; }
public DbSet<DbTenantPartner> TenantPartner { get; set; }
public DbSet<DbTenantForbiden> TenantForbiden { get; set; }
public DbSet<TenantIpRestrictions> TenantIpRestrictions { get; set; }
public DbSet<DbCoreSettings> CoreSettings { get; set; }
@ -44,6 +45,7 @@ public class TenantDbContext : DbContext
.AddCoreSettings()
.AddDbTenantForbiden()
.AddTenantIpRestrictions()
.AddDbTenantPartner()
.AddDbTenantVersion();
}
}

View File

@ -60,7 +60,7 @@ public class DbTenant : IMapFrom<Tenant>
public bool Spam { get; set; }
public bool Calls { get; set; }
// public DbTenantPartner Partner { get; set; }
public DbTenantPartner Partner { get; set; }
public void Mapping(Profile profile)
{
@ -70,8 +70,15 @@ public class DbTenant : IMapFrom<Tenant>
.ForMember(dest => dest.Alias, opt => opt.MapFrom(dest => dest.Alias.ToLowerInvariant()))
.ForMember(dest => dest.LastModified, opt => opt.MapFrom(dest => DateTime.UtcNow))
.ForMember(dest => dest.Name, opt => opt.MapFrom(dest => dest.Name ?? ""))
.ForMember(dest => dest.MappedDomain, opt => opt.MapFrom(dest =>
!string.IsNullOrEmpty(dest.MappedDomain) ? dest.MappedDomain.ToLowerInvariant() : null));
.ForMember(dest => dest.Name, opt => opt.MapFrom(dest => dest.Name ?? ""))
.ForMember(dest => dest.Partner, opt => opt.MapFrom(dest => new DbTenantPartner
{
TenantId = dest.Id,
AffiliateId = dest.AffiliateId,
PartnerId = dest.PartnerId,
Campaign = dest.Campaign,
}))
.ForMember(dest => dest.MappedDomain, opt => opt.MapFrom(dest => !string.IsNullOrEmpty(dest.MappedDomain) ? dest.MappedDomain.ToLowerInvariant() : null));
}
}
@ -99,10 +106,10 @@ public static class DbTenantExtension
public static void MySqlAddDbTenant(this ModelBuilder modelBuilder)
{
//modelBuilder.Entity<DbTenant>()
// .HasOne(r => r.Partner)
// .WithOne(r => r.Tenant)
// .HasPrincipalKey<DbTenant>(r => new { r.Id });
modelBuilder.Entity<DbTenant>()
.HasOne(r => r.Partner)
.WithOne(r => r.Tenant)
.HasPrincipalKey<DbTenant>(r => new { r.Id });
modelBuilder.Entity<DbTenant>(entity =>
{

View File

@ -0,0 +1,113 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core.Common.EF.Model;
public class DbTenantPartner
{
public int TenantId { get; set; }
public string PartnerId { get; set; }
public string AffiliateId { get; set; }
public string Campaign { get; set; }
public DbTenant Tenant { get; set; }
}
public static class DbTenantPartnerExtension
{
public static ModelBuilderWrapper AddDbTenantPartner(this ModelBuilderWrapper modelBuilder)
{
modelBuilder
.Add(MySqlAddDbTenantPartner, Provider.MySql)
.Add(PgSqlAddDbTenantPartner, Provider.PostgreSql);
return modelBuilder;
}
public static void MySqlAddDbTenantPartner(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<DbTenantPartner>(entity =>
{
entity.HasKey(e => e.TenantId)
.HasName("PRIMARY");
entity.ToTable("tenants_partners")
.HasCharSet("utf8");
entity.Property(e => e.TenantId)
.HasColumnName("tenant_id")
.ValueGeneratedNever();
entity.Property(e => e.AffiliateId)
.HasColumnName("affiliate_id")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Campaign)
.HasColumnName("campaign")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.PartnerId)
.HasColumnName("partner_id")
.HasColumnType("varchar(36)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
});
}
public static void PgSqlAddDbTenantPartner(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<DbTenantPartner>(entity =>
{
entity.HasKey(e => e.TenantId)
.HasName("tenants_partners_pkey");
entity.ToTable("tenants_partners", "onlyoffice");
entity.Property(e => e.TenantId)
.HasColumnName("tenant_id")
.ValueGeneratedNever();
entity.Property(e => e.AffiliateId)
.HasColumnName("affiliate_id")
.HasMaxLength(50)
.HasDefaultValueSql("NULL");
entity.Property(e => e.Campaign)
.HasColumnName("campaign")
.HasMaxLength(50)
.HasDefaultValueSql("NULL");
entity.Property(e => e.PartnerId)
.HasColumnName("partner_id")
.HasMaxLength(36)
.HasDefaultValueSql("NULL");
});
}
}

View File

@ -135,6 +135,7 @@ public class HostedSolution
Language = registrationInfo.Culture.Name,
TimeZone = registrationInfo.TimeZoneInfo.Id,
HostedRegion = registrationInfo.HostedRegion,
PartnerId = registrationInfo.PartnerId,
AffiliateId = registrationInfo.AffiliateId,
Campaign = registrationInfo.Campaign,
Industry = registrationInfo.Industry,

View File

@ -74,6 +74,7 @@ public class Tenant : IMapFrom<DbTenant>
public string MappedDomain { get; set; }
public string Name { get; set; }
public Guid OwnerId { get; set; }
public string PartnerId { get; set; }
public string PaymentId { get; set; }
public bool Spam { get; set; }
public TenantStatus Status { get; internal set; }