tychat-contracts 1.0.81 → 1.0.82

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.
@@ -1,5 +1,7 @@
1
1
  export declare class AvailableSlotsQueryDto {
2
2
  procedureIds: string[];
3
3
  userId?: string;
4
+ startDate?: string;
5
+ endDate?: string;
4
6
  }
5
7
  //# sourceMappingURL=available-slots-query.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"available-slots-query.dto.d.ts","sourceRoot":"","sources":["../../src/appointments/available-slots-query.dto.ts"],"names":[],"mappings":"AAQA,qBAAa,sBAAsB;IAYjC,YAAY,EAAE,MAAM,EAAE,CAAC;IASvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"available-slots-query.dto.d.ts","sourceRoot":"","sources":["../../src/appointments/available-slots-query.dto.ts"],"names":[],"mappings":"AASA,qBAAa,sBAAsB;IAYjC,YAAY,EAAE,MAAM,EAAE,CAAC;IASvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAShB,SAAS,CAAC,EAAE,MAAM,CAAC;IASnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -15,6 +15,8 @@ const class_validator_1 = require("class-validator");
15
15
  class AvailableSlotsQueryDto {
16
16
  procedureIds;
17
17
  userId;
18
+ startDate;
19
+ endDate;
18
20
  }
19
21
  exports.AvailableSlotsQueryDto = AvailableSlotsQueryDto;
