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<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(); 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); var tenant = await TenantRepository.GetAsync(id);
tenant.SetDefaultConnectionString(defaultConnectionString); 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); var tenant = await TenantRepository.GetAsync(id);
tenant.RemoveDefaultConnectionString(); 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); 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 = var tenantConnectionString = ConnectionStrings.FirstOrDefault(x => x.Name == name);
ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName);
if (defaultConnectionStringName != null) if (tenantConnectionString != null)
{ {
defaultConnectionStringName.SetValue(defaultConnectionString); tenantConnectionString.SetValue(connectionString);
} }
else else
{ {
ConnectionStrings.Add(new TenantConnectionString(Id, Data.ConnectionStrings.DefaultConnectionStringName, ConnectionStrings.Add(new TenantConnectionString(Id, name, connectionString));
defaultConnectionString));
} }
} }
public virtual void RemoveDefaultConnectionString() public virtual void RemoveDefaultConnectionString()
{ {
var defaultConnectionStringName = RemoveConnectionString(Data.ConnectionStrings.DefaultConnectionStringName);
ConnectionStrings.FirstOrDefault(x => x.Name == Data.ConnectionStrings.DefaultConnectionStringName);
if (defaultConnectionStringName != null)
{
ConnectionStrings.Remove(defaultConnectionStringName);
}
} }
[CanBeNull] public virtual void RemoveConnectionString(string name)
public virtual string FindConnectionString(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) 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); return _service.DeleteAsync(id);
} }
[HttpPost]
public Task<string> GetDefaultConnectionStringAsync(Guid id) public Task<string> GetDefaultConnectionStringAsync(Guid id)
{ {
return _service.GetDefaultConnectionStringAsync(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ı", "TenantName": "Müşteri adı",
"DisplayName:TenantName": "Müşteri adı", "DisplayName:TenantName": "Müşteri adı",
"TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?", "TenantDeletionConfirmationMessage": "'{0}' isimli müşteri silinecektir. Onaylıyor musunuz?",
"ConnectionStrings": "Bağlantı dizeleri", "ConnectionStrings": "Bağlantı cümlesi",
"DisplayName:DefaultConnectionString": "Varsayılan Bağlantı Dize", "DisplayName:DefaultConnectionString": "Varsayılan bağlantı cümlesi",
"DisplayName:UseSharedDatabase": "Paylaşılan Veritabanını kullanın" "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-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer> <abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal> </abp-modal>
</form> </form>
<script>
$("#Tenant_UseSharedDatabase").change(function() {
$("#Tenant_DefaultConnectionString_Wrap").toggleClass("d-none");
$(this).val($(this).prop("checked"));
});
</script>

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) public async Task OnGetAsync(Guid id)
{ {
var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id); var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id);
Tenant = new TenantInfoModel() Tenant = new TenantInfoModel
{ {
Id = id, Id = id,
DefaultConnectionString = defaultConnectionString, DefaultConnectionString = defaultConnectionString,
@ -35,12 +35,11 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace()) if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace())
{ {
await _tenantAppService.RemoveDefaultConnectionStringAsync(Tenant.Id); await _tenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id);
} }
else else
{ {
await _tenantAppService.SetDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString); await _tenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString);
} }
return NoContent(); return NoContent();
@ -51,11 +50,9 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[HiddenInput] [HiddenInput]
public Guid Id { get; set; } public Guid Id { get; set; }
[Display(Name = "DisplayName:UseSharedDatabase")]
public bool UseSharedDatabase { get; set; } public bool UseSharedDatabase { get; set; }
[StringLength(TenantConnectionStringConsts.MaxNameLength)] [StringLength(TenantConnectionStringConsts.MaxNameLength)]
[Display(Name = "DisplayName:DefaultConnectionString")]
public string DefaultConnectionString { get; set; } 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 { @section scripts {
<abp-script-bundle name="@typeof(IndexModel).FullName"> <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/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-script-bundle>
} }
<abp-card id="TenantsWrapper"> <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 _tenantAppService = volo.abp.tenantManagement.tenant;
var _editModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/EditModal'); 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 _createModal = new abp.ModalManager(abp.appPath + 'TenantManagement/Tenants/CreateModal');
var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal'); var _featuresModal = new abp.ModalManager(abp.appPath + 'FeatureManagement/FeatureManagementModal');
var _connectionStringsModal = new abp.ModalManager({
viewUrl: abp.appPath + 'TenantManagement/Tenants/ConnectionStringsModal',
modalClass: 'TenantConnectionStringManagement'
});
$(function () { $(function () {

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

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

Loading…
Cancel
Save