public string GetDateDueFromRecurringTaskModel(RecurringTaskModel recurringTaskModel)
        {
            var currentDate = DateTimeOffset.Now;

            DateTimeOffset dueDate = currentDate;

            switch (recurringTaskModel.TaskRecurrenceType)
            {
            case DataModel.Enums.TaskRecurrenceType.Day:
                dueDate = currentDate.AddDays(recurringTaskModel.RecurrenceInterval);
                break;

            case DataModel.Enums.TaskRecurrenceType.Week:
                dueDate = currentDate.AddDays(recurringTaskModel.RecurrenceInterval * 7);
                break;

            case DataModel.Enums.TaskRecurrenceType.Month:
                dueDate = currentDate.AddMonths(recurringTaskModel.RecurrenceInterval);
                break;

            case DataModel.Enums.TaskRecurrenceType.Year:
                dueDate = currentDate.AddYears(recurringTaskModel.RecurrenceInterval);
                break;

            default:
                break;
            }

            return(dueDate.FormatDateString());
        }
        public async Task <IActionResult> Put([FromBody] RecurringTaskModel model)
        {
            // TODO - add validation
            ////await _recurringTasksService.UpdateTask(model);

            return(new NoContentResult());
        }
        public RecurringTask PopulateRecurringTaskFromModel(RecurringTaskModel model, RecurringTask dbRecurringTask, int?userId = null)
        {
            if (dbRecurringTask.UserId == 0)
            {
                if (userId.HasValue)
                {
                    dbRecurringTask.UserId = userId.Value;
                }
                else
                {
                    throw new InvalidOperationException("This task has not been created in the context of a user");
                }
            }

            dbRecurringTask.Name               = model.Name;
            dbRecurringTask.Description        = model.Description;
            dbRecurringTask.RecurrenceInterval = model.RecurrenceInterval;
            dbRecurringTask.TaskRecurrenceType = model.TaskRecurrenceType;


            foreach (var taskModel in model.Tasks)
            {
                var dbTask = new LifeTask();
                dbTask = PopulateLifeTaskFromModel(taskModel, dbTask, userId);
                dbRecurringTask.Tasks.Add(dbTask);
            }

            return(dbRecurringTask);
        }
        public async Task AddRecurringTask(RecurringTaskModel model, int userId)
        {
            var firstTask = _recurringTaskValueService.CreateTaskFromRecurringTaskModel(model);

            model.Tasks = new List <TaskModel>()
            {
                firstTask
            };

            await _commands.AddRecurringTask(model, userId);
        }
        public async Task AddRecurringTask(RecurringTaskModel model, int userId)
        {
            using (var db = _dbContextFactory.Create())
            {
                var recurringTask = new RecurringTask();

                recurringTask = _lifeTaskMappingService.PopulateRecurringTaskFromModel(model, recurringTask, userId);

                db.RecurringTasks.Add(recurringTask);
                await db.SaveChangesAsync();
            }
        }
        public TaskModel CreateTaskFromRecurringTaskModel(RecurringTaskModel recurringTaskModel)
        {
            var taskModel = new TaskModel
            {
                Name              = recurringTaskModel.Name,
                Description       = recurringTaskModel.Description,
                DateDue           = GetDateDueFromRecurringTaskModel(recurringTaskModel),
                DurationInMinutes = 0, // TODO - add duration to recurring task
                TaskTypeId        = recurringTaskModel.TaskType.Id
            };

            return(taskModel);
        }
        public async Task <IActionResult> Post([FromBody] RecurringTaskModel model)
        {
            var userId = _userManagerService.TryGetUserId(User);

            if (!userId.HasValue)
            {
                return(new UnauthorizedResult());
            }

            // TODO - add validation
            await _recurringTasksService.AddRecurringTask(model, userId.Value);

            return(new NoContentResult());
        }
 public Task UpdateRecurringTask(RecurringTaskModel model)
 {
     throw new NotImplementedException();
 }