tychat-contracts 1.0.102 → 1.0.104
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/conversations/list-conversation-contacts-query.dto.d.ts.map +1 -1
- package/dist/conversations/list-conversation-contacts-query.dto.js +5 -25
- package/dist/patients/list-patients-query.dto.d.ts.map +1 -1
- package/dist/patients/list-patients-query.dto.js +5 -25
- package/dist/utils/parse-filters-from-query.util.d.ts +13 -0
- package/dist/utils/parse-filters-from-query.util.d.ts.map +1 -0
- package/dist/utils/parse-filters-from-query.util.js +74 -0
- package/package.json +1 -1
- package/src/conversations/list-conversation-contacts-query.dto.ts +7 -27
- package/src/patients/list-patients-query.dto.ts +7 -25
- package/src/utils/parse-filters-from-query.util.ts +80 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-conversation-contacts-query.dto.d.ts","sourceRoot":"","sources":["../../src/conversations/list-conversation-contacts-query.dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-conversation-contacts-query.dto.d.ts","sourceRoot":"","sources":["../../src/conversations/list-conversation-contacts-query.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,gCAAgC,EAAE,MAAM,0CAA0C,CAAC;AAE5F,qBAAa,gCAAgC;IAU3C,IAAI,CAAC,EAAE,MAAM,CAAC;IAad,KAAK,CAAC,EAAE,MAAM,CAAC;IAgBf,OAAO,CAAC,EAAE,gCAAgC,EAAE,CAAC;CAC9C"}
|
|
@@ -13,28 +13,8 @@ exports.ListConversationContactsQueryDto = void 0;
|
|
|
13
13
|
const swagger_1 = require("@nestjs/swagger");
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const parse_filters_from_query_util_1 = require("../utils/parse-filters-from-query.util");
|
|
16
17
|
const list_conversation_contacts_filters_dto_1 = require("./list-conversation-contacts-filters.dto");
|
|
17
|
-
function parseFiltersFromQuery(value) {
|
|
18
|
-
if (value === undefined || value === null || value === '') {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
return value;
|
|
23
|
-
}
|
|
24
|
-
if (typeof value === 'string') {
|
|
25
|
-
try {
|
|
26
|
-
const parsed = JSON.parse(value);
|
|
27
|
-
if (!Array.isArray(parsed)) {
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
return parsed;
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
18
|
class ListConversationContactsQueryDto {
|
|
39
19
|
page;
|
|
40
20
|
limit;
|
|
@@ -69,12 +49,12 @@ __decorate([
|
|
|
69
49
|
], ListConversationContactsQueryDto.prototype, "limit", void 0);
|
|
70
50
|
__decorate([
|
|
71
51
|
(0, swagger_1.ApiPropertyOptional)({
|
|
72
|
-
description: 'Lista `{ key, op, value }
|
|
73
|
-
type:
|
|
74
|
-
|
|
52
|
+
description: 'Lista `{ key, op, value }` em **uma única** query string JSON (recomendado no Swagger). Ex.: `[{"key":"conversationType","op":"==","value":"ia"}]`. Ops: ==, !=, >, <, >=, <=, in.',
|
|
53
|
+
type: String,
|
|
54
|
+
example: '[{"key":"intention","op":"==","value":"greeting"}]',
|
|
75
55
|
}),
|
|
76
56
|
(0, class_validator_1.IsOptional)(),
|
|
77
|
-
(0, class_transformer_1.Transform)(({ value }) =>
|
|
57
|
+
(0, class_transformer_1.Transform)(({ value }) => (0, parse_filters_from_query_util_1.parseFilterObjectsFromQuery)(value)),
|
|
78
58
|
(0, class_validator_1.IsArray)(),
|
|
79
59
|
(0, class_validator_1.ArrayMinSize)(0),
|
|
80
60
|
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-patients-query.dto.d.ts","sourceRoot":"","sources":["../../src/patients/list-patients-query.dto.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"list-patients-query.dto.d.ts","sourceRoot":"","sources":["../../src/patients/list-patients-query.dto.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,qBAAa,oBAAoB;IAU/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAad,KAAK,CAAC,EAAE,MAAM,CAAC;IAgBf,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;CAClC"}
|
|
@@ -13,28 +13,8 @@ exports.ListPatientsQueryDto = void 0;
|
|
|
13
13
|
const swagger_1 = require("@nestjs/swagger");
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const parse_filters_from_query_util_1 = require("../utils/parse-filters-from-query.util");
|
|
16
17
|
const list_patients_filters_dto_1 = require("./list-patients-filters.dto");
|
|
17
|
-
function parseFiltersFromQuery(value) {
|
|
18
|
-
if (value === undefined || value === null || value === '') {
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
if (Array.isArray(value)) {
|
|
22
|
-
return value;
|
|
23
|
-
}
|
|
24
|
-
if (typeof value === 'string') {
|
|
25
|
-
try {
|
|
26
|
-
const parsed = JSON.parse(value);
|
|
27
|
-
if (!Array.isArray(parsed)) {
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
|
-
return parsed;
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
18
|
class ListPatientsQueryDto {
|
|
39
19
|
page;
|
|
40
20
|
limit;
|
|
@@ -69,12 +49,12 @@ __decorate([
|
|
|
69
49
|
], ListPatientsQueryDto.prototype, "limit", void 0);
|
|
70
50
|
__decorate([
|
|
71
51
|
(0, swagger_1.ApiPropertyOptional)({
|
|
72
|
-
description: 'Lista de filtros `{ key, op, value }
|
|
73
|
-
type:
|
|
74
|
-
|
|
52
|
+
description: 'Lista de filtros `{ key, op, value }` em **uma única** query string JSON. Ex.: `[{"key":"cpf","op":"==","value":"12225217416"}]`. Operações: ==, !=, >, <, >=, <=, in (value array).',
|
|
53
|
+
type: String,
|
|
54
|
+
example: '[{"key":"cpf","op":"==","value":"12225217416"}]',
|
|
75
55
|
}),
|
|
76
56
|
(0, class_validator_1.IsOptional)(),
|
|
77
|
-
(0, class_transformer_1.Transform)(({ value }) =>
|
|
57
|
+
(0, class_transformer_1.Transform)(({ value }) => (0, parse_filters_from_query_util_1.parseFilterObjectsFromQuery)(value)),
|
|
78
58
|
(0, class_validator_1.IsArray)(),
|
|
79
59
|
(0, class_validator_1.ArrayMinSize)(0),
|
|
80
60
|
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normaliza o parâmetro de query `filters` para um array de objetos DTO.
|
|
3
|
+
*
|
|
4
|
+
* Aceita:
|
|
5
|
+
* - string JSON: `[{"key":"a","op":"==","value":"x"}]`
|
|
6
|
+
* - array de objetos (já parseado pelo framework)
|
|
7
|
+
* - array com um único string (JSON do array inteiro) — UI Swagger “array” com um item
|
|
8
|
+
* - array de strings, cada uma um JSON de um único objeto filtro
|
|
9
|
+
* - string JSON de um único objeto `{ key, op, value }` (comum quando o array externo
|
|
10
|
+
* serializa o objeto interno como string, ex.: Swagger/curl)
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseFilterObjectsFromQuery<T>(value: unknown): T[] | undefined;
|
|
13
|
+
//# sourceMappingURL=parse-filters-from-query.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-filters-from-query.util.d.ts","sourceRoot":"","sources":["../../src/utils/parse-filters-from-query.util.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,EAAE,GAAG,SAAS,CAoE9E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFilterObjectsFromQuery = parseFilterObjectsFromQuery;
|
|
4
|
+
/**
|
|
5
|
+
* Normaliza o parâmetro de query `filters` para um array de objetos DTO.
|
|
6
|
+
*
|
|
7
|
+
* Aceita:
|
|
8
|
+
* - string JSON: `[{"key":"a","op":"==","value":"x"}]`
|
|
9
|
+
* - array de objetos (já parseado pelo framework)
|
|
10
|
+
* - array com um único string (JSON do array inteiro) — UI Swagger “array” com um item
|
|
11
|
+
* - array de strings, cada uma um JSON de um único objeto filtro
|
|
12
|
+
* - string JSON de um único objeto `{ key, op, value }` (comum quando o array externo
|
|
13
|
+
* serializa o objeto interno como string, ex.: Swagger/curl)
|
|
14
|
+
*/
|
|
15
|
+
function parseFilterObjectsFromQuery(value) {
|
|
16
|
+
if (value === undefined || value === null || value === '') {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const asObjectArray = (arr) => {
|
|
20
|
+
if (!Array.isArray(arr))
|
|
21
|
+
return undefined;
|
|
22
|
+
if (arr.length === 0)
|
|
23
|
+
return [];
|
|
24
|
+
if (arr.every((item) => item !== null && typeof item === 'object' && !Array.isArray(item))) {
|
|
25
|
+
return arr;
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
};
|
|
29
|
+
if (typeof value === 'string') {
|
|
30
|
+
try {
|
|
31
|
+
const parsed = JSON.parse(value);
|
|
32
|
+
const direct = asObjectArray(parsed);
|
|
33
|
+
if (direct)
|
|
34
|
+
return direct;
|
|
35
|
+
if (parsed !== null &&
|
|
36
|
+
typeof parsed === 'object' &&
|
|
37
|
+
!Array.isArray(parsed)) {
|
|
38
|
+
return [parsed];
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (Array.isArray(value)) {
|
|
47
|
+
const direct = asObjectArray(value);
|
|
48
|
+
if (direct)
|
|
49
|
+
return direct;
|
|
50
|
+
if (value.length === 1 && typeof value[0] === 'string') {
|
|
51
|
+
return parseFilterObjectsFromQuery(value[0]);
|
|
52
|
+
}
|
|
53
|
+
if (value.length > 0 && value.every((v) => typeof v === 'string')) {
|
|
54
|
+
const out = [];
|
|
55
|
+
for (const s of value) {
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = JSON.parse(s);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
if (parsed === null ||
|
|
64
|
+
typeof parsed !== 'object' ||
|
|
65
|
+
Array.isArray(parsed)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
out.push(parsed);
|
|
69
|
+
}
|
|
70
|
+
return out;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
package/package.json
CHANGED
|
@@ -9,31 +9,9 @@ import {
|
|
|
9
9
|
Min,
|
|
10
10
|
ValidateNested,
|
|
11
11
|
} from 'class-validator';
|
|
12
|
+
import { parseFilterObjectsFromQuery } from '../utils/parse-filters-from-query.util';
|
|
12
13
|
import { ConversationContactListFilterDto } from './list-conversation-contacts-filters.dto';
|
|
13
14
|
|
|
14
|
-
function parseFiltersFromQuery(
|
|
15
|
-
value: unknown,
|
|
16
|
-
): ConversationContactListFilterDto[] | undefined {
|
|
17
|
-
if (value === undefined || value === null || value === '') {
|
|
18
|
-
return undefined;
|
|
19
|
-
}
|
|
20
|
-
if (Array.isArray(value)) {
|
|
21
|
-
return value as ConversationContactListFilterDto[];
|
|
22
|
-
}
|
|
23
|
-
if (typeof value === 'string') {
|
|
24
|
-
try {
|
|
25
|
-
const parsed = JSON.parse(value) as unknown;
|
|
26
|
-
if (!Array.isArray(parsed)) {
|
|
27
|
-
return undefined;
|
|
28
|
-
}
|
|
29
|
-
return parsed as ConversationContactListFilterDto[];
|
|
30
|
-
} catch {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return undefined;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
15
|
export class ListConversationContactsQueryDto {
|
|
38
16
|
@ApiPropertyOptional({
|
|
39
17
|
description: 'Número da página (iniciando em 1)',
|
|
@@ -61,12 +39,14 @@ export class ListConversationContactsQueryDto {
|
|
|
61
39
|
|
|
62
40
|
@ApiPropertyOptional({
|
|
63
41
|
description:
|
|
64
|
-
'Lista `{ key, op, value }
|
|
65
|
-
type:
|
|
66
|
-
|
|
42
|
+
'Lista `{ key, op, value }` em **uma única** query string JSON (recomendado no Swagger). Ex.: `[{"key":"conversationType","op":"==","value":"ia"}]`. Ops: ==, !=, >, <, >=, <=, in.',
|
|
43
|
+
type: String,
|
|
44
|
+
example: '[{"key":"intention","op":"==","value":"greeting"}]',
|
|
67
45
|
})
|
|
68
46
|
@IsOptional()
|
|
69
|
-
@Transform(({ value }) =>
|
|
47
|
+
@Transform(({ value }) =>
|
|
48
|
+
parseFilterObjectsFromQuery<ConversationContactListFilterDto>(value),
|
|
49
|
+
)
|
|
70
50
|
@IsArray()
|
|
71
51
|
@ArrayMinSize(0)
|
|
72
52
|
@ValidateNested({ each: true })
|
|
@@ -9,29 +9,9 @@ import {
|
|
|
9
9
|
Min,
|
|
10
10
|
ValidateNested,
|
|
11
11
|
} from 'class-validator';
|
|
12
|
+
import { parseFilterObjectsFromQuery } from '../utils/parse-filters-from-query.util';
|
|
12
13
|
import { PatientListFilterDto } from './list-patients-filters.dto';
|
|
13
14
|
|
|
14
|
-
function parseFiltersFromQuery(value: unknown): PatientListFilterDto[] | undefined {
|
|
15
|
-
if (value === undefined || value === null || value === '') {
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
if (Array.isArray(value)) {
|
|
19
|
-
return value as PatientListFilterDto[];
|
|
20
|
-
}
|
|
21
|
-
if (typeof value === 'string') {
|
|
22
|
-
try {
|
|
23
|
-
const parsed = JSON.parse(value) as unknown;
|
|
24
|
-
if (!Array.isArray(parsed)) {
|
|
25
|
-
return undefined;
|
|
26
|
-
}
|
|
27
|
-
return parsed as PatientListFilterDto[];
|
|
28
|
-
} catch {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
15
|
export class ListPatientsQueryDto {
|
|
36
16
|
@ApiPropertyOptional({
|
|
37
17
|
description: 'Número da página (iniciando em 1)',
|
|
@@ -59,12 +39,14 @@ export class ListPatientsQueryDto {
|
|
|
59
39
|
|
|
60
40
|
@ApiPropertyOptional({
|
|
61
41
|
description:
|
|
62
|
-
'Lista de filtros `{ key, op, value }
|
|
63
|
-
type:
|
|
64
|
-
|
|
42
|
+
'Lista de filtros `{ key, op, value }` em **uma única** query string JSON. Ex.: `[{"key":"cpf","op":"==","value":"12225217416"}]`. Operações: ==, !=, >, <, >=, <=, in (value array).',
|
|
43
|
+
type: String,
|
|
44
|
+
example: '[{"key":"cpf","op":"==","value":"12225217416"}]',
|
|
65
45
|
})
|
|
66
46
|
@IsOptional()
|
|
67
|
-
@Transform(({ value }) =>
|
|
47
|
+
@Transform(({ value }) =>
|
|
48
|
+
parseFilterObjectsFromQuery<PatientListFilterDto>(value),
|
|
49
|
+
)
|
|
68
50
|
@IsArray()
|
|
69
51
|
@ArrayMinSize(0)
|
|
70
52
|
@ValidateNested({ each: true })
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normaliza o parâmetro de query `filters` para um array de objetos DTO.
|
|
3
|
+
*
|
|
4
|
+
* Aceita:
|
|
5
|
+
* - string JSON: `[{"key":"a","op":"==","value":"x"}]`
|
|
6
|
+
* - array de objetos (já parseado pelo framework)
|
|
7
|
+
* - array com um único string (JSON do array inteiro) — UI Swagger “array” com um item
|
|
8
|
+
* - array de strings, cada uma um JSON de um único objeto filtro
|
|
9
|
+
* - string JSON de um único objeto `{ key, op, value }` (comum quando o array externo
|
|
10
|
+
* serializa o objeto interno como string, ex.: Swagger/curl)
|
|
11
|
+
*/
|
|
12
|
+
export function parseFilterObjectsFromQuery<T>(value: unknown): T[] | undefined {
|
|
13
|
+
if (value === undefined || value === null || value === '') {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const asObjectArray = (arr: unknown): T[] | undefined => {
|
|
18
|
+
if (!Array.isArray(arr)) return undefined;
|
|
19
|
+
if (arr.length === 0) return [];
|
|
20
|
+
if (
|
|
21
|
+
arr.every(
|
|
22
|
+
(item) =>
|
|
23
|
+
item !== null && typeof item === 'object' && !Array.isArray(item),
|
|
24
|
+
)
|
|
25
|
+
) {
|
|
26
|
+
return arr as T[];
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
if (typeof value === 'string') {
|
|
32
|
+
try {
|
|
33
|
+
const parsed = JSON.parse(value) as unknown;
|
|
34
|
+
const direct = asObjectArray(parsed);
|
|
35
|
+
if (direct) return direct;
|
|
36
|
+
if (
|
|
37
|
+
parsed !== null &&
|
|
38
|
+
typeof parsed === 'object' &&
|
|
39
|
+
!Array.isArray(parsed)
|
|
40
|
+
) {
|
|
41
|
+
return [parsed as T];
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
} catch {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
const direct = asObjectArray(value);
|
|
51
|
+
if (direct) return direct;
|
|
52
|
+
|
|
53
|
+
if (value.length === 1 && typeof value[0] === 'string') {
|
|
54
|
+
return parseFilterObjectsFromQuery<T>(value[0]);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (value.length > 0 && value.every((v) => typeof v === 'string')) {
|
|
58
|
+
const out: T[] = [];
|
|
59
|
+
for (const s of value) {
|
|
60
|
+
let parsed: unknown;
|
|
61
|
+
try {
|
|
62
|
+
parsed = JSON.parse(s);
|
|
63
|
+
} catch {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
if (
|
|
67
|
+
parsed === null ||
|
|
68
|
+
typeof parsed !== 'object' ||
|
|
69
|
+
Array.isArray(parsed)
|
|
70
|
+
) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
out.push(parsed as T);
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|