hh-contracts 0.0.95 → 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.
- package/CHANGELOG.md +5 -0
- package/app-menu/get.query.ts +2 -2
- package/build/app-menu/get.query.js +1 -1
- package/build/common/constants/domain-name.constant.js +9 -0
- package/build/common/constants/index.js +2 -0
- package/build/common/constants/slug.constant.js +1 -0
- package/build/common/constants/time-zone.constant.js +7 -0
- package/build/common/models/domain-name.schema.js +47 -0
- package/build/common/models/index.js +3 -1
- package/build/common/models/slug.schema.js +5 -1
- package/build/common/models/timestamp.schemas.js +4 -1
- package/build/common/models/timezone.schema.js +43 -0
- package/build/common/models/{uuid-array.schema.js → uuid.schemas.js} +3 -2
- package/build/companies/company.models.js +1 -1
- package/build/hotels/amenities/hotel-amenity.model.js +44 -0
- package/build/hotels/amenities/index.js +17 -0
- package/build/hotels/constants/hotel-amenity.constant.js +15 -0
- package/build/hotels/constants/hotel-contact-type.constant.js +9 -0
- package/build/hotels/constants/hotel-feature.constant.js +11 -0
- package/build/hotels/constants/hotel-integration-connection-state.constant.js +10 -0
- package/build/hotels/constants/hotel-integration-credential-status.constant.js +9 -0
- package/build/hotels/constants/hotel-integration-provider.constant.js +7 -0
- package/build/hotels/constants/hotel-integration-sync-status.constant.js +10 -0
- package/build/hotels/constants/hotel-policy-type.constant.js +11 -0
- package/build/hotels/constants/hotel-rating-source.constant.js +9 -0
- package/build/hotels/constants/index.js +25 -0
- package/build/hotels/contacts/hotel-contact.model.js +48 -0
- package/build/hotels/contacts/index.js +17 -0
- package/build/hotels/contracts/create-hotel.contract.js +14 -0
- package/build/hotels/contracts/delete-hotel.contract.js +46 -0
- package/build/hotels/contracts/find-hotel.contract.js +18 -0
- package/build/hotels/contracts/find-many-hotels.contract.js +67 -0
- package/build/hotels/contracts/index.js +4 -0
- package/build/hotels/contracts/update-hotel.contract.js +15 -0
- package/build/hotels/domains/contracts/find-hotel-domain-settings.contract.js +13 -0
- package/build/hotels/domains/contracts/index.js +18 -0
- package/build/hotels/domains/contracts/update-hotel-domain-settings.contract.js +14 -0
- package/build/hotels/domains/hotel-domains.api.js +12 -0
- package/build/hotels/domains/hotel-domains.schema.js +49 -0
- package/build/hotels/domains/index.js +19 -0
- package/build/hotels/{hotel.model.js → features/hotel-feature.model.js} +8 -9
- package/build/hotels/features/index.js +17 -0
- package/build/hotels/hotel.models.js +83 -0
- package/build/hotels/hotels.api.js +14 -5
- package/build/hotels/index.js +10 -1
- package/build/hotels/integrations/configs/index.js +17 -0
- package/build/hotels/integrations/configs/opera-integration-config.model.js +41 -0
- package/build/hotels/integrations/contracts/create-hotel-integration.contract.js +14 -0
- package/build/hotels/integrations/contracts/delete-hotel-integration.contract.js +46 -0
- package/build/hotels/integrations/contracts/find-all-hotel-integrations.contract.js +47 -0
- package/build/hotels/integrations/contracts/find-hotel-integration.contract.js +13 -0
- package/build/hotels/integrations/contracts/index.js +21 -0
- package/build/hotels/integrations/contracts/update-hotel-integration.contract.js +14 -0
- package/build/hotels/integrations/hotel-integration.model.js +97 -0
- package/build/hotels/integrations/hotel-integrations.api.js +17 -0
- package/build/hotels/integrations/index.js +19 -0
- package/build/hotels/location/hotel-location.model.js +51 -0
- package/build/hotels/location/index.js +17 -0
- package/build/hotels/policies/hotel-policy.model.js +49 -0
- package/build/hotels/policies/index.js +17 -0
- package/build/hotels/ratings/hotel-rating.model.js +48 -0
- package/build/hotels/ratings/index.js +17 -0
- package/build/hotels/sites/contracts/find-hotel-site-page-by-lang.contract.js +3 -3
- package/build/hotels/sites/hotel-pages.api.js +24 -0
- package/build/hotels/sites/index.js +1 -0
- package/build/hotels/themes/contracts/find-hotel-theme.contract.js +3 -3
- package/build/hotels/themes/hotel-themes.api.js +20 -0
- package/build/hotels/themes/index.js +1 -0
- package/build/permissions/contracts/create-permission.contract.js +2 -6
- package/build/permissions/contracts/delete-permission.contract.js +35 -2
- package/build/permissions/contracts/find-permission.contract.js +1 -8
- package/build/permissions/contracts/update-permission.contract.js +1 -1
- package/build/permissions/permission.models.js +12 -25
- package/build/roles/contracts/create-role.contract.js +2 -6
- package/build/roles/contracts/delete-role.contract.js +35 -2
- package/build/roles/contracts/find-role.contract.js +1 -1
- package/build/roles/contracts/update-role.contract.js +1 -1
- package/build/roles/role.models.js +14 -11
- package/build/translate/contracts/translate-object.contract.js +3 -0
- package/common/constants/domain-name.constant.ts +8 -0
- package/common/constants/index.ts +2 -0
- package/common/constants/slug.constant.ts +2 -1
- package/common/constants/time-zone.constant.ts +4 -0
- package/common/models/domain-name.schema.ts +14 -0
- package/common/models/index.ts +3 -1
- package/common/models/slug.schema.ts +5 -1
- package/common/models/timestamp.schemas.ts +4 -0
- package/common/models/timezone.schema.ts +10 -0
- package/common/models/uuid.schemas.ts +4 -0
- package/companies/company.models.ts +2 -2
- package/hotels/amenities/hotel-amenity.model.ts +10 -0
- package/hotels/amenities/index.ts +1 -0
- package/hotels/constants/hotel-amenity.constant.ts +18 -0
- package/hotels/constants/hotel-contact-type.constant.ts +12 -0
- package/hotels/constants/hotel-feature.constant.ts +14 -0
- package/hotels/constants/hotel-integration-connection-state.constant.ts +13 -0
- package/hotels/constants/hotel-integration-credential-status.constant.ts +12 -0
- package/hotels/constants/hotel-integration-provider.constant.ts +11 -0
- package/hotels/constants/hotel-integration-sync-status.constant.ts +13 -0
- package/hotels/constants/hotel-policy-type.constant.ts +15 -0
- package/hotels/constants/hotel-rating-source.constant.ts +12 -0
- package/hotels/constants/index.ts +9 -0
- package/hotels/contacts/hotel-contact.model.ts +15 -0
- package/hotels/contacts/index.ts +1 -0
- package/hotels/contracts/create-hotel.contract.ts +16 -0
- package/hotels/contracts/delete-hotel.contract.ts +12 -0
- package/hotels/contracts/find-hotel.contract.ts +27 -1
- package/hotels/contracts/find-many-hotels.contract.ts +43 -0
- package/hotels/contracts/index.ts +4 -0
- package/hotels/contracts/update-hotel.contract.ts +17 -0
- package/hotels/domains/contracts/find-hotel-domain-settings.contract.ts +13 -0
- package/hotels/domains/contracts/index.ts +2 -0
- package/hotels/domains/contracts/update-hotel-domain-settings.contract.ts +16 -0
- package/hotels/domains/hotel-domains.api.ts +11 -0
- package/hotels/domains/hotel-domains.schema.ts +25 -0
- package/hotels/domains/index.ts +3 -0
- package/hotels/features/hotel-feature.model.ts +14 -0
- package/hotels/features/index.ts +1 -0
- package/hotels/hotel.models.ts +70 -0
- package/hotels/hotels.api.ts +14 -4
- package/hotels/index.ts +10 -1
- package/hotels/integrations/configs/index.ts +1 -0
- package/hotels/integrations/configs/opera-integration-config.model.ts +6 -0
- package/hotels/integrations/contracts/create-hotel-integration.contract.ts +21 -0
- package/hotels/integrations/contracts/delete-hotel-integration.contract.ts +14 -0
- package/hotels/integrations/contracts/find-all-hotel-integrations.contract.ts +15 -0
- package/hotels/integrations/contracts/find-hotel-integration.contract.ts +15 -0
- package/hotels/integrations/contracts/index.ts +5 -0
- package/hotels/integrations/contracts/update-hotel-integration.contract.ts +21 -0
- package/hotels/integrations/hotel-integration.model.ts +80 -0
- package/hotels/integrations/hotel-integrations.api.ts +16 -0
- package/hotels/integrations/index.ts +3 -0
- package/hotels/location/hotel-location.model.ts +17 -0
- package/hotels/location/index.ts +1 -0
- package/hotels/policies/hotel-policy.model.ts +16 -0
- package/hotels/policies/index.ts +1 -0
- package/hotels/ratings/hotel-rating.model.ts +15 -0
- package/hotels/ratings/index.ts +1 -0
- package/hotels/sites/contracts/find-hotel-site-page-by-lang.contract.ts +3 -3
- package/hotels/sites/hotel-pages.api.ts +24 -0
- package/hotels/sites/index.ts +1 -0
- package/hotels/themes/contracts/find-hotel-theme.contract.ts +3 -3
- package/hotels/themes/hotel-themes.api.ts +20 -0
- package/hotels/themes/index.ts +1 -0
- package/package.json +1 -1
- package/permissions/contracts/create-permission.contract.ts +3 -7
- package/permissions/contracts/delete-permission.contract.ts +1 -2
- package/permissions/contracts/find-permission.contract.ts +2 -10
- package/permissions/contracts/update-permission.contract.ts +2 -2
- package/permissions/permission.models.ts +18 -31
- package/roles/contracts/create-role.contract.ts +3 -7
- package/roles/contracts/delete-role.contract.ts +1 -2
- package/roles/contracts/find-role.contract.ts +2 -2
- package/roles/contracts/update-role.contract.ts +2 -2
- package/roles/role.models.ts +26 -15
- package/translate/contracts/translate-object.contract.ts +3 -0
- package/build/permissions/permission.response.schema.js +0 -8
- package/common/models/uuid-array.schema.ts +0 -3
- package/hotels/hotel.model.ts +0 -14
- package/permissions/permission.response.schema.ts +0 -8
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { HTTP_METHODS } from '../../../common';
|
|
3
|
+
import { HOTEL_INTEGRATIONS_API, HOTEL_INTEGRATIONS_CONTROLLER } from '../hotel-integrations.api';
|
|
4
|
+
import {
|
|
5
|
+
HotelIntegrationDetailSchema,
|
|
6
|
+
HotelIntegrationWriteSchema,
|
|
7
|
+
} from '../hotel-integration.model';
|
|
8
|
+
|
|
9
|
+
export namespace CreateHotelIntegrationContract {
|
|
10
|
+
export const getUrl = HOTEL_INTEGRATIONS_API.create;
|
|
11
|
+
export const endpoint = HOTEL_INTEGRATIONS_CONTROLLER.endpoints.create;
|
|
12
|
+
export const httpMethod = HTTP_METHODS.post;
|
|
13
|
+
|
|
14
|
+
export const RequestSchema = HotelIntegrationWriteSchema;
|
|
15
|
+
export type TRequest = z.infer<typeof RequestSchema>;
|
|
16
|
+
|
|
17
|
+
export const ResponseSchema = HotelIntegrationDetailSchema;
|
|
18
|
+
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
19
|
+
|
|
20
|
+
export type TPathParams = { hotelId: string };
|
|
21
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { HTTP_METHODS } from '../../../common';
|
|
3
|
+
import { HOTEL_INTEGRATIONS_API, HOTEL_INTEGRATIONS_CONTROLLER } from '../hotel-integrations.api';
|
|
4
|
+
|
|
5
|
+
export namespace DeleteHotelIntegrationContract {
|
|
6
|
+
export const getUrl = HOTEL_INTEGRATIONS_API.delete;
|
|
7
|
+
export const endpoint = HOTEL_INTEGRATIONS_CONTROLLER.endpoints.delete;
|
|
8
|
+
export const httpMethod = HTTP_METHODS.delete;
|
|
9
|
+
|
|
10
|
+
export const ResponseSchema = z.void();
|
|
11
|
+
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
12
|
+
|
|
13
|
+
export type TPathParams = { hotelId: string; integrationId: string };
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { HTTP_METHODS } from '../../../common';
|
|
3
|
+
import { HOTEL_INTEGRATIONS_API, HOTEL_INTEGRATIONS_CONTROLLER } from '../hotel-integrations.api';
|
|
4
|
+
import { HotelIntegrationSchema } from '../hotel-integration.model';
|
|
5
|
+
|
|
6
|
+
export namespace FindAllHotelIntegrationsContract {
|
|
7
|
+
export const getUrl = HOTEL_INTEGRATIONS_API.findAll;
|
|
8
|
+
export const endpoint = HOTEL_INTEGRATIONS_CONTROLLER.endpoints.findAll;
|
|
9
|
+
export const httpMethod = HTTP_METHODS.get;
|
|
10
|
+
|
|
11
|
+
export const ResponseSchema = z.array(HotelIntegrationSchema);
|
|
12
|
+
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
13
|
+
|
|
14
|
+
export type TPathParams = { hotelId: string };
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { HTTP_METHODS } from '../../../common';
|
|
3
|
+
import { HOTEL_INTEGRATIONS_API, HOTEL_INTEGRATIONS_CONTROLLER } from '../hotel-integrations.api';
|
|
4
|
+
import { HotelIntegrationDetailSchema } from '../hotel-integration.model';
|
|
5
|
+
|
|
6
|
+
export namespace FindHotelIntegrationContract {
|
|
7
|
+
export const getUrl = HOTEL_INTEGRATIONS_API.findOne;
|
|
8
|
+
export const endpoint = HOTEL_INTEGRATIONS_CONTROLLER.endpoints.findOne;
|
|
9
|
+
export const httpMethod = HTTP_METHODS.get;
|
|
10
|
+
|
|
11
|
+
export const ResponseSchema = HotelIntegrationDetailSchema;
|
|
12
|
+
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
13
|
+
|
|
14
|
+
export type TPathParams = { hotelId: string; integrationId: string };
|
|
15
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './find-all-hotel-integrations.contract';
|
|
2
|
+
export * from './find-hotel-integration.contract';
|
|
3
|
+
export * from './create-hotel-integration.contract';
|
|
4
|
+
export * from './update-hotel-integration.contract';
|
|
5
|
+
export * from './delete-hotel-integration.contract';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { HTTP_METHODS } from '../../../common';
|
|
3
|
+
import { HOTEL_INTEGRATIONS_API, HOTEL_INTEGRATIONS_CONTROLLER } from '../hotel-integrations.api';
|
|
4
|
+
import {
|
|
5
|
+
HotelIntegrationDetailSchema,
|
|
6
|
+
HotelIntegrationWriteSchema,
|
|
7
|
+
} from '../hotel-integration.model';
|
|
8
|
+
|
|
9
|
+
export namespace UpdateHotelIntegrationContract {
|
|
10
|
+
export const getUrl = HOTEL_INTEGRATIONS_API.update;
|
|
11
|
+
export const endpoint = HOTEL_INTEGRATIONS_CONTROLLER.endpoints.update;
|
|
12
|
+
export const httpMethod = HTTP_METHODS.put;
|
|
13
|
+
|
|
14
|
+
export const RequestSchema = HotelIntegrationWriteSchema;
|
|
15
|
+
export type TRequest = z.infer<typeof RequestSchema>;
|
|
16
|
+
|
|
17
|
+
export const ResponseSchema = HotelIntegrationDetailSchema;
|
|
18
|
+
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
19
|
+
|
|
20
|
+
export type TPathParams = { hotelId: string; integrationId: string };
|
|
21
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { SlugSchema, TimestampSchema } from '../../common';
|
|
3
|
+
import {
|
|
4
|
+
HOTEL_INTEGRATION_CONNECTION_STATE_VALUES,
|
|
5
|
+
HOTEL_INTEGRATION_CREDENTIAL_STATUS_VALUES,
|
|
6
|
+
HOTEL_INTEGRATION_PROVIDER_VALUES,
|
|
7
|
+
HOTEL_INTEGRATION_SYNC_STATUS_VALUES,
|
|
8
|
+
} from '../constants';
|
|
9
|
+
import { OperaIntegrationConfigSchema } from './configs';
|
|
10
|
+
|
|
11
|
+
export const HotelIntegrationConfigSchema = z.discriminatedUnion('provider', [
|
|
12
|
+
OperaIntegrationConfigSchema,
|
|
13
|
+
]);
|
|
14
|
+
|
|
15
|
+
export const HotelIntegrationSchema = z.object({
|
|
16
|
+
alias: SlugSchema,
|
|
17
|
+
config: HotelIntegrationConfigSchema,
|
|
18
|
+
credentialId: z.uuid().nullable().optional(),
|
|
19
|
+
});
|
|
20
|
+
export type THotelIntegration = z.infer<typeof HotelIntegrationSchema>;
|
|
21
|
+
|
|
22
|
+
export const HotelIntegrationPersistedSchema = HotelIntegrationSchema.required({
|
|
23
|
+
credentialId: true,
|
|
24
|
+
}).extend({
|
|
25
|
+
id: z.uuid(),
|
|
26
|
+
secretHash: z.string().min(1),
|
|
27
|
+
secretSalt: z.string().min(1),
|
|
28
|
+
...TimestampSchema.shape,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export const HotelIntegrationWriteSchema = HotelIntegrationSchema;
|
|
32
|
+
export type THotelIntegrationWrite = z.infer<typeof HotelIntegrationWriteSchema>;
|
|
33
|
+
|
|
34
|
+
export const HotelIntegrationDetailSchema = HotelIntegrationPersistedSchema.omit({
|
|
35
|
+
secretHash: true,
|
|
36
|
+
secretSalt: true,
|
|
37
|
+
});
|
|
38
|
+
export type THotelIntegrationDetail = z.infer<typeof HotelIntegrationDetailSchema>;
|
|
39
|
+
|
|
40
|
+
export const HotelIntegrationHotelSchema = z
|
|
41
|
+
.object({
|
|
42
|
+
id: z.uuid(),
|
|
43
|
+
integrationId: z.uuid(),
|
|
44
|
+
hotelId: z.uuid(),
|
|
45
|
+
hotelExternalId: z.string(),
|
|
46
|
+
isActive: z.boolean().default(true),
|
|
47
|
+
})
|
|
48
|
+
.extend(TimestampSchema.shape);
|
|
49
|
+
export type THotelIntegrationHotel = z.infer<typeof HotelIntegrationHotelSchema>;
|
|
50
|
+
|
|
51
|
+
export const HotelIntegrationConnectionSchema = z
|
|
52
|
+
.object({
|
|
53
|
+
id: z.uuid(),
|
|
54
|
+
integrationId: z.uuid(),
|
|
55
|
+
connectionState: z.enum(HOTEL_INTEGRATION_CONNECTION_STATE_VALUES),
|
|
56
|
+
lastHeartbeatAt: z.date(),
|
|
57
|
+
lastSeenAt: z.date(),
|
|
58
|
+
lastSyncStatus: z.enum(HOTEL_INTEGRATION_SYNC_STATUS_VALUES),
|
|
59
|
+
lastSyncAt: z.date().nullable(),
|
|
60
|
+
failedAt: z.date().nullable(),
|
|
61
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
62
|
+
})
|
|
63
|
+
.extend(TimestampSchema.shape);
|
|
64
|
+
export type THotelIntegrationConnection = z.infer<typeof HotelIntegrationConnectionSchema>;
|
|
65
|
+
|
|
66
|
+
export const HotelIntegrationCredentialSchema = z
|
|
67
|
+
.object({
|
|
68
|
+
id: z.uuid(),
|
|
69
|
+
integrationId: z.uuid(),
|
|
70
|
+
provider: z.enum(HOTEL_INTEGRATION_PROVIDER_VALUES),
|
|
71
|
+
login: z.string().min(1),
|
|
72
|
+
encryptedSecret: z.string().min(1),
|
|
73
|
+
encryptionVersion: z.string().min(1),
|
|
74
|
+
status: z.enum(HOTEL_INTEGRATION_CREDENTIAL_STATUS_VALUES),
|
|
75
|
+
expiresAt: z.date().nullable(),
|
|
76
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
77
|
+
rotatedAt: z.date().nullable(),
|
|
78
|
+
})
|
|
79
|
+
.extend(TimestampSchema.shape);
|
|
80
|
+
export type THotelIntegrationCredential = z.infer<typeof HotelIntegrationCredentialSchema>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createApi, TController } from '../../common/utils';
|
|
2
|
+
|
|
3
|
+
export const HOTEL_INTEGRATIONS_CONTROLLER = {
|
|
4
|
+
prefix: 'hotels/by-id/:hotelId/integrations',
|
|
5
|
+
endpoints: {
|
|
6
|
+
findAll: 'findAll',
|
|
7
|
+
findOne: ':integrationId',
|
|
8
|
+
create: '',
|
|
9
|
+
update: ':integrationId',
|
|
10
|
+
delete: ':integrationId',
|
|
11
|
+
enable: ':integrationId/enable',
|
|
12
|
+
disable: ':integrationId/disable',
|
|
13
|
+
},
|
|
14
|
+
} as const satisfies TController;
|
|
15
|
+
|
|
16
|
+
export const HOTEL_INTEGRATIONS_API = createApi(HOTEL_INTEGRATIONS_CONTROLLER);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { TimestampSchema } from '../../common';
|
|
3
|
+
|
|
4
|
+
export const HotelLocationSchema = z
|
|
5
|
+
.object({
|
|
6
|
+
hotelId: z.uuid(),
|
|
7
|
+
countryCode: z.string().length(2),
|
|
8
|
+
regionCode: z.string().max(32).optional(),
|
|
9
|
+
city: z.string().min(1).max(128),
|
|
10
|
+
addressLine1: z.string().min(1).max(256),
|
|
11
|
+
addressLine2: z.string().max(256).optional(),
|
|
12
|
+
postalCode: z.string().max(16).optional(),
|
|
13
|
+
latitude: z.number().min(-90).max(90),
|
|
14
|
+
longitude: z.number().min(-180).max(180),
|
|
15
|
+
})
|
|
16
|
+
.extend(TimestampSchema.shape);
|
|
17
|
+
export type THotelLocation = z.infer<typeof HotelLocationSchema>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './hotel-location.model';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { TimestampSchema } from '../../common';
|
|
3
|
+
import { HOTEL_POLICY_TYPE_VALUES } from '../constants';
|
|
4
|
+
|
|
5
|
+
export const HotelPolicySchema = z
|
|
6
|
+
.object({
|
|
7
|
+
hotelId: z.uuid(),
|
|
8
|
+
policyType: z.enum(HOTEL_POLICY_TYPE_VALUES),
|
|
9
|
+
valueKey: z.string().min(1).optional(),
|
|
10
|
+
valueJson: z.record(z.string(), z.unknown()).optional(),
|
|
11
|
+
effectiveFrom: z.date().optional(),
|
|
12
|
+
effectiveTo: z.date().optional(),
|
|
13
|
+
})
|
|
14
|
+
.extend(TimestampSchema.shape);
|
|
15
|
+
|
|
16
|
+
export type THotelPolicy = z.infer<typeof HotelPolicySchema>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './hotel-policy.model';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
import { IsoDatetimeSchema, TimestampSchema } from '../../common';
|
|
3
|
+
import { HOTEL_RATING_SOURCE_VALUES } from '../constants';
|
|
4
|
+
|
|
5
|
+
export const HotelRatingSchema = z
|
|
6
|
+
.object({
|
|
7
|
+
hotelId: z.uuid(),
|
|
8
|
+
source: z.enum(HOTEL_RATING_SOURCE_VALUES),
|
|
9
|
+
value: z.number().min(0).max(10),
|
|
10
|
+
reviewsCount: z.number().int().nonnegative().optional(),
|
|
11
|
+
metadata: z.record(z.string(), z.unknown()).optional(),
|
|
12
|
+
})
|
|
13
|
+
.extend(TimestampSchema.shape);
|
|
14
|
+
|
|
15
|
+
export type THotelRating = z.infer<typeof HotelRatingSchema>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './hotel-rating.model';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS, LanguageKeysSchema } from '../../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { HOTEL_PAGES_PUBLIC_API, HOTEL_PAGES_PUBLIC_CONTROLLER } from '../hotel-pages.api';
|
|
4
4
|
import { PageLangTranslationSchema, PageSchema } from '../../../pages';
|
|
5
5
|
|
|
6
6
|
const FindHotelSitePageByLangContractRequestSchema = z.object({
|
|
@@ -14,8 +14,8 @@ const FindHotelSitePageByLangContractResponseSchema = PageSchema.omit({
|
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
export namespace FindHotelSitePageByLangContract {
|
|
17
|
-
export const getUrl =
|
|
18
|
-
export const endpoint =
|
|
17
|
+
export const getUrl = HOTEL_PAGES_PUBLIC_API.findBySlugAndLang;
|
|
18
|
+
export const endpoint = HOTEL_PAGES_PUBLIC_CONTROLLER.endpoints.findBySlugAndLang;
|
|
19
19
|
export const httpMethod = HTTP_METHODS.get;
|
|
20
20
|
|
|
21
21
|
export const RequestSchema = FindHotelSitePageByLangContractRequestSchema;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createApi, TController } from '../../common/utils';
|
|
2
|
+
|
|
3
|
+
export const HOTEL_PAGES_CONTROLLER = {
|
|
4
|
+
prefix: 'hotels/by-id/:hotelId/sites/pages',
|
|
5
|
+
endpoints: {
|
|
6
|
+
findMany: '',
|
|
7
|
+
findBySlug: ':slug',
|
|
8
|
+
findBySlugAndLang: ':slug/lang/:lang',
|
|
9
|
+
create: '',
|
|
10
|
+
update: ':slug',
|
|
11
|
+
delete: ':slug',
|
|
12
|
+
},
|
|
13
|
+
} as const satisfies TController;
|
|
14
|
+
|
|
15
|
+
export const HOTEL_PAGES_PUBLIC_CONTROLLER = {
|
|
16
|
+
prefix: 'hotels/by-slug/:hotelSlug/sites/pages',
|
|
17
|
+
endpoints: {
|
|
18
|
+
findBySlug: ':slug',
|
|
19
|
+
findBySlugAndLang: ':slug/lang/:lang',
|
|
20
|
+
},
|
|
21
|
+
} as const satisfies TController;
|
|
22
|
+
|
|
23
|
+
export const HOTEL_PAGES_API = createApi(HOTEL_PAGES_CONTROLLER);
|
|
24
|
+
export const HOTEL_PAGES_PUBLIC_API = createApi(HOTEL_PAGES_PUBLIC_CONTROLLER);
|
package/hotels/sites/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../../common';
|
|
3
3
|
import { ThemePersistedSchema } from '../theme.models';
|
|
4
|
-
import {
|
|
4
|
+
import { HOTEL_THEMES_PUBLIC_API, HOTEL_THEMES_PUBLIC_CONTROLLER } from '../hotel-themes.api';
|
|
5
5
|
|
|
6
6
|
export namespace FindHotelThemeContract {
|
|
7
|
-
export const getUrl =
|
|
8
|
-
export const endpoint =
|
|
7
|
+
export const getUrl = HOTEL_THEMES_PUBLIC_API.get;
|
|
8
|
+
export const endpoint = HOTEL_THEMES_PUBLIC_CONTROLLER.endpoints.get;
|
|
9
9
|
export const httpMethod = HTTP_METHODS.get;
|
|
10
10
|
|
|
11
11
|
export const ResponseSchema = ThemePersistedSchema;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createApi, TController } from '../../common/utils';
|
|
2
|
+
|
|
3
|
+
export const HOTEL_THEMES_CONTROLLER = {
|
|
4
|
+
prefix: 'hotels/by-id/:hotelId/theme',
|
|
5
|
+
endpoints: {
|
|
6
|
+
get: '',
|
|
7
|
+
upsert: '',
|
|
8
|
+
delete: '',
|
|
9
|
+
},
|
|
10
|
+
} as const satisfies TController;
|
|
11
|
+
|
|
12
|
+
export const HOTEL_THEMES_PUBLIC_CONTROLLER = {
|
|
13
|
+
prefix: 'hotels/by-slug/:hotelSlug/theme',
|
|
14
|
+
endpoints: {
|
|
15
|
+
get: '',
|
|
16
|
+
},
|
|
17
|
+
} as const satisfies TController;
|
|
18
|
+
|
|
19
|
+
export const HOTEL_THEMES_API = createApi(HOTEL_THEMES_CONTROLLER);
|
|
20
|
+
export const HOTEL_THEMES_PUBLIC_API = createApi(HOTEL_THEMES_PUBLIC_CONTROLLER);
|
package/hotels/themes/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
3
|
import { PERMISSIONS_API, PERMISSIONS_CONTROLLER } from '../permissions.api';
|
|
4
|
-
import {
|
|
4
|
+
import { PermissionWriteSchema, PermissionDetailSchema } from '../permission.models';
|
|
5
5
|
|
|
6
|
-
const CreatePermissionContractRequestSchema =
|
|
7
|
-
id: true,
|
|
8
|
-
createdAt: true,
|
|
9
|
-
updatedAt: true,
|
|
10
|
-
});
|
|
6
|
+
const CreatePermissionContractRequestSchema = PermissionWriteSchema;
|
|
11
7
|
|
|
12
8
|
export namespace CreatePermissionContract {
|
|
13
9
|
export const getUrl = PERMISSIONS_API.create;
|
|
@@ -17,6 +13,6 @@ export namespace CreatePermissionContract {
|
|
|
17
13
|
export const RequestSchema = CreatePermissionContractRequestSchema;
|
|
18
14
|
export type TRequest = z.infer<typeof RequestSchema>;
|
|
19
15
|
|
|
20
|
-
export const ResponseSchema =
|
|
16
|
+
export const ResponseSchema = PermissionDetailSchema;
|
|
21
17
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
22
18
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
3
|
import { PERMISSIONS_API, PERMISSIONS_CONTROLLER } from '../permissions.api';
|
|
4
|
-
import { PermissionWithTranslationsSchema } from '../permission.models';
|
|
5
4
|
|
|
6
5
|
export namespace DeletePermissionContract {
|
|
7
6
|
export const getUrl = PERMISSIONS_API.delete;
|
|
8
7
|
export const endpoint = PERMISSIONS_CONTROLLER.endpoints.delete;
|
|
9
8
|
export const httpMethod = HTTP_METHODS.delete;
|
|
10
9
|
|
|
11
|
-
export const ResponseSchema =
|
|
10
|
+
export const ResponseSchema = z.void();
|
|
12
11
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
13
12
|
}
|
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { PermissionDetailSchema } from '../permission.models';
|
|
4
4
|
import { PERMISSIONS_API, PERMISSIONS_CONTROLLER } from '../permissions.api';
|
|
5
5
|
|
|
6
|
-
// const FindPermissionContractResponseSchema = PersistedPermissionSchema.transform(
|
|
7
|
-
// ({ conditions, ...permission }) => ({
|
|
8
|
-
// ...permission,
|
|
9
|
-
// conditions: conditions === null ? undefined : conditions,
|
|
10
|
-
// }),
|
|
11
|
-
// );
|
|
12
|
-
|
|
13
6
|
export namespace FindPermissionContract {
|
|
14
7
|
export const getUrl = PERMISSIONS_API.find;
|
|
15
8
|
export const endpoint = PERMISSIONS_CONTROLLER.endpoints.find;
|
|
16
9
|
export const httpMethod = HTTP_METHODS.get;
|
|
17
10
|
|
|
18
|
-
|
|
19
|
-
export const ResponseSchema = PermissionWithTranslationsSchema;
|
|
11
|
+
export const ResponseSchema = PermissionDetailSchema;
|
|
20
12
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
21
13
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { PermissionDetailSchema } from '../permission.models';
|
|
4
4
|
import { PERMISSIONS_API, PERMISSIONS_CONTROLLER } from '../permissions.api';
|
|
5
5
|
import { CreatePermissionContract } from './create-permission.contract';
|
|
6
6
|
|
|
@@ -12,6 +12,6 @@ export namespace UpdatePermissionContract {
|
|
|
12
12
|
export const RequestSchema = CreatePermissionContract.RequestSchema;
|
|
13
13
|
export type TRequest = z.infer<typeof RequestSchema>;
|
|
14
14
|
|
|
15
|
-
export const ResponseSchema =
|
|
15
|
+
export const ResponseSchema = PermissionDetailSchema;
|
|
16
16
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
17
17
|
}
|
|
@@ -1,47 +1,34 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
|
-
import { AppAbility, TimestampSchema, makeTranslations } from '../common';
|
|
2
|
+
import { AppAbility, TimestampSchema, UuidSchema, makeTranslations } from '../common';
|
|
3
3
|
|
|
4
|
-
export const
|
|
5
|
-
.
|
|
6
|
-
.
|
|
7
|
-
.optional()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
val => {
|
|
11
|
-
if (val === undefined || val === null) return true;
|
|
12
|
-
try {
|
|
13
|
-
JSON.parse(val);
|
|
14
|
-
return true;
|
|
15
|
-
} catch {
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
{ params: { messageKey: 'errors.validation.invalidJson' } },
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
export const PermissionPersistedSchema = z
|
|
23
|
-
.object({
|
|
24
|
-
id: z.uuid(),
|
|
25
|
-
|
|
26
|
-
action: z.enum(AppAbility.ACTION_VALUES),
|
|
27
|
-
subject: z.enum(AppAbility.SUBJECT_VALUES),
|
|
28
|
-
conditions: JsonConditionsSchema,
|
|
29
|
-
})
|
|
30
|
-
.extend(TimestampSchema.shape);
|
|
4
|
+
export const PermissionSchema = z.object({
|
|
5
|
+
action: z.enum(AppAbility.ACTION_VALUES),
|
|
6
|
+
subject: z.enum(AppAbility.SUBJECT_VALUES),
|
|
7
|
+
conditions: z.json().nullable().optional(),
|
|
8
|
+
});
|
|
9
|
+
export type TPermission = z.infer<typeof PermissionSchema>;
|
|
31
10
|
|
|
11
|
+
export const PermissionPersistedSchema = PermissionSchema.required({ conditions: true }).extend({
|
|
12
|
+
id: UuidSchema,
|
|
13
|
+
...TimestampSchema.shape,
|
|
14
|
+
});
|
|
32
15
|
export type TPermissionPersisted = z.infer<typeof PermissionPersistedSchema>;
|
|
33
16
|
|
|
34
|
-
// V2 translations: all translatable fields are inside per-language translation object
|
|
35
17
|
export const PermissionTranslationsSchema = z.object({
|
|
36
18
|
name: z.string().min(3),
|
|
37
19
|
description: z.string().optional(),
|
|
38
20
|
});
|
|
39
21
|
export type TPermissionTranslations = z.infer<typeof PermissionTranslationsSchema>;
|
|
40
22
|
|
|
41
|
-
export const
|
|
23
|
+
export const PermissionWriteSchema = PermissionSchema.extend({
|
|
24
|
+
translations: makeTranslations(PermissionTranslationsSchema),
|
|
25
|
+
});
|
|
26
|
+
export type TPermissionWrite = z.infer<typeof PermissionWriteSchema>;
|
|
27
|
+
|
|
28
|
+
export const PermissionDetailSchema = PermissionPersistedSchema.extend({
|
|
42
29
|
translations: makeTranslations(PermissionTranslationsSchema),
|
|
43
30
|
});
|
|
44
|
-
export type
|
|
31
|
+
export type TPermissionDetail = z.infer<typeof PermissionDetailSchema>;
|
|
45
32
|
|
|
46
33
|
export const PermissionListItemSchema = PermissionPersistedSchema.extend({
|
|
47
34
|
name: z.string().nullable(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { RoleWriteSchema, RoleDetailSchema } from '../role.models';
|
|
4
4
|
import { ROLES_API, ROLES_CONTROLLER } from '../roles.api';
|
|
5
5
|
|
|
6
6
|
export namespace CreateRoleContract {
|
|
@@ -8,13 +8,9 @@ export namespace CreateRoleContract {
|
|
|
8
8
|
export const endpoint = ROLES_CONTROLLER.endpoints.create;
|
|
9
9
|
export const httpMethod = HTTP_METHODS.post;
|
|
10
10
|
|
|
11
|
-
export const RequestSchema =
|
|
12
|
-
id: true,
|
|
13
|
-
createdAt: true,
|
|
14
|
-
updatedAt: true,
|
|
15
|
-
});
|
|
11
|
+
export const RequestSchema = RoleWriteSchema;
|
|
16
12
|
export type TRequest = z.infer<typeof RequestSchema>;
|
|
17
13
|
|
|
18
|
-
export const ResponseSchema =
|
|
14
|
+
export const ResponseSchema = RoleDetailSchema;
|
|
19
15
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
20
16
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import { RoleWithTranslationsSchema } from '../role.models';
|
|
4
3
|
import { ROLES_API, ROLES_CONTROLLER } from '../roles.api';
|
|
5
4
|
|
|
6
5
|
export namespace DeleteRoleContract {
|
|
@@ -8,6 +7,6 @@ export namespace DeleteRoleContract {
|
|
|
8
7
|
export const endpoint = ROLES_CONTROLLER.endpoints.delete;
|
|
9
8
|
export const httpMethod = HTTP_METHODS.delete;
|
|
10
9
|
|
|
11
|
-
export const ResponseSchema =
|
|
10
|
+
export const ResponseSchema = z.void();
|
|
12
11
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
13
12
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { RoleDetailSchema } from '../role.models';
|
|
4
4
|
import { ROLES_API, ROLES_CONTROLLER } from '../roles.api';
|
|
5
5
|
|
|
6
6
|
export namespace FindRoleContract {
|
|
@@ -8,6 +8,6 @@ export namespace FindRoleContract {
|
|
|
8
8
|
export const endpoint = ROLES_CONTROLLER.endpoints.find;
|
|
9
9
|
export const httpMethod = HTTP_METHODS.get;
|
|
10
10
|
|
|
11
|
-
export const ResponseSchema =
|
|
11
|
+
export const ResponseSchema = RoleDetailSchema;
|
|
12
12
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
13
13
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
2
|
import { HTTP_METHODS } from '../../common';
|
|
3
|
-
import {
|
|
3
|
+
import { RoleDetailSchema } from '../role.models';
|
|
4
4
|
import { ROLES_API, ROLES_CONTROLLER } from '../roles.api';
|
|
5
5
|
import { CreateRoleContract } from './create-role.contract';
|
|
6
6
|
|
|
@@ -12,6 +12,6 @@ export namespace UpdateRoleContract {
|
|
|
12
12
|
export const RequestSchema = CreateRoleContract.RequestSchema;
|
|
13
13
|
export type TRequest = z.infer<typeof RequestSchema>;
|
|
14
14
|
|
|
15
|
-
export const ResponseSchema =
|
|
15
|
+
export const ResponseSchema = RoleDetailSchema;
|
|
16
16
|
export type TResponse = z.infer<typeof ResponseSchema>;
|
|
17
17
|
}
|
package/roles/role.models.ts
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
import * as z from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ROLE_TYPE_VALUES,
|
|
4
|
+
TimestampSchema,
|
|
5
|
+
UuidArraySchema,
|
|
6
|
+
UuidSchema,
|
|
7
|
+
makeTranslations,
|
|
8
|
+
} from '../common';
|
|
3
9
|
import { PermissionListItemSchema } from '../permissions';
|
|
4
10
|
|
|
5
|
-
export const
|
|
6
|
-
.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
})
|
|
12
|
-
.extend(TimestampSchema.shape);
|
|
13
|
-
export type TRolePersisted = z.infer<typeof RolePersistedSchema>;
|
|
11
|
+
export const RoleSchema = z.object({
|
|
12
|
+
type: z.enum(ROLE_TYPE_VALUES),
|
|
13
|
+
isActive: z.boolean().optional(),
|
|
14
|
+
isDefault: z.boolean().optional(),
|
|
15
|
+
});
|
|
16
|
+
export type TRole = z.infer<typeof RoleSchema>;
|
|
14
17
|
|
|
15
|
-
export const
|
|
16
|
-
|
|
18
|
+
export const RolePersistedSchema = RoleSchema.required({ isActive: true, isDefault: true }).extend({
|
|
19
|
+
id: UuidSchema,
|
|
20
|
+
...TimestampSchema.shape,
|
|
17
21
|
});
|
|
18
|
-
export type
|
|
22
|
+
export type TRolePersisted = z.infer<typeof RolePersistedSchema>;
|
|
19
23
|
|
|
20
24
|
export const RoleTranslationsSchema = z.object({
|
|
21
25
|
name: z.string().min(3),
|
|
@@ -23,10 +27,17 @@ export const RoleTranslationsSchema = z.object({
|
|
|
23
27
|
});
|
|
24
28
|
export type TRoleTranslations = z.infer<typeof RoleTranslationsSchema>;
|
|
25
29
|
|
|
26
|
-
export const
|
|
30
|
+
export const RoleWriteSchema = RoleSchema.extend({
|
|
27
31
|
translations: makeTranslations(RoleTranslationsSchema),
|
|
32
|
+
permissionIds: UuidArraySchema.optional(),
|
|
33
|
+
});
|
|
34
|
+
export type TRoleWrite = z.infer<typeof RoleWriteSchema>;
|
|
35
|
+
|
|
36
|
+
export const RoleDetailSchema = RolePersistedSchema.extend({
|
|
37
|
+
translations: makeTranslations(RoleTranslationsSchema),
|
|
38
|
+
permissionIds: UuidArraySchema.optional(),
|
|
28
39
|
});
|
|
29
|
-
export type
|
|
40
|
+
export type TRoleDetail = z.infer<typeof RoleDetailSchema>;
|
|
30
41
|
|
|
31
42
|
export const RoleListItemSchema = RolePersistedSchema.extend({
|
|
32
43
|
name: z.string().nullable(),
|