Browse Source

feat: alter column Culture Allow Br Null

pull/611/head
cKey 4 years ago
parent
commit
c96587ea4e
  1. 1
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Localization/Common/en.json
  2. 1
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Localization/Common/zh-Hans.json
  3. 10
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Templates/NotificationsCommonTemplateProvider.cs
  4. 21
      aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/AbpUINavigationVueVbenAdminNavigationDefinitionProvider.cs
  5. 10
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/ITextTemplateAppService.cs
  6. 3
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateContentDto.cs
  7. 14
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateContentGetInput.cs
  8. 11
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateDefinitionDto.cs
  9. 8
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateDefinitionGetListInput.cs
  10. 2
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateRestoreInput.cs
  11. 1
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateUpdateInput.cs
  12. 1
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application/LINGYUN/Abp/TextTemplating/AbpTextTemplatingApplicationAutoMapperProfile.cs
  13. 151
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application/LINGYUN/Abp/TextTemplating/TextTemplateAppService.cs
  14. 22
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain.Shared/LINGYUN/Abp/TextTemplating/Localization/Resources/en.json
  15. 22
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain.Shared/LINGYUN/Abp/TextTemplating/Localization/Resources/zh-Hans.json
  16. 2
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain/LINGYUN/Abp/TextTemplating/ITextTemplateRepository.cs
  17. 4
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain/LINGYUN/Abp/TextTemplating/TextTemplate.cs
  18. 5
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.EntityFrameworkCore/LINGYUN/Abp/TextTemplating/AbpTextTemplatingDbContextModelCreatingExtensions.cs
  19. 3
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.EntityFrameworkCore/LINGYUN/Abp/TextTemplating/EfCoreTextTemplateRepository.cs
  20. 30
      aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.HttpApi/LINGYUN/Abp/TextTemplating/TextTemplateController.cs
  21. 353
      aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/20220628050554_Alter-Culture-Field-Allow-Be-Null.Designer.cs
  22. 47
      aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/20220628050554_Alter-Culture-Field-Allow-Be-Null.cs
  23. 1
      aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/BackendAdminHostMigrationsDbContextModelSnapshot.cs

1
aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Localization/Common/en.json

@ -1,6 +1,7 @@
{
"culture": "en",
"texts": {
"EmailNotifierLayout": "Email Notifier Layout",
"Notifications:MultiTenancy": "Multi Tenancy",
"Notifications:Users": "Users",
"Notifications:NewTenantRegisterd": "Tenant creation notification",

1
aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Localization/Common/zh-Hans.json

@ -1,6 +1,7 @@
{
"culture": "zh-Hans",
"texts": {
"EmailNotifierLayout": "邮件通知模板",
"Notifications:MultiTenancy": "租户通知",
"Notifications:Users": "用户通知",
"Notifications:NewTenantRegisterd": "租户创建通知",

10
aspnet-core/modules/common/LINGYUN.Abp.Notifications.Common/LINGYUN/Abp/Notifications/Templates/NotificationsCommonTemplateProvider.cs

@ -1,4 +1,6 @@
using Volo.Abp.TextTemplating;
using LINGYUN.Abp.Notifications.Localization;
using Volo.Abp.Localization;
using Volo.Abp.TextTemplating;
namespace LINGYUN.Abp.Notifications;
@ -15,9 +17,15 @@ public class NotificationsCommonTemplateProvider : TemplateDefinitionProvider
{
new TemplateDefinition(
name: "EmailNotifierLayout",
displayName: L("EmailNotifierLayout"),
defaultCultureName: "en",
isLayout: true)
.WithVirtualFilePath( "/LINGYUN/Abp/Notifications/Templates/layout.tpl", isInlineLocalized: true)
};
}
protected LocalizableString L(string name)
{
return LocalizableString.Create<NotificationsResource>(name);
}
}

21
aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin/LINGYUN/Abp/UI/Navigation/VueVbenAdmin/AbpUINavigationVueVbenAdminNavigationDefinitionProvider.cs

@ -17,6 +17,7 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
context.Add(GetOssManagement());
context.Add(GetTaskManagement());
context.Add(GetWebhooksManagement());
context.Add(GetMessages());
}
private static NavigationDefinition GetDashboard()
@ -431,5 +432,25 @@ namespace LINGYUN.Abp.UI.Navigation.VueVbenAdmin
return new NavigationDefinition(webhooks);
}
private static NavigationDefinition GetMessages()
{
var messages = new ApplicationMenu(
name: "Messages",
displayName: "消息管理",
url: "/messages",
component: "",
description: "消息管理",
icon: "ant-design:message-outlined");
messages.AddItem(
new ApplicationMenu(
name: "Notifications",
displayName: "通知管理",
url: "/messages/notifications",
component: "/messages/notifications/index.vue",
description: "通知管理"));
return new NavigationDefinition(messages);
}
}
}

