Skip to content

Commit 2bc6a5d

Browse files
authored
Merge pull request #16 from cap-js/simon/always-provide-queue
refactor and implment printToPrintService.js
2 parents ff88804 + 3667c7a commit 2bc6a5d

File tree

9 files changed

+693
-252
lines changed

9 files changed

+693
-252
lines changed

jest.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const config = {
22
verbose: true,
33
testTimeout: 100000,
4-
testMatch: ["**/test/lib/**/*.test.js"],
5-
collectCoverageFrom: ["**/lib/**/*"],
4+
testMatch: ["**/test/lib/**/*.test.js","**/test/srv/**/*.test.js"],
5+
collectCoverageFrom: ["**/lib/**/*","srv/**/*"],
66
coveragePathIgnorePatterns: ["node_modules", "<rootDir>/lib/persistence"],
77
coverageReporters: ["lcov", "text", "text-summary"],
88
coverageThreshold: {

lib/printUtil.js

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
const { getJwt, readVcapServices } = require("./authUtil");
22
const { getPrintConfigFromActionOrEntity } = require('./annotation-helper');
3+
const cds = require('@sap/cds');
34
const axios = require('axios');
45
const logger = cds.log("print");
5-
const CONSOLE_MODE = process.env.PRINT_CONSOLE_MODE === 'true';
66

77
/**
88
* Populates the queue value help with available printers.
99
* @param {Object} _ - Unused parameter.
1010
* @param {Object} req - The request object.
1111
*/
12-
const populateQueueValueHelp = async function (_, req) {
13-
if (!CONSOLE_MODE) {
12+
const getQueues = async function (_, req) {
13+
1414
const vcap = await readVcapServices();
1515
if (!vcap || vcap?.status === 500) {
1616
// For Production, return the error if print service is not found
@@ -31,28 +31,19 @@ const populateQueueValueHelp = async function (_, req) {
3131
"Content-Type": "application/json"
3232
}
3333
});
34-
const resp = await api.get(`/qm/api/v1/rest/queues`);
35-
36-
resp.data.forEach((item, index) => {
37-
req.results[index] = { ID: item.qname };
38-
});
39-
req.results.$count = resp.data.length;
40-
} else { // Offline / Console Mode - Mocked printer queues
41-
const offlineQueues = [
42-
{ ID: 'DEFAULT_PRINTER' },
43-
{ ID: 'HP_LASERJET_PRO' },
44-
{ ID: 'CANON_IMAGECLASS' },
45-
{ ID: 'XEROX_WORKCENTRE' },
46-
{ ID: 'OFFICE_PRINTER_01' },
47-
{ ID: 'OFFICE_PRINTER_02' }
48-
];
34+
let resp;
35+
try {
36+
resp = await api.get('/qm/api/v1/rest/queues');
37+
} catch (e) {
38+
logger.error('Failed to fetch queues', e.response?.data || e.message);
39+
return req.error(500, 'Failed to fetch queues');
40+
}
41+
42+
const results = Array.isArray(resp.data)
43+
? resp.data.map(q => ({ ID: q.qname }))
44+
: [{ ID: resp.data.qname }];
45+
return results;
4946

50-
offlineQueues.forEach((item, index) => {
51-
req.results[index] = { ID: item.ID };
52-
});
53-
req.results.$count = offlineQueues.length;
54-
return;
55-
}
5647
}
5748

5849
/**
@@ -61,8 +52,21 @@ const populateQueueValueHelp = async function (_, req) {
6152
* @param {Object} req - The request object.
6253
*/
6354
const print = async function (_, req) {
64-
let { qname, numberOfCopies, docsToPrint } = await getPrintConfigFromActionOrEntity(req);
65-
if (!CONSOLE_MODE) {
55+
56+
cds.log('=== REQUEST BASIC INFO ===');
57+
cds.log('Event:', req.event);
58+
cds.log('Target:', req.target?.name);
59+
cds.log('User ID:', req.user?.id);
60+
61+
let qname, numberOfCopies, docsToPrint;
62+
63+
if (req?.target?.name) {
64+
const printConfig = await getPrintConfigFromActionOrEntity(req);
65+
({ qname, numberOfCopies, docsToPrint } = printConfig);
66+
} else {
67+
({ qname, numberOfCopies, docsToPrint } = req);
68+
}
69+
6670
const vcap = await readVcapServices(req);
6771
if (!vcap || vcap?.status === 500) {
6872
// For Production, return the error if print service is not found
@@ -131,13 +135,14 @@ const print = async function (_, req) {
131135
return req.error('Print task failed');
132136
}
133137
logger.info(`Document sent to print queue ${qname}`);
134-
return req.info(200, `Document sent to print queue ${qname} \n
135-
No. of copies requested: ${numberOfCopies}`);
136-
} else { // Offline / Console Mode
137-
docsToPrint.forEach((doc) => {
138-
logger.info(`Document ${doc.fileName} with object key ${doc.objectKey} and content length ${doc.content.length} has been sent to print queue ${qname}`);
139-
});
140-
}
138+
139+
return {
140+
status: 'SUCCESS',
141+
queue: qname,
142+
numberOfCopies,
143+
taskId: itemId,
144+
rawResponse: printTaskResp?.data
145+
};
141146
}
142147

143-
module.exports = { print, populateQueueValueHelp };
148+
module.exports = { print, getQueues };

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@
4747
"destination": "SAP_Print_Service",
4848
"kind": "print-to-service"
4949
},
50+
"[hybrid]": {
51+
"destination": "SAP_Print_Service",
52+
"kind": "print-to-service"
53+
},
5054
"vcap": {
5155
"tag": "print"
5256
},

srv/printToConsole.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,17 @@ module.exports = class PrintToConsole extends PrintService {
4848
if (docsToPrint && docsToPrint.length > 0) {
4949
docsToPrint.forEach((doc, index) => {
5050
LOG.info(`\nDocument ${index + 1}: ${doc.fileName}`);
51-
LOG.info('-------------------------------');
52-
51+
LOG.info('-------------------------------');
5352
// Decode base64 content and display
54-
const content = Buffer.from(doc.content, 'base64').toString('utf8');
55-
console.log(content);
53+
// const content = Buffer.from(doc.content, 'base64').toString('utf-8');
54+
console.log(doc.content);
5655

5756
LOG.info('-------------------------------\n');
5857
});
5958
}
6059

6160
LOG.info(`Print job completed successfully!`);
62-
LOG.info(`Sent to: ${selectedQueue.ID} (${selectedQueue.location})`);
61+
LOG.info(`Sent to: ${selectedQueue}`);
6362

6463
return {
6564
status: 'success',

srv/printToPrintService.js

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const PrintService = require('./service');
2-
const { print, populateQueueValueHelp } = require('../lib/printUtil');
2+
const { print, getQueues } = require('../lib/printUtil');
33
const cds = require("@sap/cds");
44
const LOG = cds.log('print');
55

@@ -16,9 +16,15 @@ module.exports = class PrintToPrintService extends PrintService {
1616
/**
1717
* Get available print queues (dummy data for console mode)
1818
*/
19-
async getQueues() {
20-
// TODO: return the actual queues here as in printUtil.js
21-
return [];
19+
async getQueues(req) {
20+
try{
21+
const result = await getQueues(null, req)
22+
return result;
23+
}catch(err){
24+
console.log(err, 'Feching queues failed')
25+
return req.error(500, 'Failed to fetch queues');
26+
}
27+
2228
}
2329

2430
/**
@@ -28,18 +34,27 @@ module.exports = class PrintToPrintService extends PrintService {
2834
async print(printRequest) {
2935
const { qname, numberOfCopies, docsToPrint } = printRequest;
3036

31-
LOG.info('===============================');
32-
LOG.info(`Queue: ${qname || 'DEFAULT'}`);
33-
LOG.info(`Copies: ${numberOfCopies || 1}`);
34-
LOG.info(`Documents: ${docsToPrint?.length || 0}`);
35-
LOG.info('===============================');
36-
37-
// TODO: call actual print functions from printUtil.js
37+
LOG.info(`Print request received for queue: ${qname}, copies: ${numberOfCopies}, documents: ${docsToPrint?.length || 0}`);
38+
try{
39+
const result = await print(null, printRequest)
40+
console.log(result);
41+
42+
return {
43+
status: 'success',
44+
message: `Print job sent to ${qname} for ${numberOfCopies} copies`,
45+
taskId: `console-task-${Date.now()}`,
46+
details: result
47+
};
48+
}catch(err){
49+
console.log(err, 'Failed to create print tasks');
50+
51+
return {
52+
status: 'error',
53+
message: `Print job failed for queue ${qname}`,
54+
error: err.message,
55+
taskId: `failed-task-${Date.now()}`
56+
};
57+
}
3858

39-
return {
40-
status: 'success',
41-
message: `Print job sent to ${qname} for ${numberOfCopies} copies`,
42-
taskId: `console-task-${Date.now()}`
43-
};
4459
}
4560
}

0 commit comments

Comments
 (0)