20
22
  __decorate([
@@ -39,3 +41,21 @@ __decorate([
39
41
  (0, class_validator_1.IsUUID)('4'),
40
42
  __metadata("design:type", String)
41
43
  ], AvailableSlotsQueryDto.prototype, "userId", void 0);
44
+ __decorate([
45
+ (0, swagger_1.ApiPropertyOptional)({
46
+ description: 'Início do intervalo (YYYY-MM-DD). Com `endDate`, delimita o período. Se ambos forem omitidos, usa só o mês civil atual.',
47
+ example: '2026-03-01',
48
+ }),
49
+ (0, class_validator_1.IsOptional)(),
50
+ (0, class_validator_1.Matches)(/^\d{4}-\d{2}-\d{2}$/),
51
+ __metadata("design:type", String)
52
+ ], AvailableSlotsQueryDto.prototype, "startDate", void 0);
53
+ __decorate([
54
+ (0, swagger_1.ApiPropertyOptional)({
55
+ description: 'Fim do intervalo (YYYY-MM-DD), inclusivo. Se omitido com `startDate`, usa o fim do mês de `startDate`.',
56
+ example: '2026-03-31',
57
+ }),
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.Matches)(/^\d{4}-\d{2}-\d{2}$/),
60
+ __metadata("design:type", String)
61
+ ], AvailableSlotsQueryDto.prototype, "endDate", void 0);
@@ -1,12 +1,23 @@
1
- export declare class AvailableDaySlotsDto {
2
- date: string;
3
- slots: string[];
1
+ /** Dia do mês com lista de horários (formato HH:mm). */
2
+ export declare class AvailableSlotsDayHoursDto {
3
+ day: number;
4
+ hours: string[];
4
5
  }
5
- export declare class AvailableMonthSlotsDto {
6
+ export declare class AvailableSlotsProcedureMonthDto {
6
7
  month: string;
7
- days: AvailableDaySlotsDto[];
8
+ days: AvailableSlotsDayHoursDto[];
8
9
  }
9
- export declare class AvailableSlotsResponseDto {
10
- months: AvailableMonthSlotsDto[];
10
+ export declare class AvailableSlotsProcedureItemDto {
11
+ name: string;
12
+ slots: AvailableSlotsProcedureMonthDto[];
11
13
  }
14
+ export declare class AvailableSlotsProfessionalNameDto {
15
+ name: string;
16
+ }
17
+ export declare class AvailableSlotsProfessionalItemDto {
18
+ professional: AvailableSlotsProfessionalNameDto;
19
+ procedures: AvailableSlotsProcedureItemDto[];
20
+ }
21
+ /** Resposta de GET available-slots: array com um elemento (profissional + procedimentos). */
22
+ export type AvailableSlotsGroupedResponseDto = AvailableSlotsProfessionalItemDto[];
12
23
  //# sourceMappingURL=available-slots-response.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"available-slots-response.dto.d.ts","sourceRoot":"","sources":["../../src/appointments/available-slots-response.dto.ts"],"names":[],"mappings":"AAQA,qBAAa,oBAAoB;IAQ/B,IAAI,EAAE,MAAM,CAAC;IAUb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,sBAAsB;IAQjC,KAAK,EAAE,MAAM,CAAC;IAOd,IAAI,EAAE,oBAAoB,EAAE,CAAC;CAC9B;AAED,qBAAa,yBAAyB;IAOpC,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC"}
1
+ {"version":3,"file":"available-slots-response.dto.d.ts","sourceRoot":"","sources":["../../src/appointments/available-slots-response.dto.ts"],"names":[],"mappings":"AAaA,wDAAwD;AACxD,qBAAa,yBAAyB;IAQpC,GAAG,EAAE,MAAM,CAAC;IASZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,+BAA+B;IAQ1C,KAAK,EAAE,MAAM,CAAC;IASd,IAAI,EAAE,yBAAyB,EAAE,CAAC;CACnC;AAED,qBAAa,8BAA8B;IAOzC,IAAI,EAAE,MAAM,CAAC;IASb,KAAK,EAAE,+BAA+B,EAAE,CAAC;CAC1C;AAED,qBAAa,iCAAiC;IAM5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,iCAAiC;IAI5C,YAAY,EAAE,iCAAiC,CAAC;IAShD,UAAU,EAAE,8BAA8B,EAAE,CAAC;CAC9C;AAED,6FAA6F;AAC7F,MAAM,MAAM,gCAAgC,GAAG,iCAAiC,EAAE,CAAC"}
@@ -9,66 +9,115 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.AvailableSlotsResponseDto = exports.AvailableMonthSlotsDto = exports.AvailableDaySlotsDto = void 0;
12
+ exports.AvailableSlotsProfessionalItemDto = exports.AvailableSlotsProfessionalNameDto = exports.AvailableSlotsProcedureItemDto = exports.AvailableSlotsProcedureMonthDto = exports.AvailableSlotsDayHoursDto = void 0;
13
13
  const swagger_1 = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
- class AvailableDaySlotsDto {
16
- date;
17
- slots;
15
+ const class_transformer_1 = require("class-transformer");
16
+ /** Dia do mês com lista de horários (formato HH:mm). */
17
+ class AvailableSlotsDayHoursDto {
18
+ day;
19
+ hours;
18
20
  }
19
- exports.AvailableDaySlotsDto = AvailableDaySlotsDto;
21
+ exports.AvailableSlotsDayHoursDto = AvailableSlotsDayHoursDto;
20
22
  __decorate([
21
23
  (0, swagger_1.ApiProperty)({
22
- description: 'Data do dia disponível para agendamentos (formato YYYY-MM-DD)',
23
- example: '2026-03-10',
24
+ description: 'Dia do mês (1–31)',
25
+ example: 15,
24
26
  }),
25
- (0, class_validator_1.IsString)(),
26
- (0, class_validator_1.IsNotEmpty)(),
27
- (0, class_validator_1.Matches)(/^\d{4}-\d{2}-\d{2}$/),
28
- __metadata("design:type", String)
29
- ], AvailableDaySlotsDto.prototype, "date", void 0);
27
+ (0, class_validator_1.IsInt)(),
28
+ (0, class_validator_1.Min)(1),
29
+ (0, class_validator_1.Max)(31),
30
+ __metadata("design:type", Number)
31
+ ], AvailableSlotsDayHoursDto.prototype, "day", void 0);
30
32
  __decorate([
31
33
  (0, swagger_1.ApiProperty)({
32
- description: 'Lista de horários disponíveis para agendamento no dia (formato HH:mm)',
34
+ description: 'Horários disponíveis neste dia',
33
35
  example: ['08:00', '08:30', '09:00'],
34
36
  }),
35
37
  (0, class_validator_1.IsArray)(),
36
38
  (0, class_validator_1.IsString)({ each: true }),
37
39
  (0, class_validator_1.Matches)(/^\d{2}:\d{2}$/, { each: true }),
38
40
  __metadata("design:type", Array)
39
- ], AvailableDaySlotsDto.prototype, "slots", void 0);
40
- class AvailableMonthSlotsDto {
41
+ ], AvailableSlotsDayHoursDto.prototype, "hours", void 0);
42
+ class AvailableSlotsProcedureMonthDto {
41
43
  month;
42
44
  days;
43
45
  }
44
- exports.AvailableMonthSlotsDto = AvailableMonthSlotsDto;
46
+ exports.AvailableSlotsProcedureMonthDto = AvailableSlotsProcedureMonthDto;
45
47
  __decorate([
46
48
  (0, swagger_1.ApiProperty)({
47
- description: 'Mês de referência (formato YYYY-MM)',
49
+ description: 'Mês (YYYY-MM)',
48
50
  example: '2026-03',
49
51
  }),
50
52
  (0, class_validator_1.IsString)(),
51
53
  (0, class_validator_1.IsNotEmpty)(),
52
54
  (0, class_validator_1.Matches)(/^\d{4}-\d{2}$/),
53
55
  __metadata("design:type", String)
54
- ], AvailableMonthSlotsDto.prototype, "month", void 0);
56
+ ], AvailableSlotsProcedureMonthDto.prototype, "month", void 0);
57
+ __decorate([
58
+ (0, swagger_1.ApiProperty)({
59
+ description: 'Dias do mês com horários',
60
+ type: [AvailableSlotsDayHoursDto],
61
+ }),
62
+ (0, class_validator_1.IsArray)(),
63
+ (0, class_validator_1.ValidateNested)({ each: true }),
64
+ (0, class_transformer_1.Type)(() => AvailableSlotsDayHoursDto),
65
+ __metadata("design:type", Array)
66
+ ], AvailableSlotsProcedureMonthDto.prototype, "days", void 0);
67
+ class AvailableSlotsProcedureItemDto {
68
+ name;
69
+ slots;
70
+ }
71
+ exports.AvailableSlotsProcedureItemDto = AvailableSlotsProcedureItemDto;
72
+ __decorate([
73
+ (0, swagger_1.ApiProperty)({
74
+ description: 'Nome do procedimento',
75
+ example: 'Consulta de rotina',
76
+ }),
77
+ (0, class_validator_1.IsString)(),
78
+ (0, class_validator_1.IsNotEmpty)(),
79
+ __metadata("design:type", String)
80
+ ], AvailableSlotsProcedureItemDto.prototype, "name", void 0);
55
81
  __decorate([
56
82
  (0, swagger_1.ApiProperty)({
57
- description: 'Dias e horários disponíveis dentro do mês',
58
- type: [AvailableDaySlotsDto],
83
+ description: 'Disponibilidade por mês',
84
+ type: [AvailableSlotsProcedureMonthDto],
59
85
  }),
60
86
  (0, class_validator_1.IsArray)(),
87
+ (0, class_validator_1.ValidateNested)({ each: true }),
88
+ (0, class_transformer_1.Type)(() => AvailableSlotsProcedureMonthDto),
61
89
  __metadata("design:type", Array)
62
- ], AvailableMonthSlotsDto.prototype, "days", void 0);
63
- class AvailableSlotsResponseDto {
64
- months;
90
+ ], AvailableSlotsProcedureItemDto.prototype, "slots", void 0);
91
+ class AvailableSlotsProfessionalNameDto {
92
+ name;
93
+ }
94
+ exports.AvailableSlotsProfessionalNameDto = AvailableSlotsProfessionalNameDto;
95
+ __decorate([
96
+ (0, swagger_1.ApiProperty)({
97
+ description: 'Nome do profissional (vazio ou “Clínica” quando não filtrado por profissional)',
98
+ example: 'Dr. João Silva',
99
+ }),
100
+ (0, class_validator_1.IsString)(),
101
+ __metadata("design:type", String)
102
+ ], AvailableSlotsProfessionalNameDto.prototype, "name", void 0);
103
+ class AvailableSlotsProfessionalItemDto {
104
+ professional;
105
+ procedures;
65
106
  }
