module.exports = { async fn() { const { currentUser } = this.req; const managerProjectIds = await sails.helpers.users.getManagerProjectIds(currentUser.id); const managerProjects = await sails.helpers.projects.getMany(managerProjectIds); let boardMemberships = await sails.helpers.users.getBoardMemberships(currentUser.id); const membershipBoardIds = sails.helpers.utils.mapRecords(boardMemberships, 'boardId'); let membershipBoards = await sails.helpers.boards.getMany({ id: membershipBoardIds, projectId: { '!=': managerProjectIds, }, }); let membershipProjectIds = sails.helpers.utils.mapRecords(membershipBoards, 'projectId', true); const membershipProjects = await sails.helpers.projects.getMany(membershipProjectIds); membershipProjectIds = sails.helpers.utils.mapRecords(membershipProjects); const projectIds = [...managerProjectIds, ...membershipProjectIds]; const projects = [...managerProjects, ...membershipProjects]; const projectManagers = await sails.helpers.projects.getProjectManagers(projectIds); const userIds = sails.helpers.utils.mapRecords(projectManagers, 'userId', true); const users = await sails.helpers.users.getMany(userIds); const managerBoards = await sails.helpers.projects.getBoards(managerProjectIds); membershipBoards = membershipBoards.filter((membershipBoard) => membershipProjectIds.includes(membershipBoard.projectId), ); const boards = [...managerBoards, ...membershipBoards]; const boardIds = sails.helpers.utils.mapRecords(boards); boardMemberships = boardMemberships.filter((boardMembership) => boardIds.includes(boardMembership.boardId), ); return { items: projects, included: { users, projectManagers, boards, boardMemberships, }, }; }, };