@dakkitor/api-contracts 1.1.0 → 1.1.2

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.
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clientContactsContract = exports.FilterClientContactSchema = exports.UpdateClientContactSchema = exports.CreateClientContactBodySchema = exports.CreateClientContactSchema = exports.ClientContactSchema = void 0;
4
+ const core_1 = require("@ts-rest/core");
5
+ const zod_1 = require("zod");
6
+ const clients_contract_1 = require("../clients/clients.contract");
7
+ const error_schemas_1 = require("../common/error-schemas");
8
+ const pagination_schema_1 = require("../common/pagination.schema");
9
+ // Enums
10
+ const SortOrderSchema = zod_1.z.enum(['ASC', 'DESC']);
11
+ const ClientContactSortableFieldsSchema = zod_1.z.enum([
12
+ 'name',
13
+ 'position',
14
+ 'email',
15
+ 'createdAt',
16
+ 'updatedAt',
17
+ ]);
18
+ // Shared Schemas
19
+ const ResourceIdSchema = zod_1.z.object({
20
+ id: zod_1.z.uuid(),
21
+ });
22
+ // User Schema (duplicated from clients for now to avoid export issues, ideally should be in common)
23
+ const UserSchema = zod_1.z.object({
24
+ id: zod_1.z.uuid(),
25
+ firstName: zod_1.z.string(),
26
+ lastName: zod_1.z.string(),
27
+ email: zod_1.z.email(),
28
+ });
29
+ exports.ClientContactSchema = zod_1.z.object({
30
+ id: zod_1.z.uuid().describe('Contact ID'),
31
+ clientId: zod_1.z.uuid().describe('Client ID'),
32
+ client: clients_contract_1.ClientSchema.describe('Client Details'),
33
+ name: zod_1.z.string().describe('Contact Name'),
34
+ position: zod_1.z.string().optional().describe('Job Position'),
35
+ phone: zod_1.z.string().describe('Phone Number'),
36
+ email: zod_1.z.email().describe('Email Address'),
37
+ source: zod_1.z.string().optional().describe('Source'),
38
+ createdBy: UserSchema.describe('Created By'),
39
+ createdAt: zod_1.z.coerce.date().describe('Creation Date'),
40
+ updatedAt: zod_1.z.coerce.date().describe('Last Update Date'),
41
+ version: zod_1.z.number().describe('Version Number'),
42
+ });
43
+ exports.CreateClientContactSchema = zod_1.z.object({
44
+ client: ResourceIdSchema.describe('Client ID'),
45
+ name: zod_1.z.string().max(255).describe('Full Name'),
46
+ position: zod_1.z.string().max(255).optional().describe('Job Position'),
47
+ phone: zod_1.z.string().max(50).describe('Phone Number'),
48
+ email: zod_1.z.email().max(255).describe('Email Address'),
49
+ source: zod_1.z.string().max(255).optional().describe('Source'),
50
+ });
51
+ exports.CreateClientContactBodySchema = exports.CreateClientContactSchema.omit({
52
+ client: true,
53
+ });
54
+ exports.UpdateClientContactSchema = exports.CreateClientContactSchema.partial()
55
+ .extend({
56
+ version: zod_1.z.number().int().describe('Version for optimistic locking'),
57
+ })
58
+ .omit({ client: true }); // client cannot be updated via this endpoint usually
59
+ exports.FilterClientContactSchema = zod_1.z.object({
60
+ page: zod_1.z.coerce.number().default(1).describe('Page number'),
61
+ limit: zod_1.z.coerce.number().default(50).describe('Results per page'),
62
+ name: zod_1.z.string().optional().describe('Filter by name'),
63
+ email: zod_1.z.string().optional().describe('Filter by email'),
64
+ phone: zod_1.z.string().optional().describe('Filter by phone'),
65
+ clientId: zod_1.z.uuid().optional().describe('Search client'),
66
+ createdById: zod_1.z.uuid().optional().describe('Search by creator'),
67
+ sortBy: ClientContactSortableFieldsSchema.default('createdAt').describe('Sort field'),
68
+ sortOrder: SortOrderSchema.default('DESC').describe('Sort order'),
69
+ });
70
+ const c = (0, core_1.initContract)();
71
+ const clientContactsContractConfig = {
72
+ create: {
73
+ method: 'POST',
74
+ path: '/v2/client-contacts',
75
+ responses: {
76
+ 201: exports.ClientContactSchema,
77
+ 400: error_schemas_1.ErrorResponseSchema,
78
+ 401: error_schemas_1.ErrorResponseSchema,
79
+ 403: error_schemas_1.ErrorResponseSchema,
80
+ 409: error_schemas_1.ErrorResponseSchema,
81
+ 500: error_schemas_1.ErrorResponseSchema,
82
+ },
83
+ body: exports.CreateClientContactSchema,
84
+ summary: 'Create a new client contact',
85
+ },
86
+ createByClientId: {
87
+ method: 'POST',
88
+ path: '/v2/client-contacts/client/:clientId',
89
+ responses: {
90
+ 201: exports.ClientContactSchema,
91
+ 400: error_schemas_1.ErrorResponseSchema,
92
+ 401: error_schemas_1.ErrorResponseSchema,
93
+ 403: error_schemas_1.ErrorResponseSchema,
94
+ 409: error_schemas_1.ErrorResponseSchema,
95
+ 500: error_schemas_1.ErrorResponseSchema,
96
+ },
97
+ pathParams: zod_1.z.object({
98
+ clientId: zod_1.z.uuid(),
99
+ }),
100
+ body: exports.CreateClientContactBodySchema,
101
+ summary: 'Create a new contact for a specific client',
102
+ },
103
+ findAll: {
104
+ method: 'GET',
105
+ path: '/v2/client-contacts',
106
+ responses: {
107
+ 200: (0, pagination_schema_1.createPaginatedResponseSchema)(exports.ClientContactSchema),
108
+ 400: error_schemas_1.ErrorResponseSchema,
109
+ 401: error_schemas_1.ErrorResponseSchema,
110
+ 403: error_schemas_1.ErrorResponseSchema,
111
+ 500: error_schemas_1.ErrorResponseSchema,
112
+ },
113
+ query: exports.FilterClientContactSchema,
114
+ summary: 'Get all client contacts',
115
+ },
116
+ findOne: {
117
+ method: 'GET',
118
+ path: '/v2/client-contacts/:contactId',
119
+ responses: {
120
+ 200: exports.ClientContactSchema,
121
+ 400: error_schemas_1.ErrorResponseSchema,
122
+ 401: error_schemas_1.ErrorResponseSchema,
123
+ 403: error_schemas_1.ErrorResponseSchema,
124
+ 404: error_schemas_1.ErrorResponseSchema,
125
+ 500: error_schemas_1.ErrorResponseSchema,
126
+ },
127
+ pathParams: zod_1.z.object({
128
+ contactId: zod_1.z.uuid(),
129
+ }),
130
+ summary: 'Get a client contact by ID',
131
+ },
132
+ update: {
133
+ method: 'PATCH',
134
+ path: '/v2/client-contacts/:contactId',
135
+ responses: {
136
+ 200: exports.ClientContactSchema,
137
+ 400: error_schemas_1.ErrorResponseSchema,
138
+ 401: error_schemas_1.ErrorResponseSchema,
139
+ 403: error_schemas_1.ErrorResponseSchema,
140
+ 404: error_schemas_1.ErrorResponseSchema,
141
+ 409: error_schemas_1.ErrorResponseSchema,
142
+ 500: error_schemas_1.ErrorResponseSchema,
143
+ },
144
+ pathParams: zod_1.z.object({
145
+ contactId: zod_1.z.uuid(),
146
+ }),
147
+ body: exports.UpdateClientContactSchema,
148
+ summary: 'Update a client contact',
149
+ },
150
+ remove: {
151
+ method: 'DELETE',
152
+ path: '/v2/client-contacts/:contactId',
153
+ responses: {
154
+ 204: c.noBody(),
155
+ 400: error_schemas_1.ErrorResponseSchema,
156
+ 401: error_schemas_1.ErrorResponseSchema,
157
+ 403: error_schemas_1.ErrorResponseSchema,
158
+ 404: error_schemas_1.ErrorResponseSchema,
159
+ 500: error_schemas_1.ErrorResponseSchema,
160
+ },
161
+ pathParams: zod_1.z.object({
162
+ contactId: zod_1.z.uuid(),
163
+ }),
164
+ body: c.noBody(),
165
+ summary: 'Delete a client contact',
166
+ },
167
+ };
168
+ const clientContactsContractRouter = c.router(clientContactsContractConfig);
169
+ exports.clientContactsContract = clientContactsContractRouter;