@iveri/contracts 0.51.0 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@ import type { IsoDateTime } from '../../type/iso-date-time.type.js';
2
2
  import type { Nullable } from '../../type/nil.type.js';
3
3
  import type { UUID } from '../../type/uuid.type.js';
4
4
  import type { ClinicResourceStatus } from './clinic-resource-status.enum.js';
5
+ import type { ClinicWorkingPeriod } from './clinic-staff.type.js';
5
6
  import type { LocalizedText } from './localized-text.type.js';
6
7
  export interface ClinicLocation {
7
8
  id: UUID;
@@ -14,6 +15,10 @@ export interface ClinicLocation {
14
15
  /** The specialties this branch offers, which clients filter branches by. */
15
16
  specialtyIds: UUID[];
16
17
  status: ClinicResourceStatus;
18
+ /** When the doors are open, which a visitor reads. Bookable times come from the staff's hours. */
19
+ openingHours: ClinicWorkingPeriod[];
20
+ latitude: Nullable<number>;
21
+ longitude: Nullable<number>;
17
22
  createdAt: IsoDateTime;
18
23
  updatedAt: IsoDateTime;
19
24
  }
@@ -24,6 +29,9 @@ export interface CreateClinicLocationRequest {
24
29
  phone?: Nullable<string>;
25
30
  timeZone: string;
26
31
  specialtyIds?: UUID[];
32
+ openingHours?: ClinicWorkingPeriod[];
33
+ latitude?: Nullable<number>;
34
+ longitude?: Nullable<number>;
27
35
  }
28
36
  export interface UpdateClinicLocationRequest {
29
37
  name?: LocalizedText;
@@ -33,4 +41,7 @@ export interface UpdateClinicLocationRequest {
33
41
  timeZone?: string;
34
42
  specialtyIds?: UUID[];
35
43
  status?: ClinicResourceStatus;
44
+ openingHours?: ClinicWorkingPeriod[];
45
+ latitude?: Nullable<number>;
46
+ longitude?: Nullable<number>;
36
47
  }
@@ -3,12 +3,21 @@ import type { Nullable } from '../../type/nil.type.js';
3
3
  import type { UUID } from '../../type/uuid.type.js';
4
4
  import type { LocalizedText } from './localized-text.type.js';
5
5
  /** How a clinic presents itself to the public, and the rules for booking online. */
6
+ /** Where else a clinic can be found. WhatsApp is a phone number and the rest are addresses. */
7
+ export interface ClinicSocialLinks {
8
+ instagram: Nullable<string>;
9
+ facebook: Nullable<string>;
10
+ tiktok: Nullable<string>;
11
+ whatsapp: Nullable<string>;
12
+ }
6
13
  export interface ClinicProfile {
7
14
  id: UUID;
8
15
  /** The name its public address and app build use. Unique across every clinic. */
9
16
  slug: string;
10
17
  name: LocalizedText;
11
18
  tagline: Nullable<LocalizedText>;
19
+ about: Nullable<LocalizedText>;
20
+ socialLinks: Nullable<ClinicSocialLinks>;
12
21
  phone: Nullable<string>;
13
22
  email: Nullable<string>;
14
23
  /** The clinic's public website, which the links in its emails point at. No path, no trailing slash. */
@@ -28,6 +37,8 @@ export interface SaveClinicProfileRequest {
28
37
  slug: string;
29
38
  name: LocalizedText;
30
39
  tagline?: Nullable<LocalizedText>;
40
+ about?: Nullable<LocalizedText>;
41
+ socialLinks?: Nullable<ClinicSocialLinks>;
31
42
  phone?: Nullable<string>;
32
43
  email?: Nullable<string>;
33
44
  siteUrl?: Nullable<string>;
@@ -1,6 +1,10 @@
1
1
  import type { IsoDateTime } from '../../type/iso-date-time.type.js';
2
2
  import type { Nullable } from '../../type/nil.type.js';
3
3
  import type { UUID } from '../../type/uuid.type.js';
4
+ import type { ClinicMediaImage } from './clinic-media.type.js';
5
+ import type { ClinicSocialLinks } from './clinic-profile.type.js';
6
+ import type { ClinicWorkingPeriod } from './clinic-staff.type.js';
7
+ import type { ClinicTreatmentContent } from './clinic-treatment.type.js';
4
8
  import type { LocalizedText } from './localized-text.type.js';
5
9
  /**
6
10
  * What anybody on the internet may read.
@@ -12,6 +16,8 @@ export interface PublicClinic {
12
16
  slug: string;
13
17
  name: LocalizedText;
14
18
  tagline: Nullable<LocalizedText>;
19
+ about: Nullable<LocalizedText>;
20
+ socialLinks: Nullable<ClinicSocialLinks>;
15
21
  phone: Nullable<string>;
16
22
  email: Nullable<string>;
17
23
  bookingHorizonDays: number;
@@ -29,6 +35,9 @@ export interface PublicBranch {
29
35
  phone: Nullable<string>;
30
36
  timeZone: string;
31
37
  specialtyIds: UUID[];
38
+ openingHours: ClinicWorkingPeriod[];
39
+ latitude: Nullable<number>;
40
+ longitude: Nullable<number>;
32
41
  }
33
42
  export interface PublicTreatmentOption {
34
43
  id: UUID;
@@ -57,12 +66,18 @@ export interface PublicTreatment {
57
66
  isBookableOnline: boolean;
58
67
  options: PublicTreatmentOption[];
59
68
  promotion: Nullable<PublicTreatmentPromotion>;
69
+ content: ClinicTreatmentContent;
70
+ image: Nullable<ClinicMediaImage>;
60
71
  }
61
72
  export interface PublicSpecialist {
62
73
  id: UUID;
63
74
  displayName: string;
64
75
  locationId: UUID;
65
76
  treatmentIds: UUID[];
77
+ title: Nullable<LocalizedText>;
78
+ bio: Nullable<LocalizedText>;
79
+ experienceYears: Nullable<number>;
80
+ photo: Nullable<ClinicMediaImage>;
66
81
  }
67
82
  /** A promotion running today, biggest discount first. */
68
83
  export interface PublicPromotion {
@@ -1,7 +1,9 @@
1
1
  import type { IsoDateTime } from '../../type/iso-date-time.type.js';
2
2
  import type { Nullable } from '../../type/nil.type.js';
3
3
  import type { UUID } from '../../type/uuid.type.js';
4
+ import type { ClinicMediaImage } from './clinic-media.type.js';
4
5
  import type { ClinicResourceStatus } from './clinic-resource-status.enum.js';
6
+ import type { LocalizedText } from './localized-text.type.js';
5
7
  /** One stretch of a weekly schedule, read in the location's own time zone. */
6
8
  export interface ClinicWorkingPeriod {
7
9
  /** ISO weekday: 1 is Monday and 7 is Sunday. */
@@ -21,6 +23,10 @@ export interface ClinicStaffMember {
21
23
  /** The treatments this person may perform. */
22
24
  treatmentIds: UUID[];
23
25
  workingHours: ClinicWorkingPeriod[];
26
+ title: Nullable<LocalizedText>;
27
+ bio: Nullable<LocalizedText>;
28
+ experienceYears: Nullable<number>;
29
+ photo: Nullable<ClinicMediaImage>;
24
30
  createdAt: IsoDateTime;
25
31
  updatedAt: IsoDateTime;
26
32
  }
@@ -33,6 +39,9 @@ export interface UpdateClinicStaffMemberRequest {
33
39
  locationId?: UUID;
34
40
  displayName?: string;
35
41
  status?: ClinicResourceStatus;
42
+ title?: Nullable<LocalizedText>;
43
+ bio?: Nullable<LocalizedText>;
44
+ experienceYears?: Nullable<number>;
36
45
  }
37
46
  export interface ReplaceClinicStaffTreatmentsRequest {
38
47
  treatmentIds: UUID[];
@@ -1,6 +1,7 @@
1
1
  import type { IsoDateTime } from '../../type/iso-date-time.type.js';
2
2
  import type { Nullable } from '../../type/nil.type.js';
3
3
  import type { UUID } from '../../type/uuid.type.js';
4
+ import type { ClinicMediaImage } from './clinic-media.type.js';
4
5
  import type { ClinicResourceStatus } from './clinic-resource-status.enum.js';
5
6
  import type { LocalizedText } from './localized-text.type.js';
6
7
  /** One way of buying a treatment. A laser zone is an option; a treatment that does not vary has one. */
@@ -12,6 +13,20 @@ export interface ClinicTreatmentOption {
12
13
  priceMinor: number;
13
14
  sortOrder: number;
14
15
  }
16
+ export interface ClinicTreatmentFaq {
17
+ question: LocalizedText;
18
+ answer: LocalizedText;
19
+ }
20
+ /** What a treatment's page says about it. Every part may be left empty. */
21
+ export interface ClinicTreatmentContent {
22
+ benefits: LocalizedText[];
23
+ steps: LocalizedText[];
24
+ preparation: Nullable<LocalizedText>;
25
+ aftercare: Nullable<LocalizedText>;
26
+ faq: ClinicTreatmentFaq[];
27
+ /** How many sessions a course usually takes, which is advice and limits nothing. */
28
+ recommendedSessions: Nullable<number>;
29
+ }
15
30
  export interface ClinicTreatment {
16
31
  id: UUID;
17
32
  specialtyId: UUID;
@@ -27,6 +42,8 @@ export interface ClinicTreatment {
27
42
  isBookableOnline: boolean;
28
43
  status: ClinicResourceStatus;
29
44
  options: ClinicTreatmentOption[];
45
+ content: ClinicTreatmentContent;
46
+ image: Nullable<ClinicMediaImage>;
30
47
  createdAt: IsoDateTime;
31
48
  updatedAt: IsoDateTime;
32
49
  }
@@ -51,6 +68,7 @@ export interface CreateClinicTreatmentRequest {
51
68
  minDaysBetweenSessions?: Nullable<number>;
52
69
  isBookableOnline?: boolean;
53
70
  options: CreateClinicTreatmentOptionRequest[];
71
+ content?: ClinicTreatmentContent;
54
72
  }
55
73
  export interface UpdateClinicTreatmentRequest {
56
74
  specialtyId?: UUID;
@@ -61,4 +79,5 @@ export interface UpdateClinicTreatmentRequest {
61
79
  minDaysBetweenSessions?: Nullable<number>;
62
80
  isBookableOnline?: boolean;
63
81
  status?: ClinicResourceStatus;
82
+ content?: ClinicTreatmentContent;
64
83
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iveri/contracts",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "description": "Wire contracts shared by every Iveri backend and frontend. Zero runtime dependencies.",
5
5
  "license": "MIT",
6
6
  "repository": {