10
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/ITextTemplateAppService.cs

@ -6,11 +6,13 @@ namespace LINGYUN.Abp.TextTemplating;
public interface ITextTemplateAppService : IApplicationService
{
Task<TextTemplateDto> GetAsync(TextTemplateGetInput input);
Task<TextTemplateDefinitionDto> GetAsync(string name);
Task ResetDefaultAsync(TextTemplateGetInput input);
Task<TextTemplateContentDto> GetContentAsync(TextTemplateContentGetInput input);
Task<TextTemplateDto> UpdateAsync(TextTemplateUpdateInput input);
Task RestoreToDefaultAsync(TextTemplateRestoreInput input);
Task<ListResultDto<TextTemplateDto>> GetListAsync();
Task<TextTemplateDefinitionDto> UpdateAsync(TextTemplateUpdateInput input);
Task<PagedResultDto<TextTemplateDefinitionDto>> GetListAsync(TextTemplateDefinitionGetListInput input);
}

3
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateDto.cs → aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateContentDto.cs

@ -1,9 +1,8 @@
namespace LINGYUN.Abp.TextTemplating;
public class TextTemplateDto
public class TextTemplateContentDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
public string Content { get; set; }
public string Culture { get; set; }
}

14
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateContentGetInput.cs

@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Validation;
namespace LINGYUN.Abp.TextTemplating;
public class TextTemplateContentGetInput
{
[Required]
[DynamicStringLength(typeof(TextTemplateConsts), nameof(TextTemplateConsts.MaxNameLength))]
public string Name { get; set; }
[DynamicStringLength(typeof(TextTemplateConsts), nameof(TextTemplateConsts.MaxCultureLength))]
public string Culture { get; set; }
}

11
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateDefinitionDto.cs

@ -0,0 +1,11 @@
namespace LINGYUN.Abp.TextTemplating;
public class TextTemplateDefinitionDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
public string DefaultCultureName { get; set; }
public bool IsInlineLocalized { get; set; }
public bool IsLayout { get; set; }
public string Layout { get; set; }
}

8
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateDefinitionGetListInput.cs

@ -0,0 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace LINGYUN.Abp.TextTemplating;
public class TextTemplateDefinitionGetListInput : PagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}

2
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateGetInput.cs → aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateRestoreInput.cs

