Browse Source

Refactor tenant connection string management. #1002

pull/1007/head
Halil ibrahim Kalkan 8 years ago
parent
commit
21d7b0c9e8
  1. 4
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs
  2. 6
      modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs
  3. 41
      modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs
  4. 9
      modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs
  5. 6
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json
  6. 11
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml
  7. 9
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs
  8. 20
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js
  9. 3
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml
  10. 5
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js
  11. 7
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj

4
modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs

@ -8,9 +8,9 @@ namespace Volo.Abp.TenantManagement
{
Task<string> GetDefaultConnectionStringAsync(Guid id);
Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString);
Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString);
Task RemoveDefaultConnectionStringAsync(Guid id);
Task DeleteDefaultConnectionStringAsync(Guid id);
}
}

6
modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs

@ -86,16 +86,18 @@ namespace Volo.Abp.TenantManagement
return tenant?.FindDefaultConnectionString();
}
public async Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString)
public async Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.SetDefaultConnectionString(defaultConnectionString);
await TenantRepository.UpdateAsync(tenant);
}
public async Task RemoveDefaultConnectionStringAsync(Guid id)
public async Task DeleteDefaultConnectionStringAsync(Guid id)
{
var tenant = await TenantRepository.GetAsync(id);
tenant.RemoveDefaultConnectionString();
await TenantRepository.UpdateAsync(tenant);
}
}
}

41
modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs

@ -32,37 +32,44 @@ namespace Volo.Abp.TenantManagement
return FindConnectionString(Data.ConnectionStrings.DefaultConnectionStringName);
}
public virtual void SetDefaultConnectionString(string defaultConnectionString)
[CanBeNull]
public virtual string FindConnectionString(string name)
{
return ConnectionStrings.FirstOrDefault(c => c.Name == name)?.Value;
}
public virtual void SetDefaultConnectionString(string connectionString)
{
SetConnectionString(Data.ConnectionStrings.DefaultConnectionStringName, connectionString);
}
public virtual void SetConnectionString(string name, string connectionString)
{
var defaultConnectionStringName =
ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName);
var tenantConnectionString = ConnectionStrings.FirstOrDefault(x => x.Name == name);
if (defaultConnectionStringName != null)
if (tenantConnectionString != null)
{
defaultConnectionStringName.SetValue(defaultConnectionString);
tenantConnectionString.SetValue(connectionString);
}
else
{
ConnectionStrings.Add(new TenantConnectionString(Id, Data.ConnectionStrings.DefaultConnectionStringName,
defaultConnectionString));
ConnectionStrings.Add(new TenantConnectionString(Id, name, connectionString));
}
}
public virtual void RemoveDefaultConnectionString()
{
var defaultConnectionStringName =
ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName);
if (defaultConnectionStringName != null)
{
ConnectionStrings.Remove(defaultConnectionStringName);
}
RemoveConnectionString(Data.ConnectionStrings.DefaultConnectionStringName);
}
[CanBeNull]
public virtual string FindConnectionString(string name)
public virtual void RemoveConnectionString(string name)
{
return ConnectionStrings.FirstOrDefault(c => c.Name == name)?.Value;
var tenantConnectionString = ConnectionStrings.FirstOrDefault(x => x.Name == name);
if (tenantConnectionString != null)
{
ConnectionStrings.Remove(tenantConnectionString);
}
}
internal void SetName([NotNull] string name)

9
modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs

@ -43,20 +43,19 @@ namespace Volo.Abp.TenantManagement
return _service.DeleteAsync(id);
}
[HttpPost]
public Task<string> GetDefaultConnectionStringAsync(Guid id)
{
return _service.GetDefaultConnectionStringAsync(id);
}
public Task SetDefaultConnectionStringAsync(Guid id, string defaultConnectionString)
public Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString)
{
return _service.SetDefaultConnectionStringAsync(id, defaultConnectionString);
return _service.UpdateDefaultConnectionStringAsync(id, defaultConnectionString);
}
public Task RemoveDefaultConnectionStringAsync(Guid id)
public Task DeleteDefaultConnectionStringAsync(Guid id)
{
return _service.RemoveDefaultConnectionStringAsync(id);
return _service.DeleteDefaultConnectionStringAsync(id);
}
}
}

6
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Localization/Resources/AbpTenantManagement/Web/tr.json