66
- exports.AvailableSlotsResponseDto = AvailableSlotsResponseDto;
107
+ exports.AvailableSlotsProfessionalItemDto = AvailableSlotsProfessionalItemDto;
108
+ __decorate([
109
+ (0, swagger_1.ApiProperty)({ type: AvailableSlotsProfessionalNameDto }),
110
+ (0, class_validator_1.ValidateNested)(),
111
+ (0, class_transformer_1.Type)(() => AvailableSlotsProfessionalNameDto),
112
+ __metadata("design:type", AvailableSlotsProfessionalNameDto)
113
+ ], AvailableSlotsProfessionalItemDto.prototype, "professional", void 0);
67
114
  __decorate([
68
115
  (0, swagger_1.ApiProperty)({
69
- description: 'Meses, dias e horários disponíveis para agendamentos nos próximos três meses',
70
- type: [AvailableMonthSlotsDto],
116
+ description: 'Um item por procedimento solicitado',
117
+ type: [AvailableSlotsProcedureItemDto],
71
118
  }),
72
119
  (0, class_validator_1.IsArray)(),
120
+ (0, class_validator_1.ValidateNested)({ each: true }),
121
+ (0, class_transformer_1.Type)(() => AvailableSlotsProcedureItemDto),
73
122
  __metadata("design:type", Array)
74
- ], AvailableSlotsResponseDto.prototype, "months", void 0);
123
+ ], AvailableSlotsProfessionalItemDto.prototype, "procedures", void 0);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tychat-contracts",
3
- "version": "1.0.81",
3
+ "version": "1.0.82",
4
4
  "description": "DTOs compartilhados com class-validator (API e microserviços)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -4,6 +4,7 @@ import {
