import { logger } from '../../utils/logger' import { prismaClient as prisma } from '../../prismaClient' export default async function verifyThatAllUserWithCurrentProjectAlsoHaveTheProjectInProjects( job, done ) { try { logger.info('Start verify that users\'s current project is also in user\'s list of projects') await new Promise((resolve, reject) => { try { let totalNumberOfUsersFetched = 0 const fetchAndVerifyUsers = async ({ skipAmount = 0 }) => { const users = await prisma.user.findMany({ where: { role: 'RESIDENT', }, skip: skipAmount, take: 200, select: { id: true, currentProject: { select: { id: true, }, }, projects: { select: { id: true, }, }, }, }) if (users.length === 0) { return resolve() } totalNumberOfUsersFetched += users.length await Promise.all( users .filter( (user) => user.currentProject && !user.projects.some((p) => p.id === user.currentProject.id) ) .map((user) => prisma.user.update({ where: { id: user.id, }, data: { projects: { connect: [ { id: user.currentProject.id, }, ], }, }, }) ) ) await new Promise((resolve) => setTimeout(resolve, 3000)) return fetchAndVerifyUsers({ skipAmount: totalNumberOfUsersFetched }) } // START fetchAndVerifyUsers({}) } catch (error) { reject(error) } }) logger.info('Finish verify that users\'s current project is also in user\'s list of projects') done() } catch (e) { logger.error(e) done(e) } }