hh-contracts 0.0.96 → 0.0.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.
Files changed (107) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/app-menu/get.query.ts +2 -2
  3. package/build/app-menu/get.query.js +1 -1
  4. package/build/common/constants/domain-name.constant.js +9 -0
  5. package/build/common/constants/index.js +2 -0
  6. package/build/common/constants/slug.constant.js +1 -0
  7. package/build/common/constants/time-zone.constant.js +7 -0
  8. package/build/common/models/domain-name.schema.js +8 -4
  9. package/build/common/models/index.js +1 -1
  10. package/build/common/models/slug.schema.js +5 -1
  11. package/build/common/models/timezone.schema.js +3 -4
  12. package/build/common/models/{uuid-array.schema.js → uuid.schemas.js} +3 -2
  13. package/build/companies/company.models.js +1 -1
  14. package/build/hotels/amenities/hotel-amenity.model.js +2 -1
  15. package/build/hotels/constants/hotel-integration-connection-state.constant.js +10 -0
  16. package/build/hotels/constants/hotel-integration-credential-status.constant.js +9 -0
  17. package/build/hotels/constants/hotel-integration-sync-status.constant.js +10 -0
  18. package/build/hotels/constants/index.js +3 -0
  19. package/build/hotels/contacts/hotel-contact.model.js +1 -1
  20. package/build/hotels/contracts/create-hotel.contract.js +2 -7
  21. package/build/hotels/contracts/find-hotel.contract.js +4 -4
  22. package/build/hotels/contracts/update-hotel.contract.js +1 -1
  23. package/build/hotels/domains/contracts/find-hotel-domain-settings.contract.js +13 -0
  24. package/build/hotels/domains/contracts/update-hotel-domain-settings.contract.js +14 -0
  25. package/build/hotels/domains/hotel-domains.api.js +12 -0
  26. package/build/hotels/{settings/hotel-domain-settings.schema.js → domains/hotel-domains.schema.js} +6 -6
  27. package/build/hotels/{settings → domains}/index.js +2 -2
  28. package/build/hotels/hotel.models.js +15 -11
  29. package/build/hotels/hotels.api.js +8 -2
  30. package/build/hotels/index.js +1 -1
  31. package/build/hotels/integrations/configs/index.js +17 -0
  32. package/build/hotels/integrations/configs/opera-integration-config.model.js +41 -0
  33. package/build/hotels/integrations/contracts/create-hotel-integration.contract.js +14 -0
  34. package/build/hotels/integrations/contracts/delete-hotel-integration.contract.js +46 -0
  35. package/build/hotels/integrations/contracts/find-all-hotel-integrations.contract.js +47 -0
  36. package/build/hotels/integrations/contracts/find-hotel-integration.contract.js +13 -0
  37. package/build/hotels/integrations/contracts/index.js +21 -0
  38. package/build/hotels/integrations/contracts/update-hotel-integration.contract.js +14 -0
  39. package/build/hotels/integrations/hotel-integration.model.js +43 -5
  40. package/build/hotels/integrations/hotel-integrations.api.js +1 -1
  41. package/build/hotels/integrations/index.js +1 -0
  42. package/build/permissions/contracts/create-permission.contract.js +2 -6
  43. package/build/permissions/contracts/find-permission.contract.js +1 -1
  44. package/build/permissions/contracts/update-permission.contract.js +1 -1
  45. package/build/permissions/permission.models.js +12 -9
  46. package/build/roles/contracts/create-role.contract.js +2 -6
  47. package/build/roles/contracts/find-role.contract.js +1 -1
  48. package/build/roles/contracts/update-role.contract.js +1 -1
  49. package/build/roles/role.models.js +14 -11
  50. package/common/constants/domain-name.constant.ts +8 -0
  51. package/common/constants/index.ts +2 -0
  52. package/common/constants/slug.constant.ts +2 -1
  53. package/common/constants/time-zone.constant.ts +4 -0
  54. package/common/models/domain-name.schema.ts +8 -9
  55. package/common/models/index.ts +1 -1
  56. package/common/models/slug.schema.ts +5 -1
  57. package/common/models/timezone.schema.ts +6 -7
  58. package/common/models/uuid.schemas.ts +4 -0
  59. package/companies/company.models.ts +2 -2
  60. package/hotels/amenities/hotel-amenity.model.ts +2 -1
  61. package/hotels/constants/hotel-integration-connection-state.constant.ts +13 -0
  62. package/hotels/constants/hotel-integration-credential-status.constant.ts +12 -0
  63. package/hotels/constants/hotel-integration-sync-status.constant.ts +13 -0
  64. package/hotels/constants/index.ts +3 -0
  65. package/hotels/contacts/hotel-contact.model.ts +2 -2
  66. package/hotels/contracts/create-hotel.contract.ts +3 -8
  67. package/hotels/contracts/find-hotel.contract.ts +12 -7
  68. package/hotels/contracts/update-hotel.contract.ts +2 -2
  69. package/hotels/domains/contracts/find-hotel-domain-settings.contract.ts +13 -0
  70. package/hotels/domains/contracts/update-hotel-domain-settings.contract.ts +16 -0
  71. package/hotels/domains/hotel-domains.api.ts +11 -0
  72. package/hotels/domains/hotel-domains.schema.ts +25 -0
  73. package/hotels/domains/index.ts +3 -0
  74. package/hotels/hotel.models.ts +31 -21
  75. package/hotels/hotels.api.ts +8 -1
  76. package/hotels/index.ts +1 -1
  77. package/hotels/integrations/configs/index.ts +1 -0
  78. package/hotels/integrations/configs/opera-integration-config.model.ts +6 -0
  79. package/hotels/integrations/contracts/create-hotel-integration.contract.ts +21 -0
  80. package/hotels/integrations/contracts/delete-hotel-integration.contract.ts +14 -0
  81. package/hotels/integrations/contracts/find-all-hotel-integrations.contract.ts +15 -0
  82. package/hotels/integrations/contracts/find-hotel-integration.contract.ts +15 -0
  83. package/hotels/integrations/contracts/index.ts +5 -0
  84. package/hotels/integrations/contracts/update-hotel-integration.contract.ts +21 -0
  85. package/hotels/integrations/hotel-integration.model.ts +60 -9
  86. package/hotels/integrations/hotel-integrations.api.ts +1 -1
  87. package/hotels/integrations/index.ts +1 -0
  88. package/package.json +1 -1
  89. package/permissions/contracts/create-permission.contract.ts +3 -7
  90. package/permissions/contracts/find-permission.contract.ts +2 -2
  91. package/permissions/contracts/update-permission.contract.ts +2 -2
  92. package/permissions/permission.models.ts +18 -13
  93. package/roles/contracts/create-role.contract.ts +3 -7
  94. package/roles/contracts/find-role.contract.ts +2 -2
  95. package/roles/contracts/update-role.contract.ts +2 -2
  96. package/roles/role.models.ts +26 -15
  97. package/build/hotels/settings/contracts/find-hotel-domain-settings.contract.js +0 -13
  98. package/build/hotels/settings/contracts/update-hotel-domain-settings.contract.js +0 -14
  99. package/build/hotels/settings/hotel-domain-settings.api.js +0 -12
  100. package/common/models/uuid-array.schema.ts +0 -3
  101. package/hotels/settings/contracts/find-hotel-domain-settings.contract.ts +0 -13
  102. package/hotels/settings/contracts/update-hotel-domain-settings.contract.ts +0 -19
  103. package/hotels/settings/hotel-domain-settings.api.ts +0 -11
  104. package/hotels/settings/hotel-domain-settings.schema.ts +0 -24
  105. package/hotels/settings/index.ts +0 -3
  106. /package/build/hotels/{settings → domains}/contracts/index.js +0 -0
  107. /package/hotels/{settings → domains}/contracts/index.ts +0 -0
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateHotelIntegrationContract = void 0;
4
+ const common_1 = require("../../../common");
5
+ const hotel_integrations_api_1 = require("../hotel-integrations.api");
6
+ const hotel_integration_model_1 = require("../hotel-integration.model");
7
+ var UpdateHotelIntegrationContract;
8
+ (function (UpdateHotelIntegrationContract) {
9
+ UpdateHotelIntegrationContract.getUrl = hotel_integrations_api_1.HOTEL_INTEGRATIONS_API.update;
10
+ UpdateHotelIntegrationContract.endpoint = hotel_integrations_api_1.HOTEL_INTEGRATIONS_CONTROLLER.endpoints.update;
11
+ UpdateHotelIntegrationContract.httpMethod = common_1.HTTP_METHODS.put;
12
+ UpdateHotelIntegrationContract.RequestSchema = hotel_integration_model_1.HotelIntegrationWriteSchema;
13
+ UpdateHotelIntegrationContract.ResponseSchema = hotel_integration_model_1.HotelIntegrationDetailSchema;
14
+ })(UpdateHotelIntegrationContract || (exports.UpdateHotelIntegrationContract = UpdateHotelIntegrationContract = {}));
@@ -33,26 +33,64 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.HotelIntegrationCredentialSchema = exports.HotelIntegrationSchema = void 0;
36
+ exports.HotelIntegrationCredentialSchema = exports.HotelIntegrationConnectionSchema = exports.HotelIntegrationHotelSchema = exports.HotelIntegrationDetailSchema = exports.HotelIntegrationWriteSchema = exports.HotelIntegrationPersistedSchema = exports.HotelIntegrationSchema = exports.HotelIntegrationConfigSchema = void 0;
37
37
  const z = __importStar(require("zod"));