@ -7,8 +7,8 @@
"TenantName": "Müşteri adı",
"DisplayName:TenantName": "Müşteri adı",
"TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?",
"ConnectionStrings": "Bağlantı dizeleri",
"DisplayName:DefaultConnectionString": "Varsayılan Bağlantı Dize",
"DisplayName:UseSharedDatabase": "Paylaşılan Veritabanını kullanın"
"ConnectionStrings": "Bağlantı cümlesi",
"DisplayName:DefaultConnectionString": "Varsayılan bağlantı cümlesi",
"DisplayName:UseSharedDatabase": "Paylaşılan veritabanını kullan"
}
}

11
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml

@ -23,13 +23,4 @@
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>
<script>
$("#Tenant_UseSharedDatabase").change(function() {
$("#Tenant_DefaultConnectionString_Wrap").toggleClass("d-none");
$(this).val($(this).prop("checked"));
});
</script>
</form>

9
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs

@ -21,7 +21,7 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
public async Task OnGetAsync(Guid id)
{
var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id);
Tenant = new TenantInfoModel()
Tenant = new TenantInfoModel
{
Id = id,
DefaultConnectionString = defaultConnectionString,
@ -35,12 +35,11 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace())
{
await _tenantAppService.RemoveDefaultConnectionStringAsync(Tenant.Id);
await _tenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id);
}
else
{
await _tenantAppService.SetDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString);
await _tenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString);
}
return NoContent();
@ -51,11 +50,9 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[HiddenInput]
public Guid Id { get; set; }
[Display(Name = "DisplayName:UseSharedDatabase")]
public bool UseSharedDatabase { get; set; }
[StringLength(TenantConnectionStringConsts.MaxNameLength)]
[Display(Name = "DisplayName:DefaultConnectionString")]
public string DefaultConnectionString { get; set; }
}
}

20
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.js

@ -0,0 +1,20 @@
(function ($) {
abp.modals.TenantConnectionStringManagement = function() {
var initModal = function (publicApi, args) {
publicApi.getModal()
.find('input[name="Tenant.UseSharedDatabase"]')
.change(function () {
var $this = $(this);
$("#Tenant_DefaultConnectionString_Wrap").toggleClass("d-none");
$this.val($this.prop("checked"));
});
};
return {
initModal: initModal
};
};
})(jQuery);

3
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml

@ -14,8 +14,9 @@
}
@section scripts {
<abp-script-bundle name="@typeof(IndexModel).FullName">
<abp-script src="/modules/multi-tenancy/views/tenants/index.js" />
<abp-script src="/Pages/FeatureManagement/feature-management-modal.js" />
<abp-script src="/Pages/TenantManagement/Tenants/ConnectionStringsModal.js" />
<abp-script src="/Pages/TenantManagement/Tenants/Index.js" />
</abp-script-bundle>
}
<abp-card id="TenantsWrapper">

5
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/wwwroot/modules/multi-tenancy/views/tenants/index.js → modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js

@ -4,9 +4,12 @@
var _tenantAppService = volo.abp.tenantManagement.tenant;
var _editModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/EditModal');
var _connectionStringsModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal');
var _createModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/CreateModal');
var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal');
var _connectionStringsModal = new abp.ModalManager({
viewUrl: abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal',
modalClass: 'TenantConnectionStringManagement'
});
$(function () {

7
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Volo.Abp.TenantManagement.Web.csproj

@ -12,18 +12,19 @@
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="wwwroot\**\*.*" />
<EmbeddedResource Include="Pages\**\*.cshtml" />
<EmbeddedResource Include="Pages\**\*.*" Exclude="*.cs" />
<EmbeddedResource Include="Localization\Resources\AbpTenantManagement\Web\*.json" />
</ItemGroup>
<ItemGroup>
<Content Remove="wwwroot\**\*.*" />
<Content Remove="Pages\**\*.cshtml" />
<Content Remove="Pages\**\*.js" />
<Content Remove="Pages\**\*.css" />
<Content Remove="Localization\Resources\**\*.json" />
<Content Remove="compilerconfig.json" />
<Content Remove="compilerconfig.json.defaults" />
<Content Remove="Properties\launchSettings.json" />
<None Remove="Pages\TenantManagement\Tenants\ConnectionStringsModal.js" />
<None Include="compilerconfig.json" />
<None Include="Properties\launchSettings.json" />
</ItemGroup>

Loading…
Cancel
Save