public async Task <bool> Update(UpdatePushNotificationModel model) { var pushNotification = await _repository.Filter <PushNotification>(x => x.Id == model.Id && x.PushNotificationStatusType == PushNotificationStatusType.Scheduled).FirstOrDefaultAsync(); pushNotification.Description = model.Description; pushNotification.Title = model.Title; pushNotification.PushNotificationUserType = model.PushNotificationUserType; pushNotification.PushNotificationActionType = model.PushNotificationActionType; pushNotification.PushNotificationStatusType = model.SendingDate > DateTime.UtcNow ? PushNotificationStatusType.Scheduled : PushNotificationStatusType.Sent; pushNotification.SendingDate = model.SendingDate; _repository.Update(pushNotification); await _repository.SaveChangesAsync(); if (pushNotification.PushNotificationStatusType == PushNotificationStatusType.Scheduled) { var date = new DateTime(pushNotification.SendingDate.Year, pushNotification.SendingDate.Month, pushNotification.SendingDate.Day, pushNotification.SendingDate.Hour, pushNotification.SendingDate.Minute, pushNotification.SendingDate.Second); var sendPushTriggerBuilder = TriggerBuilder.Create() .WithIdentity($"{nameof(PushNotificationSendingJob)}Trigger#{PushNotificationSendingJob.Name}{pushNotification.Id}") .StartAt(date); dynamic sendPushProp = new ExpandoObject(); sendPushProp.pushNotificationId = pushNotification.Id; await SchedulerHelper.ReSchedule <PushNotificationSendingJob, IJobListener>(new QuartzScheduleModel { Name = $"{PushNotificationSendingJob.Name}{pushNotification.Id}", IsListenerRequested = false, DataMap = sendPushProp, TriggerBuilder = sendPushTriggerBuilder }); } else { switch (pushNotification.PushNotificationUserType) { case PushNotificationUserType.All: await SendNotificationUsers(pushNotification, model.AnousmentId); await SendNotificationGuests(pushNotification, model.AnousmentId); break; case PushNotificationUserType.Guest: await SendNotificationGuests(pushNotification, model.AnousmentId); break; case PushNotificationUserType.Registered: await SendNotificationUsers(pushNotification, model.AnousmentId); break; default: throw new ArgumentOutOfRangeException(); } } return(true); }
public async Task <IActionResult> Update([FromBody] UpdatePushNotificationModel model) { return(await MakeActionCallAsync(async() => await _service.Update(model))); }