import { chunk } from 'lodash' import { Project } from 'nexus-plugin-prisma/client' import { prismaClient as prisma } from '../../../prismaClient' import config from '../../../config' import getValidProjects from '../common/getValidProjects' import { condoManagerLogger } from '../../logger' import processProject from './processProject' export default async function processManagingCompanyWithFTP( managingCompanyId: string, projectId: string ) { const managingCompany = await prisma.managingCompany.findOne({ where: { id: managingCompanyId }, include: { projects: true, }, }) // In case we want to only process a specific project const projectsToProcess = projectId ? managingCompany.projects.filter((project) => project.id === projectId) : managingCompany.projects condoManagerLogger.info(`♻️ Processing managingCompany: ${managingCompany.shortName}`) const validProjects = getValidProjects(projectsToProcess) condoManagerLogger.info(`♻️ We have ${validProjects.length} valid projects to process`) if (config.thirdPartySync.makeSyncFast) { const projectsByChunk = chunk(validProjects, 3) // @ts-ignore await projectsByChunk.reduce(async (promise, chunk) => { await promise await Promise.all( chunk.map((project) => processProject({ managingCompanyId, projectId: project.id })) ) }, Promise.resolve) } else { for await (const project of validProjects) { await processProject({ managingCompanyId, projectId: project.id }) } } }