58 lines
2.1 KiB
SQL
58 lines
2.1 KiB
SQL
/*
|
|
// Alpha Model
|
|
// [ ] Not modeled in Nitro
|
|
// [X] Modeled in Nitro
|
|
// [-] Omitted in Nitro
|
|
// [?] Unclear / has work to be done for Nitro
|
|
{
|
|
[X] userId: {
|
|
[X] type: String,
|
|
[X] required: true,
|
|
[-] index: true
|
|
},
|
|
[X] contributionId: {
|
|
[X] type: String,
|
|
[X] required: true,
|
|
[-] index: true
|
|
},
|
|
[?] rated: {
|
|
[X] type: String,
|
|
[ ] required: true,
|
|
[?] enum: ['funny', 'happy', 'surprised', 'cry', 'angry']
|
|
},
|
|
[X] createdAt: {
|
|
[X] type: Date,
|
|
[X] default: Date.now
|
|
},
|
|
[X] updatedAt: {
|
|
[X] type: Date,
|
|
[X] default: Date.now
|
|
},
|
|
[-] wasSeeded: { type: Boolean }
|
|
}
|
|
*/
|
|
|
|
CALL apoc.load.json("file:${IMPORT_CHUNK_PATH_CQL_FILE}") YIELD value as emotion
|
|
MATCH (u:User {id: emotion.userId}),
|
|
(c:Post {id: emotion.contributionId})
|
|
MERGE (u)-[e:EMOTED {
|
|
id: emotion._id["$oid"],
|
|
emotion: emotion.rated,
|
|
createdAt: datetime(emotion.createdAt.`$date`),
|
|
updatedAt: datetime(emotion.updatedAt.`$date`)
|
|
}]->(c)
|
|
RETURN e;
|
|
/*
|
|
// Queries
|
|
// user sets an emotion emotion:
|
|
// MERGE (u)-[e:EMOTED {id: ..., emotion: "funny", createdAt: ..., updatedAt: ...}]->(c)
|
|
// user removes emotion
|
|
// MATCH (u)-[e:EMOTED]->(c) DELETE e
|
|
// contribution distributions over every `emotion` property value for one post
|
|
// MATCH (u:User)-[e:EMOTED]->(c:Post {id: "5a70bbc8508f5b000b443b1a"}) RETURN e.emotion,COUNT(e.emotion)
|
|
// contribution distributions over every `emotion` property value for one user (advanced - "whats the primary emotion used by the user?")
|
|
// MATCH (u:User{id:"5a663b1ac64291000bf302a1"})-[e:EMOTED]->(c:Post) RETURN e.emotion,COUNT(e.emotion)
|
|
// contribution distributions over every `emotion` property value for all posts created by one user (advanced - "how do others react to my contributions?")
|
|
// MATCH (u:User)-[e:EMOTED]->(c:Post)<-[w:WROTE]-(a:User{id:"5a663b1ac64291000bf302a1"}) RETURN e.emotion,COUNT(e.emotion)
|
|
// if we can filter the above an a variable timescale that would be great (should be possible on createdAt and updatedAt fields)
|
|
*/ |