示例#1
0
 private Task GetSendNotificationTask(IntegratedAppUserSetting setting, SendUserNotificationViaApplication model)
 {
     return(setting.App.AppType switch
     {
         IntegratedAppType.IosApplication => GetSendNotificationTaskForIosApp(setting, model),
         IntegratedAppType.AndroidApplication => Task.CompletedTask,
         _ => throw new ArgumentOutOfRangeException(),
     });
示例#2
0
        /// <summary>
        /// Отправить уведомление для Ios приложения
        /// </summary>
        /// <param name="setting"></param>
        /// <param name="reqModel"></param>
        /// <returns></returns>
        public async Task GetSendNotificationTaskForIosApp(IntegratedAppUserSetting setting, SendUserNotificationViaApplication reqModel)
        {
            var model = new SendNotificationViaOneSignal
            {
                AppId = setting.App.Uid,
                Data  = new Dictionary <string, string>
                {
                    ["foo"] = "bar"
                },
                Contents = new Dictionary <string, string>
                {
                    ["en"] = "English Message",
                    ["ru"] = reqModel.Text
                },
                Headings = new Dictionary <string, string>
                {
                    ["en"] = "111",
                    ["ru"] = reqModel.Title
                },
                IncludePlayerIds = new[]
                {
                    setting.UserUidInApp
                }
            };

            var request = new HttpRequestMessage(HttpMethod.Post, "https://onesignal.com/api/v1/notifications")
            {
                Content = CreateRequestStringContent(model)
            };

            request.Headers.Authorization = new AuthenticationHeaderValue("Authorization", $"Basic {setting.App.ConfigurationJson}");

            try
            {
                var response = await HttpClient.SendAsync(request);
            }
            catch (Exception error)
            {
                Logger.LogError(error, "IntegratedAppWorker.GetSendNotificationTaskForIosApp.OnException");
            }
        }
示例#3
0
        /// <summary>
        /// Добавить настройку для приложения
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task <BaseApiResponse> AddUserAppSettingIdAsync(AddUserAppSetting model)
        {
            if (!IsAuthenticated)
            {
                return(new BaseApiResponse(false, "Вы не авторизованы"));
            }

            var validation = ValidateModel(model);

            if (!validation.IsSucceeded)
            {
                return(validation);
            }


            var app = await Query <IntegratedApp>().FirstOrDefaultAsync(x => x.Uid == model.AppUId);

            if (app == null)
            {
                return(new BaseApiResponse(false, "Не найдено интегрированного приложения с указанным идентификатором"));
            }

            var repo = GetRepository <IntegratedAppUserSetting>();

            //Нахожу настройки по данному приложению и идентификатору пользователя
            var settings = await repo.Query().Where(x => x.UserId == UserId && x.AppId == app.Id)
                           .ToListAsync();

            //Если настройки нет то добавляем ее
            if (settings.Count == 0 || settings.Count > 0 && settings.All(x => x.UserUidInApp != model.UserUidInApp))
            {
                settings.ForEach(x => x.Active = false);

                var setting = new IntegratedAppUserSetting
                {
                    Active       = true,
                    AppId        = app.Id,
                    UserId       = UserId,
                    UserUidInApp = model.UserUidInApp
                };

                repo.CreateHandled(setting);

                return(await TrySaveChangesAndReturnResultAsync($"Настройка для пользователя интегрированного приложения '{app.Name}' сохранена"));
            }

            var oldSetting = settings.FirstOrDefault(x => x.Active);

            if (oldSetting == null)
            {
                return(RaiseAndReturnException(new Exception("Произошла какая то фигня")));
            }

            oldSetting.Active = false;

            repo.UpdateHandled(oldSetting);

            var newSetting = new IntegratedAppUserSetting
            {
                Id           = Guid.NewGuid().ToString(),
                Active       = true,
                AppId        = app.Id,
                UserId       = UserId,
                UserUidInApp = model.UserUidInApp
            };

            repo.CreateHandled(newSetting);

            return(await TrySaveChangesAndReturnResultAsync($"Добавлена новая настройка для пользователя интегрированного приложения '{app.Name}'"));
        }