@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.
Files changed (54) hide show
  1. package/README.md +102 -6
  2. package/dist/additional-details/dto.d.ts +2 -5
  3. package/dist/additional-details/dto.js +2 -0
  4. package/dist/additional-details/dto.js.map +1 -1
  5. package/dist/additional-details/index.js +5 -6
  6. package/dist/additional-details/index.js.map +1 -1
  7. package/dist/additional-details/values.d.ts +2 -2
  8. package/dist/additional-details/values.js +2 -2
  9. package/dist/client.d.ts +7 -2
  10. package/dist/client.js +9 -0
  11. package/dist/client.js.map +1 -1
  12. package/dist/clients/dto.d.ts +30 -0
  13. package/dist/clients/dto.js +181 -0
  14. package/dist/clients/dto.js.map +1 -0
  15. package/dist/clients/index.d.ts +20 -0
  16. package/dist/clients/index.js +266 -0
  17. package/dist/clients/index.js.map +1 -0
  18. package/dist/index.d.ts +5 -1
  19. package/dist/index.js +5 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/notes/dto.d.ts +1 -4
  22. package/dist/notes/dto.js +2 -0
  23. package/dist/notes/dto.js.map +1 -1
  24. package/dist/notes/index.js +3 -5
  25. package/dist/notes/index.js.map +1 -1
  26. package/dist/projects/dto.d.ts +38 -0
  27. package/dist/projects/dto.js +238 -0
  28. package/dist/projects/dto.js.map +1 -0
  29. package/dist/projects/index.d.ts +20 -0
  30. package/dist/projects/index.js +299 -0
  31. package/dist/projects/index.js.map +1 -0
  32. package/dist/statuses/dto.d.ts +2 -5
  33. package/dist/statuses/dto.js +2 -0
  34. package/dist/statuses/dto.js.map +1 -1
  35. package/dist/statuses/index.js +3 -4
  36. package/dist/statuses/index.js.map +1 -1
  37. package/dist/supporting-files/index.js +3 -3
  38. package/dist/supporting-files/index.js.map +1 -1
  39. package/dist/tasks/dto.d.ts +43 -0
  40. package/dist/tasks/dto.js +288 -0
  41. package/dist/tasks/dto.js.map +1 -0
  42. package/dist/tasks/index.d.ts +20 -0
  43. package/dist/tasks/index.js +241 -0
  44. package/dist/tasks/index.js.map +1 -0
  45. package/dist/transforms.d.ts +14 -0
  46. package/dist/transforms.js +38 -0
  47. package/dist/transforms.js.map +1 -0
  48. package/dist/validators.d.ts +2 -0
  49. package/dist/validators.js +8 -0
  50. package/dist/validators.js.map +1 -0
  51. package/package.json +1 -1
  52. package/dist/database.types.d.ts +0 -2570
  53. package/dist/database.types.js +0 -12
  54. 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 type { Database, Tables, TablesInsert, TablesUpdate, Json } from './database.types';
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"}
@@ -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, NotesInsertColumns {
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dto.js","sourceRoot":"","sources":["../../src/notes/dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAiF;AAMjF,oEAA6E;AAQ7E,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"}
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"}
@@ -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 query is typed by the generated Database schema (so the select string and the insert/update
21
- // payloads are checked); the public contract is the shared NoteEntity from
22
- // @managemint-solutions/entities. The two shapes legitimately differ, hence `as unknown as`: the
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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notes/index.ts"],"names":[],"mappings":"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"}
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