def patch(self, task_id): """ Endpoint to update task""" request_data = request.get_json() user = get_jwt_identity() task = Task.get_or_404(task_id) schema = TaskSchema(context={'id': task_id}) if 'task_assignees' in request_data: project = Project.get_or_404(task.project_id) assignee_list = check_assignee(request_data.get('task_assignees'), project.assignees) if assignee_list is not None: user_list = assign_user(assignee_list) assignees = user_list if user_list is not None else [] del request_data['task_assignees'] data = schema.load_object_into_schema(request_data, partial=True) data['task_assignees'] = assignees task.update_(**data) else: data = schema.load_object_into_schema(request_data, partial=True) task.update_(**data) return response('success', message=success_messages['updated'].format('Task'), data=schema.dump(task).data, status_code=200)
def post(self): """ Endpoint to create new Task""" data = request.get_json() title = data.get('title') formatted_date = convert_date_to_date_time(data['due_date']) schema = TaskSchema() project_id = data['projectId'] project = Project.get_or_404(project_id) task_exist = Task.find_by_title_and_project_id(title=title, project_id=project.id) if task_exist: raise ValidationError( { "message": serialization_messages['exists'].format('Task with title') }, 409) if not check_date_difference(formatted_date, project.due_date): raise ValidationError( { "message": "Tasks cannot be created under this project because of dat difference" }, 401) assignee_list = check_assignee(data.get('task_assignees'), project.assignees) if assignee_list is not None: user_list = assign_user(assignee_list) data['task_assignees'] = user_list else: data['task_assignees'] = [] assignee_ids = data['task_assignees'] if data[ 'task_assignees'] is not None else [] del data['task_assignees'] task_data = schema.load_object_into_schema(data) task = Task() task.title = data['title'] task.description = data['description'] task.due_date = data['due_date'] task.task_assignees = assignee_ids task.project_id = project.id task.save() task.save() return response('success', message=success_messages['created'].format('Task'), data=schema.dump(task).data, status_code=201)