38
38
  const common_1 = require("../../common");
39
39
  const constants_1 = require("../constants");
40
- exports.HotelIntegrationSchema = z
40
+ const configs_1 = require("./configs");
41
+ exports.HotelIntegrationConfigSchema = z.discriminatedUnion('provider', [
42
+ configs_1.OperaIntegrationConfigSchema,
43
+ ]);
44
+ exports.HotelIntegrationSchema = z.object({
45
+ alias: common_1.SlugSchema,
46
+ config: exports.HotelIntegrationConfigSchema,
47
+ credentialId: z.uuid().nullable().optional(),
48
+ });
49
+ exports.HotelIntegrationPersistedSchema = exports.HotelIntegrationSchema.required({
50
+ credentialId: true,
51
+ }).extend({
52
+ id: z.uuid(),
53
+ secretHash: z.string().min(1),
54
+ secretSalt: z.string().min(1),
55
+ ...common_1.TimestampSchema.shape,
56
+ });
57
+ exports.HotelIntegrationWriteSchema = exports.HotelIntegrationSchema;
58
+ exports.HotelIntegrationDetailSchema = exports.HotelIntegrationPersistedSchema.omit({
59
+ secretHash: true,
60
+ secretSalt: true,
61
+ });
62
+ exports.HotelIntegrationHotelSchema = z
41
63
  .object({
64
+ id: z.uuid(),
65
+ integrationId: z.uuid(),
42
66
  hotelId: z.uuid(),
43
- provider: z.enum(constants_1.HOTEL_INTEGRATION_PROVIDER_VALUES),
44
- externalHotelId: z.string().min(1),
67
+ hotelExternalId: z.string(),
68
+ isActive: z.boolean().default(true),
69
+ })
70
+ .extend(common_1.TimestampSchema.shape);
71
+ exports.HotelIntegrationConnectionSchema = z
72
+ .object({
73
+ id: z.uuid(),
74
+ integrationId: z.uuid(),
75
+ connectionState: z.enum(constants_1.HOTEL_INTEGRATION_CONNECTION_STATE_VALUES),
76
+ lastHeartbeatAt: z.date(),
77
+ lastSeenAt: z.date(),
78
+ lastSyncStatus: z.enum(constants_1.HOTEL_INTEGRATION_SYNC_STATUS_VALUES),
79
+ lastSyncAt: z.date().nullable(),
80
+ failedAt: z.date().nullable(),
45
81
  metadata: z.record(z.string(), z.unknown()).optional(),
46
- credentialId: z.uuid().optional(),
47
82
  })
