106 lines
3.0 KiB
JavaScript
106 lines
3.0 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Add or remove members from a task
|
|
*
|
|
* Usage:
|
|
* node manage-task-members.mjs --task-id "xxx" --add "RK,jc"
|
|
* node manage-task-members.mjs --task-id "xxx" --remove "jc"
|
|
*/
|
|
|
|
import { parseArgs } from 'util';
|
|
import { addTaskMembers, removeTaskMembers } from '../lib/task.mjs';
|
|
import { resolveNames, getDisplayNameSync } from '../lib/employees.mjs';
|
|
|
|
const { values } = parseArgs({
|
|
options: {
|
|
'task-id': { type: 'string' },
|
|
add: { type: 'string' },
|
|
remove: { type: 'string' },
|
|
'user-ids': { type: 'string' },
|
|
help: { type: 'boolean', short: 'h' }
|
|
}
|
|
});
|
|
|
|
if (values.help) {
|
|
console.log(`
|
|
Manage task members/assignees
|
|
|
|
Options:
|
|
--task-id Task GUID (required)
|
|
--add Comma-separated names to add
|
|
--remove Comma-separated names to remove
|
|
--user-ids Comma-separated user_ids directly (use with --add or --remove)
|
|
-h, --help Show this help
|
|
|
|
Examples:
|
|
node manage-task-members.mjs --task-id "xxx" --add "RK,jc"
|
|
node manage-task-members.mjs --task-id "xxx" --remove "jc"
|
|
`);
|
|
process.exit(0);
|
|
}
|
|
|
|
if (!values['task-id']) {
|
|
console.error('Error: --task-id is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!values.add && !values.remove) {
|
|
console.error('Error: Either --add or --remove is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
async function main() {
|
|
try {
|
|
const taskId = values['task-id'];
|
|
|
|
if (values.add) {
|
|
const names = values.add.split(',').map(s => s.trim()).filter(Boolean);
|
|
const { resolved, unresolved } = resolveNames(names);
|
|
|
|
if (values['user-ids']) {
|
|
resolved.push(...values['user-ids'].split(',').map(s => s.trim()).filter(Boolean));
|
|
}
|
|
|
|
if (unresolved.length > 0) {
|
|
console.warn(`Warning: Could not resolve names: ${unresolved.join(', ')}`);
|
|
}
|
|
|
|
if (resolved.length === 0) {
|
|
console.error('No valid members to add');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Adding members: ${resolved.map(id => getDisplayNameSync(id)).join(', ')}`);
|
|
await addTaskMembers(taskId, resolved);
|
|
console.log('✅ Members added successfully!');
|
|
}
|
|
|
|
if (values.remove) {
|
|
const names = values.remove.split(',').map(s => s.trim()).filter(Boolean);
|
|
const { resolved, unresolved } = resolveNames(names);
|
|
|
|
if (unresolved.length > 0) {
|
|
console.warn(`Warning: Could not resolve names: ${unresolved.join(', ')}`);
|
|
}
|
|
|
|
if (resolved.length === 0) {
|
|
console.error('No valid members to remove');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Removing members: ${resolved.map(id => getDisplayNameSync(id)).join(', ')}`);
|
|
await removeTaskMembers(taskId, resolved);
|
|
console.log('✅ Members removed successfully!');
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('❌ Failed:', error.message);
|
|
if (error.larkResponse) {
|
|
console.error('Lark response:', JSON.stringify(error.larkResponse, null, 2));
|
|
}
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
main();
|