@flusys/nestjs-form-builder 7.0.2 → 8.0.0-beta.1
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/config/index.d.ts +3 -3
- package/controllers/form-result.controller.d.ts +3 -3
- package/controllers/form.controller.d.ts +3 -3
- package/controllers/index.d.ts +2 -2
- package/docs/form-builder-swagger.config.d.ts +2 -2
- package/docs/index.d.ts +1 -1
- package/dtos/form.dto.d.ts +1 -1
- package/dtos/index.d.ts +2 -2
- package/entities/form-with-company.entity.d.ts +1 -1
- package/entities/form.entity.d.ts +1 -1
- package/entities/index.d.ts +7 -7
- package/enums/index.d.ts +1 -1
- package/fesm/262.js +1841 -0
- package/fesm/98.js +807 -0
- package/fesm/config/index.js +98 -3
- package/fesm/controllers/index.js +14 -2
- package/fesm/docs/index.js +171 -1
- package/fesm/dtos/index.js +571 -2
- package/fesm/entities/index.js +342 -10
- package/fesm/enums/index.js +38 -1
- package/fesm/index.js +482 -10
- package/fesm/interfaces/index.js +17 -3
- package/fesm/modules/index.js +178 -1
- package/fesm/runtime.js +85 -0
- package/fesm/services/index.js +35 -4
- package/index.d.ts +10 -10
- package/interfaces/form-builder-module.interface.d.ts +3 -3
- package/interfaces/form-result.interface.d.ts +1 -1
- package/interfaces/form.interface.d.ts +2 -2
- package/interfaces/index.d.ts +3 -3
- package/modules/form-builder.module.d.ts +2 -2
- package/modules/index.d.ts +1 -1
- package/package.json +26 -36
- package/services/form-builder-config.service.d.ts +4 -4
- package/services/form-builder-datasource.provider.d.ts +3 -3
- package/services/form-result.service.d.ts +6 -6
- package/services/form.service.d.ts +7 -7
- package/services/index.d.ts +4 -4
- package/utils/index.d.ts +2 -2
- package/utils/permission.utils.d.ts +1 -1
- package/cjs/config/event-actions.js +0 -33
- package/cjs/config/form-builder.constants.js +0 -13
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -38
- package/cjs/controllers/form-result.controller.js +0 -281
- package/cjs/controllers/form-result.controller.spec.js +0 -257
- package/cjs/controllers/form.controller.js +0 -231
- package/cjs/controllers/form.controller.spec.js +0 -212
- package/cjs/controllers/index.js +0 -19
- package/cjs/docs/form-builder-swagger.config.js +0 -150
- package/cjs/docs/form-builder-swagger.config.spec.js +0 -75
- package/cjs/docs/index.js +0 -11
- package/cjs/dtos/form-result.dto.js +0 -248
- package/cjs/dtos/form.dto.js +0 -270
- package/cjs/dtos/index.js +0 -19
- package/cjs/entities/form-result.entity.js +0 -100
- package/cjs/entities/form-with-company.entity.js +0 -65
- package/cjs/entities/form.entity.js +0 -127
- package/cjs/entities/index.js +0 -52
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/enums/form-access-type.enum.js +0 -19
- package/cjs/enums/index.js +0 -18
- package/cjs/index.js +0 -28
- package/cjs/interfaces/form-builder-module.interface.js +0 -4
- package/cjs/interfaces/form-result.interface.js +0 -4
- package/cjs/interfaces/form.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -20
- package/cjs/modules/form-builder.module.js +0 -136
- package/cjs/modules/form-builder.module.spec.js +0 -133
- package/cjs/modules/index.js +0 -18
- package/cjs/services/form-builder-config.service.js +0 -69
- package/cjs/services/form-builder-config.service.spec.js +0 -121
- package/cjs/services/form-builder-datasource.provider.js +0 -125
- package/cjs/services/form-builder-datasource.provider.spec.js +0 -147
- package/cjs/services/form-result.service.js +0 -366
- package/cjs/services/form-result.service.spec.js +0 -823
- package/cjs/services/form.service.js +0 -341
- package/cjs/services/form.service.spec.js +0 -746
- package/cjs/services/index.js +0 -21
- package/cjs/utils/computed-field.utils.js +0 -199
- package/cjs/utils/computed-field.utils.spec.js +0 -1205
- package/cjs/utils/index.js +0 -19
- package/cjs/utils/permission.utils.js +0 -44
- package/cjs/utils/permission.utils.spec.js +0 -118
- package/fesm/config/event-actions.js +0 -12
- package/fesm/config/form-builder.constants.js +0 -3
- package/fesm/config/message-keys.js +0 -20
- package/fesm/controllers/form-result.controller.js +0 -271
- package/fesm/controllers/form-result.controller.spec.js +0 -253
- package/fesm/controllers/form.controller.js +0 -221
- package/fesm/controllers/form.controller.spec.js +0 -208
- package/fesm/docs/form-builder-swagger.config.js +0 -146
- package/fesm/docs/form-builder-swagger.config.spec.js +0 -71
- package/fesm/dtos/form-result.dto.js +0 -215
- package/fesm/dtos/form.dto.js +0 -243
- package/fesm/entities/form-result.entity.js +0 -90
- package/fesm/entities/form-with-company.entity.js +0 -55
- package/fesm/entities/form.entity.js +0 -117
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/enums/form-access-type.enum.js +0 -9
- package/fesm/interfaces/form-builder-module.interface.js +0 -3
- package/fesm/interfaces/form-result.interface.js +0 -6
- package/fesm/interfaces/form.interface.js +0 -3
- package/fesm/modules/form-builder.module.js +0 -126
- package/fesm/modules/form-builder.module.spec.js +0 -129
- package/fesm/services/form-builder-config.service.js +0 -59
- package/fesm/services/form-builder-config.service.spec.js +0 -117
- package/fesm/services/form-builder-datasource.provider.js +0 -74
- package/fesm/services/form-builder-datasource.provider.spec.js +0 -143
- package/fesm/services/form-result.service.js +0 -356
- package/fesm/services/form-result.service.spec.js +0 -778
- package/fesm/services/form.service.js +0 -331
- package/fesm/services/form.service.spec.js +0 -701
- package/fesm/utils/computed-field.utils.js +0 -195
- package/fesm/utils/computed-field.utils.spec.js +0 -1201
- package/fesm/utils/index.js +0 -2
- package/fesm/utils/permission.utils.js +0 -42
- package/fesm/utils/permission.utils.spec.js +0 -114
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
/** Schema properties to exclude when company feature is disabled */ const COMPANY_SCHEMA_EXCLUSIONS = [
|
|
2
|
-
{
|
|
3
|
-
schemaName: 'CreateFormDto',
|
|
4
|
-
properties: [
|
|
5
|
-
'companyId'
|
|
6
|
-
]
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
schemaName: 'UpdateFormDto',
|
|
10
|
-
properties: [
|
|
11
|
-
'companyId'
|
|
12
|
-
]
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
schemaName: 'FormQueryDto',
|
|
16
|
-
properties: [
|
|
17
|
-
'companyId'
|
|
18
|
-
]
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
schemaName: 'FormResponseDto',
|
|
22
|
-
properties: [
|
|
23
|
-
'companyId'
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
];
|
|
27
|
-
/**
|
|
28
|
-
* Form Builder Module Swagger Configuration
|
|
29
|
-
* Use this with setupSwaggerDocs() from @flusys/nestjs-core
|
|
30
|
-
*
|
|
31
|
-
* @param bootstrapConfig - Bootstrap configuration to determine feature visibility
|
|
32
|
-
* @returns Swagger configuration with appropriate excludeSchemaProperties based on enableCompanyFeature
|
|
33
|
-
*/ export function formBuilderSwaggerConfig(bootstrapConfig) {
|
|
34
|
-
const enableCompanyFeature = bootstrapConfig?.enableCompanyFeature ?? true;
|
|
35
|
-
const isMultiTenant = bootstrapConfig?.databaseMode === 'multi-tenant';
|
|
36
|
-
const multiTenantNote = isMultiTenant ? `\n> **Multi-Tenant Mode**: Include \`x-tenant-id\` header to target a specific tenant database.\n` : '';
|
|
37
|
-
return {
|
|
38
|
-
title: 'Form Builder API',
|
|
39
|
-
description: `
|
|
40
|
-
# Form Builder API
|
|
41
|
-
${multiTenantNote}
|
|
42
|
-
|
|
43
|
-
Dynamic form builder with schema versioning, conditional logic, and access control.
|
|
44
|
-
|
|
45
|
-
## Features
|
|
46
|
-
|
|
47
|
-
### 📋 Form Management
|
|
48
|
-
- Create and manage dynamic forms
|
|
49
|
-
- Schema versioning for form updates
|
|
50
|
-
- Slug-based URLs for sharing${enableCompanyFeature ? '\n- **Company isolation**' : ''}
|
|
51
|
-
|
|
52
|
-
### 🔒 Access Control
|
|
53
|
-
- **Public**: No authentication required
|
|
54
|
-
- **Authenticated**: JWT authentication required
|
|
55
|
-
- **Action Group**: Permission-based access via IAM
|
|
56
|
-
|
|
57
|
-
### 📊 Form Results
|
|
58
|
-
- Submit and track form responses
|
|
59
|
-
- Draft support for partial submissions
|
|
60
|
-
- Schema snapshot preservation${enableCompanyFeature ? '\n- **Company-level permissions**' : ''}
|
|
61
|
-
|
|
62
|
-
### 🔀 Conditional Logic
|
|
63
|
-
- Show/hide fields based on values
|
|
64
|
-
- Show/hide sections dynamically
|
|
65
|
-
- Jump to sections based on conditions
|
|
66
|
-
- Conditional required validation
|
|
67
|
-
${enableCompanyFeature ? `
|
|
68
|
-
## Multi-Tenant Support
|
|
69
|
-
|
|
70
|
-
Forms and results are automatically isolated by:
|
|
71
|
-
- **Company ID**: Company-level data isolation
|
|
72
|
-
|
|
73
|
-
All queries automatically filter by current user's company context.
|
|
74
|
-
` : ''}
|
|
75
|
-
## Form Access Types
|
|
76
|
-
|
|
77
|
-
### Public Forms
|
|
78
|
-
- No authentication required
|
|
79
|
-
- Anyone can view and submit
|
|
80
|
-
- Use \`/form-builder/form/public/:id\` to get form
|
|
81
|
-
- Use \`/form-builder/result/submit-public\` to submit
|
|
82
|
-
|
|
83
|
-
### Authenticated Forms
|
|
84
|
-
- JWT authentication required
|
|
85
|
-
- User must be logged in
|
|
86
|
-
- Use \`/form-builder/form/authenticated/:id\` to get form
|
|
87
|
-
- Use \`/form-builder/result/submit\` to submit
|
|
88
|
-
|
|
89
|
-
### Action Group Forms
|
|
90
|
-
- Permission-based access via IAM
|
|
91
|
-
- User must have specific permissions
|
|
92
|
-
- Use \`/form-builder/form/authenticated/:id\` to get form
|
|
93
|
-
- Use \`/form-builder/result/submit\` to submit
|
|
94
|
-
|
|
95
|
-
## Draft Support
|
|
96
|
-
|
|
97
|
-
Save form progress and complete later:
|
|
98
|
-
1. Submit with \`isDraft: true\` to save draft
|
|
99
|
-
2. Get draft with \`/form-builder/result/my-draft\`
|
|
100
|
-
3. Update draft with \`/form-builder/result/update-draft\`
|
|
101
|
-
4. Finalize by setting \`isDraft: false\`
|
|
102
|
-
|
|
103
|
-
## Response Format
|
|
104
|
-
|
|
105
|
-
All endpoints return standardized responses with success status, data, message, and timestamp.
|
|
106
|
-
|
|
107
|
-
## Error Handling
|
|
108
|
-
|
|
109
|
-
Errors return structured responses with success false, error message, error code, and timestamp.
|
|
110
|
-
|
|
111
|
-
## Common Error Codes
|
|
112
|
-
|
|
113
|
-
- **400 Bad Request**: Invalid input data
|
|
114
|
-
- **401 Unauthorized**: Missing or invalid authentication
|
|
115
|
-
- **403 Forbidden**: Insufficient permissions or wrong access type
|
|
116
|
-
- **404 Not Found**: Form or result not found
|
|
117
|
-
- **500 Internal Server Error**: Server error
|
|
118
|
-
|
|
119
|
-
## API Endpoints
|
|
120
|
-
|
|
121
|
-
All form builder endpoints are prefixed with \`/form-builder\`:
|
|
122
|
-
- \`/form-builder/form/*\` - Form management
|
|
123
|
-
- \`/form-builder/result/*\` - Form result/submission management
|
|
124
|
-
|
|
125
|
-
## Examples
|
|
126
|
-
|
|
127
|
-
### Get Form Access Info
|
|
128
|
-
|
|
129
|
-
POST /form-builder/form/access-info/:id
|
|
130
|
-
Returns access type and requirements (no auth required)
|
|
131
|
-
|
|
132
|
-
### Submit Public Form
|
|
133
|
-
|
|
134
|
-
POST /form-builder/result/submit-public with JSON body containing formId and formData
|
|
135
|
-
|
|
136
|
-
### Submit Authenticated Form
|
|
137
|
-
|
|
138
|
-
POST /form-builder/result/submit with JWT token and JSON body containing formId and formData
|
|
139
|
-
`,
|
|
140
|
-
version: '1.0',
|
|
141
|
-
path: 'api/docs/form-builder',
|
|
142
|
-
bearerAuth: true,
|
|
143
|
-
excludeTags: [],
|
|
144
|
-
excludeSchemaProperties: enableCompanyFeature ? undefined : COMPANY_SCHEMA_EXCLUSIONS
|
|
145
|
-
};
|
|
146
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { formBuilderSwaggerConfig } from './form-builder-swagger.config';
|
|
2
|
-
describe('formBuilderSwaggerConfig', ()=>{
|
|
3
|
-
it('should default to company feature enabled and single-database mode when no config is given', ()=>{
|
|
4
|
-
const config = formBuilderSwaggerConfig();
|
|
5
|
-
expect(config.title).toBe('Form Builder API');
|
|
6
|
-
expect(config.path).toBe('api/docs/form-builder');
|
|
7
|
-
expect(config.bearerAuth).toBe(true);
|
|
8
|
-
expect(config.excludeTags).toEqual([]);
|
|
9
|
-
expect(config.excludeSchemaProperties).toBeUndefined();
|
|
10
|
-
expect(config.description).not.toContain('Multi-Tenant Mode');
|
|
11
|
-
});
|
|
12
|
-
it('should exclude companyId schema properties when the company feature is disabled', ()=>{
|
|
13
|
-
const config = formBuilderSwaggerConfig({
|
|
14
|
-
enableCompanyFeature: false
|
|
15
|
-
});
|
|
16
|
-
expect(config.excludeSchemaProperties).toEqual([
|
|
17
|
-
{
|
|
18
|
-
schemaName: 'CreateFormDto',
|
|
19
|
-
properties: [
|
|
20
|
-
'companyId'
|
|
21
|
-
]
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
schemaName: 'UpdateFormDto',
|
|
25
|
-
properties: [
|
|
26
|
-
'companyId'
|
|
27
|
-
]
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
schemaName: 'FormQueryDto',
|
|
31
|
-
properties: [
|
|
32
|
-
'companyId'
|
|
33
|
-
]
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
schemaName: 'FormResponseDto',
|
|
37
|
-
properties: [
|
|
38
|
-
'companyId'
|
|
39
|
-
]
|
|
40
|
-
}
|
|
41
|
-
]);
|
|
42
|
-
});
|
|
43
|
-
it('should not exclude any schema properties when the company feature is enabled', ()=>{
|
|
44
|
-
const config = formBuilderSwaggerConfig({
|
|
45
|
-
enableCompanyFeature: true
|
|
46
|
-
});
|
|
47
|
-
expect(config.excludeSchemaProperties).toBeUndefined();
|
|
48
|
-
});
|
|
49
|
-
it('should describe company isolation and multi-tenant support only when the company feature is enabled', ()=>{
|
|
50
|
-
const withCompany = formBuilderSwaggerConfig({
|
|
51
|
-
enableCompanyFeature: true
|
|
52
|
-
});
|
|
53
|
-
const withoutCompany = formBuilderSwaggerConfig({
|
|
54
|
-
enableCompanyFeature: false
|
|
55
|
-
});
|
|
56
|
-
expect(withCompany.description).toContain('Company isolation');
|
|
57
|
-
expect(withCompany.description).toContain('## Multi-Tenant Support');
|
|
58
|
-
expect(withoutCompany.description).not.toContain('Company isolation');
|
|
59
|
-
expect(withoutCompany.description).not.toContain('## Multi-Tenant Support');
|
|
60
|
-
});
|
|
61
|
-
it('should mention multi-tenant mode in the description only for multi-tenant database mode', ()=>{
|
|
62
|
-
const multiTenant = formBuilderSwaggerConfig({
|
|
63
|
-
databaseMode: 'multi-tenant'
|
|
64
|
-
});
|
|
65
|
-
const single = formBuilderSwaggerConfig({
|
|
66
|
-
databaseMode: 'single'
|
|
67
|
-
});
|
|
68
|
-
expect(multiTenant.description).toContain('Multi-Tenant Mode');
|
|
69
|
-
expect(single.description).not.toContain('Multi-Tenant Mode');
|
|
70
|
-
});
|
|
71
|
-
});
|
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
24
|
-
import { ApiProperty, PartialType } from '@nestjs/swagger';
|
|
25
|
-
import { Expose } from 'class-transformer';
|
|
26
|
-
import { IsBoolean, IsInt, IsNotEmpty, IsObject, IsOptional, IsUUID, Min } from 'class-validator';
|
|
27
|
-
export class SubmitFormDto {
|
|
28
|
-
constructor(){
|
|
29
|
-
_define_property(this, "formId", void 0);
|
|
30
|
-
_define_property(this, "data", void 0);
|
|
31
|
-
_define_property(this, "isDraft", void 0);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
_ts_decorate([
|
|
35
|
-
ApiProperty({
|
|
36
|
-
description: 'Form ID to submit',
|
|
37
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
38
|
-
}),
|
|
39
|
-
IsUUID(),
|
|
40
|
-
IsNotEmpty(),
|
|
41
|
-
_ts_metadata("design:type", String)
|
|
42
|
-
], SubmitFormDto.prototype, "formId", void 0);
|
|
43
|
-
_ts_decorate([
|
|
44
|
-
ApiProperty({
|
|
45
|
-
description: 'Submitted form data (field values)',
|
|
46
|
-
example: {
|
|
47
|
-
field1: 'value1',
|
|
48
|
-
field2: 123
|
|
49
|
-
}
|
|
50
|
-
}),
|
|
51
|
-
IsObject(),
|
|
52
|
-
IsNotEmpty(),
|
|
53
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
54
|
-
], SubmitFormDto.prototype, "data", void 0);
|
|
55
|
-
_ts_decorate([
|
|
56
|
-
ApiProperty({
|
|
57
|
-
description: 'Save as draft instead of final submission',
|
|
58
|
-
default: false,
|
|
59
|
-
required: false
|
|
60
|
-
}),
|
|
61
|
-
IsBoolean(),
|
|
62
|
-
IsOptional(),
|
|
63
|
-
_ts_metadata("design:type", Boolean)
|
|
64
|
-
], SubmitFormDto.prototype, "isDraft", void 0);
|
|
65
|
-
export class CreateFormResultDto extends SubmitFormDto {
|
|
66
|
-
constructor(...args){
|
|
67
|
-
super(...args), _define_property(this, "schemaVersionSnapshot", void 0), _define_property(this, "schemaVersion", void 0), _define_property(this, "submittedById", void 0);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
_ts_decorate([
|
|
71
|
-
ApiProperty({
|
|
72
|
-
description: 'Schema snapshot at submission time',
|
|
73
|
-
required: false
|
|
74
|
-
}),
|
|
75
|
-
IsObject(),
|
|
76
|
-
IsOptional(),
|
|
77
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
78
|
-
], CreateFormResultDto.prototype, "schemaVersionSnapshot", void 0);
|
|
79
|
-
_ts_decorate([
|
|
80
|
-
ApiProperty({
|
|
81
|
-
description: 'Schema version at submission time',
|
|
82
|
-
required: false
|
|
83
|
-
}),
|
|
84
|
-
IsOptional(),
|
|
85
|
-
_ts_metadata("design:type", Number)
|
|
86
|
-
], CreateFormResultDto.prototype, "schemaVersion", void 0);
|
|
87
|
-
_ts_decorate([
|
|
88
|
-
ApiProperty({
|
|
89
|
-
description: 'User who submitted (null for public)',
|
|
90
|
-
required: false
|
|
91
|
-
}),
|
|
92
|
-
IsUUID(),
|
|
93
|
-
IsOptional(),
|
|
94
|
-
_ts_metadata("design:type", Object)
|
|
95
|
-
], CreateFormResultDto.prototype, "submittedById", void 0);
|
|
96
|
-
export class UpdateFormResultDto extends PartialType(CreateFormResultDto) {
|
|
97
|
-
constructor(...args){
|
|
98
|
-
super(...args), _define_property(this, "id", void 0);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
_ts_decorate([
|
|
102
|
-
ApiProperty({
|
|
103
|
-
description: 'Form Result ID',
|
|
104
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
105
|
-
}),
|
|
106
|
-
IsUUID(),
|
|
107
|
-
IsNotEmpty(),
|
|
108
|
-
_ts_metadata("design:type", String)
|
|
109
|
-
], UpdateFormResultDto.prototype, "id", void 0);
|
|
110
|
-
export class GetMyDraftDto {
|
|
111
|
-
constructor(){
|
|
112
|
-
_define_property(this, "formId", void 0);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
_ts_decorate([
|
|
116
|
-
ApiProperty({
|
|
117
|
-
description: 'Form ID to get draft for',
|
|
118
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
119
|
-
}),
|
|
120
|
-
IsUUID(),
|
|
121
|
-
IsNotEmpty(),
|
|
122
|
-
_ts_metadata("design:type", String)
|
|
123
|
-
], GetMyDraftDto.prototype, "formId", void 0);
|
|
124
|
-
export class UpdateDraftDto extends SubmitFormDto {
|
|
125
|
-
constructor(...args){
|
|
126
|
-
super(...args), _define_property(this, "draftId", void 0);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
_ts_decorate([
|
|
130
|
-
ApiProperty({
|
|
131
|
-
description: 'Draft ID to update',
|
|
132
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
133
|
-
}),
|
|
134
|
-
IsUUID(),
|
|
135
|
-
IsNotEmpty(),
|
|
136
|
-
_ts_metadata("design:type", String)
|
|
137
|
-
], UpdateDraftDto.prototype, "draftId", void 0);
|
|
138
|
-
export class GetResultsByFormDto {
|
|
139
|
-
constructor(){
|
|
140
|
-
_define_property(this, "formId", void 0);
|
|
141
|
-
_define_property(this, "page", void 0);
|
|
142
|
-
_define_property(this, "pageSize", void 0);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
_ts_decorate([
|
|
146
|
-
ApiProperty({
|
|
147
|
-
description: 'Form ID to filter results',
|
|
148
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
149
|
-
}),
|
|
150
|
-
IsUUID(),
|
|
151
|
-
IsNotEmpty(),
|
|
152
|
-
_ts_metadata("design:type", String)
|
|
153
|
-
], GetResultsByFormDto.prototype, "formId", void 0);
|
|
154
|
-
_ts_decorate([
|
|
155
|
-
ApiProperty({
|
|
156
|
-
description: 'Page number (0-based)',
|
|
157
|
-
default: 0,
|
|
158
|
-
required: false
|
|
159
|
-
}),
|
|
160
|
-
IsInt(),
|
|
161
|
-
Min(0),
|
|
162
|
-
IsOptional(),
|
|
163
|
-
_ts_metadata("design:type", Number)
|
|
164
|
-
], GetResultsByFormDto.prototype, "page", void 0);
|
|
165
|
-
_ts_decorate([
|
|
166
|
-
ApiProperty({
|
|
167
|
-
description: 'Page size',
|
|
168
|
-
default: 10,
|
|
169
|
-
required: false
|
|
170
|
-
}),
|
|
171
|
-
IsInt(),
|
|
172
|
-
Min(1),
|
|
173
|
-
IsOptional(),
|
|
174
|
-
_ts_metadata("design:type", Number)
|
|
175
|
-
], GetResultsByFormDto.prototype, "pageSize", void 0);
|
|
176
|
-
export class FormResultResponseDto extends IdentityResponseDto {
|
|
177
|
-
constructor(...args){
|
|
178
|
-
super(...args), _define_property(this, "formId", void 0), _define_property(this, "schemaVersionSnapshot", void 0), _define_property(this, "schemaVersion", void 0), _define_property(this, "data", void 0), _define_property(this, "submittedById", void 0), _define_property(this, "submittedAt", void 0), _define_property(this, "isDraft", void 0);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
_ts_decorate([
|
|
182
|
-
Expose(),
|
|
183
|
-
ApiProperty(),
|
|
184
|
-
_ts_metadata("design:type", String)
|
|
185
|
-
], FormResultResponseDto.prototype, "formId", void 0);
|
|
186
|
-
_ts_decorate([
|
|
187
|
-
Expose(),
|
|
188
|
-
ApiProperty(),
|
|
189
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
190
|
-
], FormResultResponseDto.prototype, "schemaVersionSnapshot", void 0);
|
|
191
|
-
_ts_decorate([
|
|
192
|
-
Expose(),
|
|
193
|
-
ApiProperty(),
|
|
194
|
-
_ts_metadata("design:type", Number)
|
|
195
|
-
], FormResultResponseDto.prototype, "schemaVersion", void 0);
|
|
196
|
-
_ts_decorate([
|
|
197
|
-
Expose(),
|
|
198
|
-
ApiProperty(),
|
|
199
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
200
|
-
], FormResultResponseDto.prototype, "data", void 0);
|
|
201
|
-
_ts_decorate([
|
|
202
|
-
Expose(),
|
|
203
|
-
ApiProperty(),
|
|
204
|
-
_ts_metadata("design:type", Object)
|
|
205
|
-
], FormResultResponseDto.prototype, "submittedById", void 0);
|
|
206
|
-
_ts_decorate([
|
|
207
|
-
Expose(),
|
|
208
|
-
ApiProperty(),
|
|
209
|
-
_ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
|
|
210
|
-
], FormResultResponseDto.prototype, "submittedAt", void 0);
|
|
211
|
-
_ts_decorate([
|
|
212
|
-
Expose(),
|
|
213
|
-
ApiProperty(),
|
|
214
|
-
_ts_metadata("design:type", Boolean)
|
|
215
|
-
], FormResultResponseDto.prototype, "isDraft", void 0);
|
package/fesm/dtos/form.dto.js
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
import { IdentityResponseDto } from '@flusys/nestjs-shared/dtos';
|
|
24
|
-
import { ApiProperty, PartialType, PickType } from '@nestjs/swagger';
|
|
25
|
-
import { Expose } from 'class-transformer';
|
|
26
|
-
import { IsArray, IsBoolean, IsEnum, IsNotEmpty, IsObject, IsOptional, IsString, IsUUID, MaxLength } from 'class-validator';
|
|
27
|
-
import { FormAccessType } from '../enums/form-access-type.enum';
|
|
28
|
-
export class CreateFormDto {
|
|
29
|
-
constructor(){
|
|
30
|
-
_define_property(this, "name", void 0);
|
|
31
|
-
_define_property(this, "description", void 0);
|
|
32
|
-
_define_property(this, "slug", void 0);
|
|
33
|
-
_define_property(this, "schema", void 0);
|
|
34
|
-
_define_property(this, "accessType", void 0);
|
|
35
|
-
_define_property(this, "actionGroups", void 0);
|
|
36
|
-
_define_property(this, "tags", void 0);
|
|
37
|
-
_define_property(this, "companyId", void 0);
|
|
38
|
-
_define_property(this, "isActive", void 0);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
_ts_decorate([
|
|
42
|
-
ApiProperty({
|
|
43
|
-
description: 'Form name',
|
|
44
|
-
example: 'Customer Feedback Survey'
|
|
45
|
-
}),
|
|
46
|
-
IsString(),
|
|
47
|
-
IsNotEmpty(),
|
|
48
|
-
MaxLength(255),
|
|
49
|
-
_ts_metadata("design:type", String)
|
|
50
|
-
], CreateFormDto.prototype, "name", void 0);
|
|
51
|
-
_ts_decorate([
|
|
52
|
-
ApiProperty({
|
|
53
|
-
description: 'Form description',
|
|
54
|
-
example: 'A survey to collect customer feedback',
|
|
55
|
-
required: false
|
|
56
|
-
}),
|
|
57
|
-
IsString(),
|
|
58
|
-
IsOptional(),
|
|
59
|
-
MaxLength(500),
|
|
60
|
-
_ts_metadata("design:type", String)
|
|
61
|
-
], CreateFormDto.prototype, "description", void 0);
|
|
62
|
-
_ts_decorate([
|
|
63
|
-
ApiProperty({
|
|
64
|
-
description: 'URL-friendly slug for public links',
|
|
65
|
-
example: 'customer-feedback',
|
|
66
|
-
required: false
|
|
67
|
-
}),
|
|
68
|
-
IsString(),
|
|
69
|
-
IsOptional(),
|
|
70
|
-
MaxLength(255),
|
|
71
|
-
_ts_metadata("design:type", String)
|
|
72
|
-
], CreateFormDto.prototype, "slug", void 0);
|
|
73
|
-
_ts_decorate([
|
|
74
|
-
ApiProperty({
|
|
75
|
-
description: 'Form schema (JSON structure)',
|
|
76
|
-
example: {
|
|
77
|
-
sections: [],
|
|
78
|
-
settings: {}
|
|
79
|
-
}
|
|
80
|
-
}),
|
|
81
|
-
IsObject(),
|
|
82
|
-
IsNotEmpty(),
|
|
83
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
84
|
-
], CreateFormDto.prototype, "schema", void 0);
|
|
85
|
-
_ts_decorate([
|
|
86
|
-
ApiProperty({
|
|
87
|
-
description: 'Access type for the form',
|
|
88
|
-
enum: FormAccessType,
|
|
89
|
-
default: FormAccessType.AUTHENTICATED,
|
|
90
|
-
required: false
|
|
91
|
-
}),
|
|
92
|
-
IsEnum(FormAccessType),
|
|
93
|
-
IsOptional(),
|
|
94
|
-
_ts_metadata("design:type", typeof FormAccessType === "undefined" ? Object : FormAccessType)
|
|
95
|
-
], CreateFormDto.prototype, "accessType", void 0);
|
|
96
|
-
_ts_decorate([
|
|
97
|
-
ApiProperty({
|
|
98
|
-
description: 'Action groups for permission-based access (only used when accessType is action_group)',
|
|
99
|
-
example: [
|
|
100
|
-
'hr.survey.submit',
|
|
101
|
-
'employee.feedback.submit'
|
|
102
|
-
],
|
|
103
|
-
required: false
|
|
104
|
-
}),
|
|
105
|
-
IsArray(),
|
|
106
|
-
IsString({
|
|
107
|
-
each: true
|
|
108
|
-
}),
|
|
109
|
-
IsOptional(),
|
|
110
|
-
_ts_metadata("design:type", Array)
|
|
111
|
-
], CreateFormDto.prototype, "actionGroups", void 0);
|
|
112
|
-
_ts_decorate([
|
|
113
|
-
ApiProperty({
|
|
114
|
-
description: 'Tags used by consuming modules to fetch this form (e.g. survey, review)',
|
|
115
|
-
example: [
|
|
116
|
-
'survey',
|
|
117
|
-
'review'
|
|
118
|
-
],
|
|
119
|
-
required: false
|
|
120
|
-
}),
|
|
121
|
-
IsArray(),
|
|
122
|
-
IsString({
|
|
123
|
-
each: true
|
|
124
|
-
}),
|
|
125
|
-
IsOptional(),
|
|
126
|
-
_ts_metadata("design:type", Array)
|
|
127
|
-
], CreateFormDto.prototype, "tags", void 0);
|
|
128
|
-
_ts_decorate([
|
|
129
|
-
ApiProperty({
|
|
130
|
-
description: 'Company ID - Only available when company feature is enabled',
|
|
131
|
-
example: '123e4567-e89b-12d3-a456-426614174000',
|
|
132
|
-
required: false
|
|
133
|
-
}),
|
|
134
|
-
IsUUID(),
|
|
135
|
-
IsOptional(),
|
|
136
|
-
_ts_metadata("design:type", String)
|
|
137
|
-
], CreateFormDto.prototype, "companyId", void 0);
|
|
138
|
-
_ts_decorate([
|
|
139
|
-
ApiProperty({
|
|
140
|
-
description: 'Active status',
|
|
141
|
-
default: true,
|
|
142
|
-
required: false
|
|
143
|
-
}),
|
|
144
|
-
IsBoolean(),
|
|
145
|
-
IsOptional(),
|
|
146
|
-
_ts_metadata("design:type", Boolean)
|
|
147
|
-
], CreateFormDto.prototype, "isActive", void 0);
|
|
148
|
-
export class UpdateFormDto extends PartialType(CreateFormDto) {
|
|
149
|
-
constructor(...args){
|
|
150
|
-
super(...args), _define_property(this, "id", void 0), _define_property(this, "schemaVersion", void 0);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
_ts_decorate([
|
|
154
|
-
ApiProperty({
|
|
155
|
-
description: 'Form ID',
|
|
156
|
-
example: '123e4567-e89b-12d3-a456-426614174000'
|
|
157
|
-
}),
|
|
158
|
-
IsUUID(),
|
|
159
|
-
IsNotEmpty(),
|
|
160
|
-
_ts_metadata("design:type", String)
|
|
161
|
-
], UpdateFormDto.prototype, "id", void 0);
|
|
162
|
-
_ts_decorate([
|
|
163
|
-
ApiProperty({
|
|
164
|
-
description: 'Schema version (auto-incremented when schema changes)',
|
|
165
|
-
required: false
|
|
166
|
-
}),
|
|
167
|
-
IsOptional(),
|
|
168
|
-
_ts_metadata("design:type", Number)
|
|
169
|
-
], UpdateFormDto.prototype, "schemaVersion", void 0);
|
|
170
|
-
export class FormResponseDto extends IdentityResponseDto {
|
|
171
|
-
constructor(...args){
|
|
172
|
-
super(...args), _define_property(this, "name", void 0), _define_property(this, "description", void 0), _define_property(this, "slug", void 0), _define_property(this, "schema", void 0), _define_property(this, "schemaVersion", void 0), _define_property(this, "accessType", void 0), _define_property(this, "actionGroups", void 0), _define_property(this, "tags", void 0), _define_property(this, "companyId", void 0), _define_property(this, "isActive", void 0);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
_ts_decorate([
|
|
176
|
-
Expose(),
|
|
177
|
-
ApiProperty(),
|
|
178
|
-
_ts_metadata("design:type", String)
|
|
179
|
-
], FormResponseDto.prototype, "name", void 0);
|
|
180
|
-
_ts_decorate([
|
|
181
|
-
Expose(),
|
|
182
|
-
ApiProperty(),
|
|
183
|
-
_ts_metadata("design:type", Object)
|
|
184
|
-
], FormResponseDto.prototype, "description", void 0);
|
|
185
|
-
_ts_decorate([
|
|
186
|
-
Expose(),
|
|
187
|
-
ApiProperty(),
|
|
188
|
-
_ts_metadata("design:type", Object)
|
|
189
|
-
], FormResponseDto.prototype, "slug", void 0);
|
|
190
|
-
_ts_decorate([
|
|
191
|
-
Expose(),
|
|
192
|
-
ApiProperty(),
|
|
193
|
-
_ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
|
|
194
|
-
], FormResponseDto.prototype, "schema", void 0);
|
|
195
|
-
_ts_decorate([
|
|
196
|
-
Expose(),
|
|
197
|
-
ApiProperty(),
|
|
198
|
-
_ts_metadata("design:type", Number)
|
|
199
|
-
], FormResponseDto.prototype, "schemaVersion", void 0);
|
|
200
|
-
_ts_decorate([
|
|
201
|
-
Expose(),
|
|
202
|
-
ApiProperty({
|
|
203
|
-
enum: FormAccessType
|
|
204
|
-
}),
|
|
205
|
-
_ts_metadata("design:type", typeof FormAccessType === "undefined" ? Object : FormAccessType)
|
|
206
|
-
], FormResponseDto.prototype, "accessType", void 0);
|
|
207
|
-
_ts_decorate([
|
|
208
|
-
Expose(),
|
|
209
|
-
ApiProperty(),
|
|
210
|
-
_ts_metadata("design:type", Object)
|
|
211
|
-
], FormResponseDto.prototype, "actionGroups", void 0);
|
|
212
|
-
_ts_decorate([
|
|
213
|
-
Expose(),
|
|
214
|
-
ApiProperty(),
|
|
215
|
-
_ts_metadata("design:type", Object)
|
|
216
|
-
], FormResponseDto.prototype, "tags", void 0);
|
|
217
|
-
_ts_decorate([
|
|
218
|
-
Expose(),
|
|
219
|
-
ApiProperty(),
|
|
220
|
-
_ts_metadata("design:type", Object)
|
|
221
|
-
], FormResponseDto.prototype, "companyId", void 0);
|
|
222
|
-
_ts_decorate([
|
|
223
|
-
Expose(),
|
|
224
|
-
ApiProperty(),
|
|
225
|
-
_ts_metadata("design:type", Boolean)
|
|
226
|
-
], FormResponseDto.prototype, "isActive", void 0);
|
|
227
|
-
export class PublicFormResponseDto extends PickType(FormResponseDto, [
|
|
228
|
-
'id',
|
|
229
|
-
'name',
|
|
230
|
-
'description',
|
|
231
|
-
'schema',
|
|
232
|
-
'schemaVersion'
|
|
233
|
-
]) {
|
|
234
|
-
}
|
|
235
|
-
export class FormAccessInfoResponseDto extends PickType(FormResponseDto, [
|
|
236
|
-
'id',
|
|
237
|
-
'name',
|
|
238
|
-
'description',
|
|
239
|
-
'accessType',
|
|
240
|
-
'actionGroups',
|
|
241
|
-
'isActive'
|
|
242
|
-
]) {
|
|
243
|
-
}
|