48
83
  .extend(common_1.TimestampSchema.shape);
49
84
  exports.HotelIntegrationCredentialSchema = z
50
85
  .object({
51
86
  id: z.uuid(),
87
+ integrationId: z.uuid(),
52
88
  provider: z.enum(constants_1.HOTEL_INTEGRATION_PROVIDER_VALUES),
53
89
  login: z.string().min(1),
54
90
  encryptedSecret: z.string().min(1),
55
91
  encryptionVersion: z.string().min(1),
92
+ status: z.enum(constants_1.HOTEL_INTEGRATION_CREDENTIAL_STATUS_VALUES),
93
+ expiresAt: z.date().nullable(),
56
94
  meta: z.record(z.string(), z.unknown()).optional(),
57
95
  rotatedAt: z.date().nullable(),
58
96
  })
@@ -5,7 +5,7 @@ const utils_1 = require("../../common/utils");
5
5
  exports.HOTEL_INTEGRATIONS_CONTROLLER = {
6
6
  prefix: 'hotels/by-id/:hotelId/integrations',
7
7
  endpoints: {
8
- findMany: '',
8
+ findAll: 'findAll',
9
9
  findOne: ':integrationId',
10
10
  create: '',
11
11
  update: ':integrationId',
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./hotel-integration.model"), exports);
18
18
  __exportStar(require("./hotel-integrations.api"), exports);
19
+ __exportStar(require("./contracts"), exports);
@@ -4,16 +4,12 @@ exports.CreatePermissionContract = void 0;
4
4
  const common_1 = require("../../common");
5
5
  const permissions_api_1 = require("../permissions.api");
6
6
  const permission_models_1 = require("../permission.models");
7
- const CreatePermissionContractRequestSchema = permission_models_1.PermissionWithTranslationsSchema.omit({
8
- id: true,
9
- createdAt: true,
10
- updatedAt: true,
11
- });
7
+ const CreatePermissionContractRequestSchema = permission_models_1.PermissionWriteSchema;
12
8
  var CreatePermissionContract;
13
9
  (function (CreatePermissionContract) {
14
10
  CreatePermissionContract.getUrl = permissions_api_1.PERMISSIONS_API.create;
15
11
  CreatePermissionContract.endpoint = permissions_api_1.PERMISSIONS_CONTROLLER.endpoints.create;
16
12
  CreatePermissionContract.httpMethod = common_1.HTTP_METHODS.post;
17
13
  CreatePermissionContract.RequestSchema = CreatePermissionContractRequestSchema;
18
- CreatePermissionContract.ResponseSchema = permission_models_1.PermissionWithTranslationsSchema;
14
+ CreatePermissionContract.ResponseSchema = permission_models_1.PermissionDetailSchema;
19
15
  })(CreatePermissionContract || (exports.CreatePermissionContract = CreatePermissionContract = {}));
@@ -9,5 +9,5 @@ var FindPermissionContract;
9
9
  FindPermissionContract.getUrl = permissions_api_1.PERMISSIONS_API.find;
10
10
  FindPermissionContract.endpoint = permissions_api_1.PERMISSIONS_CONTROLLER.endpoints.find;
11
11
  FindPermissionContract.httpMethod = common_1.HTTP_METHODS.get;
12
- FindPermissionContract.ResponseSchema = permission_models_1.PermissionWithTranslationsSchema;
12
+ FindPermissionContract.ResponseSchema = permission_models_1.PermissionDetailSchema;
13
13
  })(FindPermissionContract || (exports.FindPermissionContract = FindPermissionContract = {}));
