251122:1700 Phase 4

This commit is contained in:
admin
2025-11-22 17:21:55 +07:00
parent bf0308e350
commit a3474bff6a
63 changed files with 10062 additions and 109 deletions

View File

@@ -0,0 +1,126 @@
import * as crypto from 'crypto';
// Configuration
const JWT_SECRET =
'eebc122aa65adde8c76c6a0847d9649b2b67a06db1504693e6c912e51499b76e';
const API_URL = 'http://localhost:3000/api';
// Helper to sign JWT
function signJwt(payload: any) {
const header = { alg: 'HS256', typ: 'JWT' };
const encodedHeader = Buffer.from(JSON.stringify(header)).toString(
'base64url',
);
const encodedPayload = Buffer.from(JSON.stringify(payload)).toString(
'base64url',
);
const signature = crypto
.createHmac('sha256', JWT_SECRET)
.update(encodedHeader + '.' + encodedPayload)
.digest('base64url');
return `${encodedHeader}.${encodedPayload}.${signature}`;
}
async function main() {
// 1. Generate Token for Editor01 (ID 3)
const token = signJwt({ username: 'editor01', sub: 3 });
console.log('Generated Token:', token);
const headers = {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
};
try {
// 1.5 Check Permissions
console.log('\nChecking Permissions...');
const permRes = await fetch(`${API_URL}/users/me/permissions`, { headers });
if (permRes.ok) {
const perms = await permRes.json();
console.log('My Permissions:', perms);
} else {
console.error(
'Failed to get permissions:',
permRes.status,
await permRes.text(),
);
}
// 2. Create Correspondence
console.log('\nCreating Correspondence...');
const createRes = await fetch(`${API_URL}/correspondences`, {
method: 'POST',
headers,
body: JSON.stringify({
projectId: 1,
typeId: 1, // Assuming ID 1 exists (e.g., RFA or Memo)
// originatorId: 1, // Removed for Admin user
title: 'Manual Verification Doc',
details: { note: 'Created via script' },
}),
});
if (!createRes.ok) {
throw new Error(
`Create failed: ${createRes.status} ${await createRes.text()}`,
);
}
const doc: any = await createRes.json();
console.log('Created Document:', doc.id, doc.correspondenceNumber);
// 3. Submit Workflow
console.log('\nSubmitting Workflow...');
const submitRes = await fetch(
`${API_URL}/correspondences/${doc.id}/submit`,
{
method: 'POST',
headers,
body: JSON.stringify({
templateId: 1, // Assuming Template ID 1 exists
}),
},
);
if (!submitRes.ok) {
const text = await submitRes.text();
console.error(`Submit failed: ${submitRes.status} ${text}`);
if (text.includes('template')) {
console.warn(
'⚠️ Template ID 1 not found. Please ensure a Routing Template exists.',
);
}
return;
}
console.log('Workflow Submitted Successfully');
// 4. Approve Workflow (as same user for simplicity, assuming logic allows or user has permission)
console.log('\nApproving Workflow...');
const approveRes = await fetch(
`${API_URL}/correspondences/${doc.id}/workflow/action`,
{
method: 'POST',
headers,
body: JSON.stringify({
action: 'APPROVE',
comment: 'Approved via script',
}),
},
);
if (!approveRes.ok) {
throw new Error(
`Approve failed: ${approveRes.status} ${await approveRes.text()}`,
);
}
console.log('Workflow Approved Successfully');
} catch (error: any) {
console.error('Error:', error.message);
}
}
main().catch((err) => console.error(err));