Skip to content

Commit 4b9c17a

Browse files
soccermaxMax Gruenfelder
andauthored
fix query and others (#444)
* fix query and others * fix headers * snapshot --------- Co-authored-by: Max Gruenfelder <maximilian.gruenfelder@scheer-group.com>
1 parent ee66bea commit 4b9c17a

File tree

7 files changed

+100
-59
lines changed

7 files changed

+100
-59
lines changed

db/Event.cds

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ entity Event: cuid {
2424
createdAt: Timestamp @cds.on.insert : $now;
2525
startAfter: Timestamp;
2626
context: LargeString;
27-
error: String;
27+
error: LargeString;
2828
namespace: String default 'default';
2929
}

package-lock.json

Lines changed: 52 additions & 52 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cap-js-community/event-queue",
3-
"version": "2.1.0-beta.2",
3+
"version": "2.1.0-beta.3",
44
"description": "An event queue that enables secure transactional processing of asynchronous and periodic events, featuring instant event processing with Redis Pub/Sub and load distribution across all application instances.",
55
"main": "src/index.js",
66
"types": "src/index.d.ts",

src/outbox/eventQueueAsOutbox.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ const CDS_EVENT_TYPE = "CAP_OUTBOX";
1111
const COMPONENT_NAME = "/eventQueue/eventQueueAsOutbox";
1212
const EVENT_QUEUE_SPECIFIC_FIELDS = ["startAfter", "referenceEntity", "referenceEntityKey", "namespace"];
1313

14+
const TO_COPY = ["inbound", "event", "data", "queue", "results", "method", "path", "params", "entity", "service"];
15+
1416
function outboxed(srv, customOpts) {
1517
if (!(new.target || customOpts)) {
1618
const former = srv[OUTBOXED];
@@ -102,18 +104,27 @@ const _mapToEventAndPublish = async (req, namespace, subType, eventHeaders, cont
102104
}
103105
}
104106
}
105-
106107
const event = {
107108
contextUser: context.user.id,
108109
...(req._fromSend || (req.reply && { _fromSend: true })), // send or emit
109-
...(req.inbound && { inbound: req.inbound }),
110-
...(req.event && { event: req.event }),
111-
...(req.data && { data: req.data }),
112110
...(eventHeaders && { headers: eventHeaders }),
113-
...(req.query && { query: req.query }),
114111
...(Object.keys(contextProperties).length && { ...contextProperties }),
115112
};
116113

114+
for (const prop of TO_COPY) {
115+
if (req[prop]) {
116+
event[prop] = req[prop];
117+
}
118+
}
119+
120+
if (req.query) {
121+
event.query = typeof req.query.flat === "function" ? req.query.flat() : req.query;
122+
delete event.query._target;
123+
delete event.query.__target;
124+
delete event.query.target;
125+
delete event.data; // `req.data` should be a getter to whatever is in `req.query`
126+
}
127+
117128
await publishEvent(
118129
cds.tx(context),
119130
{

test/__snapshots__/eventQueueOutbox.test.js.snap

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ exports[`event-queue outbox monkeyPatchCAPOutbox=true accept event-queue specifi
1111
},
1212
"event": "sendFiori",
1313
"headers": {},
14+
"method": "sendFiori",
15+
"params": [],
1416
}
1517
`;
1618

@@ -370,6 +372,8 @@ exports[`event-queue outbox monkeyPatchCAPOutbox=true req.data should be stored
370372
},
371373
"event": "sendFiori",
372374
"headers": {},
375+
"method": "sendFiori",
376+
"params": [],
373377
}
374378
`;
375379

@@ -453,6 +457,8 @@ exports[`event-queue outbox monkeyPatchCAPOutbox=true should store correct user
453457
},
454458
"event": "sendFiori",
455459
"headers": {},
460+
"method": "sendFiori",
461+
"params": [],
456462
}
457463
`;
458464

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
2+
using sap.eventqueue as db from '../../../../../db';
3+
14
@impl: './service.js'
25
service NotificationService {
36
action sendFiori(to: String, subject: String, body: String);
7+
8+
entity Event as projection on db.Event;
49
}

test/eventQueueOutbox.test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2751,6 +2751,25 @@ describe("event-queue outbox", () => {
27512751
expect(loggerMock.callsLengths().error).toEqual(0);
27522752
});
27532753
});
2754+
2755+
describe("outbox queries", () => {
2756+
it("SELECT", async () => {
2757+
const service = await cds.connect.to("NotificationService");
2758+
const srvQueued = cds.queued(service);
2759+
await srvQueued.read("Event");
2760+
await commitAndOpenNew();
2761+
const [event] = await testHelper.selectEventQueueAndReturn(tx, {
2762+
expectedLength: 1,
2763+
additionalColumns: ["payload"],
2764+
});
2765+
const payload = JSON.parse(event.payload);
2766+
expect(payload.notExisting).toBeUndefined();
2767+
await processEventQueue(tx.context, "CAP_OUTBOX", service.name);
2768+
await commitAndOpenNew();
2769+
await testHelper.selectEventQueueAndExpectDone(tx, { expectedLength: 1 });
2770+
expect(loggerMock.callsLengths().error).toEqual(0);
2771+
});
2772+
});
27542773
});
27552774

27562775
const commitAndOpenNew = async () => {

0 commit comments

Comments
 (0)