@@ -11,5 +11,5 @@ var UpdatePermissionContract;
11
11
  UpdatePermissionContract.endpoint = permissions_api_1.PERMISSIONS_CONTROLLER.endpoints.update;
12
12
  UpdatePermissionContract.httpMethod = common_1.HTTP_METHODS.put;
13
13
  UpdatePermissionContract.RequestSchema = create_permission_contract_1.CreatePermissionContract.RequestSchema;
14
- UpdatePermissionContract.ResponseSchema = permission_models_1.PermissionWithTranslationsSchema;
14
+ UpdatePermissionContract.ResponseSchema = permission_models_1.PermissionDetailSchema;
15
15
  })(UpdatePermissionContract || (exports.UpdatePermissionContract = UpdatePermissionContract = {}));
@@ -33,23 +33,26 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.PermissionListItemSchema = exports.PermissionWithTranslationsSchema = exports.PermissionTranslationsSchema = exports.PermissionPersistedSchema = void 0;
36
+ exports.PermissionListItemSchema = exports.PermissionDetailSchema = exports.PermissionWriteSchema = exports.PermissionTranslationsSchema = exports.PermissionPersistedSchema = exports.PermissionSchema = void 0;
37
37
  const z = __importStar(require("zod"));
38
38
  const common_1 = require("../common");
39
- exports.PermissionPersistedSchema = z
40
- .object({
41
- id: z.uuid(),
39
+ exports.PermissionSchema = z.object({
42
40
  action: z.enum(common_1.AppAbility.ACTION_VALUES),
43
41
  subject: z.enum(common_1.AppAbility.SUBJECT_VALUES),
44
- conditions: z.json().optional().nullable(),
45
- })
46
- .extend(common_1.TimestampSchema.shape);
47
- // V2 translations: all translatable fields are inside per-language translation object
42
+ conditions: z.json().nullable().optional(),
43
+ });
44
+ exports.PermissionPersistedSchema = exports.PermissionSchema.required({ conditions: true }).extend({
45
+ id: common_1.UuidSchema,
46
+ ...common_1.TimestampSchema.shape,
47
+ });
48
48
  exports.PermissionTranslationsSchema = z.object({
49
49
  name: z.string().min(3),
50
50
  description: z.string().optional(),
51
51
  });
52
- exports.PermissionWithTranslationsSchema = exports.PermissionPersistedSchema.extend({
52
+ exports.PermissionWriteSchema = exports.PermissionSchema.extend({
53
+ translations: (0, common_1.makeTranslations)(exports.PermissionTranslationsSchema),
54
+ });
55
+ exports.PermissionDetailSchema = exports.PermissionPersistedSchema.extend({
53
56
  translations: (0, common_1.makeTranslations)(exports.PermissionTranslationsSchema),
54
57
  });
55
58
  exports.PermissionListItemSchema = exports.PermissionPersistedSchema.extend({
@@ -9,10 +9,6 @@ var CreateRoleContract;
9
9
  CreateRoleContract.getUrl = roles_api_1.ROLES_API.create;
10
10
  CreateRoleContract.endpoint = roles_api_1.ROLES_CONTROLLER.endpoints.create;
11
11
  CreateRoleContract.httpMethod = common_1.HTTP_METHODS.post;
12
- CreateRoleContract.RequestSchema = role_models_1.RoleWithTranslationsSchema.omit({
13
- id: true,
14
- createdAt: true,
15
- updatedAt: true,
16
- });
17
- CreateRoleContract.ResponseSchema = role_models_1.RoleWithTranslationsSchema;
12
+ CreateRoleContract.RequestSchema = role_models_1.RoleWriteSchema;
13
+ CreateRoleContract.ResponseSchema = role_models_1.RoleDetailSchema;
18
14
  })(CreateRoleContract || (exports.CreateRoleContract = CreateRoleContract = {}));
@@ -9,5 +9,5 @@ var FindRoleContract;
9
9
  FindRoleContract.getUrl = roles_api_1.ROLES_API.find;
10
10
  FindRoleContract.endpoint = roles_api_1.ROLES_CONTROLLER.endpoints.find;
11
11
  FindRoleContract.httpMethod = common_1.HTTP_METHODS.get;
12
- FindRoleContract.ResponseSchema = role_models_1.RoleWithTranslationsSchema;
12
+ FindRoleContract.ResponseSchema = role_models_1.RoleDetailSchema;
13
13
  })(FindRoleContract || (exports.FindRoleContract = FindRoleContract = {}));
