def create_relation():
    data = request.json
    statement = ("MATCH (e:Egresso {chave: $egresso})"
                 "MATCH (c:Empresa {chave: $empresa})"
                 "CREATE (e)-[:Trabalha {desde: $data}]->(c)")
    driver.session().run(statement,
                         egresso=data["egresso"],
                         empresa=data["empresa"],
                         data=data['data'])
    return {"msg": "Relacionamento criado com sucesso!"}
def list_relation_trabalhou(id):
    data = request.json
    statement = (
        "MATCH(e:Egresso {chave: $id})-[t:Trabalha]->(c:Empresa {chave: $id_empresa})"
        "CREATE(e)-[:Trabalhou {de: t.desde, ate: $data}]->(c)"
        "DELETE(t)")
    driver.session().run(statement,
                         id=id,
                         id_empresa=data["empresa"],
                         data=data["data"])

    return {"msg": "Relacionamento atualizado!"}
def update_company(id):
    colecao = mongo.empresas
    data = request.json
    colecao.update_one({"_id": ObjectId(id)}, {"$set": data})

    # Atualiza empresa no neo4j
    query = ("MATCH(c:Empresa {chave: $company_id}) "
             "SET c.nome = $company_name")
    with driver.session() as session:
        session.run(query, company_name=data['nome'], company_id=id)
    return {"msg": "Empresa atualizada com sucesso"}
def list_relation_egresso(id):
    statement = (
        "MATCH(c:Empresa)<-[t:Trabalha]-(e:Egresso {chave: $id}) return c.chave, t.desde "
    )
    result = driver.session().run(statement, id=id)
    response = []
    for record in result:
        company = detail_company(record[0])
        company["desde"] = record[1]
        response.append(company)

    return jsonify(response)
def list_relation_company(id):
    statement = (
        "MATCH(e:Egresso)-[t:Trabalha]->(c:Empresa {chave: $id}) return e.chave, t.desde "
    )
    result = driver.session().run(statement, id=id)
    response = []
    for record in result:
        graduate = detail_graduate(record[0])
        graduate["desde"] = record[1]
        response.append(graduate)

    return jsonify(response)
def update_graduate(id):
    colecao = mongo.egressos
    data = request.json
    colecao.update_one({"_id": ObjectId(id)}, {"$set": data})

    # Atualizar egresso no neo4j
    query = ("MATCH(e:Egresso {chave: $egresso_id})"
             "SET e.nome = $egresso_name")

    with driver.session() as session:
        session.run(query, egresso_name=data['nome'], egresso_id=id)

    return {"msg": "Egresso atualizado com sucesso"}
def create_graduate():
    colecao = mongo.egressos
    data = request.json

    # Verifica se já existe um egresso com a matricula informada
    egressos = colecao.find({"matricula": data['matricula']})
    for _ in egressos:
        return {
            "msg": "Já existe um egresso registrado com a matrícula informada"
        }, 403

    # Insere egresso no mongo
    egresso = colecao.insert_one(data)

    # Insere egresso no neo4j
    query = "CREATE(:Egresso {nome: $egresso_name, chave: $egresso_id})"
    with driver.session() as session:
        session.run(query,
                    egresso_name=data['nome'],
                    egresso_id=str(egresso.inserted_id))
    return {"msg": "Egresso registrado com sucesso"}
def create_company():
    colecao = mongo.empresas
    data = request.json

    # Verifica se já existe uma empresa com o nome informado
    empresas = colecao.find({"nome": data['nome']})
    for _ in empresas:
        return {
            "msg": "Já existe uma empresa registrada com o nome informado"
        }, 403

    # Insere empresa
    empresa = colecao.insert_one(data)

    # Insere empresa no neo4j
    query = "CREATE(:Empresa {nome: $company_name, chave: $company_id})"
    with driver.session() as session:
        session.run(query,
                    company_name=data['nome'],
                    company_id=str(empresa.inserted_id))
    return {"msg": "Empresa registrada com sucesso"}