dalux-build-api 1.1.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const { findByField } = require('../utils/search');
4
+ const { convertToModel } = require('../models/convert');
5
+ const { CompaniesListResponseSchema, CompanyResponseSchema } = require('../models/companies');
6
+
3
7
  /**
4
8
  * API methods for the company catalog.
5
9
  */
@@ -15,30 +19,33 @@ class CompanyCatalogApi {
15
19
  * Get companies registered in the company catalog.
16
20
  * GET /2.2/companyCatalog
17
21
  * @param {object} [params]
18
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} CompaniesListResponse ({ items: ProjectCompany[], metadata?, links? })
19
23
  */
20
- getCompanies(params = {}) {
21
- return this._client.get('/2.2/companyCatalog', params);
24
+ async getCompanies(params = {}) {
25
+ const response = await this._client.get('/2.2/companyCatalog', params);
26
+ return convertToModel(response, CompaniesListResponseSchema, 'CompaniesListResponse');
22
27
  }
23
28
 
24
29
  /**
25
30
  * Get a specific company from the catalog.
26
31
  * GET /1.2/companyCatalog/{catalogCompanyId}
27
32
  * @param {string} catalogCompanyId
28
- * @returns {Promise<object>}
33
+ * @returns {Promise<object>} CompanyResponse ({ data: ProjectCompany, links? })
29
34
  */
30
- getCompany(catalogCompanyId) {
31
- return this._client.get(`/1.2/companyCatalog/${catalogCompanyId}`);
35
+ async getCompany(catalogCompanyId) {
36
+ const response = await this._client.get(`/1.2/companyCatalog/${catalogCompanyId}`);
37
+ return convertToModel(response, CompanyResponseSchema, 'CompanyResponse');
32
38
  }
33
39
 
34
40
  /**
35
41
  * Add a company to the catalog.
36
42
  * POST /2.2/companyCatalog
37
43
  * @param {object} body
38
- * @returns {Promise<object>}
44
+ * @returns {Promise<object>} CompanyResponse
39
45
  */
40
- createCompany(body) {
41
- return this._client.post('/2.2/companyCatalog', body);
46
+ async createCompany(body) {
47
+ const response = await this._client.post('/2.2/companyCatalog', body);
48
+ return convertToModel(response, CompanyResponseSchema, 'CompanyResponse');
42
49
  }
43
50
 
44
51
  /**
@@ -46,10 +53,11 @@ class CompanyCatalogApi {
46
53
  * PATCH /2.1/companyCatalog/{catalogCompanyId}
47
54
  * @param {string} catalogCompanyId
48
55
  * @param {object} body
49
- * @returns {Promise<object>}
56
+ * @returns {Promise<object>} CompanyResponse
50
57
  */
51
- updateCompany(catalogCompanyId, body) {
52
- return this._client.patch(`/2.1/companyCatalog/${catalogCompanyId}`, body);
58
+ async updateCompany(catalogCompanyId, body) {
59
+ const response = await this._client.patch(`/2.1/companyCatalog/${catalogCompanyId}`, body);
60
+ return convertToModel(response, CompanyResponseSchema, 'CompanyResponse');
53
61
  }
54
62
 
55
63
  /**
@@ -110,15 +118,11 @@ class CompanyCatalogApi {
110
118
  * @returns {Promise<string|null>} The catalogCompanyId, or null if not found.
111
119
  */
112
120
  async getCompanyByName(companyName) {
113
- const { findByField } = require('../utils/search');
114
121
  const response = await this.getCompanies();
115
122
  const items = (response && response.items) || [];
116
- const company =
117
- findByField(items, 'companyName', companyName, (x) => x.data || x) ||
118
- findByField(items, 'name', companyName, (x) => x.data || x);
123
+ const company = findByField(items, 'name', companyName);
119
124
  if (!company) return null;
120
- const data = company.data || company;
121
- return data.catalogCompanyId || data.id || null;
125
+ return company.catalogCompanyId || null;
122
126
  }
123
127
  }
124
128
 
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const { findByField } = require('../utils/search');
4
+ const { convertToModel } = require('../models/convert');
5
+ const { FileAreaSchema, FileAreasListResponseSchema } = require('../models/fileAreas');
6
+
3
7
  /**
4
8
  * API methods for file areas on a project.
5
9
  */
@@ -16,10 +20,11 @@ class FileAreasApi {
16
20
  * GET /5.1/projects/{projectId}/file_areas
17
21
  * @param {string} projectId
18
22
  * @param {object} [params]
19
- * @returns {Promise<object>}
23
+ * @returns {Promise<object>} FileAreasListResponse ({ items: FileArea[], metadata?, links? })
20
24
  */
21
- getFileAreas(projectId, params = {}) {
22
- return this._client.get(`/5.1/projects/${projectId}/file_areas`, params);
25
+ async getFileAreas(projectId, params = {}) {
26
+ const response = await this._client.get(`/5.1/projects/${projectId}/file_areas`, params);
27
+ return convertToModel(response, FileAreasListResponseSchema, 'FileAreasListResponse');
23
28
  }
24
29
 
25
30
  /**
@@ -27,10 +32,11 @@ class FileAreasApi {
27
32
  * GET /1.0/projects/{projectId}/file_areas/{fileAreaId}
28
33
  * @param {string} projectId
29
34
  * @param {string} fileAreaId
30
- * @returns {Promise<object>}
35
+ * @returns {Promise<object>} FileArea (not wrapped in a data envelope, matches Python)
31
36
  */
32
- getFileArea(projectId, fileAreaId) {
33
- return this._client.get(`/1.0/projects/${projectId}/file_areas/${fileAreaId}`);
37
+ async getFileArea(projectId, fileAreaId) {
38
+ const response = await this._client.get(`/1.0/projects/${projectId}/file_areas/${fileAreaId}`);
39
+ return convertToModel(response, FileAreaSchema, 'FileArea');
34
40
  }
35
41
 
36
42
  /**
@@ -40,15 +46,11 @@ class FileAreasApi {
40
46
  * @returns {Promise<string|null>} The fileAreaId, or null if not found.
41
47
  */
42
48
  async getFileAreaByName(projectId, fileAreaName) {
43
- const { findByField } = require('../utils/search');
44
49
  const response = await this.getFileAreas(projectId);
45
50
  const items = (response && response.items) || [];
46
- const area =
47
- findByField(items, 'fileAreaName', fileAreaName, (x) => x.data || x) ||
48
- findByField(items, 'name', fileAreaName, (x) => x.data || x);
51
+ const area = findByField(items, 'fileAreaName', fileAreaName);
49
52
  if (!area) return null;
50
- const data = area.data || area;
51
- return data.fileAreaId || data.id || null;
53
+ return area.fileAreaId || null;
52
54
  }
53
55
  }
54
56
 
@@ -7,6 +7,8 @@ const axios = require('axios');
7
7
  const { findByField, findAllByField } = require('../utils/search');
8
8
  const { resolveFolderIdFromNamedPath } = require('../utils/pathResolver');
9
9
  const { validateProjectId, validateFileAreaId, validateFolderId } = require('../utils/validation');
10
+ const { convertToModel, convertToModelList } = require('../models/convert');
11
+ const { FileSchema, FileResponseSchema, FilesListResponseSchema } = require('../models/files');
10
12
 
11
13
  /**
12
14
  * API methods for files within a file area.
@@ -27,11 +29,12 @@ class FilesApi {
27
29
  * @param {object} [params] - Optional params (e.g. folderId, updatedAfter, includeProperties). The files endpoint does not support OData $filter.
28
30
  * @returns {Promise<object>}
29
31
  */
30
- listFiles(projectId, fileAreaId, params = {}) {
31
- return this._client.get(
32
+ async listFiles(projectId, fileAreaId, params = {}) {
33
+ const response = await this._client.get(
32
34
  `/6.1/projects/${projectId}/file_areas/${fileAreaId}/files`,
33
35
  params,
34
36
  );
37
+ return convertToModel(response, FilesListResponseSchema, 'FilesListResponse');
35
38
  }
36
39
 
37
40
  /**
@@ -75,7 +78,7 @@ class FilesApi {
75
78
  if (verbose) {
76
79
  console.log(`Done. Total files retrieved: ${allItems.length}`);
77
80
  }
78
- return allItems;
81
+ return convertToModelList(allItems, FileSchema, 'File');
79
82
  }
80
83
 
81
84
  /**
@@ -208,9 +211,10 @@ class FilesApi {
208
211
  }
209
212
 
210
213
  // ID-based lookup (original behaviour)
211
- const fileInfo = await this._client.get(
214
+ const rawResponse = await this._client.get(
212
215
  `/5.0/projects/${projectId}/file_areas/${fileAreaIdOrPath}/files/${fileId}`,
213
216
  );
217
+ const fileInfo = convertToModel(rawResponse, FileResponseSchema, 'FileResponse');
214
218
  if (options.download && fileInfo && fileInfo.data && fileInfo.data.downloadLink) {
215
219
  const name = fileInfo.data.fileName || fileId;
216
220
  const downloadedPath = await this.downloadFileFromLink(
@@ -538,11 +542,11 @@ class FilesApi {
538
542
  const question = (prompt) => new Promise((resolve) => rl.question(prompt, resolve));
539
543
 
540
544
  function getFid(f) {
541
- const d = f.data || {};
545
+ const d = f.data || f || {};
542
546
  return d.id || d.fileId || null;
543
547
  }
544
548
  function getFname(f) {
545
- return (f.data || {}).fileName || '<unknown>';
549
+ return (f.data || f || {}).fileName || '<unknown>';
546
550
  }
547
551
  function hasContent(node) {
548
552
  if (node.files.length) return true;
@@ -4,6 +4,8 @@ const { paginate } = require('../utils/pagination');
4
4
  const { findByField } = require('../utils/search');
5
5
  const { validateProjectId, validateFileAreaId } = require('../utils/validation');
6
6
  const { resolveFolderIdFromNamedPath } = require('../utils/pathResolver');
7
+ const { convertToModel, convertToModelList } = require('../models/convert');
8
+ const { FolderSchema, FolderResponseSchema, FoldersListResponseSchema } = require('../models/folders');
7
9
 
8
10
  /**
9
11
  * API methods for folders within a file area.
@@ -24,11 +26,12 @@ class FoldersApi {
24
26
  * @param {object} [params]
25
27
  * @returns {Promise<object>}
26
28
  */
27
- listFolders(projectId, fileAreaId, params = {}) {
28
- return this._client.get(
29
+ async listFolders(projectId, fileAreaId, params = {}) {
30
+ const response = await this._client.get(
29
31
  `/5.1/projects/${projectId}/file_areas/${fileAreaId}/folders`,
30
32
  params,
31
33
  );
34
+ return convertToModel(response, FoldersListResponseSchema, 'FoldersListResponse');
32
35
  }
33
36
 
34
37
  /**
@@ -43,7 +46,8 @@ class FoldersApi {
43
46
  validateProjectId(projectId);
44
47
  validateFileAreaId(fileAreaId);
45
48
  const endpoint = `/5.1/projects/${projectId}/file_areas/${fileAreaId}/folders`;
46
- return paginate(endpoint, this._client, params, verbose);
49
+ const raw = await paginate(endpoint, this._client, params, verbose);
50
+ return convertToModelList(raw, FolderSchema, 'Folder');
47
51
  }
48
52
 
49
53
  /**
@@ -54,10 +58,11 @@ class FoldersApi {
54
58
  * @param {string} folderId
55
59
  * @returns {Promise<object>}
56
60
  */
57
- getFolder(projectId, fileAreaId, folderId) {
58
- return this._client.get(
61
+ async getFolder(projectId, fileAreaId, folderId) {
62
+ const response = await this._client.get(
59
63
  `/5.0/projects/${projectId}/file_areas/${fileAreaId}/folders/${folderId}`,
60
64
  );
65
+ return convertToModel(response, FolderResponseSchema, 'FolderResponse');
61
66
  }
62
67
 
63
68
  /**
@@ -103,15 +108,12 @@ class FoldersApi {
103
108
  validateProjectId(projectId);
104
109
  validateFileAreaId(fileAreaId);
105
110
  const allFolders = await this.getAllFolders(projectId, fileAreaId);
106
- const folder = findByField(allFolders, 'folderName', folderName, (x) => x.data || x)
107
- || findByField(allFolders, 'name', folderName, (x) => x.data || x);
111
+ const folder = findByField(allFolders, 'folderName', folderName);
108
112
  if (!folder) return null;
109
- if (parentFolderId != null) {
110
- const data = folder.data || folder;
111
- const pid = data.parentFolderId || data.parentId;
112
- if (pid !== parentFolderId) return null;
113
+ if (parentFolderId != null && folder.parentFolderId !== parentFolderId) {
114
+ return null;
113
115
  }
114
- return folder;
116
+ return convertToModel({ data: folder }, FolderResponseSchema, 'FolderResponse');
115
117
  }
116
118
 
117
119
  /**
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { FormsListResponseSchema, FormResponseSchema } = require('../models/forms');
5
+
3
6
  /**
4
7
  * API methods for forms on a project.
5
8
  */
@@ -16,10 +19,11 @@ class FormsApi {
16
19
  * GET /2.1/projects/{projectId}/forms
17
20
  * @param {string} projectId
18
21
  * @param {object} [params] - Optional filters (e.g. updatedAfter)
19
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} FormsListResponse ({ items, metadata?, links? })
20
23
  */
21
- getProjectForms(projectId, params = {}) {
22
- return this._client.get(`/2.1/projects/${projectId}/forms`, params);
24
+ async getProjectForms(projectId, params = {}) {
25
+ const response = await this._client.get(`/2.1/projects/${projectId}/forms`, params);
26
+ return convertToModel(response, FormsListResponseSchema, 'FormsListResponse');
23
27
  }
24
28
 
25
29
  /**
@@ -27,10 +31,11 @@ class FormsApi {
27
31
  * GET /1.2/projects/{projectId}/forms/{formId}
28
32
  * @param {string} projectId
29
33
  * @param {string} formId
30
- * @returns {Promise<object>}
34
+ * @returns {Promise<object>} FormResponse ({ data, links? })
31
35
  */
32
- getForm(projectId, formId) {
33
- return this._client.get(`/1.2/projects/${projectId}/forms/${formId}`);
36
+ async getForm(projectId, formId) {
37
+ const response = await this._client.get(`/1.2/projects/${projectId}/forms/${formId}`);
38
+ return convertToModel(response, FormResponseSchema, 'FormResponse');
34
39
  }
35
40
 
36
41
  /**
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { InspectionPlansListResponseSchema } = require('../models/inspectionPlans');
5
+
3
6
  /**
4
7
  * API methods for inspection plans.
5
8
  */
@@ -16,10 +19,11 @@ class InspectionPlansApi {
16
19
  * GET /1.2/projects/{projectId}/inspectionPlans
17
20
  * @param {string} projectId
18
21
  * @param {object} [params]
19
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} InspectionPlansListResponse ({ items, metadata?, links? })
20
23
  */
21
- listInspectionPlans(projectId, params = {}) {
22
- return this._client.get(`/1.2/projects/${projectId}/inspectionPlans`, params);
24
+ async listInspectionPlans(projectId, params = {}) {
25
+ const response = await this._client.get(`/1.2/projects/${projectId}/inspectionPlans`, params);
26
+ return convertToModel(response, InspectionPlansListResponseSchema, 'InspectionPlansListResponse');
23
27
  }
24
28
 
25
29
  /**
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const { findByField } = require('../utils/search');
4
+ const { convertToModel } = require('../models/convert');
5
+ const { ProjectsListResponseSchema, ProjectResponseSchema } = require('../models/projects');
6
+
3
7
  /**
4
8
  * API methods for project management.
5
9
  */
@@ -15,30 +19,33 @@ class ProjectsApi {
15
19
  * Get all available projects.
16
20
  * GET /5.1/projects
17
21
  * @param {object} [params] - Optional query parameters (e.g. updatedAfter)
18
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} ProjectsListResponse ({ items: Project[], metadata?, links? })
19
23
  */
20
- listProjects(params = {}) {
21
- return this._client.get('/5.1/projects', params);
24
+ async listProjects(params = {}) {
25
+ const response = await this._client.get('/5.1/projects', params);
26
+ return convertToModel(response, ProjectsListResponseSchema, 'ProjectsListResponse');
22
27
  }
23
28
 
24
29
  /**
25
30
  * Get a specific project.
26
31
  * GET /5.0/projects/{projectId}
27
32
  * @param {string} projectId
28
- * @returns {Promise<object>}
33
+ * @returns {Promise<object>} ProjectResponse ({ data: Project, links? })
29
34
  */
30
- getProject(projectId) {
31
- return this._client.get(`/5.0/projects/${projectId}`);
35
+ async getProject(projectId) {
36
+ const response = await this._client.get(`/5.0/projects/${projectId}`);
37
+ return convertToModel(response, ProjectResponseSchema, 'ProjectResponse');
32
38
  }
33
39
 
34
40
  /**
35
41
  * Create a new project.
36
42
  * POST /5.0/projects
37
43
  * @param {object} body
38
- * @returns {Promise<object>}
44
+ * @returns {Promise<object>} ProjectResponse
39
45
  */
40
- createProject(body) {
41
- return this._client.post('/5.0/projects', body);
46
+ async createProject(body) {
47
+ const response = await this._client.post('/5.0/projects', body);
48
+ return convertToModel(response, ProjectResponseSchema, 'ProjectResponse');
42
49
  }
43
50
 
44
51
  /**
@@ -46,10 +53,11 @@ class ProjectsApi {
46
53
  * PATCH /5.0/projects/{projectId}
47
54
  * @param {string} projectId
48
55
  * @param {object} body
49
- * @returns {Promise<object>}
56
+ * @returns {Promise<object>} ProjectResponse
50
57
  */
51
- updateProject(projectId, body) {
52
- return this._client.patch(`/5.0/projects/${projectId}`, body);
58
+ async updateProject(projectId, body) {
59
+ const response = await this._client.patch(`/5.0/projects/${projectId}`, body);
60
+ return convertToModel(response, ProjectResponseSchema, 'ProjectResponse');
53
61
  }
54
62
 
55
63
  /**
@@ -108,15 +116,11 @@ class ProjectsApi {
108
116
  * @returns {Promise<string|null>} The projectId, or null if not found.
109
117
  */
110
118
  async getProjectByName(projectName) {
111
- const { findByField } = require('../utils/search');
112
119
  const response = await this.listProjects();
113
120
  const items = (response && response.items) || [];
114
- const project =
115
- findByField(items, 'projectName', projectName, (x) => x.data || x) ||
116
- findByField(items, 'name', projectName, (x) => x.data || x);
121
+ const project = findByField(items, 'projectName', projectName);
117
122
  if (!project) return null;
118
- const data = project.data || project;
119
- return data.projectId || data.id || null;
123
+ return project.projectId || null;
120
124
  }
121
125
  }
122
126
 
@@ -1,5 +1,15 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel, convertToModelList } = require('../models/convert');
4
+ const {
5
+ TaskSchema,
6
+ TaskChangeSchema,
7
+ TasksListResponseSchema,
8
+ TaskResponseSchema,
9
+ TaskChangesSchema,
10
+ TaskAttachmentsListResponseSchema,
11
+ } = require('../models/tasks');
12
+
3
13
  /**
4
14
  * Build query params for GET /5.2/projects/.../tasks (OData).
5
15
  * If params contains typeId and no $filter, expands to
@@ -39,8 +49,9 @@ class TasksApi {
39
49
  * OData $filter on task type, or pass $filter (and other OData options) directly.
40
50
  * @returns {Promise<object>}
41
51
  */
42
- getProjectTasks(projectId, params = {}) {
43
- return this._client.get(`/5.2/projects/${projectId}/tasks`, normalizeTaskParams(params));
52
+ async getProjectTasks(projectId, params = {}) {
53
+ const response = await this._client.get(`/5.2/projects/${projectId}/tasks`, normalizeTaskParams(params));
54
+ return convertToModel(response, TasksListResponseSchema, 'TasksListResponse');
44
55
  }
45
56
 
46
57
  /**
@@ -119,7 +130,7 @@ class TasksApi {
119
130
  if (verbose) {
120
131
  console.log(`Done. Total tasks retrieved: ${allItems.length}`);
121
132
  }
122
- return allItems;
133
+ return convertToModelList(allItems, TaskSchema, 'Task');
123
134
  }
124
135
 
125
136
  /**
@@ -129,8 +140,9 @@ class TasksApi {
129
140
  * @param {string} taskId
130
141
  * @returns {Promise<object>}
131
142
  */
132
- getTask(projectId, taskId) {
133
- return this._client.get(`/3.3/projects/${projectId}/tasks/${taskId}`);
143
+ async getTask(projectId, taskId) {
144
+ const response = await this._client.get(`/3.3/projects/${projectId}/tasks/${taskId}`);
145
+ return convertToModel(response, TaskResponseSchema, 'TaskResponse');
134
146
  }
135
147
 
136
148
  /**
@@ -140,8 +152,9 @@ class TasksApi {
140
152
  * @param {object} [params] - Optional filters (e.g. updatedAfter)
141
153
  * @returns {Promise<object>}
142
154
  */
143
- getProjectTaskChanges(projectId, params = {}) {
144
- return this._client.get(`/2.2/projects/${projectId}/tasks/changes`, params);
155
+ async getProjectTaskChanges(projectId, params = {}) {
156
+ const response = await this._client.get(`/2.2/projects/${projectId}/tasks/changes`, params);
157
+ return convertToModel(response, TaskChangesSchema, 'TaskChanges');
145
158
  }
146
159
 
147
160
  /**
@@ -151,8 +164,9 @@ class TasksApi {
151
164
  * @param {object} [params] - Optional filters (e.g. updatedAfter)
152
165
  * @returns {Promise<object>}
153
166
  */
154
- getProjectTaskAttachments(projectId, params = {}) {
155
- return this._client.get(`/1.1/projects/${projectId}/tasks/attachments`, params);
167
+ async getProjectTaskAttachments(projectId, params = {}) {
168
+ const response = await this._client.get(`/1.1/projects/${projectId}/tasks/attachments`, params);
169
+ return convertToModel(response, TaskAttachmentsListResponseSchema, 'TaskAttachmentsListResponse');
156
170
  }
157
171
 
158
172
  /**
@@ -164,12 +178,13 @@ class TasksApi {
164
178
  */
165
179
  async getAllProjectTaskChanges(projectId, params = {}, verbose = false) {
166
180
  const { paginate } = require('../utils/pagination');
167
- return paginate(
181
+ const raw = await paginate(
168
182
  `/2.2/projects/${projectId}/tasks/changes`,
169
183
  this._client,
170
184
  params,
171
185
  verbose,
172
186
  );
187
+ return convertToModelList(raw, TaskChangeSchema, 'TaskChange');
173
188
  }
174
189
  }
175
190
 
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { TestPlansListResponseSchema } = require('../models/testPlans');
5
+
3
6
  /**
4
7
  * API methods for test plans.
5
8
  */
@@ -16,10 +19,11 @@ class TestPlansApi {
16
19
  * GET /1.2/projects/{projectId}/testPlans
17
20
  * @param {string} projectId
18
21
  * @param {object} [params]
19
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} TestPlansListResponse ({ items, metadata?, links? })
20
23
  */
21
- listTestPlans(projectId, params = {}) {
22
- return this._client.get(`/1.2/projects/${projectId}/testPlans`, params);
24
+ async listTestPlans(projectId, params = {}) {
25
+ const response = await this._client.get(`/1.2/projects/${projectId}/testPlans`, params);
26
+ return convertToModel(response, TestPlansListResponseSchema, 'TestPlansListResponse');
23
27
  }
24
28
 
25
29
  /**
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { UserResponseSchema, UsersListResponseSchema } = require('../models/users');
5
+
3
6
  /**
4
7
  * API methods for users.
5
8
  */
@@ -15,10 +18,11 @@ class UsersApi {
15
18
  * Get a specific user.
16
19
  * GET /1.1/users/{userId}
17
20
  * @param {string} userId
18
- * @returns {Promise<object>}
21
+ * @returns {Promise<object>} UserResponse ({ data: User, links? })
19
22
  */
20
- getUser(userId) {
21
- return this._client.get(`/1.1/users/${userId}`);
23
+ async getUser(userId) {
24
+ const response = await this._client.get(`/1.1/users/${userId}`);
25
+ return convertToModel(response, UserResponseSchema, 'UserResponse');
22
26
  }
23
27
 
24
28
  /**
@@ -26,10 +30,11 @@ class UsersApi {
26
30
  * GET /1.2/projects/{projectId}/users
27
31
  * @param {string} projectId
28
32
  * @param {object} [params]
29
- * @returns {Promise<object>}
33
+ * @returns {Promise<object>} UsersListResponse ({ items: ProjectUser[], metadata?, links? })
30
34
  */
31
- listProjectUsers(projectId, params = {}) {
32
- return this._client.get(`/1.2/projects/${projectId}/users`, params);
35
+ async listProjectUsers(projectId, params = {}) {
36
+ const response = await this._client.get(`/1.2/projects/${projectId}/users`, params);
37
+ return convertToModel(response, UsersListResponseSchema, 'UsersListResponse');
33
38
  }
34
39
 
35
40
  /**
@@ -1,5 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { VersionSetsListResponseSchema, VersionSetResponseSchema } = require('../models/versionSets');
5
+ const { FilesListResponseSchema } = require('../models/files');
6
+
3
7
  /**
4
8
  * API methods for version sets.
5
9
  */
@@ -16,10 +20,11 @@ class VersionSetsApi {
16
20
  * GET /2.1/projects/{projectId}/version_sets
17
21
  * @param {string} projectId
18
22
  * @param {object} [params]
19
- * @returns {Promise<object>}
23
+ * @returns {Promise<object>} VersionSetsListResponse ({ items: VersionSet[], metadata?, links? })
20
24
  */
21
- getVersionSets(projectId, params = {}) {
22
- return this._client.get(`/2.1/projects/${projectId}/version_sets`, params);
25
+ async getVersionSets(projectId, params = {}) {
26
+ const response = await this._client.get(`/2.1/projects/${projectId}/version_sets`, params);
27
+ return convertToModel(response, VersionSetsListResponseSchema, 'VersionSetsListResponse');
23
28
  }
24
29
 
25
30
  /**
@@ -27,10 +32,11 @@ class VersionSetsApi {
27
32
  * GET /2.0/projects/{projectId}/version_sets/{versionSetId}
28
33
  * @param {string} projectId
29
34
  * @param {string} versionSetId
30
- * @returns {Promise<object>}
35
+ * @returns {Promise<object>} VersionSetResponse ({ data: VersionSet, links? })
31
36
  */
32
- getVersionSet(projectId, versionSetId) {
33
- return this._client.get(`/2.0/projects/${projectId}/version_sets/${versionSetId}`);
37
+ async getVersionSet(projectId, versionSetId) {
38
+ const response = await this._client.get(`/2.0/projects/${projectId}/version_sets/${versionSetId}`);
39
+ return convertToModel(response, VersionSetResponseSchema, 'VersionSetResponse');
34
40
  }
35
41
 
36
42
  /**
@@ -39,13 +45,14 @@ class VersionSetsApi {
39
45
  * @param {string} projectId
40
46
  * @param {string} fileAreaId
41
47
  * @param {object} [params]
42
- * @returns {Promise<object>}
48
+ * @returns {Promise<object>} VersionSetsListResponse
43
49
  */
44
- listFileAreaVersionSets(projectId, fileAreaId, params = {}) {
45
- return this._client.get(
50
+ async listFileAreaVersionSets(projectId, fileAreaId, params = {}) {
51
+ const response = await this._client.get(
46
52
  `/2.1/projects/${projectId}/file_areas/${fileAreaId}/version_sets`,
47
53
  params,
48
54
  );
55
+ return convertToModel(response, VersionSetsListResponseSchema, 'VersionSetsListResponse');
49
56
  }
50
57
 
51
58
  /**
@@ -54,13 +61,14 @@ class VersionSetsApi {
54
61
  * @param {string} projectId
55
62
  * @param {string} versionSetId
56
63
  * @param {object} [params]
57
- * @returns {Promise<object>}
64
+ * @returns {Promise<object>} FilesListResponse (cross-endpoint reuse of the Files model, matches Python)
58
65
  */
59
- listVersionSetFiles(projectId, versionSetId, params = {}) {
60
- return this._client.get(
66
+ async listVersionSetFiles(projectId, versionSetId, params = {}) {
67
+ const response = await this._client.get(
61
68
  `/3.0/projects/${projectId}/version_sets/${versionSetId}/files`,
62
69
  params,
63
70
  );
71
+ return convertToModel(response, FilesListResponseSchema, 'FilesListResponse');
64
72
  }
65
73
  }
66
74
 
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ const { convertToModel } = require('../models/convert');
4
+ const { WorkPackagesListResponseSchema } = require('../models/workPackages');
5
+
3
6
  /**
4
7
  * API methods for work packages on a project.
5
8
  */
@@ -16,10 +19,11 @@ class WorkPackagesApi {
16
19
  * GET /1.0/projects/{projectId}/workpackages
17
20
  * @param {string} projectId
18
21
  * @param {object} [params]
19
- * @returns {Promise<object>}
22
+ * @returns {Promise<object>} WorkPackagesListResponse ({ items: WorkPackage[], metadata?, links? })
20
23
  */
21
- listWorkPackages(projectId, params = {}) {
22
- return this._client.get(`/1.0/projects/${projectId}/workpackages`, params);
24
+ async listWorkPackages(projectId, params = {}) {
25
+ const response = await this._client.get(`/1.0/projects/${projectId}/workpackages`, params);
26
+ return convertToModel(response, WorkPackagesListResponseSchema, 'WorkPackagesListResponse');
23
27
  }
24
28
  }
25
29