示例#1
0
        public async Task <ActionResult <DistributionReadModel> > GetById(Guid distributionId)
        {
            DistributionReadModel distribution = await distributionsRepository.Query(x => x.Id == distributionId);

            if (distribution == null)
            {
                return(NotFound());
            }
            var user = authorizedUserProvider.Get();

            if (!user.IsAdmin && distribution.Owners.All(o => o.Sid != user.Sid))
            {
                return(Forbid());
            }

            return(distribution);
        }
        private async Task Update(Event @event, Action <DistributionReadModel> update, CancellationToken cancellationToken)
        {
            Guid distributionId = @event.Metadata.AggregateId;

            DistributionReadModel distribution = await distributionRepository.Query(b => b.Id == distributionId, cancellationToken);

            if (distribution == null)
            {
                throw new UpdateDistributionException($"Distribution {distributionId} not found.");
            }

            DistributionReadModel oldDistribution = distribution.DeepClone();

            update(distribution);

            await distributionRepository.Update(x => x.Id == distributionId, distribution, cancellationToken);

            await SendNotification(ServerEventType.DistributionUpdated, oldDistribution, distribution);
        }
示例#3
0
        private void UpdateRuleSet()
        {
            RuleFor(d => d.Id)
            .MustAsync(DistributionExist)
            .WithMessage(x => $"Дистрибутив c идентификатором {x.Id} не существует")
            .DependentRules(CommonRuleSet);

            RuleFor(model => model)
            .CustomAsync(async(model, context, token) =>
            {
                DistributionReadModel distribution = await distributionsRepository.Query(x => x.Id == model.Id, token);

                if (distribution == null)
                {
                    return;
                }

                if (DistributionNameChanged(distribution, model) && !await IsUniqueDistributionName(model.Name, token))
                {
                    context.AddFailure(nameof(model.Name), DistributionNameShouldBeUniqueMessage);
                }

                IEnumerable <LifeCycleState> deletedLifeCycleStates = distribution.AvailableLifeCycles.Except(model.AvailableLifeCycles);
                if (await ExistBuildByDeletedLifeCycleState(distribution, deletedLifeCycleStates))
                {
                    context.AddFailure(nameof(model.AvailableLifeCycles), $"Существует сборка с удаленным состоянием {deletedLifeCycleStates.First():G}");
                }
            });

            When(x => x.BuildBindings.Any(),
                 () =>
            {
                RuleFor(x => x.BuildBindings)
                .MustAsync((distribution, buildBindings, cancellationToken) => BindingsPathsIsUnique(buildBindings, distribution.Id, cancellationToken))
                .WithMessage("Один из путей в привязках используется в другом дистрибутиве.");
            });
        }
示例#4
0
 private bool DistributionNameChanged(DistributionReadModel existDistribution, DistributionModel updatedDistribution)
 {
     return(!string.Equals(updatedDistribution.Name, existDistribution.Name, StringComparison.OrdinalIgnoreCase));
 }
示例#5
0
 private async Task <bool> ExistBuildByDeletedLifeCycleState(DistributionReadModel distribution, IEnumerable <LifeCycleState> deletedLifeCycleState)
 {
     return(await buildsRepository.Any(x => x.DistributionId == distribution.Id && deletedLifeCycleState.Contains(x.LifeCycleState)));
 }
 private async Task SendNotification(string type, DistributionReadModel oldDistribution, DistributionReadModel newDistribution)
 {
     await mediator.Publish(new SendDiffEntitiesNotifications.Notification(type, oldDistribution, newDistribution, newDistribution?.Owners));
 }