passes started

This commit is contained in:
Seth Trowbridge 2025-07-05 13:51:01 -04:00
parent feb55e4c1d
commit bf9d740c13
4 changed files with 82 additions and 20 deletions

View File

@ -1,7 +1,7 @@
/** @import * as TYPES from "./types.ts" */
/** @type {TYPES.GraphBuilder} */
export default function({users, roles, parts, desks})
export default function({users, roles, parts, desks, passes})
{
// mutate users
@ -21,7 +21,7 @@ export default function({users, roles, parts, desks})
for(let roleId in roles)
{
const [name, ...userIds] = roles[roleId];
RoleList[roleId] = {name, user:userIds.map(uId=>UserList[uId])};
RoleList[roleId] = {name, user:userIds.map(uId=>UserList[/**@type{string}*/(uId)])};
}
// mutate parts
@ -31,20 +31,18 @@ export default function({users, roles, parts, desks})
for(let partId in parts)
{
const name = parts[partId];
PartList[partId] = /** @type {TYPES.Part} */({name, work:[], time:0, need:[], make:[]});
PartList[partId] = /** @type {TYPES.Part} */({name, need:[], make:[], pass:new Map()});
}
// mutate desks
/** @type {Record<string, TYPES.Desk>} */
//@ts-ignore
const DeskList = desks;
for(let deskId in desks)
{
const [name, roleIDs, mode, needObj, ...makePartIDs] = desks[deskId];
const need =[];
const time =[];
/** @type {TYPES.Part[]}*/ const need =[];
/** @type {number[]}*/ const time =[];
/** @type {TYPES.Desk} */
const desk = {
@ -81,6 +79,41 @@ export default function({users, roles, parts, desks})
DeskList[deskId] = desk;
}
// Apply passes
for(let passID in passes)
{
const [name, users] = passes[passID];
/** @type {TYPES.Pass} */
const pass = {name, path:passID};
for(let userID in users)
{
const userPart = users[userID];
const user = UserList[userID];
for(let partID in userPart)
{
const part = PartList[partID];
const entries = userPart[partID];
entries.forEach(([time, data]) => {
/** @type {TYPES.Work} */
const work = [user, time, data];
let partPass = part.pass.get(pass);
if(!partPass)
{
partPass = {time:0, work:[]}
part.pass.set(pass, partPass);
}
partPass.work.push(work);
if(partPass.time < time)
{
partPass.time = time;
}
});
}
}
}
console.log(users, parts, desks);
}

View File

@ -15,5 +15,21 @@ Graph({
desks:
{
d1:["Desk 01", ["dev"], "all", {p2:3}, "p1"]
},
passes:
{
pass1:
[
"Pass One",
{
u2:
{
p1:[
[123, "some data"],
[456, "more data"]
]
}
}
]
}
});

View File

@ -1,18 +1,31 @@
type PartBlueprint = string
type UserBlueprint = string
export type GraphBuilder=
<
Users extends Record<string, UserBlueprint>,
Users extends Record<string, string>,
Roles extends Record<string, [ name:string, ...users:Array<keyof Users>]>,
Parts extends Record<string, PartBlueprint>,
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, mode:"all"|"one", need:Partial<Record<keyof Parts, number>>, ...make:Array<keyof Parts>]>
Parts extends Record<string, string>,
Desks extends Record<string, [ name:string, roles:Array<keyof Roles>, mode:"all"|"one", need:Partial<Record<keyof Parts, number>>, ...make:Array<keyof Parts>]>,
Pass extends Record<
string,
[
name:string,
user:Partial<Record<
keyof Users,
Partial<Record<
keyof Parts,
Array<[time:number, data:string]>
>>
>>
]
>
>
(
params:{users:Users,
roles:Roles,
parts:Parts,
desks:Desks}
params:{
users:Users,
roles:Roles,
parts:Parts,
desks:Desks,
passes:Pass,
}
)
=>void
@ -20,6 +33,6 @@ export type GraphBuilder=
export type User = {name:string, desk:Set<Desk>};
export type Role = {name:string, user:User[]};
export type Desk = {name:string, need:Part[], time:number[], make:Part[], mode:string, role:Role[]};
export type Work = [user:User, part:Part, time:number, data:string];
export type Part = {name:string, time:number, work:Work[], need:Desk[], make:Desk[]};
export type Work = [user:User, time:number, data:string];
export type Pass = {name:string, path:string};
export type Part = {name:string, pass:Map<Pass, {time:number, work:Work[]}>, need:Desk[], make:Desk[]};