mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import log from './helpers/databaseLogger'
|
|
|
|
export default {
|
|
Query: {
|
|
statistics: async (_parent, _args, { driver }) => {
|
|
const session = driver.session()
|
|
const counts: any = {}
|
|
try {
|
|
const mapping = {
|
|
countUsers: 'User',
|
|
countPosts: 'Post',
|
|
countComments: 'Comment',
|
|
countNotifications: 'NOTIFIED',
|
|
countEmails: 'EmailAddress',
|
|
countFollows: 'FOLLOWS',
|
|
countShouts: 'SHOUTED',
|
|
}
|
|
const statisticsReadTxResultPromise = session.readTransaction(async (transaction) => {
|
|
const statisticsTransactionResponse = await transaction.run(
|
|
`
|
|
CALL apoc.meta.stats() YIELD labels, relTypesCount
|
|
RETURN labels, relTypesCount
|
|
`,
|
|
)
|
|
log(statisticsTransactionResponse)
|
|
return statisticsTransactionResponse.records.map((record) => {
|
|
return {
|
|
...record.get('labels'),
|
|
...record.get('relTypesCount'),
|
|
}
|
|
})
|
|
})
|
|
const [statistics] = await statisticsReadTxResultPromise
|
|
Object.keys(mapping).forEach((key) => {
|
|
const stat = statistics[mapping[key]]
|
|
counts[key] = stat ? stat.toNumber() : 0
|
|
})
|
|
counts.countInvites = counts.countEmails - counts.countUsers
|
|
return counts
|
|
} finally {
|
|
session.close()
|
|
}
|
|
},
|
|
},
|
|
}
|