@ -3,7 +3,7 @@ using Volo.Abp.Validation;
namespace LINGYUN.Abp.TextTemplating;
public class TextTemplateGetInput
public class TextTemplateRestoreInput
{
[Required]
[DynamicStringLength(typeof(TextTemplateConsts), nameof(TextTemplateConsts.MaxNameLength))]

1
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application.Contracts/LINGYUN/Abp/TextTemplating/TextTemplateUpdateInput.cs

@ -9,7 +9,6 @@ public class TextTemplateUpdateInput
[DynamicStringLength(typeof(TextTemplateConsts), nameof(TextTemplateConsts.MaxNameLength))]
public string Name { get; set; }
[Required]
[DynamicStringLength(typeof(TextTemplateConsts), nameof(TextTemplateConsts.MaxCultureLength))]
public string Culture { get; set; }

1
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application/LINGYUN/Abp/TextTemplating/AbpTextTemplatingApplicationAutoMapperProfile.cs

@ -6,6 +6,5 @@ public class AbpTextTemplatingApplicationAutoMapperProfile : Profile
{
public AbpTextTemplatingApplicationAutoMapperProfile()
{
CreateMap<TextTemplate, TextTemplateDto>();
}
}

151
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Application/LINGYUN/Abp/TextTemplating/TextTemplateAppService.cs

@ -1,6 +1,8 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
@ -26,97 +28,130 @@ public class TextTemplateAppService : AbpTextTemplatingAppServiceBase, ITextTemp
TemplateDefinitionManager = templateDefinitionManager;
}
public async virtual Task<TextTemplateDto> GetAsync(TextTemplateGetInput input)
public virtual Task<TextTemplateDefinitionDto> GetAsync(string name)
{
var templateDefinition = GetTemplateDefinition(name);
var layout = templateDefinition.Layout;
if (!layout.IsNullOrWhiteSpace())
{
var layoutDefinition = GetTemplateDefinition(templateDefinition.Layout);
layout = layoutDefinition.DisplayName.Localize(StringLocalizerFactory);
}
var result = new TextTemplateDefinitionDto
{
DefaultCultureName = templateDefinition.DefaultCultureName,
IsInlineLocalized = templateDefinition.IsInlineLocalized,
IsLayout = templateDefinition.IsLayout,
Layout = layout,
Name = templateDefinition.Name,
DisplayName = templateDefinition.DisplayName.Localize(StringLocalizerFactory),
};
return Task.FromResult(result);
}
public async virtual Task<TextTemplateContentDto> GetContentAsync(TextTemplateContentGetInput input)
{
var templateDefinition = GetTemplateDefinition(input.Name);
var culture = input.Culture ?? CultureInfo.CurrentCulture.Name ?? templateDefinition.DefaultCultureName;
var content = await TemplateContentProvider.GetContentOrNullAsync(templateDefinition.Name, input.Culture);
using (CultureHelper.Use(culture, culture))
return new TextTemplateContentDto
{
var content = await TemplateContentProvider.GetContentOrNullAsync(templateDefinition.Name, culture);
return new TextTemplateDto
{
Culture = culture,
Content = content,
Name = templateDefinition.Name,
DisplayName = templateDefinition.DisplayName.Localize(StringLocalizerFactory),
};
}
Name = templateDefinition.Name,
Culture = input.Culture,
Content = content,
};
}
public Task<ListResultDto<TextTemplateDto>> GetListAsync()
public virtual Task<PagedResultDto<TextTemplateDefinitionDto>> GetListAsync(TextTemplateDefinitionGetListInput input)
{
var templates = new List<TextTemplateDto>();
var templates = new List<TextTemplateDefinitionDto>();
var templateDefinitions = TemplateDefinitionManager.GetAll();
var filterTemplates = templateDefinitions
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x =>
x.Name.Contains(input.Filter) || x.Layout.Contains(input.Filter));
foreach (var templateDefinition in templateDefinitions)
foreach (var templateDefinition in filterTemplates)
{
templates.Add(
new TextTemplateDto
{
Name = templateDefinition.Name,
Culture = CultureInfo.CurrentCulture.Name ?? templateDefinition.DefaultCultureName,
DisplayName = templateDefinition.DisplayName.Localize(StringLocalizerFactory),
});
var layout = templateDefinition.Layout;
if (!layout.IsNullOrWhiteSpace())
{
var layoutDefinition = GetTemplateDefinition(templateDefinition.Layout);
layout = layoutDefinition.DisplayName.Localize(StringLocalizerFactory);
}
var result = new TextTemplateDefinitionDto
{
DefaultCultureName = templateDefinition.DefaultCultureName,
IsInlineLocalized = templateDefinition.IsInlineLocalized,
IsLayout = templateDefinition.IsLayout,
Layout = layout,
Name = templateDefinition.Name,
DisplayName = templateDefinition.DisplayName.Localize(StringLocalizerFactory),
};
templates.Add(result);
}
return Task.FromResult(new ListResultDto<TextTemplateDto>(templates));
return Task.FromResult(new PagedResultDto<TextTemplateDefinitionDto>(templateDefinitions.Count, templates));
}
[Authorize(AbpTextTemplatingPermissions.TextTemplate.Delete)]
public async virtual Task ResetDefaultAsync(TextTemplateGetInput input)
public async virtual Task RestoreToDefaultAsync(TextTemplateRestoreInput input)
{
var templateDefinition = GetTemplateDefinition(input.Name);
var culture = input.Culture ?? CultureInfo.CurrentCulture.Name ?? templateDefinition.DefaultCultureName;
var templates = await TextTemplateRepository
.GetListAsync(x => x.Name.Equals(templateDefinition.Name) && x.Culture.Equals(input.Culture));
using (CultureHelper.Use(culture, culture))
{
var template = await TextTemplateRepository.FindByNameAsync(
templateDefinition.Name,
culture);
if (template != null)
{
await TextTemplateRepository.DeleteAsync(template);
}
}
await TextTemplateRepository.DeleteManyAsync(templates);
}
[Authorize(AbpTextTemplatingPermissions.TextTemplate.Update)]
public async virtual Task<TextTemplateDto> UpdateAsync(TextTemplateUpdateInput input)
public async virtual Task<TextTemplateDefinitionDto> UpdateAsync(TextTemplateUpdateInput input)
{
var templateDefinition = GetTemplateDefinition(input.Name);
var culture = input.Culture ?? CultureInfo.CurrentCulture.Name ?? templateDefinition.DefaultCultureName;
var template = await TextTemplateRepository.FindByNameAsync(input.Name, input.Culture);
if (template == null)
{
template = new TextTemplate(
GuidGenerator.Create(),
templateDefinition.Name,
templateDefinition.DisplayName.Localize(StringLocalizerFactory),
input.Content,
input.Culture);
using (CultureHelper.Use(culture, culture))
await TextTemplateRepository.InsertAsync(template);
}
else
{
var template = await TextTemplateRepository.FindByNameAsync(input.Name, culture);
if (template == null)
{
template = new TextTemplate(
GuidGenerator.Create(),
templateDefinition.Name,
templateDefinition.DisplayName.Localize(StringLocalizerFactory),
input.Content,
culture);
template = await TextTemplateRepository.InsertAsync(template);
}
else
{
template.SetContent(input.Content);
template.SetContent(input.Content);
await TextTemplateRepository.UpdateAsync(template);
}
await TextTemplateRepository.UpdateAsync(template);
}
await CurrentUnitOfWork.SaveChangesAsync();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<TextTemplate, TextTemplateDto>(template);
var layout = templateDefinition.Layout;
if (!layout.IsNullOrWhiteSpace())
{
var layoutDefinition = GetTemplateDefinition(templateDefinition.Layout);
layout = layoutDefinition.DisplayName.Localize(StringLocalizerFactory);
}
return new TextTemplateDefinitionDto
{
DefaultCultureName = templateDefinition.DefaultCultureName,
IsInlineLocalized = templateDefinition.IsInlineLocalized,
IsLayout = templateDefinition.IsLayout,
Layout = layout,
Name = templateDefinition.Name,
DisplayName = templateDefinition.DisplayName.Localize(StringLocalizerFactory),
};
}
protected virtual TemplateDefinition GetTemplateDefinition(string name)

