Skip to content

Commit efaaf84

Browse files
committed
feat: support filtering projects by directProjectId
1 parent faeda7e commit efaaf84

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

docs/swagger.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ paths:
8686
- $ref: '#/parameters/codeQueryParam'
8787
- $ref: '#/parameters/customerQueryParam'
8888
- $ref: '#/parameters/managerQueryParam'
89+
- $ref: '#/parameters/directProjectIdQueryParam'
8990
- name: sort
9091
required: false
9192
description: >
@@ -4779,6 +4780,13 @@ parameters:
47794780
description: manager filter
47804781
required: false
47814782
type: string
4783+
directProjectIdQueryParam:
4784+
name: directProjectId
4785+
in: query
4786+
description: Direct Project Id filter
4787+
required: false
4788+
type: integer
4789+
format: int64
47824790
projectEstimationIdParam:
47834791
name: estimationId
47844792
in: path

src/models/project.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ module.exports = function defineProject(sequelize, DataTypes) {
133133
query += 'AND projects.name = :name ';
134134
replacements.name = parameters.filters.name;
135135
}
136+
if (_.has(parameters.filters, 'directProjectId')) {
137+
query += 'AND projects."directProjectId" = :directProjectId ';
138+
replacements.directProjectId = parameters.filters.directProjectId;
139+
}
136140
if (_.has(parameters.filters, 'code')) {
137141
query += 'AND details -> \'utm\' ->> \'code\' = :code ';
138142
replacements.code = parameters.filters.code;

src/routes/projects/list.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,18 @@ const PROJECT_PHASE_PRODUCTS_ATTRIBUTES = _.without(
4747
'deletedAt',
4848
);
4949

50-
const SUPPORTED_FILTERS = ['id', 'status', 'memberOnly', 'keyword', 'type', 'name', 'code', 'customer', 'manager',
51-
'directProjectId'];
50+
const SUPPORTED_FILTERS = [
51+
'id',
52+
'status',
53+
'memberOnly',
54+
'keyword',
55+
'type',
56+
'name',
57+
'code',
58+
'customer',
59+
'manager',
60+
'directProjectId',
61+
];
5262

5363
const escapeEsKeyword = keyword => keyword.replace(/[+-=><!|(){}[&\]^"~*?:\\/]/g, '\\\\$&');
5464

@@ -328,6 +338,12 @@ const parseElasticSearchCriteria = (criteria, fields, order) => {
328338
mustQuery = _.concat(mustQuery, setFilter('name', criteria.filters.name, ['name']));
329339
}
330340

341+
if (_.has(criteria, 'filters.directProjectId')) {
342+
mustQuery = _.concat(mustQuery, setFilter('directProjectId',
343+
criteria.filters.directProjectId,
344+
['directProjectId']));
345+
}
346+
331347
if (_.has(criteria, 'filters.code')) {
332348
mustQuery = _.concat(mustQuery, setFilter('details', criteria.filters.code, ['details.utm.code']));
333349
}

0 commit comments

Comments
 (0)