4
4
  IsArray,
5
5
  IsOptional,
6
6
  IsUUID,
7
+ Matches,
7
8
  } from 'class-validator';
8
9
 
9
10
  export class AvailableSlotsQueryDto {
@@ -28,5 +29,23 @@ export class AvailableSlotsQueryDto {
28
29
  @IsOptional()
29
30
  @IsUUID('4')
30
31
  userId?: string;
32
+
33
+ @ApiPropertyOptional({
34
+ description:
35
+ 'Início do intervalo (YYYY-MM-DD). Com `endDate`, delimita o período. Se ambos forem omitidos, usa só o mês civil atual.',
36
+ example: '2026-03-01',
37
+ })
38
+ @IsOptional()
39
+ @Matches(/^\d{4}-\d{2}-\d{2}$/)
40
+ startDate?: string;
41
+
42
+ @ApiPropertyOptional({
43
+ description:
44
+ 'Fim do intervalo (YYYY-MM-DD), inclusivo. Se omitido com `startDate`, usa o fim do mês de `startDate`.',
45
+ example: '2026-03-31',
46
+ })
47
+ @IsOptional()
48
+ @Matches(/^\d{4}-\d{2}-\d{2}$/)
49
+ endDate?: string;
31
50
  }
32
51
 
@@ -1,35 +1,40 @@
1
1
  import { ApiProperty } from '@nestjs/swagger';
2
2
  import {
3
3
  IsArray,
4
+ IsInt,
4
5
  IsNotEmpty,
5
6
  IsString,
6
7
  Matches,
8
+ Min,
9
+ Max,
10
+ ValidateNested,
7
11
  } from 'class-validator';
12
+ import { Type } from 'class-transformer';
8
13
 
9
- export class AvailableDaySlotsDto {
14
+ /** Dia do mês com lista de horários (formato HH:mm). */
15
+ export class AvailableSlotsDayHoursDto {
10
16
  @ApiProperty({
11
- description: 'Data do dia disponível para agendamentos (formato YYYY-MM-DD)',
12
- example: '2026-03-10',
17
+ description: 'Dia do mês (1–31)',
18
+ example: 15,
13
19
  })
14
- @IsString()
15
- @IsNotEmpty()
16
- @Matches(/^\d{4}-\d{2}-\d{2}$/)
17
- date: string;
20
+ @IsInt()
21
+ @Min(1)
22
+ @Max(31)
23
+ day: number;
18
24
 
19
25
  @ApiProperty({
20
- description:
21
- 'Lista de horários disponíveis para agendamento no dia (formato HH:mm)',
26
+ description: 'Horários disponíveis neste dia',
22
27
  example: ['08:00', '08:30', '09:00'],
23
28
  })
24
29
  @IsArray()
25
30
  @IsString({ each: true })
26
31
  @Matches(/^\d{2}:\d{2}$/, { each: true })
27
- slots: string[];
32
+ hours: string[];
28
33
  }
29
34
 
30
- export class AvailableMonthSlotsDto {
35
+ export class AvailableSlotsProcedureMonthDto {
31
36
  @ApiProperty({
32
- description: 'Mês de referência (formato YYYY-MM)',
37
+ description: 'Mês (YYYY-MM)',
33
38
  example: '2026-03',
34
39
  })
35
40
  @IsString()
@@ -38,20 +43,58 @@ export class AvailableMonthSlotsDto {
38
43
  month: string;
39
44
 
40
45
  @ApiProperty({
41
- description: 'Dias e horários disponíveis dentro do mês',
42
- type: [AvailableDaySlotsDto],
46
+ description: 'Dias do mês com horários',
47
+ type: [AvailableSlotsDayHoursDto],
48
+ })
49
+ @IsArray()
50
+ @ValidateNested({ each: true })
51
+ @Type(() => AvailableSlotsDayHoursDto)
52
+ days: AvailableSlotsDayHoursDto[];
53
+ }
54
+
55
+ export class AvailableSlotsProcedureItemDto {
56
+ @ApiProperty({
57
+ description: 'Nome do procedimento',
58
+ example: 'Consulta de rotina',
59
+ })
60
+ @IsString()
61
+ @IsNotEmpty()
62
+ name: string;
63
+
64
+ @ApiProperty({
65
+ description: 'Disponibilidade por mês',
66
+ type: [AvailableSlotsProcedureMonthDto],
43
67
  })
44
68
  @IsArray()
45
- days: AvailableDaySlotsDto[];
69
+ @ValidateNested({ each: true })
70
+ @Type(() => AvailableSlotsProcedureMonthDto)
71
+ slots: AvailableSlotsProcedureMonthDto[];
46
72
  }
47
73
 
48
- export class AvailableSlotsResponseDto {
74
+ export class AvailableSlotsProfessionalNameDto {
75
+ @ApiProperty({
76
+ description: 'Nome do profissional (vazio ou “Clínica” quando não filtrado por profissional)',
77
+ example: 'Dr. João Silva',
78
+ })
79
+ @IsString()
80
+ name: string;
81
+ }
82
+
83
+ export class AvailableSlotsProfessionalItemDto {
84
+ @ApiProperty({ type: AvailableSlotsProfessionalNameDto })
85
+ @ValidateNested()
86
+ @Type(() => AvailableSlotsProfessionalNameDto)
87
+ professional: AvailableSlotsProfessionalNameDto;
88
+
49
89
  @ApiProperty({
50
- description:
51
- 'Meses, dias e horários disponíveis para agendamentos nos próximos três meses',
52
- type: [AvailableMonthSlotsDto],
90
+ description: 'Um item por procedimento solicitado',
91
+ type: [AvailableSlotsProcedureItemDto],
53
92
  })
54
93
  @IsArray()
55
- months: AvailableMonthSlotsDto[];
94
+ @ValidateNested({ each: true })
95
+ @Type(() => AvailableSlotsProcedureItemDto)
96
+ procedures: AvailableSlotsProcedureItemDto[];
56
97
  }
57
98
 
99
+ /** Resposta de GET available-slots: array com um elemento (profissional + procedimentos). */
100
+ export type AvailableSlotsGroupedResponseDto = AvailableSlotsProfessionalItemDto[];