@floristcloud/api-lib 1.2.95 → 1.2.97
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/build/commands/account-deletion-request/initiate-public-account-deletion.command.js +2 -0
- package/build/commands/action-log/get-action-log-list-for-client.query.js +1 -1
- package/build/commands/action-log/get-action-log-list.query.js +1 -1
- package/build/commands/auth/list-mobile-buyer-tenants.command.js +2 -2
- package/build/commands/auth/reset-password-by-token.command.js +1 -1
- package/build/commands/bank-payment/get-bank-payment-list.query.js +1 -1
- package/build/commands/consignment/execute-consignment-product-update.command.js +2 -2
- package/build/commands/consignment/get-consignment-list.query.js +1 -1
- package/build/commands/discount-rules/remove-consignment-discount.command.js +1 -1
- package/build/commands/discount-rules/set-consignment-discount.command.js +1 -1
- package/build/commands/employee-schedule/get-employee-schedule-list.query.js +1 -1
- package/build/commands/order/get-order-list.query.js +2 -1
- package/build/commands/order/group/merge-orders.command.js +1 -1
- package/build/commands/order/webshop/get-order-list-for-client.query.js +3 -3
- package/build/commands/order-product/group/price-correction-analyze.command.js +1 -1
- package/build/commands/order-product/webshop/create-order-product-for-client.command.js +1 -1
- package/build/commands/pre-order/group/analyze-copy-pre-orders.command.js +1 -1
- package/build/commands/pre-order/group/analyze-create-pre-orders-from-standing-orders.command.js +1 -1
- package/build/commands/pre-order/group/group-copy-pre-orders-to-collection.command.js +3 -2
- package/build/commands/pre-order/group/group-create-pre-orders-from-standing-orders.command.js +1 -1
- package/build/commands/pre-order-collection-item/execute-pre-order-collection-item-update.command.js +2 -2
- package/build/commands/product/group/delete-group-product.command.js +2 -3
- package/build/commands/product/group/update-group-product-update-batch.command.js +2 -2
- package/build/commands/report/export-client-statement.query.js +1 -1
- package/build/commands/report/export-inventory-movement.query.js +1 -1
- package/build/commands/report/export-inventory-turnover.query.js +1 -1
- package/build/commands/report/export-sales-by-client.query.js +2 -2
- package/build/commands/report/export-sales-by-position.query.js +2 -2
- package/build/commands/report/export-sales-revenue.query.js +1 -1
- package/build/commands/report/get-daily-orders-summary.query.js +2 -2
- package/build/commands/report/get-report-by-client-weeks.query.js +1 -1
- package/build/commands/report/get-report-for-period.query.js +1 -1
- package/build/commands/report/get-report-group-by-client.query.js +1 -1
- package/build/commands/report/get-report-group-by-position.query.js +1 -1
- package/build/commands/report/get-sales-summary.query.js +1 -1
- package/build/commands/transaction/export-transactions.command.js +1 -1
- package/build/commands/transaction/get-sum-transaction-by-money-account.query.js +1 -1
- package/build/commands/transaction/get-transaction-list.query.js +1 -1
- package/build/commands/transaction/get-transaction-summary.query.js +1 -1
- package/build/commands/transaction/webshop/get-transaction-list-for-client.query.js +1 -1
- package/build/commands/user/createUser.command.js +2 -0
- package/build/commands/user/createUserByClientId.command.js +3 -1
- package/build/commands/user/createUserForCompany.command.js +3 -1
- package/build/commands/work-session/export-overtime.query.js +1 -1
- package/build/commands/write-off/create-write-off-from-pending.command.js +1 -1
- package/build/commands/write-off/get-write-off-list.query.js +1 -1
- package/build/commands/write-off/update-write-off-status.command.js +1 -1
- package/build/constant/error-i18n-key.js +43 -0
- package/build/constant/error.js +115 -14
- package/build/constant/index.js +2 -0
- package/build/constant/validation-i18n-key.js +39 -0
- package/build/constant/validation-i18n-message.js +47 -0
- package/build/constant/verbose.js +11 -10
- package/build/schemas/api-error.schema.js +32 -0
- package/build/schemas/consignment-transfer/accept-consignment-transfer.schema.js +1 -1
- package/build/schemas/index.js +1 -0
- package/build/schemas/order-service-line/order-service-line.schema.js +1 -1
- package/build/schemas/pre-order/pre-order-copy.schema.js +2 -1
- package/build/schemas/settings/settings.schema.js +2 -0
- package/commands/account-deletion-request/initiate-public-account-deletion.command.ts +2 -0
- package/commands/action-log/get-action-log-list-for-client.query.ts +1 -1
- package/commands/action-log/get-action-log-list.query.ts +1 -1
- package/commands/auth/list-mobile-buyer-tenants.command.ts +2 -2
- package/commands/auth/reset-password-by-token.command.ts +1 -1
- package/commands/bank-payment/get-bank-payment-list.query.ts +1 -1
- package/commands/consignment/execute-consignment-product-update.command.ts +2 -2
- package/commands/consignment/get-consignment-list.query.ts +1 -1
- package/commands/discount-rules/remove-consignment-discount.command.ts +1 -1
- package/commands/discount-rules/set-consignment-discount.command.ts +1 -1
- package/commands/employee-schedule/get-employee-schedule-list.query.ts +1 -1
- package/commands/order/get-order-list.query.ts +2 -1
- package/commands/order/group/merge-orders.command.ts +1 -1
- package/commands/order/webshop/get-order-list-for-client.query.ts +3 -3
- package/commands/order-product/group/price-correction-analyze.command.ts +1 -1
- package/commands/order-product/webshop/create-order-product-for-client.command.ts +1 -1
- package/commands/pre-order/group/analyze-copy-pre-orders.command.ts +2 -2
- package/commands/pre-order/group/analyze-create-pre-orders-from-standing-orders.command.ts +2 -1
- package/commands/pre-order/group/group-copy-pre-orders-to-collection.command.ts +3 -2
- package/commands/pre-order/group/group-create-pre-orders-from-standing-orders.command.ts +2 -2
- package/commands/pre-order-collection-item/execute-pre-order-collection-item-update.command.ts +2 -2
- package/commands/product/group/delete-group-product.command.ts +4 -5
- package/commands/product/group/update-group-product-update-batch.command.ts +2 -2
- package/commands/report/export-client-statement.query.ts +1 -1
- package/commands/report/export-inventory-movement.query.ts +1 -1
- package/commands/report/export-inventory-turnover.query.ts +1 -1
- package/commands/report/export-sales-by-client.query.ts +2 -2
- package/commands/report/export-sales-by-position.query.ts +2 -2
- package/commands/report/export-sales-revenue.query.ts +1 -1
- package/commands/report/get-daily-orders-summary.query.ts +2 -2
- package/commands/report/get-report-by-client-weeks.query.ts +1 -1
- package/commands/report/get-report-for-period.query.ts +1 -1
- package/commands/report/get-report-group-by-client.query.ts +1 -1
- package/commands/report/get-report-group-by-position.query.ts +3 -3
- package/commands/report/get-sales-summary.query.ts +1 -1
- package/commands/transaction/export-transactions.command.ts +1 -1
- package/commands/transaction/get-sum-transaction-by-money-account.query.ts +1 -1
- package/commands/transaction/get-transaction-list.query.ts +1 -1
- package/commands/transaction/get-transaction-summary.query.ts +1 -1
- package/commands/transaction/webshop/get-transaction-list-for-client.query.ts +1 -1
- package/commands/user/createUser.command.ts +2 -0
- package/commands/user/createUserByClientId.command.ts +3 -1
- package/commands/user/createUserForCompany.command.ts +3 -1
- package/commands/work-session/export-overtime.query.ts +4 -7
- package/commands/write-off/create-write-off-from-pending.command.ts +1 -1
- package/commands/write-off/get-write-off-list.query.ts +1 -1
- package/commands/write-off/update-write-off-status.command.ts +1 -1
- package/constant/error-i18n-key.ts +53 -0
- package/constant/error.ts +118 -14
- package/constant/index.ts +2 -0
- package/constant/validation-i18n-key.ts +38 -0
- package/constant/validation-i18n-message.ts +46 -0
- package/constant/verbose.ts +11 -10
- package/package.json +1 -1
- package/schemas/api-error.schema.ts +34 -0
- package/schemas/consignment-transfer/accept-consignment-transfer.schema.ts +1 -1
- package/schemas/index.ts +1 -0
- package/schemas/order-service-line/order-service-line.schema.ts +1 -1
- package/schemas/pre-order/pre-order-copy.schema.ts +2 -1
- package/schemas/settings/settings.schema.ts +2 -0
|
@@ -29,4 +29,47 @@ exports.ErrorI18nKey = {
|
|
|
29
29
|
preOrderCollectionItemImportInvalidFileFormat: 'preOrderCollectionItemImport.invalidFileFormat',
|
|
30
30
|
preOrderCollectionItemImportMissingRequiredColumns: 'preOrderCollectionItemImport.missingRequiredColumns',
|
|
31
31
|
preOrderCollectionItemImportFailed: 'preOrderCollectionItemImport.failed',
|
|
32
|
+
// Bulk / group operations
|
|
33
|
+
bulkBatchTooLarge: 'bulk.batchTooLarge',
|
|
34
|
+
bulkProductNotFound: 'bulk.productNotFound',
|
|
35
|
+
bulkProductNotInConsignment: 'bulk.productNotInConsignment',
|
|
36
|
+
bulkProductUpdateFailed: 'bulk.productUpdateFailed',
|
|
37
|
+
bulkProductDeleteFailed: 'bulk.productDeleteFailed',
|
|
38
|
+
bulkProductInOrder: 'bulk.productInOrder',
|
|
39
|
+
bulkItemUpdateFailed: 'bulk.itemUpdateFailed',
|
|
40
|
+
bulkUuidNotProvided: 'bulk.uuidNotProvided',
|
|
41
|
+
// Pre-order → order conversion warnings
|
|
42
|
+
preOrderConvertProductNotFound: 'preOrderConvert.productNotFound',
|
|
43
|
+
preOrderConvertNotDistributed: 'preOrderConvert.notDistributed',
|
|
44
|
+
preOrderConvertAlreadyExists: 'preOrderConvert.alreadyExists',
|
|
45
|
+
// Category determination (import)
|
|
46
|
+
categoryNotDetermined: 'category.notDetermined',
|
|
47
|
+
// Standing-order import
|
|
48
|
+
standingOrderClientNotFound: 'standingOrderImport.clientNotFound',
|
|
49
|
+
standingOrderCategoryNotFound: 'standingOrderImport.categoryNotFound',
|
|
50
|
+
// Standing-order → pre-order conversion per-item warnings
|
|
51
|
+
soItemNotLinkedToCatalog: 'preOrderFromStandingOrder.itemNotLinkedToCatalog',
|
|
52
|
+
soItemNoMatches: 'preOrderFromStandingOrder.itemNoMatches',
|
|
53
|
+
soItemInsufficientQuantity: 'preOrderFromStandingOrder.itemInsufficientQuantity',
|
|
54
|
+
soItemPartiallyAllocated: 'preOrderFromStandingOrder.itemPartiallyAllocated',
|
|
55
|
+
soItemNotAddedInCollection: 'preOrderFromStandingOrder.itemNotAddedInCollection',
|
|
56
|
+
soProductNotCreated: 'preOrderFromStandingOrder.productNotCreated',
|
|
57
|
+
soCriticalError: 'preOrderFromStandingOrder.criticalError',
|
|
58
|
+
soNoPreOrdersCreated: 'preOrderFromStandingOrder.noPreOrdersCreated',
|
|
59
|
+
// Copy pre-order per-item warnings
|
|
60
|
+
preOrderCopyItemNoMatches: 'preOrderCopy.itemNoMatches',
|
|
61
|
+
preOrderCopyItemInsufficientQuantity: 'preOrderCopy.itemInsufficientQuantity',
|
|
62
|
+
preOrderCopySourceNotFoundOrEmpty: 'preOrderCopy.sourceNotFoundOrEmpty',
|
|
63
|
+
preOrderCopyProductCreateFailed: 'preOrderCopy.productCreateFailed',
|
|
64
|
+
// Auth
|
|
65
|
+
authTooManyFailedAttempts: 'auth.tooManyFailedAttempts',
|
|
66
|
+
// Order merge / move guards
|
|
67
|
+
mergeOrderTargetInSourceList: 'mergeOrder.targetInSourceList',
|
|
68
|
+
moveItemsSameOrder: 'moveItems.sameOrder',
|
|
69
|
+
// Invoice notification generation
|
|
70
|
+
invoiceNotificationInvalidType: 'invoiceNotification.invalidType',
|
|
71
|
+
invoiceNotificationOrderUuidMissing: 'invoiceNotification.orderUuidMissing',
|
|
72
|
+
// Neutral success
|
|
73
|
+
operationSuccess: 'common.operationSuccess',
|
|
74
|
+
accountDeletionRequestSubmitted: 'accountDeletionRequest.submitted',
|
|
32
75
|
};
|
package/build/constant/error.js
CHANGED
|
@@ -29,7 +29,7 @@ exports.ERRORS = {
|
|
|
29
29
|
NOTIFICATION_NOT_UPDATED: { code: 'N003', message: 'Failed to update Notification', httpCode: 500 },
|
|
30
30
|
NOTIFICATION_FETCH_FAILED: { code: 'N004', message: 'Error when retrieving a notification', httpCode: 500 },
|
|
31
31
|
NOTIFICATION_MAX_RETRIES_REACHED: {
|
|
32
|
-
code: '
|
|
32
|
+
code: 'N009',
|
|
33
33
|
message: 'Maximum retry attempts reached for notification',
|
|
34
34
|
httpCode: 500,
|
|
35
35
|
},
|
|
@@ -82,6 +82,8 @@ exports.ERRORS = {
|
|
|
82
82
|
SETTINGS_NOT_FOUND: { code: 'S005', message: 'Settings not found', httpCode: 404 },
|
|
83
83
|
SETTINGS_FETCH_FAILED: { code: 'S006', message: 'Error when retrieving a Settings', httpCode: 500 },
|
|
84
84
|
FORBIDDEN_API: { code: 'A011', message: 'Access denied', httpCode: 403 },
|
|
85
|
+
RESOURCE_ACCESS_DENIED: { code: 'A022', message: 'Resource does not belong to your company', httpCode: 400 },
|
|
86
|
+
RESOURCE_NOT_FOUND: { code: 'A023', message: 'Resource not found', httpCode: 404 },
|
|
85
87
|
FAILED_TO_DEFINE_ROLE: { code: 'A008', message: 'User role could not be determined', httpCode: 400 },
|
|
86
88
|
ACCOUNT_WITH_PAYLOAD_NOT_FOUND: { code: 'A016', message: 'Account not be found based on information from the token', httpCode: 404 },
|
|
87
89
|
ORIGIN_HEADER_NOT_FOUND: { code: 'H001', message: 'Origin header of the user current address was not found', httpCode: 404 },
|
|
@@ -96,12 +98,14 @@ exports.ERRORS = {
|
|
|
96
98
|
USER_UPDATE_FAILED: { code: 'U009', message: 'Failed to update user', httpCode: 400 },
|
|
97
99
|
USER_LIST_FETCH_FAILED: { code: 'U010', message: 'Failed fetching user list', httpCode: 500 },
|
|
98
100
|
USER_NO_BELONGS_COMPANY: { code: 'U011', message: 'This user does not belongs to the company ', httpCode: 403 },
|
|
99
|
-
USER_MISSING_EMAIL_OR_PHONE: { code: 'U012', message: '
|
|
101
|
+
USER_MISSING_EMAIL_OR_PHONE: { code: 'U012', message: 'Email or phone is required', httpCode: 400 },
|
|
100
102
|
USER_ROLE_MISMATCH_CLIENT: { code: 'U013', message: 'User does not have BUYER role required for client login', httpCode: 403 },
|
|
101
103
|
USER_ROLE_MISMATCH_EMPLOYEE: { code: 'U014', message: 'User does not have employee role required for employee login', httpCode: 403 },
|
|
102
104
|
USER_CANNOT_DEACTIVATE_SELF: { code: 'U015', message: 'You cannot deactivate your own account', httpCode: 400 },
|
|
103
105
|
USER_CANNOT_REMOVE_OWN_ADMIN_ROLE: { code: 'U016', message: 'You cannot remove the ADMIN role from your own account', httpCode: 400 },
|
|
104
106
|
USER_CANNOT_REMOVE_LAST_ADMIN: { code: 'U017', message: 'The company must keep at least one active administrator', httpCode: 400 },
|
|
107
|
+
USER_EMAIL_REQUIRED_FOR_NOTIFICATION: { code: 'U018', message: 'User email is required for email notification', httpCode: 400 },
|
|
108
|
+
USER_PASSWORD_GENERATION_FAILED: { code: 'U019', message: 'Failed to generate and send password', httpCode: 500 },
|
|
105
109
|
//AUTH
|
|
106
110
|
FAILED_TO_UPDATE: { code: 'A010', message: 'User update failed', httpCode: 500 },
|
|
107
111
|
RESTORE_TOKEN_ERROR: { code: 'A012', message: 'Invalid recovery token', httpCode: 500 },
|
|
@@ -136,6 +140,7 @@ exports.ERRORS = {
|
|
|
136
140
|
CLIENT_NOT_FOUND: { code: 'CL004', message: 'The client with the specified UUID was not found', httpCode: 404 },
|
|
137
141
|
CLIENT_FETCH_FAILED: { code: 'CL005', message: 'Error when retrieving a list of clients', httpCode: 500 },
|
|
138
142
|
CLIENT_ALREADY_EXIST: { code: 'CL006', message: 'Client with this properties already exist', httpCode: 409 },
|
|
143
|
+
CLIENT_ACCESS_DENIED: { code: 'CL043', message: 'You are not responsible for this client', httpCode: 403 },
|
|
139
144
|
CLIENT_EMAIL_ALREADY_EXIST: { code: 'CL007', message: 'Client with this email already exist', httpCode: 409 },
|
|
140
145
|
CLIENT_PHONE_ALREADY_EXIST: { code: 'CL008', message: 'Client with this phone already exist', httpCode: 409 },
|
|
141
146
|
CLIENT_WITH_SAME_USER_ALREADY_EXIST: { code: 'CL009', message: 'Client with same user already exist', httpCode: 409 },
|
|
@@ -155,7 +160,7 @@ exports.ERRORS = {
|
|
|
155
160
|
CLIENT_HAS_ORDERS: { code: 'CL025', message: 'Client has orders', httpCode: 400 },
|
|
156
161
|
CLIENT_IMPORT_FAILED: {
|
|
157
162
|
code: 'CL024',
|
|
158
|
-
message: '
|
|
163
|
+
message: 'Failed to import clients',
|
|
159
164
|
httpCode: 400,
|
|
160
165
|
},
|
|
161
166
|
CLIENT_FILTERS_VALUES_FETCH_FAILED: {
|
|
@@ -167,6 +172,7 @@ exports.ERRORS = {
|
|
|
167
172
|
CLIENT_MARKING_NOT_DELETED: { code: 'CL028', message: 'Client marking not deleted', httpCode: 500 },
|
|
168
173
|
CLIENT_MARKING_ALREADY_EXISTS: { code: 'CL029', message: 'Client marking already exists', httpCode: 409 },
|
|
169
174
|
CLIENT_MARKING_NOT_UPDATED: { code: 'CL030', message: 'Client marking not updated', httpCode: 500 },
|
|
175
|
+
CLIENT_MARKING_FETCH_FAILED: { code: 'CL044', message: 'Error when retrieving client marking', httpCode: 500 },
|
|
170
176
|
CLIENT_HAS_TRANSACTIONS: { code: 'CL031', message: 'Client has transactions', httpCode: 400 },
|
|
171
177
|
CLIENT_DEBT_LIST_FETCH_FAILED: { code: 'CL032', message: 'Failed to get client debt list', httpCode: 500 },
|
|
172
178
|
CLIENT_OVERDUE_STATUS_FETCH_FAILED: { code: 'CL033', message: 'Failed to get client overdue status', httpCode: 500 },
|
|
@@ -254,6 +260,12 @@ exports.ERRORS = {
|
|
|
254
260
|
CONSIGNMENT_IMPORT_TOO_MANY_ROWS: { code: 'CON024', message: 'Too many rows for this import mode', httpCode: 400 },
|
|
255
261
|
CONSIGNMENT_PRODUCT_UPDATE_SCHEMA_NOT_FOUND: { code: 'CON025', message: 'Update schema not found', httpCode: 404 },
|
|
256
262
|
CONSIGNMENT_PRODUCT_UPDATE_SCHEMA_NO_HEADERS_MATCHED: { code: 'CON026', message: 'No schema headers matched the file', httpCode: 400 },
|
|
263
|
+
CONSIGNMENT_PRODUCT_UPDATE_NOT_IN_CONSIGNMENT: {
|
|
264
|
+
code: 'CON027',
|
|
265
|
+
message: 'Product does not belong to this consignment',
|
|
266
|
+
httpCode: 400,
|
|
267
|
+
},
|
|
268
|
+
CONSIGNMENT_PRODUCT_UPDATE_ITEM_FAILED: { code: 'CON028', message: 'Product update failed', httpCode: 400 },
|
|
257
269
|
// CONSIGNMENT-IMPORT-SCHEME
|
|
258
270
|
CONSIGNMENT_IMPORT_SCHEME_NOT_CREATED: { code: 'CS001', message: 'Failed to create consignment import scheme', httpCode: 500 },
|
|
259
271
|
CONSIGNMENT_IMPORT_SCHEME_FETCH_FAILED: { code: 'CS002', message: 'Error when retrieving a consignment import scheme', httpCode: 500 },
|
|
@@ -395,6 +407,9 @@ exports.ERRORS = {
|
|
|
395
407
|
message: 'Delivery information will be transferred to the target order.',
|
|
396
408
|
httpCode: 400,
|
|
397
409
|
},
|
|
410
|
+
ORDER_MERGE_TARGET_IN_SOURCE_LIST: { code: 'O036', message: 'Target order must not be in source list', httpCode: 400 },
|
|
411
|
+
ORDER_INVOICE_NOTIFICATION_INVALID_TYPE: { code: 'O037', message: 'Invalid notification type', httpCode: 400 },
|
|
412
|
+
ORDER_INVOICE_NOTIFICATION_ORDER_UUID_MISSING: { code: 'O038', message: 'Order UUID missing in payload', httpCode: 400 },
|
|
398
413
|
//SERVICE
|
|
399
414
|
SERVICE_NOT_CREATED: { code: 'SV001', message: 'Failed to create service', httpCode: 500 },
|
|
400
415
|
SERVICE_FETCH_FAILED: { code: 'SV002', message: 'Error when retrieving a service', httpCode: 500 },
|
|
@@ -500,6 +515,11 @@ exports.ERRORS = {
|
|
|
500
515
|
message: 'Order product not found in the order',
|
|
501
516
|
httpCode: 404,
|
|
502
517
|
},
|
|
518
|
+
ORDER_PRODUCT_MOVE_SAME_ORDER: {
|
|
519
|
+
code: 'OP025',
|
|
520
|
+
message: 'Source and destination orders must differ',
|
|
521
|
+
httpCode: 400,
|
|
522
|
+
},
|
|
503
523
|
//TRANSACTION
|
|
504
524
|
TRANSACTION_NOT_CREATED: { code: 'TR001', message: 'Failed to transaction product', httpCode: 500 },
|
|
505
525
|
TRANSACTION_FETCH_FAILED: { code: 'TR002', message: 'Error when retrieving a transaction', httpCode: 500 },
|
|
@@ -514,7 +534,7 @@ exports.ERRORS = {
|
|
|
514
534
|
TRANSACTION_NOT_APPLIED: { code: 'TR011', message: 'Transaction not applied', httpCode: 500 },
|
|
515
535
|
MONEY_ACCOUNT_REQUIRED: { code: 'TR012', message: 'moneyAccountUUID is required to apply bank payment event', httpCode: 400 },
|
|
516
536
|
TRANSACTION_CREATE_FAILED: { code: 'TR013', message: 'Failed to create transaction', httpCode: 500 },
|
|
517
|
-
TRANSACTION_IMPORT_FAILED: { code: 'TR014', message: '
|
|
537
|
+
TRANSACTION_IMPORT_FAILED: { code: 'TR014', message: 'Failed to import transactions', httpCode: 400 },
|
|
518
538
|
TRANSACTION_IMPORT_TOO_MANY_ROWS: { code: 'TR015', message: 'Too many rows for transaction import', httpCode: 400 },
|
|
519
539
|
TRANSACTION_IMPORT_INVALID_FILE_FORMAT: { code: 'TR016', message: 'Invalid file format for transaction import', httpCode: 400 },
|
|
520
540
|
TRANSACTION_IMPORT_MISSING_REQUIRED_COLUMNS: {
|
|
@@ -567,6 +587,12 @@ exports.ERRORS = {
|
|
|
567
587
|
message: 'Failed to get match suggestions for bank payment event',
|
|
568
588
|
httpCode: 500,
|
|
569
589
|
},
|
|
590
|
+
// COMMON (transport-level codes the catch-all HttpExceptionFilter emits for non-business failures)
|
|
591
|
+
COMMON_NO_DATA_RETURNED: { code: 'E900', message: 'No data returned', httpCode: 500 },
|
|
592
|
+
COMMON_UNKNOWN_ERROR: { code: 'E901', message: 'Unknown error', httpCode: 500 },
|
|
593
|
+
COMMON_VALIDATION_FAILED: { code: 'E902', message: 'Validation failed', httpCode: 400 },
|
|
594
|
+
COMMON_UNAUTHORIZED: { code: 'E903', message: 'Unauthorized', httpCode: 401 },
|
|
595
|
+
COMMON_BAD_REQUEST: { code: 'E904', message: 'Bad request', httpCode: 400 },
|
|
570
596
|
// EXCEL
|
|
571
597
|
EXCEL_CREATE_FAILED: { code: 'E001', message: 'Failed to create excel', httpCode: 500 },
|
|
572
598
|
EXCEL_GET_DATA_BY_BUFFER_FAILED: { code: 'E002', message: 'Failed to get buffer', httpCode: 500 },
|
|
@@ -578,6 +604,7 @@ exports.ERRORS = {
|
|
|
578
604
|
CATEGORY_NOT_DELETED: { code: 'CA011', message: 'Failed to delete category', httpCode: 500 },
|
|
579
605
|
CATEGORY_NOT_GET_BY_UUID: { code: 'CA012', message: 'Failed to get category by uuid', httpCode: 500 },
|
|
580
606
|
CATEGORY_FETCH_FAILED: { code: 'CA013', message: 'Error when retrieving a list of categories', httpCode: 500 },
|
|
607
|
+
CATEGORY_NOT_DETERMINED: { code: 'CA019', message: 'Could not determine category for product', httpCode: 400 },
|
|
581
608
|
CATEGORY_NOT_UPDATED: { code: 'CA014', message: 'Failed to update category', httpCode: 500 },
|
|
582
609
|
CATEGORY_CREATE_MANY_FAILED: { code: 'CA015', message: 'Failed to create many categories', httpCode: 500 },
|
|
583
610
|
CATEGORY_USE_IN_PRODUCT: { code: 'CA016', message: 'Category use in product', httpCode: 500 },
|
|
@@ -615,15 +642,15 @@ exports.ERRORS = {
|
|
|
615
642
|
FILE_NOT_SUPPORTED: { code: 'F006', message: 'File not supported', httpCode: 400 },
|
|
616
643
|
FILE_TOO_LARGE: { code: 'F007', message: 'File size exceeds the allowed limit', httpCode: 413 },
|
|
617
644
|
FILE_UPLOAD_FAILED: { code: 'F008', message: 'File upload failed', httpCode: 400 },
|
|
618
|
-
FILE_S3_FORBIDDEN: { code: '
|
|
645
|
+
FILE_S3_FORBIDDEN: { code: 'F009', message: 'File S3 forbidden', httpCode: 403 },
|
|
619
646
|
//WHATSAPP
|
|
620
|
-
WHATSAPP_TEXT_NOT_SENT: { code: '
|
|
621
|
-
WHATSAPP_FILE_NOT_SENT: { code: '
|
|
622
|
-
WHATSAPP_FETCH_FAILED_NOTIFICATIONS: { code: '
|
|
623
|
-
WHATSAPP_PHONE_NOT_FOUND: { code: '
|
|
624
|
-
WHATSAPP_STATUS_CHECK_FAILED: { code: '
|
|
625
|
-
WHATSAPP_MESSAGE_NOT_FOUND: { code: '
|
|
626
|
-
WHATSAPP_CHANNEL_NOT_IN_USE: { code: '
|
|
647
|
+
WHATSAPP_TEXT_NOT_SENT: { code: 'WH001', message: 'Failed to send text message', httpCode: 500 },
|
|
648
|
+
WHATSAPP_FILE_NOT_SENT: { code: 'WH002', message: 'Failed to send file message', httpCode: 500 },
|
|
649
|
+
WHATSAPP_FETCH_FAILED_NOTIFICATIONS: { code: 'WH003', message: 'Failed to fetch notifications', httpCode: 500 },
|
|
650
|
+
WHATSAPP_PHONE_NOT_FOUND: { code: 'WH004', message: 'Phone number not found or invalid', httpCode: 400 },
|
|
651
|
+
WHATSAPP_STATUS_CHECK_FAILED: { code: 'WH005', message: 'Failed to check WhatsApp message status', httpCode: 500 },
|
|
652
|
+
WHATSAPP_MESSAGE_NOT_FOUND: { code: 'WH006', message: 'Message not found in notification', httpCode: 400 },
|
|
653
|
+
WHATSAPP_CHANNEL_NOT_IN_USE: { code: 'WH007', message: 'WhatsApp channel is not in use', httpCode: 410 },
|
|
627
654
|
//MAX MESSENGER
|
|
628
655
|
MAX_MESSENGER_TEXT_NOT_SENT: { code: 'MX001', message: 'Failed to send text message via Max Messenger', httpCode: 500 },
|
|
629
656
|
MAX_MESSENGER_FILE_NOT_SENT: { code: 'MX002', message: 'Failed to send file message via Max Messenger', httpCode: 500 },
|
|
@@ -685,7 +712,7 @@ exports.ERRORS = {
|
|
|
685
712
|
//PRE ORDER
|
|
686
713
|
PRE_ORDER_NOT_CREATED: { code: 'PO001', message: 'Failed to create pre order', httpCode: 500 },
|
|
687
714
|
PRE_ORDER_NOT_DELETED: { code: 'PO002', message: 'Failed to delete pre order', httpCode: 500 },
|
|
688
|
-
PRE_ORDER_MANY_NOT_DELETED: { code: '
|
|
715
|
+
PRE_ORDER_MANY_NOT_DELETED: { code: 'PO036', message: 'Failed to delete pre orders', httpCode: 500 },
|
|
689
716
|
PRE_ORDER_NOT_UPDATED: { code: 'PO003', message: 'Failed to update pre order', httpCode: 500 },
|
|
690
717
|
PRE_ORDER_NOT_FOUND: { code: 'PO004', message: 'The pre order with the specified UUID was not found', httpCode: 404 },
|
|
691
718
|
PRE_ORDER_FETCH_FAILED: { code: 'PO006', message: 'Error when retrieving a list of pre orders', httpCode: 500 },
|
|
@@ -744,10 +771,72 @@ exports.ERRORS = {
|
|
|
744
771
|
httpCode: 400,
|
|
745
772
|
},
|
|
746
773
|
PRE_ORDER_INVALID_COLLECTION: {
|
|
747
|
-
code: '
|
|
774
|
+
code: 'PO037',
|
|
748
775
|
message: 'Pre order invalid collection',
|
|
749
776
|
httpCode: 400,
|
|
750
777
|
},
|
|
778
|
+
// PRE ORDER — standing-order → pre-order conversion per-item warnings
|
|
779
|
+
PRE_ORDER_SO_ITEM_NOT_LINKED_TO_CATALOG: {
|
|
780
|
+
code: 'PO024',
|
|
781
|
+
message: 'Standing-order item is not linked to a STANDING_ORDER_CATALOG item; matching is impossible',
|
|
782
|
+
httpCode: 400,
|
|
783
|
+
},
|
|
784
|
+
PRE_ORDER_SO_ITEM_NO_MATCHES: {
|
|
785
|
+
code: 'PO025',
|
|
786
|
+
message: 'No matches found in the available collections for the catalog item',
|
|
787
|
+
httpCode: 400,
|
|
788
|
+
},
|
|
789
|
+
PRE_ORDER_SO_ITEM_INSUFFICIENT_QUANTITY: {
|
|
790
|
+
code: 'PO026',
|
|
791
|
+
message: 'Insufficient available quantity in collections for the catalog item; item added partially or not added',
|
|
792
|
+
httpCode: 400,
|
|
793
|
+
},
|
|
794
|
+
PRE_ORDER_SO_ITEM_PARTIALLY_ALLOCATED: {
|
|
795
|
+
code: 'PO027',
|
|
796
|
+
message: 'Not enough balance for the catalog item; part of the quantity was left unallocated',
|
|
797
|
+
httpCode: 400,
|
|
798
|
+
},
|
|
799
|
+
PRE_ORDER_SO_ITEM_NOT_ADDED_IN_COLLECTION: {
|
|
800
|
+
code: 'PO028',
|
|
801
|
+
message: 'Standing-order item was not added to the pre-order for this collection because no match was found in this collection',
|
|
802
|
+
httpCode: 400,
|
|
803
|
+
},
|
|
804
|
+
PRE_ORDER_SO_PRODUCT_NOT_CREATED: {
|
|
805
|
+
code: 'PO029',
|
|
806
|
+
message: 'Failed to create pre-order product from standing-order item',
|
|
807
|
+
httpCode: 400,
|
|
808
|
+
},
|
|
809
|
+
PRE_ORDER_SO_CRITICAL_ERROR: {
|
|
810
|
+
code: 'PO030',
|
|
811
|
+
message: 'Critical error during pre-order creation from standing order',
|
|
812
|
+
httpCode: 400,
|
|
813
|
+
},
|
|
814
|
+
PRE_ORDER_SO_NO_PRE_ORDERS_CREATED: {
|
|
815
|
+
code: 'PO031',
|
|
816
|
+
message: 'No pre-orders were created for this standing order: no matching items found in the selected collections',
|
|
817
|
+
httpCode: 400,
|
|
818
|
+
},
|
|
819
|
+
// PRE ORDER — copy pre-order per-item warnings
|
|
820
|
+
PRE_ORDER_COPY_ITEM_NO_MATCHES: {
|
|
821
|
+
code: 'PO032',
|
|
822
|
+
message: 'No matches found in the target collection for the item',
|
|
823
|
+
httpCode: 400,
|
|
824
|
+
},
|
|
825
|
+
PRE_ORDER_COPY_ITEM_INSUFFICIENT_QUANTITY: {
|
|
826
|
+
code: 'PO033',
|
|
827
|
+
message: 'Insufficient balance for the item; part of the quantity was left unallocated',
|
|
828
|
+
httpCode: 400,
|
|
829
|
+
},
|
|
830
|
+
PRE_ORDER_COPY_SOURCE_NOT_FOUND_OR_EMPTY: {
|
|
831
|
+
code: 'PO034',
|
|
832
|
+
message: 'Source pre-order not found or contains no products',
|
|
833
|
+
httpCode: 400,
|
|
834
|
+
},
|
|
835
|
+
PRE_ORDER_COPY_PRODUCT_CREATE_FAILED: {
|
|
836
|
+
code: 'PO035',
|
|
837
|
+
message: 'Failed to create product during pre-order copy',
|
|
838
|
+
httpCode: 400,
|
|
839
|
+
},
|
|
751
840
|
//PRE ORDER PRODUCT
|
|
752
841
|
PRE_ORDER_PRODUCT_NOT_CREATED: { code: 'POP001', message: 'Failed to create pre order product', httpCode: 500 },
|
|
753
842
|
PRE_ORDER_PRODUCT_NOT_DELETED: { code: 'POP002', message: 'Failed to delete pre order product', httpCode: 500 },
|
|
@@ -943,6 +1032,11 @@ exports.ERRORS = {
|
|
|
943
1032
|
message: 'Missing required columns in pre order collection item import file',
|
|
944
1033
|
httpCode: 400,
|
|
945
1034
|
},
|
|
1035
|
+
PRE_ORDER_COLLECTION_ITEM_UPDATE_BATCH_TOO_LARGE: {
|
|
1036
|
+
code: 'POCI028',
|
|
1037
|
+
message: 'Batch size too large',
|
|
1038
|
+
httpCode: 400,
|
|
1039
|
+
},
|
|
946
1040
|
// EMPLOYEE SCHEDULE
|
|
947
1041
|
EMPLOYEE_SCHEDULE_NOT_CREATED: { code: 'ES001', message: 'Failed to create employee schedule', httpCode: 500 },
|
|
948
1042
|
EMPLOYEE_SCHEDULE_NOT_DELETED: { code: 'ES002', message: 'Failed to delete employee schedule', httpCode: 500 },
|
|
@@ -1045,6 +1139,8 @@ exports.ERRORS = {
|
|
|
1045
1139
|
IMPORT_UNKNOWN_ERROR: { code: 'ID002', message: 'Unknown error', httpCode: 500 },
|
|
1046
1140
|
IMPORT_ITEMS_COUNT_LIMIT_EXCEEDED: { code: 'ID003', message: 'Items count limit exceeded', httpCode: 400 },
|
|
1047
1141
|
NOT_IMPLEMENTED: { code: 'G001', message: 'Not implemented', httpCode: 501 },
|
|
1142
|
+
// Neutral 2xx success — lets the frontend localize a success body by code instead of raw text
|
|
1143
|
+
OPERATION_SUCCESS: { code: 'OK001', message: 'Operation completed successfully', httpCode: 200 },
|
|
1048
1144
|
// SESSION
|
|
1049
1145
|
SESSION_NOT_FOUND: { code: 'SES001', message: 'Session not found', httpCode: 401 },
|
|
1050
1146
|
SESSION_REVOKED: { code: 'SES002', message: 'Session has been revoked', httpCode: 401 },
|
|
@@ -1092,6 +1188,11 @@ exports.ERRORS = {
|
|
|
1092
1188
|
PUBLIC_ACCOUNT_DELETION_INVALID_CODE: { code: 'ADR009', message: 'Invalid or expired verification code', httpCode: 400 },
|
|
1093
1189
|
PUBLIC_ACCOUNT_DELETION_INVALID_TOKEN: { code: 'ADR010', message: 'Invalid or expired verification token', httpCode: 400 },
|
|
1094
1190
|
PUBLIC_ACCOUNT_DELETION_NO_TENANTS_SELECTED: { code: 'ADR011', message: 'No valid tenants selected for deletion', httpCode: 400 },
|
|
1191
|
+
ACCOUNT_DELETION_REQUEST_SUBMITTED: {
|
|
1192
|
+
code: 'ADR012',
|
|
1193
|
+
message: 'If the account exists, a verification code has been sent',
|
|
1194
|
+
httpCode: 200,
|
|
1195
|
+
},
|
|
1095
1196
|
// MOYSKLAD INTEGRATION
|
|
1096
1197
|
MOYSKLAD_INVALID_TOKEN: { code: 'MS001', message: 'MoySklad token is invalid or has insufficient permissions', httpCode: 400 },
|
|
1097
1198
|
MOYSKLAD_CONNECT_FAILED: { code: 'MS002', message: 'Failed to connect MoySklad integration', httpCode: 500 },
|
package/build/constant/index.js
CHANGED
|
@@ -18,3 +18,5 @@ __exportStar(require("./error"), exports);
|
|
|
18
18
|
__exportStar(require("./verbose"), exports);
|
|
19
19
|
__exportStar(require("./error-i18n-key"), exports);
|
|
20
20
|
__exportStar(require("./import.constant"), exports);
|
|
21
|
+
__exportStar(require("./validation-i18n-key"), exports);
|
|
22
|
+
__exportStar(require("./validation-i18n-message"), exports);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationI18nKey = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Stable i18n tokens for Zod validation messages.
|
|
6
|
+
*
|
|
7
|
+
* The global ZodValidationPipe surfaces a schema's `message` verbatim to the client with no error
|
|
8
|
+
* code, so raw English/Russian prose there is not localizable. Use these dot-notation tokens as the
|
|
9
|
+
* Zod `message` instead — the frontend maps the token to a localized string. The token itself is the
|
|
10
|
+
* stable contract; the English text lives only in the frontend dictionary.
|
|
11
|
+
*/
|
|
12
|
+
exports.ValidationI18nKey = {
|
|
13
|
+
dateRange: 'validation.dateRange',
|
|
14
|
+
reportPeriodMax: 'validation.reportPeriodMax',
|
|
15
|
+
emailOrPhoneRequired: 'validation.emailOrPhoneRequired',
|
|
16
|
+
allowedRoles: 'validation.allowedRoles',
|
|
17
|
+
statusNotAllowedWebshop: 'validation.statusNotAllowedWebshop',
|
|
18
|
+
targetOrderInList: 'validation.targetOrderInList',
|
|
19
|
+
productListOrConsignment: 'validation.productListOrConsignment',
|
|
20
|
+
consignmentOrProducts: 'validation.consignmentOrProducts',
|
|
21
|
+
rejectionReasonRequired: 'validation.rejectionReasonRequired',
|
|
22
|
+
targetOrNewConsignment: 'validation.targetOrNewConsignment',
|
|
23
|
+
serviceOrNamePrice: 'validation.serviceOrNamePrice',
|
|
24
|
+
quantityPositive: 'validation.quantityPositive',
|
|
25
|
+
nameRequired: 'validation.nameRequired',
|
|
26
|
+
categoryRequired: 'validation.categoryRequired',
|
|
27
|
+
quantityRequired: 'validation.quantityRequired',
|
|
28
|
+
atLeastOneItem: 'validation.atLeastOneItem',
|
|
29
|
+
atLeastOneClient: 'validation.atLeastOneClient',
|
|
30
|
+
fieldRequired: 'validation.fieldRequired',
|
|
31
|
+
phoneFormat: 'validation.phoneFormat',
|
|
32
|
+
emailFormat: 'validation.emailFormat',
|
|
33
|
+
dateFormat: 'validation.dateFormat',
|
|
34
|
+
invalidClientType: 'validation.invalidClientType',
|
|
35
|
+
standingOrderClientNameRequired: 'validation.standingOrderClientNameRequired',
|
|
36
|
+
standingOrderCategoryRequired: 'validation.standingOrderCategoryRequired',
|
|
37
|
+
standingOrderNameRequired: 'validation.standingOrderNameRequired',
|
|
38
|
+
standingOrderQuantityRequired: 'validation.standingOrderQuantityRequired',
|
|
39
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VALIDATION_I18N_TOKEN_PATTERN = exports.VALIDATION_I18N_MESSAGE = void 0;
|
|
4
|
+
const validation_i18n_key_1 = require("./validation-i18n-key");
|
|
5
|
+
/**
|
|
6
|
+
* English fallback text for every stable Zod validation token (see validation-i18n-key.ts).
|
|
7
|
+
*
|
|
8
|
+
* The global ZodValidationPipe puts the token into an issue's `message`. The catch-all
|
|
9
|
+
* HttpExceptionFilter detects that a message is a token and, using this map, moves the token to the
|
|
10
|
+
* `i18nKey` field while replacing `message` with the EN text below. The frontend localizes off
|
|
11
|
+
* `i18nKey`; `message` is only the human-readable fallback (see api-error.schema.ts).
|
|
12
|
+
*
|
|
13
|
+
* Every token in ValidationI18nKey MUST have an entry here (enforced by the Record type).
|
|
14
|
+
*/
|
|
15
|
+
exports.VALIDATION_I18N_MESSAGE = {
|
|
16
|
+
[validation_i18n_key_1.ValidationI18nKey.dateRange]: 'Start date must be before or equal to end date',
|
|
17
|
+
[validation_i18n_key_1.ValidationI18nKey.reportPeriodMax]: 'The selected period exceeds the maximum allowed range',
|
|
18
|
+
[validation_i18n_key_1.ValidationI18nKey.emailOrPhoneRequired]: 'Either email or phone is required',
|
|
19
|
+
[validation_i18n_key_1.ValidationI18nKey.allowedRoles]: 'The specified role is not allowed',
|
|
20
|
+
[validation_i18n_key_1.ValidationI18nKey.statusNotAllowedWebshop]: 'This status is not allowed in the webshop',
|
|
21
|
+
[validation_i18n_key_1.ValidationI18nKey.targetOrderInList]: 'The target order must not be included in the source order list',
|
|
22
|
+
[validation_i18n_key_1.ValidationI18nKey.productListOrConsignment]: 'Either a product list or a consignment must be provided',
|
|
23
|
+
[validation_i18n_key_1.ValidationI18nKey.consignmentOrProducts]: 'Either a consignment or products must be provided',
|
|
24
|
+
[validation_i18n_key_1.ValidationI18nKey.rejectionReasonRequired]: 'A rejection reason is required',
|
|
25
|
+
[validation_i18n_key_1.ValidationI18nKey.targetOrNewConsignment]: 'Either a target consignment or a new consignment must be provided',
|
|
26
|
+
[validation_i18n_key_1.ValidationI18nKey.serviceOrNamePrice]: 'Either a service or a name and price must be provided',
|
|
27
|
+
[validation_i18n_key_1.ValidationI18nKey.quantityPositive]: 'Quantity must be a positive number',
|
|
28
|
+
[validation_i18n_key_1.ValidationI18nKey.nameRequired]: 'Name is required',
|
|
29
|
+
[validation_i18n_key_1.ValidationI18nKey.categoryRequired]: 'Category is required',
|
|
30
|
+
[validation_i18n_key_1.ValidationI18nKey.quantityRequired]: 'Quantity is required',
|
|
31
|
+
[validation_i18n_key_1.ValidationI18nKey.atLeastOneItem]: 'At least one item is required',
|
|
32
|
+
[validation_i18n_key_1.ValidationI18nKey.atLeastOneClient]: 'At least one client is required',
|
|
33
|
+
[validation_i18n_key_1.ValidationI18nKey.fieldRequired]: 'This field is required',
|
|
34
|
+
[validation_i18n_key_1.ValidationI18nKey.phoneFormat]: 'Invalid phone number format',
|
|
35
|
+
[validation_i18n_key_1.ValidationI18nKey.emailFormat]: 'Invalid email format',
|
|
36
|
+
[validation_i18n_key_1.ValidationI18nKey.dateFormat]: 'Invalid date format',
|
|
37
|
+
[validation_i18n_key_1.ValidationI18nKey.invalidClientType]: 'Invalid client type',
|
|
38
|
+
[validation_i18n_key_1.ValidationI18nKey.standingOrderClientNameRequired]: 'Client name is required',
|
|
39
|
+
[validation_i18n_key_1.ValidationI18nKey.standingOrderCategoryRequired]: 'Category is required',
|
|
40
|
+
[validation_i18n_key_1.ValidationI18nKey.standingOrderNameRequired]: 'Name is required',
|
|
41
|
+
[validation_i18n_key_1.ValidationI18nKey.standingOrderQuantityRequired]: 'Quantity is required',
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* A validation `message` is a stable i18n token when it matches this pattern (e.g. `validation.dateRange`).
|
|
45
|
+
* Anything else is a custom Zod message that stays in `message` with no `i18nKey`.
|
|
46
|
+
*/
|
|
47
|
+
exports.VALIDATION_I18N_TOKEN_PATTERN = /^validation\.[A-Za-z0-9.]+$/;
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VERBOSE = void 0;
|
|
4
|
+
// Success messages: `message` is the EN fallback, the frontend localizes by `code` (same model as ERRORS).
|
|
4
5
|
exports.VERBOSE = {
|
|
5
|
-
USER_SUCCESSFULLY_CREATED: { code: 'SM001', message: '
|
|
6
|
+
USER_SUCCESSFULLY_CREATED: { code: 'SM001', message: 'User registered successfully' },
|
|
6
7
|
EMAIL_VERIFICATION_SEND: {
|
|
7
8
|
code: 'SM002',
|
|
8
|
-
message: '
|
|
9
|
+
message: 'Email verification sent successfully! Check your inbox.',
|
|
9
10
|
},
|
|
10
|
-
EMAIL_VERIFICATION_SUCCESS: { code: 'SM003', message: '
|
|
11
|
-
PASSWORD_SUCCESSFULLY_SET: { code: 'SM004', message: '
|
|
11
|
+
EMAIL_VERIFICATION_SUCCESS: { code: 'SM003', message: 'Email verified successfully!' },
|
|
12
|
+
PASSWORD_SUCCESSFULLY_SET: { code: 'SM004', message: 'User password set successfully!' },
|
|
12
13
|
PASSWORD_SUCCESSFULLY_RESTORED: {
|
|
13
14
|
code: 'SM005',
|
|
14
|
-
message: '
|
|
15
|
+
message: 'A password reset confirmation email has been sent to you. Check your inbox!',
|
|
15
16
|
},
|
|
16
|
-
PASSWORD_SUCCESSFULLY_RESET: { code: 'SM006', message: '
|
|
17
|
-
CABINET_SUCCESSFULLY_UPDATED: { code: 'SM007', message: '
|
|
18
|
-
PROJECT_SUCCESSFULLY_CREATED: { code: 'SM008', message: '
|
|
19
|
-
PROJECT_SUCCESSFULLY_UPDATED: { code: 'SM009', message: '
|
|
17
|
+
PASSWORD_SUCCESSFULLY_RESET: { code: 'SM006', message: 'Password reset successfully' },
|
|
18
|
+
CABINET_SUCCESSFULLY_UPDATED: { code: 'SM007', message: 'Cabinet updated successfully' },
|
|
19
|
+
PROJECT_SUCCESSFULLY_CREATED: { code: 'SM008', message: 'Project created successfully.' },
|
|
20
|
+
PROJECT_SUCCESSFULLY_UPDATED: { code: 'SM009', message: 'Project updated successfully.' },
|
|
20
21
|
// SMS GATEWAY
|
|
21
|
-
SMS_SUCCESSFULLY_SENT: { code: 'SM010', message: 'SMS
|
|
22
|
+
SMS_SUCCESSFULLY_SENT: { code: 'SM010', message: 'SMS message sent successfully' },
|
|
22
23
|
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiErrorSchema = exports.ApiErrorValidationIssueSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Per-field issue of a VALIDATION error (Zod): `path` addresses the offending field.
|
|
6
|
+
// `i18nKey` is the stable token the frontend translates; it is set only when the schema used a
|
|
7
|
+
// registered `validation.*` token as its Zod message (see validation-i18n-key.ts). In that case
|
|
8
|
+
// `message` carries the EN fallback text from VALIDATION_I18N_MESSAGE. For custom Zod messages that
|
|
9
|
+
// are not tokens, `i18nKey` is omitted and `message` holds the raw Zod string as-is.
|
|
10
|
+
exports.ApiErrorValidationIssueSchema = zod_1.z.object({
|
|
11
|
+
path: zod_1.z.array(zod_1.z.union([zod_1.z.string(), zod_1.z.number()])),
|
|
12
|
+
message: zod_1.z.string(),
|
|
13
|
+
i18nKey: zod_1.z.string().optional(),
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* Unified HTTP error envelope: every non-2xx response of the API has exactly this shape
|
|
17
|
+
* (enforced by the catch-all HttpExceptionFilter on the backend).
|
|
18
|
+
*
|
|
19
|
+
* - `errorCode` — a code from ERRORS (business) or ApiGenericErrorCodeEnum (validation/transport);
|
|
20
|
+
* the frontend maps it to a localized text, `message` is only the EN fallback.
|
|
21
|
+
* - `errors` — present only when `errorCode` is VALIDATION (per-field issues).
|
|
22
|
+
* - `data` — optional machine-readable payload attached by business errors.
|
|
23
|
+
*/
|
|
24
|
+
exports.ApiErrorSchema = zod_1.z.object({
|
|
25
|
+
statusCode: zod_1.z.number().int(),
|
|
26
|
+
errorCode: zod_1.z.string(),
|
|
27
|
+
message: zod_1.z.string(),
|
|
28
|
+
timestamp: zod_1.z.string(),
|
|
29
|
+
path: zod_1.z.string(),
|
|
30
|
+
errors: zod_1.z.array(exports.ApiErrorValidationIssueSchema).optional(),
|
|
31
|
+
data: zod_1.z.unknown().optional(),
|
|
32
|
+
});
|
|
@@ -23,7 +23,7 @@ exports.AcceptConsignmentTransferRequestSchema = zod_1.z
|
|
|
23
23
|
.min(1),
|
|
24
24
|
})
|
|
25
25
|
.refine(data => Boolean(data.targetConsignmentUUID) !== Boolean(data.newConsignment), {
|
|
26
|
-
message: '
|
|
26
|
+
message: 'validation.targetOrNewConsignment',
|
|
27
27
|
path: ['targetConsignmentUUID'],
|
|
28
28
|
});
|
|
29
29
|
exports.AcceptConsignmentTransferResponseSchema = zod_1.z.object({
|
package/build/schemas/index.js
CHANGED
|
@@ -83,4 +83,5 @@ __exportStar(require("./messenger-profile"), exports);
|
|
|
83
83
|
__exportStar(require("./error-message.schema"), exports);
|
|
84
84
|
__exportStar(require("./account-deletion-request/account-deletion-request.schema"), exports);
|
|
85
85
|
__exportStar(require("./consignment-transfer"), exports);
|
|
86
|
+
__exportStar(require("./api-error.schema"), exports);
|
|
86
87
|
__exportStar(require("./access-policy"), exports);
|
|
@@ -29,7 +29,7 @@ exports.CreateOrderServiceLineRequestSchema = zod_1.z
|
|
|
29
29
|
comment: zod_1.z.string().max(1000).optional(),
|
|
30
30
|
})
|
|
31
31
|
.refine(data => data.serviceUUID || (data.name && data.price !== undefined), {
|
|
32
|
-
message: '
|
|
32
|
+
message: 'validation.serviceOrNamePrice',
|
|
33
33
|
});
|
|
34
34
|
exports.UpdateOrderServiceLineRequestSchema = zod_1.z.object({
|
|
35
35
|
price: zod_1.z.number().min(0).max(1000000000).optional(),
|
|
@@ -5,6 +5,7 @@ const zod_1 = require("zod");
|
|
|
5
5
|
const pre_order_schema_1 = require("./pre-order.schema");
|
|
6
6
|
const pre_order_product_schema_1 = require("../pre-order-product/pre-order-product.schema");
|
|
7
7
|
const pre_order_collection_item_schema_1 = require("../pre-order-collection-item/pre-order-collection-item.schema");
|
|
8
|
+
const error_message_schema_1 = require("../error-message.schema");
|
|
8
9
|
exports.CopyAnalysisMatchSchema = zod_1.z.object({
|
|
9
10
|
collectionItem: pre_order_collection_item_schema_1.PreOrderCollectionItemSchema,
|
|
10
11
|
quantity: zod_1.z.number(),
|
|
@@ -17,5 +18,5 @@ exports.CopyAnalysisMappingSchema = zod_1.z.object({
|
|
|
17
18
|
exports.CopyAnalysisSchema = zod_1.z.object({
|
|
18
19
|
preOrder: pre_order_schema_1.PreOrderWithClientSchema,
|
|
19
20
|
mappings: zod_1.z.record(zod_1.z.string(), exports.CopyAnalysisMappingSchema),
|
|
20
|
-
warnings: zod_1.z.record(zod_1.z.string(), zod_1.z.array(
|
|
21
|
+
warnings: zod_1.z.record(zod_1.z.string(), zod_1.z.array(error_message_schema_1.ErrorMessageSchema)),
|
|
21
22
|
});
|
|
@@ -90,6 +90,7 @@ exports.SettingsSchema = zod_1.z.object({
|
|
|
90
90
|
importantMessage: exports.ImportantMessageSchema.nullable(),
|
|
91
91
|
deliveryPricingEnabled: zod_1.z.boolean(),
|
|
92
92
|
deliveryPricingTiers: zod_1.z.array(exports.DeliveryPricingTierSchema).nullable(),
|
|
93
|
+
employeeClientScopeEnabled: zod_1.z.boolean(),
|
|
93
94
|
telegramStaffBotName: zod_1.z.string().nullable().optional(),
|
|
94
95
|
});
|
|
95
96
|
exports.SettingsForAdminSchema = exports.SettingsSchema.extend({
|
|
@@ -236,6 +237,7 @@ exports.UpdateSettingsRequestSchema = zod_1.z.object({
|
|
|
236
237
|
importantMessage: exports.ImportantMessageSchema.nullable().optional(),
|
|
237
238
|
deliveryPricingEnabled: zod_1.z.coerce.boolean().optional(),
|
|
238
239
|
deliveryPricingTiers: zod_1.z.array(exports.DeliveryPricingTierSchema).nullable().optional(),
|
|
240
|
+
employeeClientScopeEnabled: zod_1.z.coerce.boolean().optional(),
|
|
239
241
|
// post terminal settings
|
|
240
242
|
vatTag: zod_1.z.string().nullable().optional(),
|
|
241
243
|
taxMode: zod_1.z.string().nullable().optional(),
|
|
@@ -6,6 +6,8 @@ const InitiatePublicAccountDeletionRequestSchema = z.object({
|
|
|
6
6
|
|
|
7
7
|
const InitiatePublicAccountDeletionResponseSchema = z.object({
|
|
8
8
|
message: z.string(),
|
|
9
|
+
code: z.string().optional(),
|
|
10
|
+
i18nKey: z.string().optional(),
|
|
9
11
|
data: z.object({
|
|
10
12
|
success: z.boolean(),
|
|
11
13
|
}),
|
|
@@ -5,8 +5,8 @@ const ListMobileBuyerTenantsRequestSchema = z
|
|
|
5
5
|
phone: z.string().min(1).optional(),
|
|
6
6
|
email: z.email().optional(),
|
|
7
7
|
})
|
|
8
|
-
.refine(
|
|
9
|
-
message: '
|
|
8
|
+
.refine(data => data.phone || data.email, {
|
|
9
|
+
message: 'validation.emailOrPhoneRequired',
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
const MobileBuyerTenantItemSchema = z.object({
|
|
@@ -8,7 +8,7 @@ export const ResetPasswordByTokenRequestSchema = z
|
|
|
8
8
|
password: z.string(),
|
|
9
9
|
})
|
|
10
10
|
.refine(data => data.email || data.phone, {
|
|
11
|
-
message: '
|
|
11
|
+
message: 'validation.emailOrPhoneRequired',
|
|
12
12
|
path: ['email', 'phone'],
|
|
13
13
|
});
|
|
14
14
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { ErrorMessageSchema } from '../../schemas/error-message.schema';
|
|
2
3
|
|
|
3
4
|
const OptionUpdateSchema = z.object({
|
|
4
5
|
title: z.string().nullable().optional(),
|
|
@@ -42,9 +43,8 @@ const UpdateBatchResponseSchema = z.object({
|
|
|
42
43
|
successCount: z.number(),
|
|
43
44
|
failedCount: z.number(),
|
|
44
45
|
errors: z.array(
|
|
45
|
-
|
|
46
|
+
ErrorMessageSchema.extend({
|
|
46
47
|
uuid: z.string(),
|
|
47
|
-
error: z.string(),
|
|
48
48
|
}),
|
|
49
49
|
),
|
|
50
50
|
}),
|