@@ -11,5 +11,5 @@ var UpdateRoleContract;
11
11
  UpdateRoleContract.endpoint = roles_api_1.ROLES_CONTROLLER.endpoints.update;
12
12
  UpdateRoleContract.httpMethod = common_1.HTTP_METHODS.put;
13
13
  UpdateRoleContract.RequestSchema = create_role_contract_1.CreateRoleContract.RequestSchema;
14
- UpdateRoleContract.ResponseSchema = role_models_1.RoleWithTranslationsSchema;
14
+ UpdateRoleContract.ResponseSchema = role_models_1.RoleDetailSchema;
15
15
  })(UpdateRoleContract || (exports.UpdateRoleContract = UpdateRoleContract = {}));
@@ -33,27 +33,30 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RoleListItemSchema = exports.RoleWithTranslationsSchema = exports.RoleTranslationsSchema = exports.RoleWithPermissionsSchema = exports.RolePersistedSchema = void 0;
36
+ exports.RoleListItemSchema = exports.RoleDetailSchema = exports.RoleWriteSchema = exports.RoleTranslationsSchema = exports.RolePersistedSchema = exports.RoleSchema = void 0;
37
37
  const z = __importStar(require("zod"));
38
38
  const common_1 = require("../common");
39
39
  const permissions_1 = require("../permissions");