22
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain.Shared/LINGYUN/Abp/TextTemplating/Localization/Resources/en.json

@ -10,6 +10,26 @@
"DisplayName:Name": "Name",
"DisplayName:Culture": "Culture",
"DisplayName:Content": "Content",
"DisplayName:DisplayName": "DisplayName"
"DisplayName:DisplayName": "DisplayName",
"DisplayName:IsInlineLocalized": "Is Inline Localized",
"DisplayName:IsLayout": "Is Layout",
"DisplayName:DefaultCultureName": "Default Culture",
"Contents": "Contents",
"Layout": "Layout",
"LocalizationResource": "Localization Resource",
"SeeContents": "See Contents",
"EditContents": "Edit Contents",
"BaseCultureName": "Reference Culture Name",
"TargetCultureName": "Target Culture Name",
"BaseContent": "Reference Content",
"TargetContent": "Target Content",
"SaveContent": "Save Content",
"TemplateContent": "Template Content",
"RestoreToDefault": "Restore To Default",
"RestoreToDefaultMessage": "Are you sure? This action converts the content to the default value.",
"TemplateContentUpdated": "The template content has been updated",
"TemplateContentRestoredToDefault": "The template content is restored to the default value.",
"CustomizePerCulture": "Customize per culture",
"InlineContentDescription": "This template uses inline localization. You can use the <b>L<\/b> function to localize a text, like <b>{{L \"Hello\"}}<\/b>. If you still want to define a completely new template for a culture, use the \"Customize per culture\" button. <br /> To get more information about syntax and other details, please check the <a href=\"https://docs.abp.io/en/abp/latest/Text-Templating\" target=\"_blank\">Text Templates documentation<\/a>.."
}
}

