developer239/node-type-orm-graphql

View on GitHub
src/modules/Blog/loaders/page.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { In } from 'typeorm'
import * as R from 'ramda'
import DataLoader from 'dataloader'
import { Page } from '~/modules/Blog/entities/Page'

export const pagesByUserIds = async (userIds: number[]) => {
  const pages = await Page.find({
    where: { userConnection: { id: In(userIds) } },
  })

  // @ts-ignore
  const groupedPages = R.groupBy(R.prop('userId'))(pages)

  // @ts-ignore
  return R.map((userId: string) => groupedPages[userId] || [])(userIds)
}

export const PagesByUserIdsLoader = new DataLoader(pagesByUserIds)

export const findPagesByUserId = (userId: number) =>
  PagesByUserIdsLoader.load(userId) as Promise<Page[] | []>