public async Task <ActionResult> ShareTask(Guid id, string username)
        {
            var taskDetailsQuery = new TaskDetailsQuery(id);
            var task             = await Mediator.Send(taskDetailsQuery);

            if (task == null)
            {
                return(NotFound("Task not found"));
            }

            var  loggedUserQuery = new LoggedUserQuery();
            User loggedUser      = await Mediator.Send(loggedUserQuery);

            var  getUserQuery   = new GetUserQuery(username);
            User sharedWithUser = await Mediator.Send(getUserQuery);

            if (sharedWithUser == null)
            {
                return(NotFound("User to share the task with not found."));
            }
            else if (task.UserTask.SharedWithId != null)
            {
                return(BadRequest("The task is shared already."));
            }

            var shareTaskCommand = new ShareTaskCommand(task, loggedUser.Id, sharedWithUser);
            await Mediator.Send(shareTaskCommand);

            return(NoContent());
        }
        public async Task <ActionResult <DelegatedTaskViewModel> > TaskDetails(Guid id)
        {
            var taskDetailsQuery = new TaskDetailsQuery(id);
            var task             = await Mediator.Send(taskDetailsQuery);

            if (task == null)
            {
                return(BadRequest("Task not found"));
            }

            return(Mapper.Map <DelegatedTask, DelegatedTaskViewModel>(task));
        }
        public async Task <ActionResult> FinishTask(Guid id)
        {
            var taskDetailsQuery = new TaskDetailsQuery(id);
            var task             = await Mediator.Send(taskDetailsQuery);

            if (task == null)
            {
                return(NotFound("Task not found"));
            }

            var finishTask = new FinishTaskCommand(task);
            await Mediator.Send(finishTask);

            return(NoContent());
        }
        public async Task <ActionResult> EditTask([CustomizeValidator(Interceptor = typeof(API.Middleware.ValidatorInterceptor))] DelegatedTaskViewModel task)
        {
            var taskDetailsQuery = new TaskDetailsQuery(task.Id);
            var taskQuery        = await Mediator.Send(taskDetailsQuery);

            if (taskQuery == null)
            {
                return(BadRequest("Task not found"));
            }

            var editTaskCommand = new EditTaskCommand(taskQuery, task.Type, task.Deadline, task.Notes);
            await Mediator.Send(editTaskCommand);

            return(NoContent());
        }
        public async Task <ActionResult> DeleteTask(Guid id)
        {
            var taskDetailsQuery = new TaskDetailsQuery(id);
            var task             = await Mediator.Send(taskDetailsQuery);

            if (task == null)
            {
                return(NotFound("Task not found"));
            }

            var  loggedUserQuery = new LoggedUserQuery();
            User user            = await Mediator.Send(loggedUserQuery);

            var deleteTaskCommand = new DeleteTaskCommand(user.UserName, task);
            await Mediator.Send(deleteTaskCommand);

            return(NoContent());
        }