public async Task <OperationResultResponse <bool> > ExecuteAsync(Guid roleLocalizationId, JsonPatchDocument <EditRoleLocalizationRequest> request)
        {
            if (!await _accessValidator.IsAdminAsync())
            {
                return(_responseCreator.CreateFailureResponse <bool>(HttpStatusCode.Forbidden));
            }

            if (!_validator.ValidateCustom(request, out List <string> errors))
            {
                return(_responseCreator.CreateFailureResponse <bool>(
                           HttpStatusCode.BadRequest,
                           errors));
            }

            Operation <EditRoleLocalizationRequest> isActiveOperation = request.Operations.FirstOrDefault(
                o => o.path.EndsWith(nameof(EditRoleLocalizationRequest.IsActive), StringComparison.OrdinalIgnoreCase));
            Operation <EditRoleLocalizationRequest> nameOperation = request.Operations.FirstOrDefault(
                o => o.path.EndsWith(nameof(EditRoleLocalizationRequest.Name), StringComparison.OrdinalIgnoreCase));

            DbRoleLocalization roleLocalization = await _roleLocalizationRepository.GetAsync(roleLocalizationId);

            if (isActiveOperation != default)
            {
                bool isActive = bool.Parse(isActiveOperation.value.ToString().Trim());

                if (roleLocalization.IsActive == isActive)
                {
                    return(_responseCreator.CreateFailureResponse <bool>(
                               HttpStatusCode.BadRequest,
                               new List <string> {
                        "Role localization already has this status."
                    }));
                }

                if (isActive &&
                    await _roleLocalizationRepository.DoesLocaleExistAsync(roleLocalization.RoleId, roleLocalization.Locale))
                {
                    return(_responseCreator.CreateFailureResponse <bool>(
                               HttpStatusCode.BadRequest,
                               new List <string> {
                        "Role must have only one localization per locale."
                    }));
                }
            }

            if (nameOperation != default &&
                await _roleLocalizationRepository.DoesNameExistAsync(roleLocalization.Locale, nameOperation.value.ToString().Trim()))
            {
                return(_responseCreator.CreateFailureResponse <bool>(
                           HttpStatusCode.BadRequest,
                           new List <string> {
                    "Name already exists."
                }));
            }

            return(new OperationResultResponse <bool>()
            {
                Body = await _roleLocalizationRepository.EditRoleLocalizationAsync(roleLocalizationId, _roleLocalizationMapper.Map(request))
            });
        }
        public async Task <Guid?> CreateAsync(DbRoleLocalization roleLocalization)
        {
            if (roleLocalization is null)
            {
                return(null);
            }

            _provider.RolesLocalizations.Add(roleLocalization);
            await _provider.SaveAsync();

            return(roleLocalization.Id);
        }
Ejemplo n.º 3
0
        public RoleLocalizationInfo Map(DbRoleLocalization dbRoleLocalization)
        {
            if (dbRoleLocalization == null)
            {
                return(null);
            }

            return(new RoleLocalizationInfo
            {
                Id = dbRoleLocalization.Id,
                Locale = dbRoleLocalization.Locale,
                Name = dbRoleLocalization.Name,
                Description = dbRoleLocalization.Description,
                IsActive = dbRoleLocalization.IsActive,
                RoleId = dbRoleLocalization.RoleId
            });
        }
        public async Task <bool> EditRoleLocalizationAsync(Guid roleLocalizationId, JsonPatchDocument <DbRoleLocalization> patch)
        {
            if (patch == null)
            {
                return(false);
            }

            DbRoleLocalization roleLocalization = await _provider.RolesLocalizations.FirstOrDefaultAsync(x => x.Id == roleLocalizationId);

            if (roleLocalization == default)
            {
                return(false);
            }

            patch.ApplyTo(roleLocalization);
            roleLocalization.ModifiedBy    = _httpContextAccessor.HttpContext.GetUserId();
            roleLocalization.ModifiedAtUtc = DateTime.UtcNow;

            await _provider.SaveAsync();

            return(true);
        }