bde148f286
* wip * some extra fixes * stuff kinda works? * need to figure out mocks * need to figure out mocks * fix db listener * gqlgen fix * minor gqlgen watch adjustment * lint fixes * delete old codegen file * converting migrations to ESM * getModuleDIrectory * vitest sort of works * added back ts-vitest * resolve gql double load * fixing test timeout configs * TSC lint fix * fix automate tests * moar debugging * debugging * more debugging * codegen update * server works * yargs migrated * chore(server): getting rid of global mocks for Server ESM (#5046) * got rid of email mock * got rid of comment mocks * got rid of multi region mocks * got rid of stripe mock * admin override mock updated * removed final mock * fixing import.meta.resolve calls * another import.meta.resolve fix * added requested test * nyc ESM fix * removed unneeded deps + linting * yarn lock forgot to commit * tryna fix flakyness * email capture util fix * sendEmail fix * fix TSX check * sender transporter fix + CR comments * merge main fix * test fixx * circleci fix * gqlgen bigint fix * error formatter fix * more error formatting improvements * esmloader added to Dockerfile * more dockerfile fixes * bg jobs fix
75 lines
2.9 KiB
TypeScript
75 lines
2.9 KiB
TypeScript
import { defineRequestDataloaders } from '@/modules/shared/helpers/graphqlHelper'
|
|
import { keyBy } from 'lodash-es'
|
|
import { Nullable } from '@/modules/shared/helpers/typeHelper'
|
|
import { ResourceIdentifier } from '@/modules/core/graph/generated/graphql'
|
|
import {
|
|
getCommentParentsFactory,
|
|
getCommentReplyAuthorIdsFactory,
|
|
getCommentReplyCountsFactory,
|
|
getCommentsFactory,
|
|
getCommentsResourcesFactory,
|
|
getCommentsViewedAtFactory
|
|
} from '@/modules/comments/repositories/comments'
|
|
|
|
import { CommentRecord } from '@/modules/comments/helpers/types'
|
|
|
|
declare module '@/modules/core/loaders' {
|
|
interface ModularizedDataLoaders extends ReturnType<typeof dataLoadersDefinition> {}
|
|
}
|
|
|
|
const dataLoadersDefinition = defineRequestDataloaders(
|
|
({ ctx, createLoader, deps: { db } }) => {
|
|
const userId = ctx.userId
|
|
|
|
const getCommentsResources = getCommentsResourcesFactory({ db })
|
|
const getCommentsViewedAt = getCommentsViewedAtFactory({ db })
|
|
const getCommentReplyCounts = getCommentReplyCountsFactory({ db })
|
|
const getCommentReplyAuthorIds = getCommentReplyAuthorIdsFactory({ db })
|
|
const getCommentParents = getCommentParentsFactory({ db })
|
|
const getComments = getCommentsFactory({ db })
|
|
|
|
return {
|
|
comments: {
|
|
getComment: createLoader<string, Nullable<CommentRecord>>(
|
|
async (commentIds) => {
|
|
const results = keyBy(await getComments({ ids: commentIds.slice() }), 'id')
|
|
return commentIds.map((id) => results[id] || null)
|
|
}
|
|
),
|
|
getViewedAt: createLoader<string, Nullable<Date>>(async (commentIds) => {
|
|
if (!userId) return commentIds.slice().map(() => null)
|
|
|
|
const results = keyBy(
|
|
await getCommentsViewedAt(commentIds.slice(), userId),
|
|
'commentId'
|
|
)
|
|
return commentIds.map((id) => results[id]?.viewedAt || null)
|
|
}),
|
|
getResources: createLoader<string, ResourceIdentifier[]>(async (commentIds) => {
|
|
const results = await getCommentsResources(commentIds.slice())
|
|
return commentIds.map((id) => results[id]?.resources || [])
|
|
}),
|
|
getReplyCount: createLoader<string, number>(async (threadIds) => {
|
|
const results = keyBy(
|
|
await getCommentReplyCounts(threadIds.slice()),
|
|
'threadId'
|
|
)
|
|
return threadIds.map((id) => results[id]?.count || 0)
|
|
}),
|
|
getReplyAuthorIds: createLoader<string, string[]>(async (threadIds) => {
|
|
const results = await getCommentReplyAuthorIds(threadIds.slice())
|
|
return threadIds.map((id) => results[id] || [])
|
|
}),
|
|
getReplyParent: createLoader<string, Nullable<CommentRecord>>(
|
|
async (replyIds) => {
|
|
const results = keyBy(await getCommentParents(replyIds.slice()), 'replyId')
|
|
return replyIds.map((id) => results[id] || null)
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
export default dataLoadersDefinition
|