Skip to content
Extraits de code Groupes Projets
Valider 8728d52a rédigé par Maxime DESMARCHELIER's avatar Maxime DESMARCHELIER
Parcourir les fichiers

Add insert API

parent 86e1bce8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -62,3 +62,22 @@ class Neo4j:
results = session.run("MATCH (a) return Id(a) as key, a.name as name")
return results.data()
def insert_software(self, insert_data):
with self.driver.session() as session:
# On check si la node avec laquelle on se relie existe
results = session.run("match (a:Software) where ID(a) = %d return a" % int(insert_data.nodeId))
if not results.data():
return {"Error": "%d ID not found" % int(insert_data.nodeId)}
# On check si le logiciel n'existe pas déjà
results = session.run("match (a:Software) where a.name = '%s' return a" % insert_data.newNodeName)
if results.data():
return {"Error": "%s already exist" % insert_data.newNodeName}
session.run("CREATE (n:Software {name: '%s'})" % insert_data.newNodeName)
results = session.run(
"MATCH (a:Software), (b:Software) WHERE a.name = '%s' AND ID(b) = %d CREATE (a)-[r:%s]->(b) "
"RETURN type(r)" % (insert_data.newNodeName, int(insert_data.nodeId), insert_data.relationType))
return results.data()
......@@ -14,6 +14,12 @@ class SoftwareSearch(BaseModel):
software2: str
class SoftwareInsert(BaseModel):
newNodeName: str
relationType: str
nodeId: str
driver = Neo4j(os.environ.get("NEO4J_URI"), os.environ.get("NEO4J_USER"), os.environ.get("NEO4J_PASSWORD"))
app = FastAPI()
......@@ -70,7 +76,7 @@ async def software():
for idx, relation in enumerate(jsondata["edges"]):
relation['key'] = str(idx)
relation['attributes'] = {}
relation['attributes']['label'] = relation['relation_type'][1]
relation['label'] = relation['relation_type'][1]
relation['source'] = findNodeIdWithName(jsondata["nodes"], relation["source"])
relation['target'] = findNodeIdWithName(jsondata["nodes"], relation["target"])
del relation['relation_type']
......@@ -91,3 +97,9 @@ async def software_search(search: SoftwareSearch):
print(search.software1, search.software2)
res = driver.get_softwares_shortest_path(search)
return {"softwares": res}
@app.post("/software-insert")
async def software_insert(insert_data: SoftwareInsert):
res = driver.insert_software(insert_data)
return res
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter