Exemple #1
0
        public ActionResult Edit(SubscriptionEditModel model)
        {
            var modelState = new ModelStateHelper <SubscriptionEditModel>(ModelState);

            // Проверка ComponentTypeId
            if (model.Object == SubscriptionObject.ComponentType && model.ComponentTypeId == null)
            {
                modelState.AddErrorFor(x => x.ComponentTypeId, "Выберите тип компонента");
            }

            // Проверка ComponentId
            if (model.Object == SubscriptionObject.Component && model.ComponentId == null)
            {
                modelState.AddErrorFor(x => x.ComponentId, "Выберите компонент");
            }

            // Проверка Channel
            if (model.Id == null && model.Channel == null)
            {
                // канал должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.Channel, "Выберите канал");
            }

            // Проверка UserId
            if (model.Id == null && model.UserId == null)
            {
                // Пользователь должен указываться явно только для новых подписок
                modelState.AddErrorFor(x => x.UserId, "Выберите пользователя");
            }

            // проверка цвета
            var color = model.Color.GetSelectedOne();

            if (color == null)
            {
                modelState.AddErrorFor(x => x.Color, "Укажите цвет");
            }

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                // проверка прав
                var isOtherUser = CurrentUser.Id != model.UserId;
                if (isOtherUser)
                {
                    if (CurrentUser.IsAdmin() == false)
                    {
                        throw new UserFriendlyException("Нет прав на создание подписок другим пользователям");
                    }
                }

                var importance = ImportanceHelper.Get(color).Value;
                var client     = GetDispatcherClient();
                if (model.Id == null)
                {
                    // создание новой подписки
                    var createData = new CreateSubscriptionRequestData()
                    {
                        UserId  = model.UserId.Value,
                        Channel = model.Channel.Value,
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        Importance         = importance,
                        IsEnabled          = model.IsEnabled,
                        NotifyBetterStatus = model.NotifyBetterStatus,
                        Object             = model.Object
                    };
                    if (model.Object == SubscriptionObject.Component)
                    {
                        createData.ComponentId = model.ComponentId;
                    }
                    if (model.Object == SubscriptionObject.ComponentType)
                    {
                        createData.ComponentTypeId = model.ComponentTypeId;
                    }
                    var response = client.CreateSubscription(CurrentUser.AccountId, createData);
                    response.Check();
                    model.Id = response.Data.Id;
                }
                else
                {
                    // редактирование существующей подписки
                    var updateData = new UpdateSubscriptionRequestData()
                    {
                        Id = model.Id.Value,
                        NotifyBetterStatus       = model.NotifyBetterStatus,
                        IsEnabled                = model.IsEnabled,
                        ResendTimeInSeconds      = TimeSpanHelper.GetSeconds(model.ResendTime),
                        DurationMinimumInSeconds = TimeSpanHelper.GetSeconds(model.MinimumDuration),
                        Importance               = importance
                    };
                    var response = client.UpdateSubscription(CurrentUser.AccountId, updateData);
                    response.Check();
                }
                if (model.ModalMode)
                {
                    return(GetSuccessJsonResponse(new { subscriptionId = model.Id }));
                }
                return(Redirect(model.ReturnUrl));
            }
            catch (UserFriendlyException exception)
            {
                model.Exception = exception;
            }

            return(View(model));
        }
Exemple #2
0
        public Subscription CreateSubscription(Guid accountId, CreateSubscriptionRequestData requestData)
        {
            if (requestData == null)
            {
                throw new ParameterRequiredException("Request.Subscription");
            }
            if (requestData.Object == SubscriptionObject.Component && requestData.ComponentId == null)
            {
                throw new ParameterRequiredException("Request.ComponentId");
            }
            if (requestData.Object == SubscriptionObject.ComponentType && requestData.ComponentTypeId == null)
            {
                throw new ParameterRequiredException("Request.ComponentTypeId");
            }
            if (requestData.Object == SubscriptionObject.Default)
            {
                if (requestData.ComponentId.HasValue)
                {
                    throw new UserFriendlyException("Нельзя указывать ComponentId для подписки по умолчанию");
                }
                if (requestData.ComponentTypeId.HasValue)
                {
                    throw new UserFriendlyException("Нельзя указывать ComponentTypeId для подписки по умолчанию");
                }
            }
            else if (requestData.Object == SubscriptionObject.Component)
            {
                if (requestData.ComponentId == null)
                {
                    throw new UserFriendlyException("Укажите ComponentId для подписки на компонент");
                }
                if (requestData.ComponentTypeId.HasValue)
                {
                    throw new UserFriendlyException("Нельзя указывать ComponentTypeId для подписки на компонент");
                }
            }
            else if (requestData.Object == SubscriptionObject.ComponentType)
            {
                if (requestData.ComponentTypeId == null)
                {
                    throw new UserFriendlyException("Укажите ComponentTypeId для подписки на тип компонента");
                }
                if (requestData.ComponentId.HasValue)
                {
                    throw new UserFriendlyException("Нельзя указывать ComponentId для подписки на тип компонента");
                }
            }
            var lockObj = typeof(SubscriptionService);

            lock (lockObj)
            {
                var accountDbContext       = Context.GetAccountDbContext(accountId);
                var subscriptionRepository = accountDbContext.GetSubscriptionRepository();

                var query = subscriptionRepository
                            .QueryAll()
                            .Where(t =>
                                   t.UserId == requestData.UserId &&
                                   t.Object == requestData.Object &&
                                   t.Channel == requestData.Channel);

                if (requestData.Object == SubscriptionObject.Component)
                {
                    query = query.Where(x => x.ComponentId == requestData.ComponentId.Value);
                }
                else if (requestData.Object == SubscriptionObject.ComponentType)
                {
                    query = query.Where(x => x.ComponentTypeId == requestData.ComponentTypeId.Value);
                }

                var subscription = query.FirstOrDefault();
                if (subscription != null)
                {
                    return(subscription);
                }

                var userRepository = accountDbContext.GetUserRepository();
                var user           = userRepository.GetById(requestData.UserId);

                ComponentType componentType = null;
                if (requestData.ComponentTypeId.HasValue)
                {
                    var componentTypeRepository = accountDbContext.GetComponentTypeRepository();
                    componentType = componentTypeRepository.GetById(requestData.ComponentTypeId.Value);
                }

                subscription = new Subscription()
                {
                    User                     = user,
                    Object                   = requestData.Object,
                    ComponentId              = requestData.ComponentId,
                    ComponentType            = componentType,
                    Channel                  = requestData.Channel,
                    IsEnabled                = requestData.IsEnabled,
                    Importance               = requestData.Importance,
                    DurationMinimumInSeconds = requestData.DurationMinimumInSeconds,
                    ResendTimeInSeconds      = requestData.ResendTimeInSeconds,
                    LastUpdated              = DateTime.Now,
                    NotifyBetterStatus       = requestData.NotifyBetterStatus
                };

                subscription = subscriptionRepository.Add(subscription);
                accountDbContext.SaveChanges();

                return(subscription);
            }
        }
Exemple #3
0
        public Zidium.Core.Api.CreateSubscriptionResponse CreateSubscription(Guid accountId, CreateSubscriptionRequestData data)
        {
            var request = GetRequest <CreateSubscriptionRequest>(accountId);

            request.Data = data;
            var dispatcher = DispatcherHelper.GetDispatcherService();

            return(dispatcher.CreateSubscription(request));
        }