Skip to content

Instantly share code, notes, and snippets.

@wheresrhys
Last active January 3, 2023 16:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wheresrhys/6e9b1e336ddea204033a595dcdb00a8b to your computer and use it in GitHub Desktop.
Save wheresrhys/6e9b1e336ddea204033a595dcdb00a8b to your computer and use it in GitHub Desktop.
Update team membership
import {BizOpsClient} from '@financial-times/biz-ops-client';
const client = new BizOpsClient({
apiKey: process.env.BIZ_OPS_API_KEY,
userID: "rhys.evans",
host: "https://api-t.ft.com/biz-ops"
})
const {teams} = await client.graphQL.get(`{teams {
code
techLeads {code}
teamMembers {code}
deliveryManagers {code}
productOwners {code}
}}`)
await Promise.all(teams.map(async ({code, teamMembers, techLeads, deliveryManagers, productOwners}) => {
console.log(`fixing ${code}`)
await client.node.patch('Team', code, {
teamMembers: teamMembers.map(({code}) => ({
code,
roles: ['Engineer'], // this will sometimes be wrong, but we shoudl nudge peopel to correct it
position: 'Standard'
}))
}, {relationshipAction: 'merge'})
let teamMembers = [...techLeads.map(({code}) => ({
code,
roles: ['Engineer'],
position: 'Lead'
})), ...deliveryManagers.map(({code}) => ({
code,
roles: ['Delivery'],
position: 'Lead'
})), ...productOwners.map(({code}) => ({
code,
roles: ['Product'],
position: 'Lead'
}))]
const teamMembersObject = {};
teamMembers.forEach((member) => {
if (!teamMembersObject[member.code]) {
teamMembersObject[member.code] = member
} else {
teamMembersObject[member.code].roles = [...teamMembersObject[member.code].roles, ...member.roles]
}
})
teamMembers = Object.values(teamMembersObject);
await client.node.patch('Team', code, {
teamMembers
}, {relationshipAction: 'merge'});
console.log(`fixed ${code}`)
}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment