private Task GetSendNotificationTask(IntegratedAppUserSetting setting, SendUserNotificationViaApplication model) { return(setting.App.AppType switch { IntegratedAppType.IosApplication => GetSendNotificationTaskForIosApp(setting, model), IntegratedAppType.AndroidApplication => Task.CompletedTask, _ => throw new ArgumentOutOfRangeException(), });
/// <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"); } }
/// <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}'")); }