22
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain.Shared/LINGYUN/Abp/TextTemplating/Localization/Resources/zh-Hans.json

@ -10,6 +10,26 @@
"DisplayName:Name": "名称",
"DisplayName:Culture": "区域",
"DisplayName:Content": "内容",
"DisplayName:DisplayName": "显示名称"
"DisplayName:DisplayName": "显示名称",
"DisplayName:IsInlineLocalized": "内联本地化",
"DisplayName:IsLayout": "是否为布局页",
"DisplayName:DefaultCultureName": "默认文化名称",
"Contents": "内容",
"Layout": "布局页",
"LocalizationResource": "本地化资源",
"SeeContents": "查看内容",
"EditContents": "编辑内容",
"BaseCultureName": "参考文化名称",
"TargetCultureName": "目标文化名称",
"BaseContent": "参考内容",
"TargetContent": "目标内容",
"SaveContent": "保存内容",
"TemplateContent": "模板内容",
"RestoreToDefault": "还原为默认",
"RestoreToDefaultMessage": "你确定吗? 此操作会将内容转换为默认值.",
"TemplateContentUpdated": "模板内容已更新",
"TemplateContentRestoredToDefault": "模板内容恢复为默认值.",
"CustomizePerCulture": "根据文化定制",
"InlineContentDescription": "该模板使用内联本地化. 你可以使用<b>L</b>函数对文本进行本地化,例如 <b>{{L \"Hello\"}}</b>如果你仍想为区域性定义一个全新的模板,请使用\"根据文化定制\"按钮. <br />请检查<a href=\"https://docs.abp.io/en/abp/latest/Text-Templating\" target=\"_blank\">文本模板文档</a>获取更多信息."
}
}

2
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain/LINGYUN/Abp/TextTemplating/ITextTemplateRepository.cs

@ -5,7 +5,7 @@ using Volo.Abp.Domain.Repositories;
namespace LINGYUN.Abp.TextTemplating;
public interface ITextTemplateRepository : IBasicRepository<TextTemplate, Guid>
public interface ITextTemplateRepository : IRepository<TextTemplate, Guid>
{
Task<TextTemplate> FindByNameAsync(string name, string culture = null, CancellationToken cancellationToken = default);
}

4
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Domain/LINGYUN/Abp/TextTemplating/TextTemplate.cs

@ -18,13 +18,13 @@ public class TextTemplate : AuditedEntity<Guid>, IMultiTenant
string name,
string displayName,
string content,
string culture)
string culture = null)
: base(id)
{
Name = Check.NotNullOrWhiteSpace(name, nameof(name), TextTemplateConsts.MaxNameLength);
DisplayName = Check.NotNullOrWhiteSpace(displayName, nameof(displayName), TextTemplateConsts.MaxDisplayNameLength);
Content = Check.NotNullOrWhiteSpace(content, nameof(content), TextTemplateConsts.MaxContentLength);
Culture = Check.NotNullOrWhiteSpace(culture, nameof(culture), TextTemplateConsts.MaxCultureLength);
Culture = Check.Length(culture, nameof(culture), TextTemplateConsts.MaxCultureLength);
}
public void SetContent(string content)

5
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.EntityFrameworkCore/LINGYUN/Abp/TextTemplating/AbpTextTemplatingDbContextModelCreatingExtensions.cs

@ -25,11 +25,10 @@ public static class AbpTextTemplatingDbContextModelCreatingExtensions
.HasColumnName(nameof(TextTemplate.DisplayName))
.HasMaxLength(TextTemplateConsts.MaxDisplayNameLength)
.IsRequired();
b.Property(t => t.Culture)
.HasColumnName(nameof(TextTemplate.Culture))
.HasMaxLength(TextTemplateConsts.MaxCultureLength)
.IsRequired();
.HasMaxLength(TextTemplateConsts.MaxCultureLength);
b.Property(t => t.Content)
.HasColumnName(nameof(TextTemplate.Content))
.HasMaxLength(TextTemplateConsts.MaxContentLength);

3
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.EntityFrameworkCore/LINGYUN/Abp/TextTemplating/EfCoreTextTemplateRepository.cs

@ -24,8 +24,7 @@ public class EfCoreTextTemplateRepository :
public async virtual Task<TextTemplate> FindByNameAsync(string name, string culture = null, CancellationToken cancellationToken = default)
{
return await (await GetDbSetAsync())
.Where(x => x.Name.Equals(name))
.WhereIf(!culture.IsNullOrWhiteSpace(), x => x.Culture.Equals(culture))
.Where(x => x.Name.Equals(name) && x.Culture.Equals(culture))
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
}
}

30
aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.HttpApi/LINGYUN/Abp/TextTemplating/TextTemplateController.cs

@ -22,31 +22,37 @@ public class TextTemplateController : AbpTextTemplatingControllerBase, ITextTemp
}
[HttpGet]
[Route("{Name}")]
[Route("{Culture}/{Name}")]
public Task<TextTemplateDto> GetAsync(TextTemplateGetInput input)
[Route("{name}")]
public virtual Task<TextTemplateDefinitionDto> GetAsync(string name)
{
return TextTemplateAppService.GetAsync(input);
return TextTemplateAppService.GetAsync(name);
}
[HttpGet]
public Task<ListResultDto<TextTemplateDto>> GetListAsync()
[Route("content/{Name}")]
[Route("content/{Culture}/{Name}")]
public virtual Task<TextTemplateContentDto> GetContentAsync(TextTemplateContentGetInput input)
{
return TextTemplateAppService.GetListAsync();
return TextTemplateAppService.GetContentAsync(input);
}
[HttpDelete]
[Route("{Name}")]
[Route("{Culture}/{Name}")]
[HttpGet]
public virtual Task<PagedResultDto<TextTemplateDefinitionDto>> GetListAsync(TextTemplateDefinitionGetListInput input)
{
return TextTemplateAppService.GetListAsync(input);
}
[HttpPut]
[Route("restore-to-default")]
[Authorize(AbpTextTemplatingPermissions.TextTemplate.Delete)]
public Task ResetDefaultAsync(TextTemplateGetInput input)
public virtual Task RestoreToDefaultAsync(TextTemplateRestoreInput input)
{
return TextTemplateAppService.ResetDefaultAsync(input);
return TextTemplateAppService.RestoreToDefaultAsync(input);
}
[HttpPost]
[Authorize(AbpTextTemplatingPermissions.TextTemplate.Update)]
public Task<TextTemplateDto> UpdateAsync(TextTemplateUpdateInput input)
public virtual Task<TextTemplateDefinitionDto> UpdateAsync(TextTemplateUpdateInput input)
{
return TextTemplateAppService.UpdateAsync(input);
}

353
aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/20220628050554_Alter-Culture-Field-Allow-Be-Null.Designer.cs

