mirror of
https://github.com/Ocelot-Social-Community/Ocelot-Social.git
synced 2025-12-13 07:46:06 +00:00
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
export default {
|
|
Query: {
|
|
userData: async (object, args, context, resolveInfo) => {
|
|
const id = context.user.id
|
|
const cypher = `
|
|
MATCH (user:User { id: $id })
|
|
WITH user
|
|
OPTIONAL MATCH (posts:Post)
|
|
WHERE (user)-[:WROTE]->(posts)
|
|
AND posts.deleted = FALSE
|
|
AND posts.disabled = FALSE
|
|
RETURN { user: properties(user),
|
|
posts: collect(
|
|
posts {
|
|
.*,
|
|
author: [
|
|
(posts)<-[:WROTE]-(author:User) |
|
|
author {
|
|
.*
|
|
}
|
|
][0],
|
|
comments: [
|
|
(posts)<-[:COMMENTS]-(comment:Comment)
|
|
WHERE comment.disabled = FALSE
|
|
AND comment.deleted = FALSE |
|
|
comment {
|
|
.*,
|
|
author: [ (comment)<-[:WROTE]-(commentator:User) |
|
|
commentator { .name, .slug, .id } ][0]
|
|
}
|
|
],
|
|
categories: [ (posts)-[:CATEGORIZED]->(category:Category) |
|
|
category { .name, .id } ]
|
|
})
|
|
} AS result`
|
|
const session = context.driver.session()
|
|
const resultPromise = session.readTransaction(async (transaction) => {
|
|
const transactionResponse = transaction.run(cypher, {
|
|
id,
|
|
})
|
|
return transactionResponse
|
|
})
|
|
|
|
try {
|
|
const result = await resultPromise
|
|
const userData = result.records[0].get('result')
|
|
userData.posts.sort(byCreationDate)
|
|
userData.posts.forEach((post) => post.comments.sort(byCreationDate))
|
|
return userData
|
|
} finally {
|
|
session.close()
|
|
}
|
|
},
|
|
},
|
|
}
|
|
|
|
const byCreationDate = (a, b) => {
|
|
if (a.createdAt < b.createdAt) return -1
|
|
if (a.createdAt > b.createdAt) return 1
|
|
return 0
|
|
}
|