示例#1
0
def project_single_task(project_id, task_id):
    """
    O cliente tem que estar logado.
    A tarefa tem de existir.
    Retorna a informação da tarefa se o pedido for GET.
    Atualiza e retorna a tarefa atualizada se o pedido for um PUT.
    Remove a tarefa se o pedido for um DELETE.
    """
    # Valida o login e a associação do cliente ao projeto
    code = validate_access(session, project_id)
    if code is not 200:
        return make_response(jsonify(), code)

    # Verifica se a tarefa existe
    task = db.get_task(task_id)
    if not task:
        return make_response(jsonify(), 404)

    if request.method == 'GET':
        return make_response(jsonify(task), 200)
    elif request.method == 'PUT':
        data = request.get_json()
        valid = validate_json(data, 'project_order', 'description', 'status')
        if not valid:
            return make_response(jsonify(), 400)
        task = db.update_task(task_id, data)
        return make_response(jsonify(task), 200)
    elif request.method == 'DELETE':
        db.remove_task(task_id)
        return make_response(jsonify(), 200)
示例#2
0
def register():
    """
    Tenta se registar.
    """
    try:
        data = request.get_json()
        valid = validate_json(data, 'username', 'email', 'password')
        if not valid:
            return make_response(jsonify(), 400)
        user = db.add_user(data)
        return make_response(jsonify(user), 201)
    except sqlite3.Error as e:
        print(str(e))
        return make_response(jsonify(str(e)), 409)
示例#3
0
def login():
    """
    Regista-se na aplicação através do formulário.
    Se o login for válido, o cliente será redirecionado para a página inicial.
    """
    data = request.get_json()
    valid = validate_json(data, 'username', 'password')
    if not valid:
        return make_response(jsonify(), 400)
    user_id = db.login(data)
    if not user_id:
        return make_response(jsonify(), 403)
    else:
        session['user_id'] = user_id
        flash('You were logged in')
        return index()
示例#4
0
def single_project(project_id):
    """
    O cliente tem que estar logado.
    O projeto tem de existir.
    O cliente tem de pretencer ao projeto
    Retorna a informação do projeto se o pedido for GET.
    Atualiza e retorna o projeto atualizado se o pedido for um PUT.
    Remove o projeto se o pedido for um DELETE.
    """
    # Verifica se o projeto existe
    project = db.get_project(project_id)
    if not project:
        return make_response(jsonify(), 404)

    if 'user_id' not in session:
        return make_response(jsonify(), 401)

    # Valida o login e a associação do cliente ao projeto
    ownership = db.owner_of_project(session['user_id'], project_id)
    association = db.get_user_project_association(session['user_id'],
                                                  project_id)
    if not ownership and not association:
        return make_response(jsonify(), 403)

    if request.method == 'GET':
        return make_response(jsonify(project), 200)
    elif request.method == 'PUT':
        data = request.get_json()
        valid = validate_json(data, 'title')
        if not valid:
            return make_response(jsonify(), 400)
        project = db.update_project(project_id, data)
        return make_response(jsonify(project), 200)
    elif request.method == 'DELETE':
        if not ownership:
            return make_response(jsonify(), 403)
        db.remove_project(project_id)
        return make_response(jsonify(), 200)
示例#5
0
def project_tasks(project_id):
    """
    O projeto tem de existir.
    O cliente deve pertencer ao projeto.
    Retorna todas as tarefas de um projeto se o pedido for um GET.
    Cria e retorna, se for bem sucedido, uma nova tarefa é criada, se o pedido for POST.
    Remove task se o pedido for um DELETE
    """
    # Verifica se o projeto existe.
    project = db.get_project(project_id)
    if not project:
        return make_response(jsonify(), 404)

    # Valida o login e a associação do cliente ao projeto
    code = validate_access(session, project_id)
    if code is not 200:
        return make_response(jsonify(), code)

    if request.method == 'GET':
        tasks = db.get_tasks_of_project(project_id)
        return make_response(jsonify(tasks), 200)
    elif request.method == 'POST':
        data = request.get_json()
        valid = validate_json(data, 'project_id', 'description')
        if not valid:
            return make_response(jsonify(), 400)
        try:
            task = db.add_task(data)
            return make_response(jsonify(task), 201)
        except sqlite3.Error as e:
            return make_response(jsonify(str(e), 409))
    elif request.method == 'DELETE':
        data = request.get_json()
        try:
            db.remove_task(data['task_id'])
            return make_response(jsonify(), 200)
        except sqlite3.Error as e:
            return make_response(jsonify(str(e)), 404)
示例#6
0
def project_collaborators(project_id):
    """
    O cliente tem que estar logado.
    O projeto tem de existir.
    O cliente deve ser o criador do projeto.
    Retorna todos os colaboradores se o pedido for GET.
    Tenta adicionar um novo colaborador ao projeto se o pedido for um POST.
    """
    # Verifica se o projeto existe
    project = db.get_project(project_id)
    if not project:
        return make_response(jsonify(), 404)

    # Valida o login e a associação do cliente ao projeto
    code = validate_access(session, project_id)
    if code is not 200:
        return make_response(jsonify(), code)
    try:
        if request.method == 'GET':
            collabs = db.get_users_of_project(project_id)
            return make_response(jsonify(collabs), 200)
        elif request.method == 'POST':
            data = request.get_json()
            valid = validate_json(data, 'username')
            if not valid:
                return make_response(jsonify(), 400)

            user = db.get_user_from_username(data['username'])

            if not user:
                return make_response(jsonify(), 404)

            db.add_user_project(user['id'], project_id)
            return make_response(jsonify(), 201)
    except sqlite3.Error as e:
        print(str(e))
        return make_response(jsonify(str(e)), 409)
示例#7
0
def access_projects():
    """
    Retorna todos os projetos do cliente se o pedido for um GET.
    Tenta criar um projeto se a solicitação for um POST.
    Se a criação for bem sucedida, retorna o novo projeto.
    """
    if 'user_id' not in session:
        return make_response(jsonify(), 401)

    if request.method == 'GET':
        projects = db.get_projects_of_user(session['user_id'])
        return make_response(jsonify(projects), 200)
    elif request.method == 'POST':
        data = request.get_json()
        valid = validate_json(data, 'title')
        if not valid:
            return make_response(jsonify(), 400)
        try:
            data['owner'] = session['user_id']
            project = db.add_project(data)
            return make_response(jsonify(project), 201)
        except sqlite3.Error as e:
            print(e)
            return make_response(jsonify(str(e)), 409)
示例#8
0
def project_chat(project_id):
    """
    O cliente tem que estar logado.
    O projeto tem de existir.
    O cliente deve ser o criador ou estar associado ao projeto.
    Retorna todas as mensagens se o pedido for GET.
    Adiciona uma nova mensagem se a solicitação for um POST.
    """
    # Verifica se o projeto existe
    project = db.get_project(project_id)
    if not project:
        return make_response(jsonify(), 404)

    # Valida o login e a associação do cliente ao projeto
    code = validate_access(session, project_id)
    if code is not 200:
        return make_response(jsonify(), code)

    if request.method == 'GET':
        messages = db.get_messages_of_project(project_id)
        return make_response(jsonify(messages), 200)
    elif request.method == 'POST':
        data = request.get_json()

        valid = validate_json(data, 'content', 'project_id')
        if not valid:
            return make_response(jsonify(), 400)

        data['sender'] = session['user_id']
        user = db.get_user(session['user_id'])
        if not user:
            return make_response(jsonify(), 404)

        data['username'] = user['username']
        db.add_message(data)
        return make_response(jsonify(), 200)