public async Task <ResponseEntity> createTask(taskInsert model, string token)
        {
            UserJira user = _userService.getUserByToken(token).Result;
            Project  pro  = _projectRepository.GetSingleByConditionAsync("id", model.projectId).Result;

            if (pro == null)
            {
                return(new ResponseEntity(StatusCodeConstants.NOT_FOUND, "Project is not found!", MessageConstants.MESSAGE_ERROR_404));
            }
            if (pro.creator != user.id)
            {
                return(new ResponseEntity(StatusCodeConstants.FORBIDDEN, "User is unthorization!", MessageConstants.MESSAGE_ERROR_403));
            }

            string alias = FuncUtilities.BestLower(model.taskName);
            //Kiểm tra task tồn tại chưa
            var taskValid = _taskRepository.GetSingleByConditionAsync("alias", alias).Result;

            if (taskValid != null)
            {
                return(new ResponseEntity(StatusCodeConstants.ERROR_SERVER, "task already exists!", MessageConstants.MESSAGE_ERROR_500));
            }


            Repository.Models.Task task = new Repository.Models.Task();
            task.taskName              = model.taskName;
            task.alias                 = FuncUtilities.BestLower(model.taskName);
            task.description           = FuncUtilities.Base64Encode(model.description);
            task.statusId              = model.statusId;
            task.originalEstimate      = model.originalEstimate;
            task.timeTrackingSpent     = model.timeTrackingSpent;
            task.timeTrackingRemaining = model.timeTrackingRemaining;
            task.projectId             = model.projectId;
            task.typeId                = model.typeId;
            task.reporterId            = user.id;
            task.priorityId            = model.priorityId;
            task.deleted               = false;
            task.reporterId            = user.id;
            task = _taskRepository.InsertAsync(task).Result;

            foreach (var item in model.listUserAsign)
            {
                Task_User tu = new Task_User();
                tu.taskId  = task.taskId;
                tu.deleted = false;
                tu.userId  = item;
                await _taskUserRepository.InsertAsync(tu);
            }



            return(new ResponseEntity(StatusCodeConstants.OK, task, "create task successfully!"));
        }
        public async Task <ResponseEntity> addTaskUser(TaskUser model, string token)
        {
            var task = _taskRepository.GetSingleByConditionAsync("taskId", model.taskId).Result;

            if (task == null)
            {
                return(new ResponseEntity(StatusCodeConstants.NOT_FOUND, "task is not found!", MessageConstants.MESSAGE_ERROR_404));
            }

            UserJira user = _userService.getUserByToken(token).Result;
            Project  pro  = _projectRepository.GetSingleByConditionAsync("id", task.projectId).Result;

            if (pro == null)
            {
                return(new ResponseEntity(StatusCodeConstants.NOT_FOUND, "Project is not found!", MessageConstants.MESSAGE_ERROR_404));
            }
            if (pro.creator != user.id)
            {
                return(new ResponseEntity(StatusCodeConstants.FORBIDDEN, "User is unthorization!", MessageConstants.MESSAGE_ERROR_403));
            }

            List <KeyValuePair <string, dynamic> > columns = new List <KeyValuePair <string, dynamic> >();

            columns.Add(new KeyValuePair <string, dynamic>("taskId", model.taskId));
            columns.Add(new KeyValuePair <string, dynamic>("userId", model.userId));
            var taskUser = _taskUserRepository.GetMultiByListConditionAndAsync(columns).Result;

            if (taskUser.Count() > 0)
            {
                return(new ResponseEntity(StatusCodeConstants.ERROR_SERVER, "User is unthorization!", MessageConstants.ACCOUNT_EXITST_TASK));
            }
            Task_User taskUserInsert = new Task_User();

            taskUserInsert.userId = model.taskId;
            taskUserInsert.taskId = model.userId;
            await _taskUserRepository.InsertAsync(taskUserInsert);

            return(new ResponseEntity(StatusCodeConstants.OK, "add user to task successfully!", MessageConstants.UPDATE_SUCCESS));
        }
        public async Task <ResponseEntity> updateTask(TaskEdit model, string token)
        {
            UserJira user = _userService.getUserByToken(token).Result;
            Project  pro  = _projectRepository.GetSingleByConditionAsync("id", model.projectId).Result;

            Repository.Models.Task taskModel = _taskRepository.GetSingleByConditionAsync("taskId", model.taskId).Result;
            if (taskModel == null)
            {
                return(new ResponseEntity(StatusCodeConstants.NOT_FOUND, "Task is not found!", MessageConstants.MESSAGE_ERROR_404));
            }
            if (pro == null)
            {
                return(new ResponseEntity(StatusCodeConstants.NOT_FOUND, "Project is not found!", MessageConstants.MESSAGE_ERROR_404));
            }
            if (pro.creator != user.id)
            {
                return(new ResponseEntity(StatusCodeConstants.FORBIDDEN, "User is unthorization!", MessageConstants.MESSAGE_ERROR_403));
            }

            string alias = FuncUtilities.BestLower(model.taskName);
            //Kiểm tra task tồn tại chưa
            var taskValid = _taskRepository.GetSingleByConditionAsync("alias", alias).Result;

            if (taskValid.taskId != taskModel.taskId)
            {
                return(new ResponseEntity(StatusCodeConstants.ERROR_SERVER, "Task name already exists!", MessageConstants.MESSAGE_ERROR_500));
            }


            taskModel.taskName              = model.taskName;
            taskModel.alias                 = FuncUtilities.BestLower(model.taskName);
            taskModel.description           = FuncUtilities.Base64Encode(model.description);
            taskModel.statusId              = model.statusId;
            taskModel.originalEstimate      = model.originalEstimate;
            taskModel.timeTrackingSpent     = model.timeTrackingSpent;
            taskModel.timeTrackingRemaining = model.timeTrackingRemaining;
            taskModel.projectId             = model.projectId;
            taskModel.typeId                = model.typeId;
            taskModel.reporterId            = user.id;
            taskModel.priorityId            = model.priorityId;
            taskModel.deleted               = false;
            await _taskRepository.UpdateAsync("taskId", taskModel.taskId, taskModel);

            //dell user cũ
            var taskUserCu = _taskUserRepository.GetMultiByConditionAsync("taskId", taskModel.taskId).Result;

            if (taskUserCu.Count() > 0)
            {
                List <dynamic> lstDynamicId = new List <dynamic>();
                foreach (var item in taskUserCu)
                {
                    lstDynamicId.Add(item.id);
                }
                await _taskUserRepository.DeleteByIdAsync(lstDynamicId);
            }

            foreach (var item in model.listUserAsign)
            {
                Task_User tu = new Task_User();
                tu.taskId  = taskModel.taskId;
                tu.deleted = false;
                tu.userId  = item;
                await _taskUserRepository.InsertAsync(tu);
            }



            return(new ResponseEntity(StatusCodeConstants.OK, taskModel, "update task successfully!"));
        }