40
- exports.RolePersistedSchema = z
41
- .object({
42
- id: z.uuid(),
40
+ exports.RoleSchema = z.object({
43
41
  type: z.enum(common_1.ROLE_TYPE_VALUES),
44
- isActive: z.boolean().default(true),
45
- isDefault: z.boolean().default(false),
46
- })
47
- .extend(common_1.TimestampSchema.shape);
48
- exports.RoleWithPermissionsSchema = exports.RolePersistedSchema.extend({
49
- permissionIds: common_1.UuidArraySchema.optional(),
42
+ isActive: z.boolean().optional(),
43
+ isDefault: z.boolean().optional(),
44
+ });
45
+ exports.RolePersistedSchema = exports.RoleSchema.required({ isActive: true, isDefault: true }).extend({
46
+ id: common_1.UuidSchema,
47
+ ...common_1.TimestampSchema.shape,
50
48
  });
51
49
  exports.RoleTranslationsSchema = z.object({
52
50
  name: z.string().min(3),
53
51
  description: z.string().optional(),
54
52
  });
55
- exports.RoleWithTranslationsSchema = exports.RoleWithPermissionsSchema.extend({
53
+ exports.RoleWriteSchema = exports.RoleSchema.extend({
54
+ translations: (0, common_1.makeTranslations)(exports.RoleTranslationsSchema),
55
+ permissionIds: common_1.UuidArraySchema.optional(),
56
+ });
57
+ exports.RoleDetailSchema = exports.RolePersistedSchema.extend({
56
58
  translations: (0, common_1.makeTranslations)(exports.RoleTranslationsSchema),
59
+ permissionIds: common_1.UuidArraySchema.optional(),
57
60
  });
58
61
  exports.RoleListItemSchema = exports.RolePersistedSchema.extend({
59
62
  name: z.string().nullable(),
@@ -0,0 +1,8 @@
1
+ import { minLength } from 'zod';
2
+
3
+ export const DOMAIN_NAME_CONFIG = {
4
+ minLength: 1,
5
+ maxLength: 253,
6
+ regex: /^(?!-)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/i,
7
+ messageKey: 'zod.domainName.invalidFormat',
8
+ } as const;
@@ -12,4 +12,6 @@ export * from './order-direction.constant';
12
12
  export * from './role-types.constant';
13
13
  export * from './route-component-key.constants';
14
14
  export * from './slug.constant';
15
+ export * from './time-zone.constant';
16
+ export * from './domain-name.constant';
15
17
  export * from './translatable-field.constant';
@@ -4,4 +4,5 @@ export const SLUG_CONFIG = {
4
4
  maxLength: 63,
5
5
  minLength: 3,
6
6
  regex: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,
7
- };
7
+ messageKey: 'zod.slug.invalidFormat',
8
+ } as const;
@@ -0,0 +1,4 @@
1
+ export const TIME_ZONE_CONFIG = {
2
+ regex: /^[A-Za-z]+(?:[_-][A-Za-z]+)?\/[A-Za-z]+(?:[_-][A-Za-z]+)?$/,
3
+ messageKey: 'zod.timezone.invalidFormat',
4
+ } as const;
@@ -1,15 +1,14 @@
1
1
  import * as z from 'zod';
2
-
3
- const DOMAIN_NAME_REGEXP =
4
- /^(?!-)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/i;
2
+ import { DOMAIN_NAME_CONFIG } from '../constants';
5
3
 
6
4
  export const DomainNameSchema = z
7
5
  .string()
8
- .min(1)
9
- .max(253)
10
- .regex(
11
- DOMAIN_NAME_REGEXP,
12
- 'Domain must be a valid hostname like example.com or app.example.com',
13
- );
6
+ .min(DOMAIN_NAME_CONFIG.minLength)
7
+ .max(DOMAIN_NAME_CONFIG.maxLength)
8
+ .refine(value => DOMAIN_NAME_CONFIG.regex.test(value), {
9
+ params: {
10
+ messageKey: DOMAIN_NAME_CONFIG.messageKey,
11
+ },
12
+ });
14
13
 
15
14
  export type TDomainName = z.infer<typeof DomainNameSchema>;
@@ -10,5 +10,5 @@ export * from './timestamp.schemas';
10
10
  export * from './timezone.schema';
11
11
  export * from './language-keys.schema';
12
12
  export * from './translations.schemas';
13
- export * from './uuid-array.schema';
13
+ export * from './uuid.schemas';
14
14
  export * from './domain-name.schema';
@@ -6,5 +6,9 @@ export const SlugSchema = z
6
6
  .trim()
7
7
  .min(SLUG_CONFIG.minLength)
8
8
  .max(SLUG_CONFIG.maxLength)
9
- .regex(SLUG_CONFIG.regex)
9
+ .refine(value => SLUG_CONFIG.regex.test(value), {
10
+ params: {
11
+ messageKey: SLUG_CONFIG.messageKey,
12
+ },
13
+ })
10
14
  .toLowerCase();
@@ -1,11 +1,10 @@
1
1
  import * as z from 'zod';
2
+ import { TIME_ZONE_CONFIG } from '../constants';
2
3
 
3
- export const TimezoneSchema = z
4
- .string()
5
- .refine(value => /^[A-Za-z]+(?:[_-][A-Za-z]+)?\/[A-Za-z]+(?:[_-][A-Za-z]+)?$/.test(value), {
6
- params: {
7
- messageKey: 'z.timezone.invalidFormat',
8
- },
9
- });
4
+ export const TimezoneSchema = z.string().refine(value => TIME_ZONE_CONFIG.regex.test(value), {
5
+ params: {
6
+ messageKey: TIME_ZONE_CONFIG.messageKey,
7
+ },
8
+ });
10
9
 
11
10
  export type TTimezone = z.infer<typeof TimezoneSchema>;
@@ -0,0 +1,4 @@
1
+ import * as z from 'zod';
2
+
3
+ export const UuidSchema = z.uuid();
4
+ export const UuidArraySchema = z.array(UuidSchema);
@@ -1,9 +1,9 @@
1
1
  import * as z from 'zod';
2
- import { TimestampSchema } from '../common';
2
+ import { TimestampSchema, UuidSchema } from '../common';
3
3
 
4
4
  export const CompanyPersistedSchema = z
5
5
  .object({
6
- id: z.uuid(),
6
+ id: UuidSchema,
7
7
  inn: z.string(),
8
8
  isActive: z.boolean().default(true),
9
9
  })
@@ -1,8 +1,9 @@
1
1
  import * as z from 'zod';
2
2
  import { HOTEL_AMENITY_VALUES } from '../constants';
3
+ import { UuidSchema } from '../../common';
3
4
 
4
5
  export const HotelAmenitySchema = z.object({
5
- hotelId: z.uuid(),
6
+ hotelId: UuidSchema,
6
7
  amenityCode: z.enum(HOTEL_AMENITY_VALUES),
7
8
  isPrimary: z.boolean().default(false),
8
9
  });
@@ -0,0 +1,13 @@
1
+ export const HOTEL_INTEGRATION_CONNECTION_STATES = {
2
+ offline: 'offline',
3
+ connecting: 'connecting',
4
+ online: 'online',
5
+ degraded: 'degraded',
6
+ } as const;
7
+
8
+ export type THotelIntegrationConnectionState =
9
+ (typeof HOTEL_INTEGRATION_CONNECTION_STATES)[keyof typeof HOTEL_INTEGRATION_CONNECTION_STATES];
10
+
11
+ export const HOTEL_INTEGRATION_CONNECTION_STATE_VALUES = Object.values(
12
+ HOTEL_INTEGRATION_CONNECTION_STATES,
13
+ ) as [THotelIntegrationConnectionState, ...THotelIntegrationConnectionState[]];
@@ -0,0 +1,12 @@
1
+ export const HOTEL_INTEGRATION_CREDENTIAL_STATUSES = {
2
+ active: 'active',
3
+ rotating: 'rotating',
4
+ revoked: 'revoked',
5
+ } as const;
6
+
7
+ export type THotelIntegrationCredentialStatus =
8
+ (typeof HOTEL_INTEGRATION_CREDENTIAL_STATUSES)[keyof typeof HOTEL_INTEGRATION_CREDENTIAL_STATUSES];
9
+
10
+ export const HOTEL_INTEGRATION_CREDENTIAL_STATUS_VALUES = Object.values(
11
+ HOTEL_INTEGRATION_CREDENTIAL_STATUSES,
12
+ ) as [THotelIntegrationCredentialStatus, ...THotelIntegrationCredentialStatus[]];
@@ -0,0 +1,13 @@
1
+ export const HOTEL_INTEGRATION_SYNC_STATUSES = {
2
+ idle: 'idle',
3
+ running: 'running',
4
+ success: 'success',
5
+ failed: 'failed',
6
+ } as const;
7
+
8
+ export type THotelIntegrationSyncStatus =
9
+ (typeof HOTEL_INTEGRATION_SYNC_STATUSES)[keyof typeof HOTEL_INTEGRATION_SYNC_STATUSES];
10
+
11
+ export const HOTEL_INTEGRATION_SYNC_STATUS_VALUES = Object.values(
12
+ HOTEL_INTEGRATION_SYNC_STATUSES,
13
+ ) as [THotelIntegrationSyncStatus, ...THotelIntegrationSyncStatus[]];
@@ -1,6 +1,9 @@
1
1
  export * from './hotel-amenity.constant';
2
2
  export * from './hotel-contact-type.constant';
3
3
  export * from './hotel-feature.constant';
4
+ export * from './hotel-integration-connection-state.constant';
5
+ export * from './hotel-integration-credential-status.constant';
4
6
  export * from './hotel-integration-provider.constant';
7
+ export * from './hotel-integration-sync-status.constant';
5
8
  export * from './hotel-policy-type.constant';
6
9
  export * from './hotel-rating-source.constant';
@@ -1,10 +1,10 @@
1
1
  import * as z from 'zod';
2
2
  import { HOTEL_CONTACT_TYPE_VALUES } from '../constants';
3
- import { TimestampSchema } from '../../common';
3
+ import { TimestampSchema, UuidSchema } from '../../common';
4
4
 
5
5
  export const HotelContactSchema = z
6
6
  .object({
7
- hotelId: z.uuid(),
7
+ hotelId: UuidSchema,
8
8
  contactType: z.enum(HOTEL_CONTACT_TYPE_VALUES),
9
9
  value: z.string().min(1),
10
10
  isPublic: z.boolean().default(true),
@@ -1,21 +1,16 @@
1
1
  import * as z from 'zod';
2
2
  import { HTTP_METHODS } from '../../common';
3
3
  import { HOTELS_API, HOTELS_CONTROLLER } from '../hotels.api';
4
- import { HotelWithTranslationsSchema } from '../hotel.models';
4
+ import { HotelWriteSchema, HotelDetailSchema } from '../hotel.models';
5
5
 
6
6
  export namespace CreateHotelContract {
7
7
  export const getUrl = HOTELS_API.create;
8
8
  export const endpoint = HOTELS_CONTROLLER.endpoints.create;
9
9
  export const httpMethod = HTTP_METHODS.post;
10
10
 
11
- export const RequestSchema = HotelWithTranslationsSchema.omit({
12
- id: true,
13
- version: true,
14
- createdAt: true,
15
- updatedAt: true,
16
- });
11
+ export const RequestSchema = HotelWriteSchema;
17
12
  export type TRequest = z.infer<typeof RequestSchema>;
18
13
 
19
- export const ResponseSchema = HotelWithTranslationsSchema;
14
+ export const ResponseSchema = HotelDetailSchema;
20
15
  export type TResponse = z.infer<typeof ResponseSchema>;
21
16
  }
@@ -1,22 +1,27 @@
1
1
  import * as z from 'zod';
2
2
  import { HTTP_METHODS } from '../../common';
3
- import { HotelWithTranslationsSchema } from '../hotel.models';
4
- import { HOTELS_API, HOTELS_CONTROLLER } from '../hotels.api';
3
+ import { HotelDetailSchema } from '../hotel.models';
4
+ import {
5
+ HOTELS_API,
6
+ HOTELS_BY_SLUG_API,
7
+ HOTELS_BY_SLUG_CONTROLLER,
8
+ HOTELS_CONTROLLER,
9
+ } from '../hotels.api';
5
10
 
6
11
  export namespace FindHotelByIdContract {
7
12
  export const getUrl = HOTELS_API.findById;
8
13
  export const endpoint = HOTELS_CONTROLLER.endpoints.findById;
9
14
  export const httpMethod = HTTP_METHODS.get;
10
15
 
11
- export const ResponseSchema = HotelWithTranslationsSchema;
16
+ export const ResponseSchema = HotelDetailSchema;
12
17
  export type TResponse = z.infer<typeof ResponseSchema>;
13
18
  }
14
19
 
15
20
  export namespace FindHotelBySlugContract {
16
- export const getUrl = HOTELS_API.findBySlug;
17
- export const endpoint = HOTELS_CONTROLLER.endpoints.findBySlug;
21
+ export const getUrl = HOTELS_BY_SLUG_API.find;
22
+ export const endpoint = HOTELS_BY_SLUG_CONTROLLER.endpoints.find;
18
23
  export const httpMethod = HTTP_METHODS.get;
19
24
 
20
- export const ResponseSchema = HotelWithTranslationsSchema;
25
+ export const ResponseSchema = HotelDetailSchema;
21
26
  export type TResponse = z.infer<typeof ResponseSchema>;
22
- }
27
+ }
@@ -1,7 +1,7 @@
1
1
  import * as z from 'zod';
2
2
  import { HTTP_METHODS } from '../../common';
3
3
  import { HOTELS_API, HOTELS_CONTROLLER } from '../hotels.api';
4
- import { HotelWithTranslationsSchema } from '../hotel.models';
4
+ import { HotelDetailSchema } from '../hotel.models';
5
5
  import { CreateHotelContract } from './create-hotel.contract';
6
6
 
7
7
  export namespace UpdateHotelContract {
@@ -12,6 +12,6 @@ export namespace UpdateHotelContract {
12
12
  export const RequestSchema = CreateHotelContract.RequestSchema;
13
13
  export type TRequest = z.infer<typeof RequestSchema>;
14
14
 
15
- export const ResponseSchema = HotelWithTranslationsSchema;
15
+ export const ResponseSchema = HotelDetailSchema;
16
16
  export type TResponse = z.infer<typeof ResponseSchema>;
17
17
  }
@@ -0,0 +1,13 @@
1
+ import * as z from 'zod';
2
+ import { HTTP_METHODS } from '../../../common';
3
+ import { HOTEL_DOMAINS_API, HOTEL_DOMAINS_CONTROLLER } from '../hotel-domains.api';
4
+ import { HotelDomainListSchema } from '../hotel-domains.schema';
5
+
6
+ export namespace FindHotelDomainsContract {
7
+ export const getUrl = HOTEL_DOMAINS_API.find;
8
+ export const endpoint = HOTEL_DOMAINS_CONTROLLER.endpoints.find;
9
+ export const httpMethod = HTTP_METHODS.get;
10
+
11
+ export const ResponseSchema = HotelDomainListSchema;
12
+ export type TResponse = z.infer<typeof ResponseSchema>;
13
+ }
@@ -0,0 +1,16 @@
1
+ import * as z from 'zod';
2
+ import { HTTP_METHODS } from '../../../common';
3
+ import { HOTEL_DOMAINS_API, HOTEL_DOMAINS_CONTROLLER } from '../hotel-domains.api';
4
+ import { HotelDomainPersistedSchema, HotelDomainSchema } from '../hotel-domains.schema';
5
+
6
+ export namespace UpdateHotelDomainContract {
7
+ export const getUrl = HOTEL_DOMAINS_API.update;
8
+ export const endpoint = HOTEL_DOMAINS_CONTROLLER.endpoints.update;
9
+ export const httpMethod = HTTP_METHODS.put;
10
+
11
+ export const RequestSchema = HotelDomainSchema;
12
+ export type TRequest = z.infer<typeof RequestSchema>;
13
+
14
+ export const ResponseSchema = HotelDomainPersistedSchema;
15
+ export type TResponse = z.infer<typeof ResponseSchema>;
16
+ }
@@ -0,0 +1,11 @@
1
+ import { createApi, TController } from '../../common/utils';
2
+
3
+ export const HOTEL_DOMAINS_CONTROLLER = {
4
+ prefix: 'hotels/by-id/:hotelId/domains',
5
+ endpoints: {
6
+ find: '',
7
+ update: '',
8
+ },
9
+ } as const satisfies TController;
10
+
11
+ export const HOTEL_DOMAINS_API = createApi(HOTEL_DOMAINS_CONTROLLER);
@@ -0,0 +1,25 @@
1
+ import * as z from 'zod';
2
+ import {
3
+ DomainNameSchema,
4
+ IsoDatetimeSchema,
5
+ KIND_OF_APP_VALUES,
6
+ TimestampSchema,
7
+ UuidSchema,
8
+ } from '../../common';
9
+
10
+ export const HotelDomainSchema = z.object({
11
+ kindOfApp: z.enum(KIND_OF_APP_VALUES),
12
+ customDomain: DomainNameSchema.optional(),
13
+ isCustomDomainVerified: z.boolean().default(false),
14
+ customDomainVerifiedAt: IsoDatetimeSchema.optional(),
15
+ });
16
+
17
+ export const HotelDomainPersistedSchema = HotelDomainSchema.extend({
18
+ id: UuidSchema,
19
+ hotelId: UuidSchema,
20
+ }).extend(TimestampSchema.shape);
21
+
22
+ export const HotelDomainListSchema = z.array(HotelDomainPersistedSchema);
23
+
24
+ export type THotelDomain = z.infer<typeof HotelDomainSchema>;
25
+ export type THotelDomainPersisted = z.infer<typeof HotelDomainPersistedSchema>;
@@ -0,0 +1,3 @@
1
+ export * from './hotel-domains.schema';
2
+ export * from './hotel-domains.api';
3
+ export * from './contracts';