/** @import * as TYPES from "./types.ts" */ /** @type {TYPES.GraphBuilder} */ export default function({users, roles, parts, desks}) { // mutate users /** @type {Record} */ //@ts-ignore const UserList = users; for(let userId in users) { const name = users[userId]; UserList[userId] = {name, desk:new Set()}; } // mutate roles /** @type {Record} */ //@ts-ignore const RoleList = roles; for(let roleId in roles) { const [name, ...userIds] = roles[roleId]; RoleList[roleId] = {name, user:userIds.map(uId=>UserList[uId])}; } // mutate parts /** @type {Record} */ //@ts-ignore const PartList = parts; for(let partId in parts) { const name = parts[partId]; PartList[partId] = /** @type {TYPES.Part} */({name, work:[], time:0, need:[], make:[]}); } // mutate desks /** @type {Record} */ //@ts-ignore const DeskList = desks; for(let deskId in desks) { const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId]; const need =[]; const time =[]; /** @type {TYPES.Desk} */ const desk = { name, mode, need, time, make:[], role:[] }; for(const partId in needObj) { const part = PartList[partId]; need.push(part); part.need.push(desk); time.push(needObj[partId]); } desk.role = roleIDs.map(roleId=> { const role = RoleList[/**@type{string}*/(roleId)]; role.user.forEach(u =>u.desk.add(desk)); return role; }); desk.make = makePartIDs.map( partId=> { const part = PartList[/**@type{string}*/(partId)]; part.make.push(desk); return part; } ) DeskList[deskId] = desk; } console.log(users, parts, desks); } const Scan =(desk)=> { const need = Object.keys(desk.need); const make = desk.make; const dirtyNeed = []; const dirtyMake = []; let makeMin = Infinity; let needMax = -Infinity; for(let i=0; i needMax) needMax = part.time; } for(let i=0; i makeMin) { dirtyNeed.push(id); } } console.log("scan", dirtyNeed, dirtyMake); return [dirtyNeed, dirtyMake]; };