Files
speckle-server/packages/server/modules/stats/services/index.ts
T
2024-09-10 09:38:16 +03:00

97 lines
2.7 KiB
TypeScript

import knex from '@/db/knex'
export async function getTotalStreamCount() {
const query = 'SELECT COUNT(*) FROM streams'
const result = await knex.raw(query)
return parseInt(result.rows[0].count)
}
export async function getTotalCommitCount() {
const query = 'SELECT COUNT(*) FROM commits'
const result = await knex.raw(query)
return parseInt(result.rows[0].count)
}
export async function getTotalObjectCount() {
const query = 'SELECT COUNT(*) FROM objects'
const result = await knex.raw(query)
return parseInt(result.rows[0].count)
}
export async function getTotalUserCount() {
// returns -1 for small tables, no good
// const fastQuery = "SELECT reltuples::bigint AS estimate FROM pg_catalog.pg_class WHERE relname = 'users'"
const query = 'SELECT COUNT(*) FROM users'
const result = await knex.raw(query)
return parseInt(result.rows[0].count)
}
export async function getStreamHistory() {
const query = `
SELECT
DATE_TRUNC('month', streams. "createdAt") AS created_month,
COUNT(id) AS count
FROM
streams
GROUP BY
DATE_TRUNC('month', streams. "createdAt")
`
const result = (await knex.raw(query)) as {
rows: Array<{ created_month: Date; count: string | number }>
}
result.rows.forEach((row) => (row.count = parseInt(row.count + '')))
return result.rows
}
export async function getCommitHistory() {
const query = `
SELECT
DATE_TRUNC('month', commits. "createdAt") AS created_month,
COUNT(id) AS count
FROM
commits
GROUP BY
DATE_TRUNC('month', commits. "createdAt")
`
const result = (await knex.raw(query)) as {
rows: Array<{ created_month: Date; count: string | number }>
}
result.rows.forEach((row) => (row.count = parseInt(row.count + '')))
return result.rows
}
export async function getObjectHistory() {
const query = `
SELECT
DATE_TRUNC('month', objects. "createdAt") AS created_month,
COUNT(id) AS count
FROM
objects
GROUP BY
DATE_TRUNC('month', objects. "createdAt")
`
const result = (await knex.raw(query)) as {
rows: Array<{ created_month: Date; count: string | number }>
}
result.rows.forEach((row) => (row.count = parseInt(row.count + '')))
return result.rows
}
export async function getUserHistory() {
const query = `
SELECT
DATE_TRUNC('month', users. "createdAt") AS created_month,
COUNT(id) AS count
FROM
users
GROUP BY
DATE_TRUNC('month', users. "createdAt")
`
const result = (await knex.raw(query)) as {
rows: Array<{ created_month: Date; count: string | number }>
}
result.rows.forEach((row) => (row.count = parseInt(row.count + '')))
return result.rows
}