Base solution for your next web application
Open Closed

Task Reminder System #8156


User avatar
0
murat.yuceer created

Hello i working on task management system like https://github.com/aspnetboilerplate/aspnetboilerplate-samples/tree/master/SimpleTaskSystem but it also have to reminder system. If user select some datetime, system must send mail to user for notify. First i decided to add backgroundworker for scan UserTasks table every 30 minute and send mail if user selected remindertime after i didnt like it, because it make busy system also user could select more sensetive minutes So how can i add background job for a specific date(reminder date) in zero?

Also i have some questions For example user added task and after user changed reminder date or closed status, than i have to delete to old jobs from backgroundjob system.. how can i do that in zero easly I thinked anoter way, with dont delete from backgroundjob table but check it when job start to work (if reminder time diffirent from current task or status closed dont send) For this way i have some question for make it ddd patterns

My entity like that have some bugs i want to manage it in my entity like ddd convenient

[Table("UserTasks")]
    [Audited]
    public class UserTask : FullAuditedAggregateRoot<Guid>, IMayHaveTenant
    {
        public int? TenantId { get; set; }

        [Required]
        [StringLength(UserTaskConsts.MaxTitleLength, MinimumLength = UserTaskConsts.MinTitleLength)]
        public virtual string Title { get; protected set; }

        [StringLength(UserTaskConsts.MaxDescriptionLength, MinimumLength = UserTaskConsts.MinDescriptionLength)]
        public virtual string Description { get; protected set; }

        public virtual DateTime? ReminderDate { get; protected set; }

        public virtual TaskState State { get; protected set; }

        //foreign keys
        public virtual long UserId { get; protected set; }
        [ForeignKey("UserId")]
        public User User { get; protected set; }



        protected UserTask() { }
        public UserTask(int? tenantId, User user, string title, string description, TaskState taskState, DateTime? reminderDate = null)
        {
            TenantId = tenantId;
            UserId = user.Id;
            User = user;
            SetTitle(title);
            SetDescription(description);
            SetState(taskState);
            SetReminderDate(reminderDate);
        }

        public void SetTitle(string title)
        {
            Title = title;
        }

        public void SetDescription(string description)
        {
            Description = description;
        }

        public void SetState(TaskState taskState)
        {
            State = taskState;

            TrigerUserTaskReminderDateChangedEvent();
        }

        public void SetReminderDate(DateTime? reminderDate)
        {
            if (reminderDate == ReminderDate)
                return;

            if (reminderDate < Clock.Now)
            {
                throw new UserFriendlyException("Can not set an reminder date in the past!");
            }

            ReminderDate = reminderDate;

            TrigerUserTaskReminderDateChangedEvent();
        }

        private UserTaskReminderDateChangedEvent _userTaskReminderDateChangedEvent;
        private void TrigerUserTaskReminderDateChangedEvent()
        {
            if (_userTaskReminderDateChangedEvent == null)
            {
                _userTaskReminderDateChangedEvent = new UserTaskReminderDateChangedEvent();//i have to pass current usertask id but its work before commit
                DomainEvents.Add(_userTaskReminderDateChangedEvent);
            }
        }
    }

2 Answer(s)
  • User Avatar
    1
    musa.demir created

    You can catch entity created event with IEventHandler<EntityCreatedEventData<UserTask>> then run your logic.

    documentation: https://aspnetboilerplate.com/Pages/Documents/EventBus-Domain-Events?searchKey=EntityCreatedEventData#entity-changes

    examples: https://github.com/aspnetzero/aspnet-zero-core/blob/dev/aspnet-core/src/MyCompanyName.AbpZeroTemplate.Core/Friendships/Cache/UserFriendCacheSyncronizer.cs https://github.com/aspnetzero/aspnet-zero-core/blob/dev/aspnet-core/src/MyCompanyName.AbpZeroTemplate.Core/MultiTenancy/Payments/Stripe/StripeGatewayManager.cs

  • User Avatar
    0
    ismcagdas created
    Support Team

    This issue is closed because it has not had recent activity for a long time.