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.
- package/dist/appointments/available-slots-query.dto.d.ts +2 -0
- package/dist/appointments/available-slots-query.dto.d.ts.map +1 -1
- package/dist/appointments/available-slots-query.dto.js +20 -0
- package/dist/appointments/available-slots-response.dto.d.ts +18 -7
- package/dist/appointments/available-slots-response.dto.d.ts.map +1 -1
- package/dist/appointments/available-slots-response.dto.js +76 -27
- package/package.json +1 -1
- package/src/appointments/available-slots-query.dto.ts +19 -0
- package/src/appointments/available-slots-response.dto.ts +63 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"available-slots-query.dto.d.ts","sourceRoot":"","sources":["../../src/appointments/available-slots-query.dto.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
|
6
|
+
export declare class AvailableSlotsProcedureMonthDto {
|
|
6
7
|
month: string;
|
|
7
|
-
days:
|
|
8
|
+
days: AvailableSlotsDayHoursDto[];
|
|
8
9
|
}
|
|
9
|
-
export declare class
|
|
10
|
-
|
|
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":"
|
|
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.
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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.
|
|
21
|
+
exports.AvailableSlotsDayHoursDto = AvailableSlotsDayHoursDto;
|
|
20
22
|
__decorate([
|
|
21
23
|
(0, swagger_1.ApiProperty)({
|
|
22
|
-
description: '
|
|
23
|
-
example:
|
|
24
|
+
description: 'Dia do mês (1–31)',
|
|
25
|
+
example: 15,
|
|
24
26
|
}),
|
|
25
|
-
(0, class_validator_1.
|
|
26
|
-
(0, class_validator_1.
|
|
27
|
-
(0, class_validator_1.
|
|
28
|
-
__metadata("design:type",
|
|
29
|
-
],
|
|
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: '
|
|
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
|
-
],
|
|
40
|
-
class
|
|
41
|
+
], AvailableSlotsDayHoursDto.prototype, "hours", void 0);
|
|
42
|
+
class AvailableSlotsProcedureMonthDto {
|
|
41
43
|
month;
|
|
42
44
|
days;
|
|
43
45
|
}
|
|
44
|
-
exports.
|
|
46
|
+
exports.AvailableSlotsProcedureMonthDto = AvailableSlotsProcedureMonthDto;
|
|
45
47
|
__decorate([
|
|
46
48
|
(0, swagger_1.ApiProperty)({
|
|
47
|
-
description: 'Mês
|
|
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
|
-
],
|
|
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: '
|
|
58
|
-
type: [
|
|
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
|
-
],
|
|
63
|
-
class
|
|
64
|
-
|
|
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.
|
|
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: '
|
|
70
|
-
type: [
|
|
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
|
-
],
|
|
123
|
+
], AvailableSlotsProfessionalItemDto.prototype, "procedures", void 0);
|
package/package.json
CHANGED
|
@@ -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
|
-
|
|
14
|
+
/** Dia do mês com lista de horários (formato HH:mm). */
|
|
15
|
+
export class AvailableSlotsDayHoursDto {
|
|
10
16
|
@ApiProperty({
|
|
11
|
-
description: '
|
|
12
|
-
example:
|
|
17
|
+
description: 'Dia do mês (1–31)',
|
|
18
|
+
example: 15,
|
|
13
19
|
})
|
|
14
|
-
@
|
|
15
|
-
@
|
|
16
|
-
@
|
|
17
|
-
|
|
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
|
-
|
|
32
|
+
hours: string[];
|
|
28
33
|
}
|
|
29
34
|
|
|
30
|
-
export class
|
|
35
|
+
export class AvailableSlotsProcedureMonthDto {
|
|
31
36
|
@ApiProperty({
|
|
32
|
-
description: 'Mês
|
|
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
|
|
42
|
-
type: [
|
|
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
|
-
|
|
69
|
+
@ValidateNested({ each: true })
|
|
70
|
+
@Type(() => AvailableSlotsProcedureMonthDto)
|
|
71
|
+
slots: AvailableSlotsProcedureMonthDto[];
|
|
46
72
|
}
|
|
47
73
|
|
|
48
|
-
export class
|
|
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
|
-
|
|
52
|
-
type: [AvailableMonthSlotsDto],
|
|
90
|
+
description: 'Um item por procedimento solicitado',
|
|
91
|
+
type: [AvailableSlotsProcedureItemDto],
|
|
53
92
|
})
|
|
54
93
|
@IsArray()
|
|
55
|
-
|
|
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[];
|