erp-platform/api/modules/Erp.Languages/Erp.Languages.Application/LanguageTextAppService.cs

178 lines
6.3 KiB
C#
Raw Normal View History

2025-11-11 19:49:52 +00:00
using Erp.Languages.Entities;
using Erp.Languages.Localization;
2025-05-06 06:45:49 +00:00
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Auditing;
2025-06-20 14:56:23 +00:00
using Volo.Abp.Domain.Entities;
2025-05-06 06:45:49 +00:00
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Validation;
2025-11-11 19:49:52 +00:00
namespace Erp.Languages;
2025-05-06 06:45:49 +00:00
public class LanguageTextAppService : CrudAppService<
LanguageText,
LanguageTextDto,
Guid,
PagedAndSortedResultRequestDto,
LanguageTextCreateUpdateDto>,
ILanguageTextAppService
{
private readonly IRepository<LanguageText, Guid> _repositoryText;
private readonly IRepository<LanguageKey, Guid> _repositoryKey;
public LanguageTextAppService(
IRepository<LanguageText, Guid> repositoryText,
IRepository<LanguageKey, Guid> repositoryKey
)
: base(repositoryText)
{
LocalizationResource = typeof(LanguagesResource);
ObjectMapperContext = typeof(LanguagesApplicationModule);
_repositoryText = repositoryText;
_repositoryKey = repositoryKey;
}
public override async Task<LanguageTextDto> CreateAsync(LanguageTextCreateUpdateDto input)
{
var recordExists = await _repositoryText.AnyAsync(
a => a.CultureName == input.CultureName &&
a.Key == input.Key &&
a.ResourceName == input.ResourceName);
if (recordExists)
{
var validationErrors = new ValidationResult(
L["Error:UniqueControl"],
new string[] { "CultureName", "Key", "ResourceName" }
);
throw new AbpValidationException(new List<ValidationResult> { validationErrors });
}
return await base.CreateAsync(input);
}
public async Task UpdateLanguageTextAsync(LanguageTextCreateUpdateDto input)
{
var entity = await _repositoryText.GetAsync(
a => a.CultureName == input.CultureName &&
a.ResourceName == input.ResourceName &&
a.Key == input.Key);
if (entity != null)
{
entity.Value = input.Value;
await _repositoryText.UpdateAsync(entity);
}
}
public async Task<PagedResultDto<LanguageTextTranslatedDto>> GetLanguageTextTranslatedAsync(LanguageTextTranslatedRequestDto input)
{
var query = await _repositoryKey.GetQueryableAsync();
query = query
.WhereIf(!input.ResourceName.IsNullOrEmpty(), a => a.ResourceName == input.ResourceName)
.WhereIf(!input.Key.IsNullOrEmpty(), a => a.Key == input.Key);
var totalCount = await query.CountAsync();
query = ApplySorting(query, input);
query = ApplyPaging(query, input);
var keys = await query.ToListAsync();
var dtoLanguageTextTranslate = ObjectMapper.Map<List<LanguageKey>, List<LanguageTextTranslatedDto>>(keys);
var dtoBaseCulturesValue = await _repositoryText.GetListAsync(a => a.CultureName == input.BaseCultureName);
var dtoTargetCulturesValue = await _repositoryText.GetListAsync(a => a.CultureName == input.TargetCultureName);
dtoLanguageTextTranslate.ForEach(dto =>
{
var baseEntity = dtoBaseCulturesValue.FirstOrDefault(a => a.Key == dto.Key && a.ResourceName == dto.ResourceName);
dto.BaseCultureName = input.BaseCultureName;
dto.BaseValue = baseEntity?.Value;
var targetEntity = dtoTargetCulturesValue.FirstOrDefault(a => a.Key == dto.Key && a.ResourceName == dto.ResourceName);
dto.TargetCultureName = input.TargetCultureName;
dto.TargetValue = targetEntity?.Value;
});
return new PagedResultDto<LanguageTextTranslatedDto>(totalCount, dtoLanguageTextTranslate);
}
public async Task<LanguageTextDto> GetLanguageTextAsync(LanguageTextFilteredDto input)
{
var entity = await _repositoryText.FirstOrDefaultAsync(a =>
a.CultureName == input.CultureName &&
a.ResourceName == input.ResourceName &&
a.Key == input.Key);
return ObjectMapper.Map<LanguageText, LanguageTextDto>(entity);
}
2025-06-20 14:56:23 +00:00
public async Task<List<LanguageTextDto>> GetLanguageTextByCultureNameAsync(string CultureName)
{
var item = await _repositoryText.GetListAsync(a => a.CultureName == CultureName);
if (item is null)
{
throw new EntityNotFoundException(L["RecordNotFound"]);
}
return ObjectMapper.Map<List<LanguageText>, List<LanguageTextDto>>(item);
}
2025-05-06 06:45:49 +00:00
protected virtual IQueryable<LanguageKey> ApplySorting(IQueryable<LanguageKey> query, LanguageTextTranslatedRequestDto input)
{
//Try to sort query if available
if (input is ISortedResultRequest sortInput)
{
if (!sortInput.Sorting.IsNullOrWhiteSpace())
{
return query.OrderBy(sortInput.Sorting);
}
}
//IQueryable.Task requires sorting, so we should sort if Take will be used.
if (input is ILimitedResultRequest)
{
return ApplyDefaultSorting(query);
}
//No sorting
return query;
}
protected virtual IQueryable<LanguageKey> ApplyDefaultSorting(IQueryable<LanguageKey> query)
{
if (typeof(LanguageKey).IsAssignableTo<IHasCreationTime>())
{
return query.OrderByDescending(e => ((IHasCreationTime)e).CreationTime);
}
throw new AbpException("No sorting specified but this query requires sorting. Override the ApplyDefaultSorting method for your application service derived from AbstractKeyReadOnlyAppService!");
}
protected virtual IQueryable<LanguageKey> ApplyPaging(IQueryable<LanguageKey> query, LanguageTextTranslatedRequestDto input)
{
//Try to use paging if available
if (input is IPagedResultRequest pagedInput)
{
return query.PageBy(pagedInput);
}
//Try to limit query result if available
if (input is ILimitedResultRequest limitedInput)
{
return query.Take(limitedInput.MaxResultCount);
}
//No paging
return query;
}
}
2025-11-11 19:49:52 +00:00