@managemint-solutions/sdk 0.4.0 → 0.6.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.
- package/README.md +102 -6
- package/dist/additional-details/dto.d.ts +2 -5
- package/dist/additional-details/dto.js +2 -0
- package/dist/additional-details/dto.js.map +1 -1
- package/dist/additional-details/index.js +5 -6
- package/dist/additional-details/index.js.map +1 -1
- package/dist/additional-details/values.d.ts +2 -2
- package/dist/additional-details/values.js +2 -2
- package/dist/client.d.ts +7 -2
- package/dist/client.js +9 -0
- package/dist/client.js.map +1 -1
- package/dist/clients/dto.d.ts +30 -0
- package/dist/clients/dto.js +181 -0
- package/dist/clients/dto.js.map +1 -0
- package/dist/clients/index.d.ts +20 -0
- package/dist/clients/index.js +266 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/notes/dto.d.ts +1 -4
- package/dist/notes/dto.js +2 -0
- package/dist/notes/dto.js.map +1 -1
- package/dist/notes/index.js +3 -5
- package/dist/notes/index.js.map +1 -1
- package/dist/projects/dto.d.ts +38 -0
- package/dist/projects/dto.js +238 -0
- package/dist/projects/dto.js.map +1 -0
- package/dist/projects/index.d.ts +20 -0
- package/dist/projects/index.js +299 -0
- package/dist/projects/index.js.map +1 -0
- package/dist/statuses/dto.d.ts +2 -5
- package/dist/statuses/dto.js +2 -0
- package/dist/statuses/dto.js.map +1 -1
- package/dist/statuses/index.js +3 -4
- package/dist/statuses/index.js.map +1 -1
- package/dist/supporting-files/index.js +3 -3
- package/dist/supporting-files/index.js.map +1 -1
- package/dist/tasks/dto.d.ts +43 -0
- package/dist/tasks/dto.js +288 -0
- package/dist/tasks/dto.js.map +1 -0
- package/dist/tasks/index.d.ts +20 -0
- package/dist/tasks/index.js +241 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/transforms.d.ts +14 -0
- package/dist/transforms.js +38 -0
- package/dist/transforms.js.map +1 -0
- package/dist/validators.d.ts +2 -0
- package/dist/validators.js +8 -0
- package/dist/validators.js.map +1 -0
- package/package.json +1 -1
- package/dist/database.types.d.ts +0 -2570
- package/dist/database.types.js +0 -12
- package/dist/database.types.js.map +0 -1
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ClientsResource = void 0;
|
|
18
|
+
const errors_1 = require("../errors");
|
|
19
|
+
__exportStar(require("./dto"), exports);
|
|
20
|
+
// The public contract is the shared ClientSummary / ClientEntity from
|
|
21
|
+
// @managemint-solutions/entities; the casts at the returns declare the shape the select strings
|
|
22
|
+
// below produce (the columns are defined in the api's supabase/migrations).
|
|
23
|
+
const CLIENT_LIST_SELECT = `
|
|
24
|
+
mms_id,
|
|
25
|
+
created_at,
|
|
26
|
+
name,
|
|
27
|
+
email,
|
|
28
|
+
status:statuses!status_id (
|
|
29
|
+
mms_id,
|
|
30
|
+
colour,
|
|
31
|
+
label
|
|
32
|
+
),
|
|
33
|
+
created_by:user_profiles!created_by (*)
|
|
34
|
+
`;
|
|
35
|
+
const CLIENT_DETAIL_SELECT = `
|
|
36
|
+
mms_id,
|
|
37
|
+
created_at,
|
|
38
|
+
name,
|
|
39
|
+
email,
|
|
40
|
+
phone,
|
|
41
|
+
status:statuses!status_id (
|
|
42
|
+
mms_id,
|
|
43
|
+
label,
|
|
44
|
+
colour
|
|
45
|
+
),
|
|
46
|
+
contract_client,
|
|
47
|
+
contracted_hours,
|
|
48
|
+
updated_at,
|
|
49
|
+
last_updated_by:user_profiles!last_updated_by (
|
|
50
|
+
mms_id,
|
|
51
|
+
name,
|
|
52
|
+
surname,
|
|
53
|
+
email,
|
|
54
|
+
profile_image
|
|
55
|
+
),
|
|
56
|
+
created_by:user_profiles!created_by (
|
|
57
|
+
mms_id,
|
|
58
|
+
name,
|
|
59
|
+
surname,
|
|
60
|
+
email,
|
|
61
|
+
profile_image
|
|
62
|
+
),
|
|
63
|
+
archived,
|
|
64
|
+
archived_at,
|
|
65
|
+
archived_by:user_profiles!archived_by (
|
|
66
|
+
mms_id,
|
|
67
|
+
name,
|
|
68
|
+
surname,
|
|
69
|
+
email,
|
|
70
|
+
profile_image
|
|
71
|
+
),
|
|
72
|
+
unarchived_at,
|
|
73
|
+
unarchived_by:user_profiles!unarchived_by (
|
|
74
|
+
mms_id,
|
|
75
|
+
name,
|
|
76
|
+
surname,
|
|
77
|
+
email,
|
|
78
|
+
profile_image
|
|
79
|
+
),
|
|
80
|
+
deleted,
|
|
81
|
+
deleted_at,
|
|
82
|
+
deleted_by:user_profiles!deleted_by (
|
|
83
|
+
mms_id,
|
|
84
|
+
name,
|
|
85
|
+
surname,
|
|
86
|
+
email,
|
|
87
|
+
profile_image
|
|
88
|
+
),
|
|
89
|
+
restored_at,
|
|
90
|
+
restored_by:user_profiles!restored_by (
|
|
91
|
+
mms_id,
|
|
92
|
+
name,
|
|
93
|
+
surname,
|
|
94
|
+
email,
|
|
95
|
+
profile_image
|
|
96
|
+
)
|
|
97
|
+
`;
|
|
98
|
+
class ClientsResource {
|
|
99
|
+
supabase;
|
|
100
|
+
auth;
|
|
101
|
+
constructor(supabase, auth) {
|
|
102
|
+
this.supabase = supabase;
|
|
103
|
+
this.auth = auth;
|
|
104
|
+
}
|
|
105
|
+
async list(query) {
|
|
106
|
+
const page = query.page;
|
|
107
|
+
const pageSize = query.page_size;
|
|
108
|
+
const offset = (page - 1) * pageSize;
|
|
109
|
+
const trimmedSearch = query.search?.trim();
|
|
110
|
+
// `order`/`range` return `this`, so the builder stays a filter builder and the conditional
|
|
111
|
+
// filters below can be reassigned onto it without a cast.
|
|
112
|
+
let clientsQuery = this.supabase
|
|
113
|
+
.from('clients')
|
|
114
|
+
.select(CLIENT_LIST_SELECT, { count: 'estimated' })
|
|
115
|
+
.eq('organization_id', this.auth.organization_id)
|
|
116
|
+
.eq('archived', query.archive)
|
|
117
|
+
.eq('deleted', false)
|
|
118
|
+
.order('created_at', { ascending: false })
|
|
119
|
+
.range(offset, offset + pageSize - 1);
|
|
120
|
+
if (trimmedSearch) {
|
|
121
|
+
const escapedSearch = trimmedSearch.replace(/,/g, '\\,');
|
|
122
|
+
clientsQuery = clientsQuery.or(`name.ilike.%${escapedSearch}%,email.ilike.%${escapedSearch}%`);
|
|
123
|
+
}
|
|
124
|
+
if (query.created_after) {
|
|
125
|
+
clientsQuery = clientsQuery.gte('created_at', query.created_after);
|
|
126
|
+
}
|
|
127
|
+
if (query.created_before) {
|
|
128
|
+
clientsQuery = clientsQuery.lte('created_at', query.created_before);
|
|
129
|
+
}
|
|
130
|
+
if (query.status_id_in && query.status_id_in.length > 0) {
|
|
131
|
+
clientsQuery = clientsQuery.in('status_id', query.status_id_in);
|
|
132
|
+
}
|
|
133
|
+
const { data, error, count } = await clientsQuery;
|
|
134
|
+
if (error)
|
|
135
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
136
|
+
const totalEstimated = count ?? 0;
|
|
137
|
+
const totalPages = totalEstimated > 0 ? Math.ceil(totalEstimated / pageSize) : 0;
|
|
138
|
+
return {
|
|
139
|
+
results: (data ?? []),
|
|
140
|
+
page,
|
|
141
|
+
per_page: pageSize,
|
|
142
|
+
count: totalEstimated,
|
|
143
|
+
total_pages: totalPages,
|
|
144
|
+
has_next_page: page < totalPages,
|
|
145
|
+
has_previous_page: page > 1,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
async getById(clientId) {
|
|
149
|
+
const { data, error } = await this.supabase
|
|
150
|
+
.from('clients')
|
|
151
|
+
.select(CLIENT_DETAIL_SELECT)
|
|
152
|
+
.eq('organization_id', this.auth.organization_id)
|
|
153
|
+
.eq('mms_id', clientId)
|
|
154
|
+
.single();
|
|
155
|
+
if (error)
|
|
156
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
157
|
+
// A soft-deleted client keeps its audit trail but gives up its details.
|
|
158
|
+
if (data.deleted) {
|
|
159
|
+
return {
|
|
160
|
+
...data,
|
|
161
|
+
name: '',
|
|
162
|
+
email: '',
|
|
163
|
+
phone: '',
|
|
164
|
+
status: null,
|
|
165
|
+
contract_client: false,
|
|
166
|
+
contracted_hours: 0,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return data;
|
|
170
|
+
}
|
|
171
|
+
async create(input) {
|
|
172
|
+
const { data, error } = await this.supabase
|
|
173
|
+
.from('clients')
|
|
174
|
+
.insert({
|
|
175
|
+
...input,
|
|
176
|
+
organization_id: this.auth.organization_id,
|
|
177
|
+
created_by: this.auth.mms_id,
|
|
178
|
+
created_at: new Date().toISOString(),
|
|
179
|
+
})
|
|
180
|
+
.select('mms_id')
|
|
181
|
+
.single();
|
|
182
|
+
if (error)
|
|
183
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
184
|
+
return this.getById(data.mms_id);
|
|
185
|
+
}
|
|
186
|
+
async update(clientId, input) {
|
|
187
|
+
const { data, error } = await this.supabase
|
|
188
|
+
.from('clients')
|
|
189
|
+
.update({
|
|
190
|
+
...input,
|
|
191
|
+
last_updated_by: this.auth.mms_id,
|
|
192
|
+
updated_at: new Date().toISOString(),
|
|
193
|
+
})
|
|
194
|
+
.eq('organization_id', this.auth.organization_id)
|
|
195
|
+
.eq('mms_id', clientId)
|
|
196
|
+
.select('mms_id')
|
|
197
|
+
.single();
|
|
198
|
+
if (error)
|
|
199
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
200
|
+
return this.getById(data.mms_id);
|
|
201
|
+
}
|
|
202
|
+
async archive(clientId) {
|
|
203
|
+
const { data, error } = await this.supabase
|
|
204
|
+
.from('clients')
|
|
205
|
+
.update({
|
|
206
|
+
archived: true,
|
|
207
|
+
archived_at: new Date().toISOString(),
|
|
208
|
+
archived_by: this.auth.mms_id,
|
|
209
|
+
})
|
|
210
|
+
.eq('organization_id', this.auth.organization_id)
|
|
211
|
+
.eq('mms_id', clientId)
|
|
212
|
+
.select('mms_id')
|
|
213
|
+
.single();
|
|
214
|
+
if (error)
|
|
215
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
216
|
+
return this.getById(data.mms_id);
|
|
217
|
+
}
|
|
218
|
+
async unarchive(clientId) {
|
|
219
|
+
const { data, error } = await this.supabase
|
|
220
|
+
.from('clients')
|
|
221
|
+
.update({
|
|
222
|
+
archived: false,
|
|
223
|
+
unarchived_at: new Date().toISOString(),
|
|
224
|
+
unarchived_by: this.auth.mms_id,
|
|
225
|
+
})
|
|
226
|
+
.eq('organization_id', this.auth.organization_id)
|
|
227
|
+
.eq('mms_id', clientId)
|
|
228
|
+
.select('mms_id')
|
|
229
|
+
.single();
|
|
230
|
+
if (error)
|
|
231
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
232
|
+
return this.getById(data.mms_id);
|
|
233
|
+
}
|
|
234
|
+
async restore(clientId) {
|
|
235
|
+
const { data, error } = await this.supabase
|
|
236
|
+
.from('clients')
|
|
237
|
+
.update({
|
|
238
|
+
deleted: false,
|
|
239
|
+
restored_at: new Date().toISOString(),
|
|
240
|
+
restored_by: this.auth.mms_id,
|
|
241
|
+
})
|
|
242
|
+
.eq('organization_id', this.auth.organization_id)
|
|
243
|
+
.eq('mms_id', clientId)
|
|
244
|
+
.select('mms_id')
|
|
245
|
+
.single();
|
|
246
|
+
if (error)
|
|
247
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
248
|
+
return this.getById(data.mms_id);
|
|
249
|
+
}
|
|
250
|
+
/** Soft delete — the row stays, flagged `deleted`, and `restore()` brings it back. */
|
|
251
|
+
async remove(clientId) {
|
|
252
|
+
const { error } = await this.supabase
|
|
253
|
+
.from('clients')
|
|
254
|
+
.update({
|
|
255
|
+
deleted: true,
|
|
256
|
+
deleted_at: new Date().toISOString(),
|
|
257
|
+
deleted_by: this.auth.mms_id,
|
|
258
|
+
})
|
|
259
|
+
.eq('organization_id', this.auth.organization_id)
|
|
260
|
+
.eq('mms_id', clientId);
|
|
261
|
+
if (error)
|
|
262
|
+
throw (0, errors_1.mapPostgrestError)(error);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
exports.ClientsResource = ClientsResource;
|
|
266
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export * from './client';
|
|
2
2
|
export * from './auth';
|
|
3
3
|
export * from './errors';
|
|
4
|
+
export * from './validators';
|
|
5
|
+
export * from './transforms';
|
|
4
6
|
export * from './statuses';
|
|
5
7
|
export * from './additional-details';
|
|
6
8
|
export * from './notes';
|
|
7
9
|
export * from './supporting-files';
|
|
8
|
-
export
|
|
10
|
+
export * from './clients';
|
|
11
|
+
export * from './projects';
|
|
12
|
+
export * from './tasks';
|
package/dist/index.js
CHANGED
|
@@ -17,8 +17,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./client"), exports);
|
|
18
18
|
__exportStar(require("./auth"), exports);
|
|
19
19
|
__exportStar(require("./errors"), exports);
|
|
20
|
+
__exportStar(require("./validators"), exports);
|
|
21
|
+
__exportStar(require("./transforms"), exports);
|
|
20
22
|
__exportStar(require("./statuses"), exports);
|
|
21
23
|
__exportStar(require("./additional-details"), exports);
|
|
22
24
|
__exportStar(require("./notes"), exports);
|
|
23
25
|
__exportStar(require("./supporting-files"), exports);
|
|
26
|
+
__exportStar(require("./clients"), exports);
|
|
27
|
+
__exportStar(require("./projects"), exports);
|
|
28
|
+
__exportStar(require("./tasks"), exports);
|
|
24
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB;AACzB,6CAA2B;AAC3B,uDAAqC;AACrC,0CAAwB;AACxB,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,yCAAuB;AACvB,2CAAyB;AACzB,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,uDAAqC;AACrC,0CAAwB;AACxB,qDAAmC;AACnC,4CAA0B;AAC1B,6CAA2B;AAC3B,0CAAwB"}
|
package/dist/notes/dto.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import type { AddNoteDto as AddNoteDtoType, GetNotesDto as GetNotesDtoType, NoteIdDto as NoteIdDtoType } from '@managemint-solutions/entities/notes/dto';
|
|
2
2
|
import { NotesEntityTypes } from '@managemint-solutions/entities/notes/enum';
|
|
3
|
-
import type { TablesInsert } from '../database.types';
|
|
4
|
-
type NotesInsertColumns = Required<Pick<TablesInsert<'notes'>, 'content'>>;
|
|
5
3
|
export declare class NoteIdDto implements NoteIdDtoType {
|
|
6
4
|
readonly noteId: string;
|
|
7
5
|
}
|
|
@@ -9,7 +7,6 @@ export declare class GetNotesDto implements GetNotesDtoType {
|
|
|
9
7
|
readonly entity: NotesEntityTypes;
|
|
10
8
|
readonly entityId: string;
|
|
11
9
|
}
|
|
12
|
-
export declare class AddNoteDto implements AddNoteDtoType
|
|
10
|
+
export declare class AddNoteDto implements AddNoteDtoType {
|
|
13
11
|
readonly content: string;
|
|
14
12
|
}
|
|
15
|
-
export {};
|
package/dist/notes/dto.js
CHANGED
|
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.AddNoteDto = exports.GetNotesDto = exports.NoteIdDto = void 0;
|
|
13
13
|
const class_validator_1 = require("class-validator");
|
|
14
14
|
const enum_1 = require("@managemint-solutions/entities/notes/enum");
|
|
15
|
+
// class-validator versions of the shared DTO types from @managemint-solutions/entities.
|
|
16
|
+
// Each class `implements` its entities type so the wire contract cannot drift.
|
|
15
17
|
class NoteIdDto {
|
|
16
18
|
noteId;
|
|
17
19
|
}
|
package/dist/notes/dto.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/notes/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAiF;AAMjF,oEAA6E;
|
|
1
|
+
{"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/notes/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAiF;AAMjF,oEAA6E;AAE7E,wFAAwF;AACxF,+EAA+E;AAE/E,MAAa,SAAS;IAEX,MAAM,CAAU;CAC1B;AAHD,8BAGC;AADU;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;;yCAC1B;AAG3B,MAAa,WAAW;IAEb,MAAM,CAAoB;IAG1B,QAAQ,CAAU;CAC5B;AAND,kCAMC;AAJU;IADR,IAAA,wBAAM,EAAC,uBAAgB,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;;2CAC1B;AAG1B;IADR,IAAA,wBAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;;6CAC1B;AAG7B,MAAa,UAAU;IAIZ,OAAO,CAAU;CAC3B;AALD,gCAKC;AADU;IAHR,IAAA,0BAAQ,EAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACxC,IAAA,2BAAS,EAAC,CAAC,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACpD,IAAA,2BAAS,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,sCAAsC,EAAE,CAAC;;2CAC1C"}
|
package/dist/notes/index.js
CHANGED
|
@@ -17,11 +17,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
exports.NotesResource = void 0;
|
|
18
18
|
const errors_1 = require("../errors");
|
|
19
19
|
__exportStar(require("./dto"), exports);
|
|
20
|
-
// The
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
// embedded user_profiles row is an all-nullable view row where the entity declares UserIdentity,
|
|
24
|
-
// and created_at is an ISO string where the entity declares Date.
|
|
20
|
+
// The public contract is the shared NoteEntity from @managemint-solutions/entities; the casts at
|
|
21
|
+
// the returns declare the shape the select string below produces (the columns are defined in the
|
|
22
|
+
// api's supabase/migrations).
|
|
25
23
|
const NOTE_SELECT = 'mms_id, created_at, content, pinned, user:user_profiles!user_id(*)';
|
|
26
24
|
class NotesResource {
|
|
27
25
|
supabase;
|
package/dist/notes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAKA,sCAA8C;AAE9C,wCAAsB;AAEtB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notes/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CreateProjectDto as CreateProjectDtoType, GetProjectsDto as GetProjectsDtoType, ProjectIdDto as ProjectIdDtoType, UpdateProjectDto as UpdateProjectDtoType } from '@managemint-solutions/entities/projects/dto';
|
|
2
|
+
export declare class GetProjectsDto implements Omit<GetProjectsDtoType, 'status_id_in'> {
|
|
3
|
+
readonly search?: string | null;
|
|
4
|
+
readonly page: number;
|
|
5
|
+
readonly page_size: number;
|
|
6
|
+
readonly created_after?: string | null;
|
|
7
|
+
readonly created_before?: string | null;
|
|
8
|
+
readonly start_date_after?: string | null;
|
|
9
|
+
readonly start_date_before?: string | null;
|
|
10
|
+
readonly end_date_after?: string | null;
|
|
11
|
+
readonly end_date_before?: string | null;
|
|
12
|
+
readonly status_id_in?: string[] | null;
|
|
13
|
+
readonly client_id?: string | null;
|
|
14
|
+
readonly archive: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare class ProjectIdDto implements ProjectIdDtoType {
|
|
17
|
+
readonly projectId: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class CreateProjectDto implements CreateProjectDtoType {
|
|
20
|
+
readonly name: string;
|
|
21
|
+
readonly specification: string | null;
|
|
22
|
+
readonly start_date?: Date | null;
|
|
23
|
+
readonly end_date?: Date | null;
|
|
24
|
+
readonly has_budget: boolean;
|
|
25
|
+
readonly status_id?: string | null;
|
|
26
|
+
readonly client_id?: string | null;
|
|
27
|
+
readonly manager_id?: string | null;
|
|
28
|
+
}
|
|
29
|
+
export declare class UpdateProjectDto implements UpdateProjectDtoType {
|
|
30
|
+
readonly name: string;
|
|
31
|
+
readonly specification?: string | null;
|
|
32
|
+
readonly start_date?: Date | null;
|
|
33
|
+
readonly end_date?: Date | null;
|
|
34
|
+
readonly has_budget: boolean;
|
|
35
|
+
readonly status_id?: string | null;
|
|
36
|
+
readonly client_id?: string | null;
|
|
37
|
+
readonly manager_id?: string | null;
|
|
38
|
+
}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UpdateProjectDto = exports.CreateProjectDto = exports.ProjectIdDto = exports.GetProjectsDto = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
const transforms_1 = require("../transforms");
|
|
16
|
+
const validators_1 = require("../validators");
|
|
17
|
+
// class-validator versions of the shared DTO types from @managemint-solutions/entities, so the
|
|
18
|
+
// wire contract cannot drift.
|
|
19
|
+
// `status_id_in` is omitted from the implemented type on purpose: the entities type carries the
|
|
20
|
+
// CSV wire value (`string | null`), while this class carries the `@Transform`-parsed
|
|
21
|
+
// `string[] | null` the query builder feeds to `.in('status_id', ...)`.
|
|
22
|
+
class GetProjectsDto {
|
|
23
|
+
search;
|
|
24
|
+
page = 1;
|
|
25
|
+
page_size = 10;
|
|
26
|
+
created_after;
|
|
27
|
+
created_before;
|
|
28
|
+
start_date_after;
|
|
29
|
+
start_date_before;
|
|
30
|
+
end_date_after;
|
|
31
|
+
end_date_before;
|
|
32
|
+
status_id_in;
|
|
33
|
+
client_id;
|
|
34
|
+
archive = false;
|
|
35
|
+
}
|
|
36
|
+
exports.GetProjectsDto = GetProjectsDto;
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, class_validator_1.IsOptional)(),
|
|
39
|
+
(0, validators_1.IsNullable)(),
|
|
40
|
+
(0, class_validator_1.IsString)({ message: 'Search query must be a string' }),
|
|
41
|
+
(0, class_validator_1.MinLength)(1, { message: 'Search query cannot be empty' }),
|
|
42
|
+
__metadata("design:type", Object)
|
|
43
|
+
], GetProjectsDto.prototype, "search", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, class_validator_1.IsOptional)(),
|
|
46
|
+
(0, class_transformer_1.Transform)(({ value }) => value ? Number(value) : 1, { toClassOnly: true }),
|
|
47
|
+
(0, class_validator_1.IsNumber)({}, { message: 'Page must be a number' }),
|
|
48
|
+
(0, class_validator_1.Min)(1, { message: 'Page must be at least 1' }),
|
|
49
|
+
__metadata("design:type", Number)
|
|
50
|
+
], GetProjectsDto.prototype, "page", void 0);
|
|
51
|
+
__decorate([
|
|
52
|
+
(0, class_validator_1.IsOptional)(),
|
|
53
|
+
(0, class_transformer_1.Transform)(({ value }) => value ? Number(value) : 10, { toClassOnly: true }),
|
|
54
|
+
(0, class_validator_1.IsNumber)({}, { message: 'Page size must be a number' }),
|
|
55
|
+
(0, class_validator_1.Min)(1, { message: 'Page size must be at least 1' }),
|
|
56
|
+
(0, class_validator_1.Max)(100, { message: 'Page size cannot exceed 100' }),
|
|
57
|
+
__metadata("design:type", Number)
|
|
58
|
+
], GetProjectsDto.prototype, "page_size", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, class_validator_1.IsOptional)(),
|
|
61
|
+
(0, validators_1.IsNullable)(),
|
|
62
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Start date must be a valid ISO 8601 date string' }),
|
|
63
|
+
__metadata("design:type", Object)
|
|
64
|
+
], GetProjectsDto.prototype, "created_after", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, class_validator_1.IsOptional)(),
|
|
67
|
+
(0, validators_1.IsNullable)(),
|
|
68
|
+
(0, class_validator_1.IsDateString)({}, { message: 'End date must be a valid ISO 8601 date string' }),
|
|
69
|
+
__metadata("design:type", Object)
|
|
70
|
+
], GetProjectsDto.prototype, "created_before", void 0);
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, class_validator_1.IsOptional)(),
|
|
73
|
+
(0, validators_1.IsNullable)(),
|
|
74
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Start date must be a valid ISO 8601 date string' }),
|
|
75
|
+
__metadata("design:type", Object)
|
|
76
|
+
], GetProjectsDto.prototype, "start_date_after", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, class_validator_1.IsOptional)(),
|
|
79
|
+
(0, validators_1.IsNullable)(),
|
|
80
|
+
(0, class_validator_1.IsDateString)({}, { message: 'End date must be a valid ISO 8601 date string' }),
|
|
81
|
+
__metadata("design:type", Object)
|
|
82
|
+
], GetProjectsDto.prototype, "start_date_before", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
(0, class_validator_1.IsOptional)(),
|
|
85
|
+
(0, validators_1.IsNullable)(),
|
|
86
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Start date must be a valid ISO 8601 date string' }),
|
|
87
|
+
__metadata("design:type", Object)
|
|
88
|
+
], GetProjectsDto.prototype, "end_date_after", void 0);
|
|
89
|
+
__decorate([
|
|
90
|
+
(0, class_validator_1.IsOptional)(),
|
|
91
|
+
(0, validators_1.IsNullable)(),
|
|
92
|
+
(0, class_validator_1.IsDateString)({}, { message: 'End date must be a valid ISO 8601 date string' }),
|
|
93
|
+
__metadata("design:type", Object)
|
|
94
|
+
], GetProjectsDto.prototype, "end_date_before", void 0);
|
|
95
|
+
__decorate([
|
|
96
|
+
(0, class_validator_1.IsOptional)(),
|
|
97
|
+
(0, validators_1.IsNullable)(),
|
|
98
|
+
(0, class_transformer_1.Transform)(({ value }) => value ? value.split(',').map((id) => id.trim()) : null, { toClassOnly: true }),
|
|
99
|
+
(0, class_validator_1.IsUUID)('4', { each: true, message: 'Each status ID must be a valid UUID v4' }),
|
|
100
|
+
__metadata("design:type", Object)
|
|
101
|
+
], GetProjectsDto.prototype, "status_id_in", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
(0, class_validator_1.IsOptional)(),
|
|
104
|
+
(0, validators_1.IsNullable)(),
|
|
105
|
+
(0, class_transformer_1.Transform)(({ value }) => (0, transforms_1.parseEntityIdFilter)(value), { toClassOnly: true }),
|
|
106
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Each client ID must be a valid UUID v4' }),
|
|
107
|
+
__metadata("design:type", Object)
|
|
108
|
+
], GetProjectsDto.prototype, "client_id", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, class_validator_1.IsOptional)(),
|
|
111
|
+
(0, validators_1.IsNullable)(),
|
|
112
|
+
(0, class_transformer_1.Transform)(({ value }) => value ? value === 'true' : false, { toClassOnly: true }),
|
|
113
|
+
(0, class_validator_1.IsBoolean)({ message: 'Include archived must be a boolean' }),
|
|
114
|
+
__metadata("design:type", Boolean)
|
|
115
|
+
], GetProjectsDto.prototype, "archive", void 0);
|
|
116
|
+
class ProjectIdDto {
|
|
117
|
+
projectId;
|
|
118
|
+
}
|
|
119
|
+
exports.ProjectIdDto = ProjectIdDto;
|
|
120
|
+
__decorate([
|
|
121
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid project ID format' }),
|
|
122
|
+
__metadata("design:type", String)
|
|
123
|
+
], ProjectIdDto.prototype, "projectId", void 0);
|
|
124
|
+
class CreateProjectDto {
|
|
125
|
+
name;
|
|
126
|
+
specification;
|
|
127
|
+
start_date;
|
|
128
|
+
end_date;
|
|
129
|
+
has_budget;
|
|
130
|
+
status_id;
|
|
131
|
+
client_id;
|
|
132
|
+
manager_id;
|
|
133
|
+
}
|
|
134
|
+
exports.CreateProjectDto = CreateProjectDto;
|
|
135
|
+
__decorate([
|
|
136
|
+
(0, class_validator_1.IsString)({ message: 'Invalid name' }),
|
|
137
|
+
(0, class_validator_1.MinLength)(1, { message: 'Name cannot be empty' }),
|
|
138
|
+
(0, class_validator_1.MaxLength)(100, { message: 'Name cannot exceed 100 characters' }),
|
|
139
|
+
__metadata("design:type", String)
|
|
140
|
+
], CreateProjectDto.prototype, "name", void 0);
|
|
141
|
+
__decorate([
|
|
142
|
+
(0, class_validator_1.IsOptional)(),
|
|
143
|
+
(0, validators_1.IsNullable)(),
|
|
144
|
+
(0, class_validator_1.IsString)({ message: 'Invalid specification' }),
|
|
145
|
+
__metadata("design:type", Object)
|
|
146
|
+
], CreateProjectDto.prototype, "specification", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
(0, class_validator_1.IsOptional)(),
|
|
149
|
+
(0, validators_1.IsNullable)(),
|
|
150
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Invalid start date' }),
|
|
151
|
+
__metadata("design:type", Object)
|
|
152
|
+
], CreateProjectDto.prototype, "start_date", void 0);
|
|
153
|
+
__decorate([
|
|
154
|
+
(0, class_validator_1.IsOptional)(),
|
|
155
|
+
(0, validators_1.IsNullable)(),
|
|
156
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Invalid end date' }),
|
|
157
|
+
__metadata("design:type", Object)
|
|
158
|
+
], CreateProjectDto.prototype, "end_date", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
(0, class_validator_1.IsBoolean)({ message: 'Has budget must be a boolean' }),
|
|
161
|
+
__metadata("design:type", Boolean)
|
|
162
|
+
], CreateProjectDto.prototype, "has_budget", void 0);
|
|
163
|
+
__decorate([
|
|
164
|
+
(0, class_validator_1.IsOptional)(),
|
|
165
|
+
(0, validators_1.IsNullable)(),
|
|
166
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid status ID format' }),
|
|
167
|
+
__metadata("design:type", Object)
|
|
168
|
+
], CreateProjectDto.prototype, "status_id", void 0);
|
|
169
|
+
__decorate([
|
|
170
|
+
(0, class_validator_1.IsOptional)(),
|
|
171
|
+
(0, validators_1.IsNullable)(),
|
|
172
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid client ID format' }),
|
|
173
|
+
__metadata("design:type", Object)
|
|
174
|
+
], CreateProjectDto.prototype, "client_id", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
(0, class_validator_1.IsOptional)(),
|
|
177
|
+
(0, validators_1.IsNullable)(),
|
|
178
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid manager ID format' }),
|
|
179
|
+
__metadata("design:type", Object)
|
|
180
|
+
], CreateProjectDto.prototype, "manager_id", void 0);
|
|
181
|
+
class UpdateProjectDto {
|
|
182
|
+
name;
|
|
183
|
+
specification;
|
|
184
|
+
start_date;
|
|
185
|
+
end_date;
|
|
186
|
+
has_budget;
|
|
187
|
+
status_id;
|
|
188
|
+
client_id;
|
|
189
|
+
manager_id;
|
|
190
|
+
}
|
|
191
|
+
exports.UpdateProjectDto = UpdateProjectDto;
|
|
192
|
+
__decorate([
|
|
193
|
+
(0, class_validator_1.IsString)({ message: 'Invalid name' }),
|
|
194
|
+
(0, class_validator_1.MinLength)(1, { message: 'Name cannot be empty' }),
|
|
195
|
+
(0, class_validator_1.MaxLength)(100, { message: 'Name cannot exceed 100 characters' }),
|
|
196
|
+
__metadata("design:type", String)
|
|
197
|
+
], UpdateProjectDto.prototype, "name", void 0);
|
|
198
|
+
__decorate([
|
|
199
|
+
(0, class_validator_1.IsOptional)(),
|
|
200
|
+
(0, validators_1.IsNullable)(),
|
|
201
|
+
(0, class_validator_1.IsString)({ message: 'Invalid specification' }),
|
|
202
|
+
__metadata("design:type", Object)
|
|
203
|
+
], UpdateProjectDto.prototype, "specification", void 0);
|
|
204
|
+
__decorate([
|
|
205
|
+
(0, class_validator_1.IsOptional)(),
|
|
206
|
+
(0, validators_1.IsNullable)(),
|
|
207
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Invalid start date' }),
|
|
208
|
+
__metadata("design:type", Object)
|
|
209
|
+
], UpdateProjectDto.prototype, "start_date", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
(0, class_validator_1.IsOptional)(),
|
|
212
|
+
(0, validators_1.IsNullable)(),
|
|
213
|
+
(0, class_validator_1.IsDateString)({}, { message: 'Invalid end date' }),
|
|
214
|
+
__metadata("design:type", Object)
|
|
215
|
+
], UpdateProjectDto.prototype, "end_date", void 0);
|
|
216
|
+
__decorate([
|
|
217
|
+
(0, class_validator_1.IsBoolean)({ message: 'Has budget must be a boolean' }),
|
|
218
|
+
__metadata("design:type", Boolean)
|
|
219
|
+
], UpdateProjectDto.prototype, "has_budget", void 0);
|
|
220
|
+
__decorate([
|
|
221
|
+
(0, class_validator_1.IsOptional)(),
|
|
222
|
+
(0, validators_1.IsNullable)(),
|
|
223
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid status ID format' }),
|
|
224
|
+
__metadata("design:type", Object)
|
|
225
|
+
], UpdateProjectDto.prototype, "status_id", void 0);
|
|
226
|
+
__decorate([
|
|
227
|
+
(0, class_validator_1.IsOptional)(),
|
|
228
|
+
(0, validators_1.IsNullable)(),
|
|
229
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid client ID format' }),
|
|
230
|
+
__metadata("design:type", Object)
|
|
231
|
+
], UpdateProjectDto.prototype, "client_id", void 0);
|
|
232
|
+
__decorate([
|
|
233
|
+
(0, class_validator_1.IsOptional)(),
|
|
234
|
+
(0, validators_1.IsNullable)(),
|
|
235
|
+
(0, class_validator_1.IsUUID)('4', { message: 'Invalid manager ID format' }),
|
|
236
|
+
__metadata("design:type", Object)
|
|
237
|
+
], UpdateProjectDto.prototype, "manager_id", void 0);
|
|
238
|
+
//# sourceMappingURL=dto.js.map
|