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);
        }
示例#2
0
 public async Task <IActionResult> Update([FromBody] UpdatePushNotificationModel model)
 {
     return(await MakeActionCallAsync(async() => await _service.Update(model)));
 }