@ -0,0 +1,353 @@
// <auto-generated />
using System;
using LY.MicroService.BackendAdmin.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Volo.Abp.EntityFrameworkCore;
#nullable disable
namespace LY.MicroService.BackendAdmin.Migrations
{
[DbContext(typeof(BackendAdminMigrationsDbContext))]
[Migration("20220628050554_Alter-Culture-Field-Allow-Be-Null")]
partial class AlterCultureFieldAllowBeNull
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
.HasAnnotation("ProductVersion", "6.0.6")
.HasAnnotation("Relational:MaxIdentifierLength", 64);
modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.HasKey("Id");
b.HasIndex("DisplayName");
b.ToTable("AbpEditions", (string)null);
});
modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("varchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<Guid?>("DeleterId")
.HasColumnType("char(36)")
.HasColumnName("DeleterId");
b.Property<DateTime?>("DeletionTime")
.HasColumnType("datetime(6)")
.HasColumnName("DeletionTime");
b.Property<DateTime?>("DisableTime")
.HasColumnType("datetime(6)");
b.Property<Guid?>("EditionId")
.HasColumnType("char(36)");
b.Property<DateTime?>("EnableTime")
.HasColumnType("datetime(6)");
b.Property<string>("ExtraProperties")
.HasColumnType("longtext")
.HasColumnName("ExtraProperties");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsDeleted")
.ValueGeneratedOnAdd()
.HasColumnType("tinyint(1)")
.HasDefaultValue(false)
.HasColumnName("IsDeleted");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.HasKey("Id");
b.HasIndex("EditionId");
b.HasIndex("Name");
b.ToTable("AbpTenants", (string)null);
});
modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b =>
{
b.Property<Guid>("TenantId")
.HasColumnType("char(36)");
b.Property<string>("Name")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(1024)
.HasColumnType("varchar(1024)");
b.HasKey("TenantId", "Name");
b.ToTable("AbpTenantConnectionStrings", (string)null);
});
modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Content")
.HasMaxLength(1048576)
.HasColumnType("longtext")
.HasColumnName("Content");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime(6)")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("char(36)")
.HasColumnName("CreatorId");
b.Property<string>("Culture")
.HasMaxLength(30)
.HasColumnType("varchar(30)")
.HasColumnName("Culture");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("varchar(100)")
.HasColumnName("DisplayName");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime(6)")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("char(36)")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("varchar(100)")
.HasColumnName("Name");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("TenantId", "Name")
.HasDatabaseName("IX_Tenant_Text_Template_Name");
b.ToTable("AbpTextTemplates", (string)null);
});
modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("ProviderName")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.HasKey("Id");
b.HasIndex("Name", "ProviderName", "ProviderKey")
.IsUnique();
b.ToTable("AbpFeatureValues", (string)null);
});
modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property<string>("ProviderKey")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("ProviderName")
.IsRequired()
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<Guid?>("TenantId")
.HasColumnType("char(36)")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey")
.IsUnique();
b.ToTable("AbpPermissionGrants", (string)null);
});
modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("varchar(128)");
b.Property<string>("ProviderKey")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("ProviderName")
.HasMaxLength(64)
.HasColumnType("varchar(64)");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(2048)
.HasColumnType("varchar(2048)");
b.HasKey("Id");
b.HasIndex("Name", "ProviderName", "ProviderKey")
.IsUnique();
b.ToTable("AbpSettings", (string)null);
});
modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b =>
{
b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition")
.WithMany()
.HasForeignKey("EditionId");
b.Navigation("Edition");
});
modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b =>
{
b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null)
.WithMany("ConnectionStrings")
.HasForeignKey("TenantId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b =>
{
b.Navigation("ConnectionStrings");
});
#pragma warning restore 612, 618
}
}
}

47
aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/20220628050554_Alter-Culture-Field-Allow-Be-Null.cs

@ -0,0 +1,47 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace LY.MicroService.BackendAdmin.Migrations
{
public partial class AlterCultureFieldAllowBeNull : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<string>(
name: "Culture",
table: "AbpTextTemplates",
type: "varchar(30)",
maxLength: 30,
nullable: true,
oldClrType: typeof(string),
oldType: "varchar(30)",
oldMaxLength: 30)
.Annotation("MySql:CharSet", "utf8mb4")
.OldAnnotation("MySql:CharSet", "utf8mb4");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "AbpTextTemplates",
keyColumn: "Culture",
keyValue: null,
column: "Culture",
value: "");
migrationBuilder.AlterColumn<string>(
name: "Culture",
table: "AbpTextTemplates",
type: "varchar(30)",
maxLength: 30,
nullable: false,
oldClrType: typeof(string),
oldType: "varchar(30)",
oldMaxLength: 30,
oldNullable: true)
.Annotation("MySql:CharSet", "utf8mb4")
.OldAnnotation("MySql:CharSet", "utf8mb4");
}
}
}

1
aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Migrations/BackendAdminHostMigrationsDbContextModelSnapshot.cs

@ -190,7 +190,6 @@ namespace LY.MicroService.BackendAdmin.Migrations
.HasColumnName("CreatorId");
b.Property<string>("Culture")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("varchar(30)")
.HasColumnName("Culture");

Loading…
Cancel
Save