Skip to content

Instantly share code, notes, and snippets.

@barata0
Created August 15, 2019 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save barata0/b143207fb4fddc5b56bbb3bbbf97a18f to your computer and use it in GitHub Desktop.
Save barata0/b143207fb4fddc5b56bbb3bbbf97a18f to your computer and use it in GitHub Desktop.
Quarkus fruit neo4j sync service
package org.acme.neo4j;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import org.neo4j.driver.Driver;
import org.neo4j.driver.Session;
import org.neo4j.driver.StatementResult;
import org.neo4j.driver.Values;
import org.neo4j.driver.types.Node;
@ApplicationScoped
public class FruitNeo4jSyncService {
private static final String FIND_ALL_STMT= "MATCH (f:Fruit) RETURN f ORDER BY f.name";
private static final String FIND_BY_ID_STMT = "MATCH (f:Fruit) WHERE id(f) = $id RETURN f";
private static final String DELETE_BY_ID_STMT = "MATCH (f:Fruit) WHERE id(f) = $id DETACH DELETE f";
private static final String CREATE_BY_ID_STMT = "CREATE (f:Fruit {name: $name}) RETURN f";
@Inject
Driver driver;
public static Fruit parse(Node node) {
return new Fruit(node.id(), node.get("name").asString());
}
public List<Fruit> findAll() {
Session session = driver.session();
List<Fruit> fruits = new ArrayList<>();
try {
fruits = session.run(FIND_ALL_STMT).list(record -> parse(record.get("f").asNode()));
} finally {
session.close();
}
return fruits;
}
public Fruit create(String name) {
Session session = driver.session();
Fruit fruit = null;
try {
StatementResult rs = session.run(CREATE_BY_ID_STMT, Values.parameters("name", name));
if (rs.hasNext()) {
fruit = parse(rs.single().get("f").asNode());
}
} finally {
session.close();
}
return fruit;
}
public Fruit byId(Long id) {
Session session = driver.session();
Fruit fruit = null;
try {
StatementResult rs = session.run(FIND_BY_ID_STMT, Values.parameters("id", id));
if (rs.hasNext()) {
fruit = parse(rs.single().get("f").asNode());
}
} finally {
session.close();
}
return fruit;
}
public boolean delete(Long id) {
Session session = driver.session();
boolean deleted = false;
try {
StatementResult rs = session.run(DELETE_BY_ID_STMT, Values.parameters("id", id));
if (rs.summary().counters().nodesDeleted() > 0) {
deleted = true;
}
} finally {
session.close();
}
return deleted;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment