Skip to content

Instantly share code, notes, and snippets.

View vladbatushkov's full-sized avatar
🥥
Sabai sabai

Vlad Batushkov vladbatushkov

🥥
Sabai sabai
View GitHub Profile
@vladbatushkov
vladbatushkov / airport-schema.js
Created April 18, 2020 03:49
GraphQL Airport Type
type Airport {
code: String!
name: String!
country: String!
city: String!
location: Point!
directs: [Airport] @relation(name: "FLIES_TO", direction: "OUT")
neighbors: [Airport] @cypher(statement: "MATCH (a:Airport) WHERE this.city = a.city AND this <> a RETURN a")
}
@vladbatushkov
vladbatushkov / flights-neighbors.cql
Created April 18, 2020 04:31
Find Airport neighbors Airports
MATCH (a:Airport) WHERE this.city = a.city AND this <> a RETURN a
@vladbatushkov
vladbatushkov / gql-query-flights-search-nodes.js
Last active April 18, 2020 05:33
FlightsSearchNodes GraphQL query schema
type FlightDetails {
flight_number: String!
duration: String!
price: FlightsInt!
departs_local: FlightsDateTime!
arrival_local: FlightsDateTime!
}
type FlightInfo {
flight: FlightDetails @neo4j_ignore
type Query {
FlightsSearchObjects(from: String, to: String, date: String): [FlightsSearchResult]
}
const query = "CALL custom.getFlightsObjects($from, $to, $date, 2, 6) YIELD result RETURN result";
export const resolvers = {
Query: {
FlightsSearchObjects : async (object, params, ctx, resolveInfo) => {
var result;
@vladbatushkov
vladbatushkov / scalar-types.js
Created April 18, 2020 07:07
Custom Scalar Types
const pad = (s) => {
let str = s + "";
while (str.length < 2)
str = "0" + str;
return str;
}
const flightsDateTime = new GraphQLScalarType({
name: 'FlightsDateTime',
description: 'Description of flights dateTime type',
@vladbatushkov
vladbatushkov / FlightsSearchObjects.js
Created April 18, 2020 07:10
GraphQL FlightsSearchObjects query
query {
FlightsSearchObjects(from: "Bangkok", to: "Moscow", date:"20200101") {
flights {
flight {
flight_number
price
duration
departs_local
arrival_local
}
@vladbatushkov
vladbatushkov / money-gen.cql
Last active May 30, 2020 05:33
Generate graph of Finance Transactions
// clean up
CALL apoc.periodic.iterate(
"MATCH (n) RETURN n",
"DETACH DELETE n",
{ batchSize: 10000, parallel: true });
// generate Entities
CALL apoc.generate.er(500000, 5000000, 'Client', 'TRANSFER_TO');
// select ATMs
MATCH (c:Client)
WITH c
@vladbatushkov
vladbatushkov / money-sub.cql
Last active May 30, 2020 06:18
Sub-graph for money graph, that connects Transactions via HOPs
// clean up HOPS
CALL apoc.periodic.iterate(
"MATCH (:Transaction)-[r:HOP]->(:Transaction) RETURN r",
"DETACH DELETE r",
{ batchSize: 10000, parallel: false });
// generate HOP relationships
CALL apoc.periodic.iterate(
"MATCH (t1:Transaction)<-[:IN]-(e)-[:OUT]->(t2:Transaction)
WHERE (e:Client OR e:Company)
AND t1.timestamp < t2.timestamp
@vladbatushkov
vladbatushkov / money-query.cql
Last active May 30, 2020 06:21
Find circular money flow in financial graph
PROFILE MATCH path = (t1:Transaction)-[:HOP*3..10]->(t2:Transaction)
WHERE (t1)<-[:OUT]-(:Client)-[:IN]->(t2)
AND t1.timestamp < t2.timestamp
AND (t1.amount - t2.amount) / t1.amount < 0.25
UNWIND nodes(path) as t
MATCH (e)-[:OUT]->(t)
WHERE e:Client OR e:Company
RETURN e, t
@vladbatushkov
vladbatushkov / neo4j-apoc-gds.dockerfile
Last active September 1, 2020 08:22
Neo4j 4.0.0 + APOC + GDS
FROM neo4j:4.0.0
ENV APOC_VERSION=4.0.0.4
ENV APOC_URI=https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/${APOC_VERSION}/apoc-${APOC_VERSION}-all.jar
ENV GDS_VERSION=1.0.0
ENV GDS_URI=https://github.com/neo4j/graph-data-science/releases/download/${GDS_VERSION}/neo4j-graph-data-science-${GDS_VERSION}-standalone.jar
RUN apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
RUN wget $APOC_URI && mv apoc-${APOC_VERSION}-all.jar plugins/apoc-${APOC_VERSION}-all.jar