Skip to content

Commit e7f9448

Browse files
feat: add bulkOnly filters for datasetorders
1 parent b4696de commit e7f9448

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

api/openapi.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,11 @@ paths:
477477
description: exclude orders with permissions allowing "any" requester (default false, ignored if `requester` is not specified)
478478
schema:
479479
type: boolean
480+
- name: bulkOnly
481+
in: query
482+
description: exclude orders not eligible to bulk processing (default false)
483+
schema:
484+
type: boolean
480485
- $ref: '#/components/parameters/PageIndex'
481486
- $ref: '#/components/parameters/PageSize'
482487
- $ref: '#/components/parameters/Page'

api/src/controllers/router.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ router.get('/datasetorders', bodyParser(), async (ctx) => {
373373
minTag,
374374
maxTag,
375375
minVolume,
376+
bulkOnly,
376377
page,
377378
pageIndex,
378379
pageSize,
@@ -394,6 +395,7 @@ router.get('/datasetorders', bodyParser(), async (ctx) => {
394395
minTag: bytes32Schema(),
395396
maxTag: bytes32Schema(),
396397
minVolume: positiveStrictIntSchema(),
398+
bulkOnly: booleanSchema().default(false),
397399
page: positiveIntSchema(),
398400
pageIndex: positiveIntSchema(),
399401
pageSize: positiveIntSchema().max(maxPageSize).min(minPageSize),
@@ -411,6 +413,7 @@ router.get('/datasetorders', bodyParser(), async (ctx) => {
411413
minTag,
412414
maxTag,
413415
minVolume,
416+
bulkOnly,
414417
page,
415418
pageIndex,
416419
pageSize,

api/src/services/order.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,7 @@ const getDatasetorders = async ({
576576
minTag,
577577
maxTag,
578578
minVolume,
579+
bulkOnly,
579580
page,
580581
pageIndex,
581582
pageSize,
@@ -586,6 +587,10 @@ const getDatasetorders = async ({
586587
status: STATUS_MAP.OPEN,
587588
...(dataset && requiredDatasetOrAnyClause(dataset)),
588589
...(datasetOwner && { signer: datasetOwner }),
590+
...(bulkOnly && {
591+
'order.volume': Number.MAX_SAFE_INTEGER,
592+
'order.datasetprice': 0,
593+
}),
589594
...apprestrictOrAnyClause(app, isAppStrict),
590595
...workerpoolrestrictOrAnyClause(workerpool, isWorkerpoolStrict),
591596
...requesterrestrictOrAnyClause(requester, isRequesterStrict),

api/test/datasetorders.test.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,7 @@ describe('Offchain marketplace', () => {
904904
const maxGpuTagOrders = [];
905905
const minMaxTeeTagOrders = [];
906906
const minVolumeOrders = [];
907+
const bulkOrders = [];
907908
let consumedOrders;
908909
let deadOrders;
909910
let datasetAddress;
@@ -949,6 +950,30 @@ describe('Offchain marketplace', () => {
949950
noRestrictOrders.push(...datasetPrice0);
950951
allOrders.push(...datasetPrice0);
951952

953+
const bulk = await Promise.all(
954+
Array(2)
955+
.fill(null)
956+
.map(async () => {
957+
const order = await iexecUser.order
958+
.createDatasetorder({
959+
dataset: datasetAddress,
960+
datasetprice: 0, // bulk order must be free
961+
volume: Number.MAX_SAFE_INTEGER, // bulk order must have max volume
962+
})
963+
.then(iexecUser.order.signDatasetorder);
964+
const orderHash = await iexecUser.order.hashDatasetorder(order);
965+
return {
966+
order,
967+
orderHash,
968+
signer: ownerAddress,
969+
};
970+
}),
971+
);
972+
bulkOrders.push(...bulk);
973+
minVolumeOrders.push(...bulk);
974+
noRestrictOrders.push(...bulk);
975+
allOrders.push(...bulk);
976+
952977
const datasetPrice20 = await Promise.all(
953978
Array(5)
954979
.fill(null)
@@ -1803,6 +1828,24 @@ describe('Offchain marketplace', () => {
18031828
});
18041829
});
18051830

1831+
test('GET /datasetorders (bulkOnly filter)', async () => {
1832+
const { data, status } = await request
1833+
.get(
1834+
buildQuery('/datasetorders', {
1835+
chainId, // *
1836+
dataset: datasetAddress, // *
1837+
bulkOnly: true,
1838+
}),
1839+
)
1840+
.then(parseResult);
1841+
expect(status).toBe(OK_STATUS);
1842+
expect(data.ok).toBe(true);
1843+
expect(data.count).toBe(bulkOrders.length);
1844+
expect(data.orders).toBeDefined();
1845+
expect(Array.isArray(data.orders)).toBe(true);
1846+
expect(data.orders.length).toBe(bulkOrders.length);
1847+
});
1848+
18061849
test('GET /datasetorders (isAppStrict = true & app = undefined): should return public orders including "any" app', async () => {
18071850
const result = await request
18081851
.get(

0 commit comments

Comments
 (0)