@dirayaah/assessment-module 1.0.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.
Files changed (156) hide show
  1. package/.prettierrc +4 -0
  2. package/README copy.md +93 -0
  3. package/README.md +93 -0
  4. package/dist/index.d.ts +9 -0
  5. package/dist/index.js +26 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/jest.config.d.ts +0 -0
  8. package/dist/jest.config.js +10 -0
  9. package/dist/jest.config.js.map +1 -0
  10. package/dist/src/constants/assessments-options.d.ts +1 -0
  11. package/dist/src/constants/assessments-options.js +5 -0
  12. package/dist/src/constants/assessments-options.js.map +1 -0
  13. package/dist/src/constants/index.d.ts +3 -0
  14. package/dist/src/constants/index.js +10 -0
  15. package/dist/src/constants/index.js.map +1 -0
  16. package/dist/src/constants/predefined-assessments/disc.d.ts +3 -0
  17. package/dist/src/constants/predefined-assessments/disc.js +184 -0
  18. package/dist/src/constants/predefined-assessments/disc.js.map +1 -0
  19. package/dist/src/constants/predefined-assessments/holland.d.ts +3 -0
  20. package/dist/src/constants/predefined-assessments/holland.js +208 -0
  21. package/dist/src/constants/predefined-assessments/holland.js.map +1 -0
  22. package/dist/src/constants/predefined-assessments/index.d.ts +4 -0
  23. package/dist/src/constants/predefined-assessments/index.js +10 -0
  24. package/dist/src/constants/predefined-assessments/index.js.map +1 -0
  25. package/dist/src/constants/predefined-assessments/leadership.d.ts +3 -0
  26. package/dist/src/constants/predefined-assessments/leadership.js +211 -0
  27. package/dist/src/constants/predefined-assessments/leadership.js.map +1 -0
  28. package/dist/src/dto/assessment.dto.d.ts +14 -0
  29. package/dist/src/dto/assessment.dto.js +88 -0
  30. package/dist/src/dto/assessment.dto.js.map +1 -0
  31. package/dist/src/dto/base.dto.d.ts +7 -0
  32. package/dist/src/dto/base.dto.js +7 -0
  33. package/dist/src/dto/base.dto.js.map +1 -0
  34. package/dist/src/dto/index.d.ts +3 -0
  35. package/dist/src/dto/index.js +8 -0
  36. package/dist/src/dto/index.js.map +1 -0
  37. package/dist/src/dto/predefined-assessment.dto.d.ts +12 -0
  38. package/dist/src/dto/predefined-assessment.dto.js +74 -0
  39. package/dist/src/dto/predefined-assessment.dto.js.map +1 -0
  40. package/dist/src/entities/assessment.entity.d.ts +15 -0
  41. package/dist/src/entities/assessment.entity.js +69 -0
  42. package/dist/src/entities/assessment.entity.js.map +1 -0
  43. package/dist/src/entities/base.entity.d.ts +7 -0
  44. package/dist/src/entities/base.entity.js +37 -0
  45. package/dist/src/entities/base.entity.js.map +1 -0
  46. package/dist/src/entities/index.d.ts +3 -0
  47. package/dist/src/entities/index.js +8 -0
  48. package/dist/src/entities/index.js.map +1 -0
  49. package/dist/src/entities/pagination.d.ts +19 -0
  50. package/dist/src/entities/pagination.js +58 -0
  51. package/dist/src/entities/pagination.js.map +1 -0
  52. package/dist/src/entities/predefined-assessment.entity.d.ts +13 -0
  53. package/dist/src/entities/predefined-assessment.entity.js +55 -0
  54. package/dist/src/entities/predefined-assessment.entity.js.map +1 -0
  55. package/dist/src/enums/index.d.ts +3 -0
  56. package/dist/src/enums/index.js +8 -0
  57. package/dist/src/enums/index.js.map +1 -0
  58. package/dist/src/enums/language.d.ts +5 -0
  59. package/dist/src/enums/language.js +10 -0
  60. package/dist/src/enums/language.js.map +1 -0
  61. package/dist/src/enums/predefined-assessment-type.d.ts +5 -0
  62. package/dist/src/enums/predefined-assessment-type.js +10 -0
  63. package/dist/src/enums/predefined-assessment-type.js.map +1 -0
  64. package/dist/src/interfaces/assessments-options.interface.d.ts +6 -0
  65. package/dist/src/interfaces/assessments-options.interface.js +3 -0
  66. package/dist/src/interfaces/assessments-options.interface.js.map +1 -0
  67. package/dist/src/mappers/assessment.mapper.d.ts +6 -0
  68. package/dist/src/mappers/assessment.mapper.js +31 -0
  69. package/dist/src/mappers/assessment.mapper.js.map +1 -0
  70. package/dist/src/mappers/predefined-assessment.mapper.d.ts +6 -0
  71. package/dist/src/mappers/predefined-assessment.mapper.js +31 -0
  72. package/dist/src/mappers/predefined-assessment.mapper.js.map +1 -0
  73. package/dist/src/migrations/1767108782301-CreateAssessmentTable.d.ts +5 -0
  74. package/dist/src/migrations/1767108782301-CreateAssessmentTable.js +83 -0
  75. package/dist/src/migrations/1767108782301-CreateAssessmentTable.js.map +1 -0
  76. package/dist/src/migrations/1767200020161-CreatePredefinedAssessmentTable.d.ts +6 -0
  77. package/dist/src/migrations/1767200020161-CreatePredefinedAssessmentTable.js +70 -0
  78. package/dist/src/migrations/1767200020161-CreatePredefinedAssessmentTable.js.map +1 -0
  79. package/dist/src/migrations/1767204696509-SeedPredefinedAssessments.d.ts +6 -0
  80. package/dist/src/migrations/1767204696509-SeedPredefinedAssessments.js +29 -0
  81. package/dist/src/migrations/1767204696509-SeedPredefinedAssessments.js.map +1 -0
  82. package/dist/src/migrations/1767651698587-AddMetaFieldsToAssessmentTable.d.ts +7 -0
  83. package/dist/src/migrations/1767651698587-AddMetaFieldsToAssessmentTable.js +60 -0
  84. package/dist/src/migrations/1767651698587-AddMetaFieldsToAssessmentTable.js.map +1 -0
  85. package/dist/src/migrations/index.d.ts +6 -0
  86. package/dist/src/migrations/index.js +18 -0
  87. package/dist/src/migrations/index.js.map +1 -0
  88. package/dist/src/modules/assessment.module.d.ts +5 -0
  89. package/dist/src/modules/assessment.module.js +34 -0
  90. package/dist/src/modules/assessment.module.js.map +1 -0
  91. package/dist/src/repositories/assessment.repository.d.ts +4 -0
  92. package/dist/src/repositories/assessment.repository.js +19 -0
  93. package/dist/src/repositories/assessment.repository.js.map +1 -0
  94. package/dist/src/repositories/base.repository.d.ts +10 -0
  95. package/dist/src/repositories/base.repository.js +29 -0
  96. package/dist/src/repositories/base.repository.js.map +1 -0
  97. package/dist/src/repositories/index.d.ts +3 -0
  98. package/dist/src/repositories/index.js +8 -0
  99. package/dist/src/repositories/index.js.map +1 -0
  100. package/dist/src/repositories/predefined-assessment.repository.d.ts +4 -0
  101. package/dist/src/repositories/predefined-assessment.repository.js +19 -0
  102. package/dist/src/repositories/predefined-assessment.repository.js.map +1 -0
  103. package/dist/src/services/assessment.service.d.ts +23 -0
  104. package/dist/src/services/assessment.service.js +108 -0
  105. package/dist/src/services/assessment.service.js.map +1 -0
  106. package/dist/src/services/index.d.ts +3 -0
  107. package/dist/src/services/index.js +8 -0
  108. package/dist/src/services/index.js.map +1 -0
  109. package/dist/src/services/predefined-assessment.service.d.ts +21 -0
  110. package/dist/src/services/predefined-assessment.service.js +95 -0
  111. package/dist/src/services/predefined-assessment.service.js.map +1 -0
  112. package/dist/src/utilities/migrations/get-base-columns.d.ts +2 -0
  113. package/dist/src/utilities/migrations/get-base-columns.js +34 -0
  114. package/dist/src/utilities/migrations/get-base-columns.js.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -0
  116. package/index.ts +26 -0
  117. package/jest.config.ts +10 -0
  118. package/nest-cli.json +8 -0
  119. package/package.json +53 -0
  120. package/src/constants/assessments-options.ts +1 -0
  121. package/src/constants/index.ts +12 -0
  122. package/src/constants/predefined-assessments/disc.ts +205 -0
  123. package/src/constants/predefined-assessments/holland.ts +235 -0
  124. package/src/constants/predefined-assessments/index.ts +5 -0
  125. package/src/constants/predefined-assessments/leadership.ts +242 -0
  126. package/src/dto/assessment.dto.ts +69 -0
  127. package/src/dto/base.dto.ts +11 -0
  128. package/src/dto/index.ts +4 -0
  129. package/src/dto/predefined-assessment.dto.ts +59 -0
  130. package/src/entities/assessment.entity.ts +41 -0
  131. package/src/entities/base.entity.ts +23 -0
  132. package/src/entities/index.ts +4 -0
  133. package/src/entities/pagination.ts +42 -0
  134. package/src/entities/predefined-assessment.entity.ts +31 -0
  135. package/src/enums/index.ts +4 -0
  136. package/src/enums/language.ts +5 -0
  137. package/src/enums/predefined-assessment-type.ts +5 -0
  138. package/src/interfaces/assessments-options.interface.ts +6 -0
  139. package/src/mappers/assessment.mapper.ts +34 -0
  140. package/src/mappers/predefined-assessment.mapper.ts +36 -0
  141. package/src/migrations/1767108782301-CreateAssessmentTable.ts +88 -0
  142. package/src/migrations/1767200020161-CreatePredefinedAssessmentTable.ts +77 -0
  143. package/src/migrations/1767204696509-SeedPredefinedAssessments.ts +32 -0
  144. package/src/migrations/1767651698587-AddMetaFieldsToAssessmentTable.ts +88 -0
  145. package/src/migrations/index.ts +20 -0
  146. package/src/modules/assessment.module.ts +22 -0
  147. package/src/repositories/assessment.repository.ts +6 -0
  148. package/src/repositories/base.repository.ts +39 -0
  149. package/src/repositories/index.ts +4 -0
  150. package/src/repositories/predefined-assessment.repository.ts +6 -0
  151. package/src/services/assessment.service.ts +144 -0
  152. package/src/services/index.ts +4 -0
  153. package/src/services/predefined-assessment.service.ts +121 -0
  154. package/src/utilities/migrations/get-base-columns.ts +32 -0
  155. package/tsconfig.build.json +4 -0
  156. package/tsconfig.json +21 -0
@@ -0,0 +1,242 @@
1
+ import { PredefinedAssessmentEntity } from '../../entities/predefined-assessment.entity';
2
+ import {
3
+ AssessmentDetailsLanguage,
4
+ PredefinedAssessmentType,
5
+ } from '../../enums';
6
+
7
+ const LEADERSHIP_ASSESSMENT: PredefinedAssessmentEntity[] = [
8
+ {
9
+ title: 'تقييم مستوى القيادة',
10
+ description:
11
+ 'تقييم مستوى القيادة هو أداة تهدف إلى قياس قدرات الفرد القيادية وتحديد مستواه في القيادة من خلال تحليل السلوكيات والمهارات القيادية الأساسية، مما يساعد على تطوير الأداء القيادي وتعزيز نقاط القوة.',
12
+ language: AssessmentDetailsLanguage.AR,
13
+ category: 'قيادة',
14
+ type: PredefinedAssessmentType.LEADERSHIP,
15
+ backgroundImageUrl: null,
16
+ details: {
17
+ overview: {
18
+ title: 'تقييم مستوى القيادة',
19
+ description:
20
+ 'يهدف تقييم مستوى القيادة إلى قياس مدى امتلاك الفرد للمهارات والسلوكيات القيادية الأساسية، مثل اتخاذ القرار، التواصل، التأثير، وإدارة الفرق، وذلك لتحديد المستوى القيادي الحالي وفرص التطوير.',
21
+ },
22
+ behavioralPatterns: {
23
+ title: 'المجالات القيادية في التقييم',
24
+ patterns: [
25
+ {
26
+ title: 'القيادة الذاتية',
27
+ description:
28
+ 'تقيس قدرة الفرد على إدارة ذاته، وتحمل المسؤولية، والانضباط الذاتي، والالتزام بالأهداف الشخصية والمهنية.',
29
+ },
30
+ {
31
+ title: 'اتخاذ القرار',
32
+ description:
33
+ 'تركز على قدرة الفرد على تحليل المواقف، اتخاذ قرارات فعالة في الوقت المناسب، وتحمل مسؤولية نتائج القرارات.',
34
+ },
35
+ {
36
+ title: 'التواصل والتأثير',
37
+ description:
38
+ 'تقيس مهارات التواصل الواضح، والاستماع الفعّال، والقدرة على التأثير الإيجابي في الآخرين وبناء علاقات عمل قوية.',
39
+ },
40
+ {
41
+ title: 'إدارة الفرق',
42
+ description:
43
+ 'تقيم قدرة الفرد على توجيه الفرق، توزيع المهام، تحفيز الأعضاء، وبناء بيئة عمل تعاونية ومنتجة.',
44
+ },
45
+ {
46
+ title: 'الذكاء العاطفي',
47
+ description:
48
+ 'تركز على وعي الفرد بمشاعره ومشاعر الآخرين، وإدارة الانفعالات، والتعامل بمرونة مع الضغوط والتحديات.',
49
+ },
50
+ {
51
+ title: 'الرؤية والتخطيط',
52
+ description:
53
+ 'تقيس قدرة الفرد على وضع رؤية واضحة، تحديد الأهداف طويلة المدى، والتخطيط الاستراتيجي لتحقيقها.',
54
+ },
55
+ ],
56
+ },
57
+ howItWorks: {
58
+ title: 'كيف يعمل تقييم القيادة',
59
+ description:
60
+ 'يتضمن التقييم مجموعة من الأسئلة السلوكية والمواقف العملية التي تقيس المهارات القيادية المختلفة. يتم تحليل الإجابات لتحديد المستوى القيادي الحالي ونقاط القوة ومجالات التحسين.',
61
+ },
62
+ outputs: {
63
+ title: 'مخرجات التقييم',
64
+ items: [
65
+ 'تحديد المستوى القيادي الحالي',
66
+ 'تحليل نقاط القوة القيادية',
67
+ 'تحديد مجالات التطوير والتحسين',
68
+ 'توصيات لتطوير المهارات القيادية',
69
+ 'خطة تطوير قيادي مبدئية',
70
+ ],
71
+ },
72
+ useCases: {
73
+ title: 'استخدامات تقييم القيادة',
74
+ items: [
75
+ 'تطوير القيادات',
76
+ 'تقييم المرشحين للمناصب القيادية',
77
+ 'بناء خطط التطوير الفردية',
78
+ 'تحسين أداء المدراء',
79
+ 'برامج التدريب والتأهيل القيادي',
80
+ ],
81
+ },
82
+ },
83
+ configuration: undefined,
84
+ },
85
+ {
86
+ title: 'Leadership Level Assessment',
87
+ description:
88
+ 'The Leadership Level Assessment is a tool designed to measure an individual’s leadership capabilities and determine their leadership level by analyzing key leadership behaviors and skills, helping to improve leadership performance and strengthen strengths.',
89
+ language: AssessmentDetailsLanguage.EN,
90
+ category: 'Leadership',
91
+ type: PredefinedAssessmentType.LEADERSHIP,
92
+ backgroundImageUrl: null,
93
+ details: {
94
+ overview: {
95
+ title: 'Leadership Level Assessment',
96
+ description:
97
+ 'The Leadership Level Assessment aims to measure how well an individual possesses core leadership skills and behaviors such as decision-making, communication, influence, and team management, in order to identify the current leadership level and development opportunities.',
98
+ },
99
+ behavioralPatterns: {
100
+ title: 'Leadership Competency Areas',
101
+ patterns: [
102
+ {
103
+ title: 'Self-Leadership',
104
+ description:
105
+ 'Measures an individual’s ability to manage themselves, take responsibility, maintain self-discipline, and stay committed to personal and professional goals.',
106
+ },
107
+ {
108
+ title: 'Decision Making',
109
+ description:
110
+ 'Focuses on the individual’s ability to analyze situations, make effective decisions in a timely manner, and take responsibility for decision outcomes.',
111
+ },
112
+ {
113
+ title: 'Communication and Influence',
114
+ description:
115
+ 'Measures clear communication skills, active listening, and the ability to positively influence others and build strong working relationships.',
116
+ },
117
+ {
118
+ title: 'Team Management',
119
+ description:
120
+ 'Evaluates the individual’s ability to lead teams, delegate tasks, motivate team members, and build a collaborative and productive work environment.',
121
+ },
122
+ {
123
+ title: 'Emotional Intelligence',
124
+ description:
125
+ 'Focuses on awareness of one’s own emotions and the emotions of others, managing reactions, and dealing flexibly with pressure and challenges.',
126
+ },
127
+ {
128
+ title: 'Vision and Planning',
129
+ description:
130
+ 'Measures the ability to set a clear vision, define long-term goals, and plan strategically to achieve them.',
131
+ },
132
+ ],
133
+ },
134
+ howItWorks: {
135
+ title: 'How the Leadership Assessment Works',
136
+ description:
137
+ 'The assessment consists of a set of behavioral questions and situational scenarios that evaluate different leadership skills. Responses are analyzed to determine the current leadership level, strengths, and areas for improvement.',
138
+ },
139
+ outputs: {
140
+ title: 'Assessment Outputs',
141
+ items: [
142
+ 'Identification of the current leadership level',
143
+ 'Analysis of leadership strengths',
144
+ 'Identification of development and improvement areas',
145
+ 'Recommendations for leadership skill development',
146
+ 'Initial leadership development plan',
147
+ ],
148
+ },
149
+ useCases: {
150
+ title: 'Leadership Assessment Use Cases',
151
+ items: [
152
+ 'Leadership development',
153
+ 'Evaluation of candidates for leadership roles',
154
+ 'Building individual development plans',
155
+ 'Improving managers’ performance',
156
+ 'Leadership training and development programs',
157
+ ],
158
+ },
159
+ },
160
+ configuration: null,
161
+ },
162
+
163
+ {
164
+ title: 'Evaluación del Nivel de Liderazgo',
165
+ description:
166
+ 'La Evaluación del Nivel de Liderazgo es una herramienta diseñada para medir las capacidades de liderazgo de una persona y determinar su nivel de liderazgo mediante el análisis de comportamientos y habilidades clave, ayudando a mejorar el desempeño y fortalecer los puntos fuertes.',
167
+ language: AssessmentDetailsLanguage.ES,
168
+ category: 'Liderazgo',
169
+ type: PredefinedAssessmentType.LEADERSHIP,
170
+ backgroundImageUrl: null,
171
+ details: {
172
+ overview: {
173
+ title: 'Evaluación del Nivel de Liderazgo',
174
+ description:
175
+ 'La Evaluación del Nivel de Liderazgo tiene como objetivo medir el grado en que una persona posee habilidades y comportamientos clave de liderazgo, como la toma de decisiones, la comunicación, la influencia y la gestión de equipos, para identificar el nivel actual de liderazgo y las oportunidades de desarrollo.',
176
+ },
177
+ behavioralPatterns: {
178
+ title: 'Áreas de Competencia en Liderazgo',
179
+ patterns: [
180
+ {
181
+ title: 'Autoliderazgo',
182
+ description:
183
+ 'Mide la capacidad de la persona para gestionarse a sí misma, asumir responsabilidades, mantener la autodisciplina y comprometerse con objetivos personales y profesionales.',
184
+ },
185
+ {
186
+ title: 'Toma de Decisiones',
187
+ description:
188
+ 'Se centra en la capacidad de analizar situaciones, tomar decisiones eficaces de manera oportuna y asumir la responsabilidad de los resultados.',
189
+ },
190
+ {
191
+ title: 'Comunicación e Influencia',
192
+ description:
193
+ 'Mide las habilidades de comunicación clara, la escucha activa y la capacidad de influir positivamente en los demás y construir relaciones laborales sólidas.',
194
+ },
195
+ {
196
+ title: 'Gestión de Equipos',
197
+ description:
198
+ 'Evalúa la capacidad de liderar equipos, delegar tareas, motivar a los miembros y crear un entorno de trabajo colaborativo y productivo.',
199
+ },
200
+ {
201
+ title: 'Inteligencia Emocional',
202
+ description:
203
+ 'Se centra en la conciencia de las propias emociones y las de los demás, la gestión de las reacciones y la adaptación flexible a la presión y los desafíos.',
204
+ },
205
+ {
206
+ title: 'Visión y Planificación',
207
+ description:
208
+ 'Mide la capacidad de establecer una visión clara, definir objetivos a largo plazo y planificar estratégicamente para alcanzarlos.',
209
+ },
210
+ ],
211
+ },
212
+ howItWorks: {
213
+ title: 'Cómo Funciona la Evaluación de Liderazgo',
214
+ description:
215
+ 'La evaluación incluye un conjunto de preguntas conductuales y escenarios situacionales que miden distintas habilidades de liderazgo. Las respuestas se analizan para determinar el nivel actual de liderazgo, las fortalezas y las áreas de mejora.',
216
+ },
217
+ outputs: {
218
+ title: 'Resultados de la Evaluación',
219
+ items: [
220
+ 'Identificación del nivel actual de liderazgo',
221
+ 'Análisis de fortalezas de liderazgo',
222
+ 'Identificación de áreas de desarrollo y mejora',
223
+ 'Recomendaciones para el desarrollo de habilidades de liderazgo',
224
+ 'Plan inicial de desarrollo de liderazgo',
225
+ ],
226
+ },
227
+ useCases: {
228
+ title: 'Casos de Uso de la Evaluación de Liderazgo',
229
+ items: [
230
+ 'Desarrollo de liderazgo',
231
+ 'Evaluación de candidatos a puestos de liderazgo',
232
+ 'Creación de planes de desarrollo individual',
233
+ 'Mejora del desempeño de los gerentes',
234
+ 'Programas de formación y desarrollo de liderazgo',
235
+ ],
236
+ },
237
+ },
238
+ configuration: null,
239
+ },
240
+ ];
241
+
242
+ export default LEADERSHIP_ASSESSMENT;
@@ -0,0 +1,69 @@
1
+ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
2
+ import {
3
+ IsNumber,
4
+ IsOptional,
5
+ IsString,
6
+ IsNotEmpty,
7
+ IsObject,
8
+ } from 'class-validator';
9
+ import { BaseDTO } from './base.dto';
10
+
11
+ export class AssessmentDto extends BaseDTO {
12
+ @ApiProperty({ example: 'DISC' })
13
+ @IsString()
14
+ @IsNotEmpty()
15
+ title: string;
16
+
17
+ @ApiProperty({ example: 'disc-assessment' })
18
+ @IsString()
19
+ @IsNotEmpty()
20
+ slug: string;
21
+
22
+ @ApiProperty({ example: 'online' })
23
+ @IsString()
24
+ @IsNotEmpty()
25
+ type: string;
26
+
27
+ @ApiPropertyOptional({ example: 'A detailed Personality assessment' })
28
+ @IsOptional()
29
+ @IsString()
30
+ description?: string;
31
+
32
+ @ApiPropertyOptional({ example: 'https://example.com/bg.png' })
33
+ @IsOptional()
34
+ @IsString()
35
+ backgroundImageUrl?: string;
36
+
37
+ @ApiPropertyOptional({ example: 100 })
38
+ @IsOptional()
39
+ @IsNumber()
40
+ price?: number;
41
+
42
+ @ApiPropertyOptional({ example: 80 })
43
+ @IsOptional()
44
+ @IsNumber()
45
+ discountPrice?: number;
46
+
47
+ @ApiPropertyOptional({ example: 'draft' })
48
+ @IsOptional()
49
+ @IsString()
50
+ status?: string;
51
+
52
+ @ApiPropertyOptional({
53
+ example: { duration: 60, language: 'en' },
54
+ type: Object,
55
+ })
56
+ @IsOptional()
57
+ @IsObject()
58
+ configuration?: Record<string, any>;
59
+
60
+ @ApiPropertyOptional({ example: 'admin' })
61
+ @IsOptional()
62
+ @IsString()
63
+ publishedBy?: string;
64
+
65
+ @ApiPropertyOptional({ example: 'SEO meta description for the assessment' })
66
+ @IsOptional()
67
+ @IsString()
68
+ metaDescription?: string;
69
+ }
@@ -0,0 +1,11 @@
1
+ export class BaseDTO {
2
+ id?: number;
3
+
4
+ createdBy?: string;
5
+
6
+ createdDate?: Date;
7
+
8
+ lastModifiedBy?: string;
9
+
10
+ lastModifiedDate?: Date;
11
+ }
@@ -0,0 +1,4 @@
1
+ import { AssessmentDto } from './assessment.dto';
2
+ import { PredefinedAssessmentDto } from './predefined-assessment.dto';
3
+
4
+ export { AssessmentDto, PredefinedAssessmentDto };
@@ -0,0 +1,59 @@
1
+ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
2
+ import {
3
+ IsNumber,
4
+ IsOptional,
5
+ IsString,
6
+ IsNotEmpty,
7
+ IsObject,
8
+ IsEnum,
9
+ } from 'class-validator';
10
+ import { BaseDTO } from './base.dto';
11
+ import { AssessmentDetailsLanguage, PredefinedAssessmentType } from '../enums';
12
+
13
+ export class PredefinedAssessmentDto extends BaseDTO {
14
+ @ApiProperty({ example: 'DISC' })
15
+ @IsString()
16
+ @IsNotEmpty()
17
+ title: string;
18
+
19
+ @ApiPropertyOptional()
20
+ @IsOptional()
21
+ @IsEnum(PredefinedAssessmentType)
22
+ type?: PredefinedAssessmentType;
23
+
24
+ @ApiPropertyOptional({ example: 'A detailed Personality assessment' })
25
+ @IsOptional()
26
+ @IsString()
27
+ description?: string;
28
+
29
+ @ApiPropertyOptional({ example: 'https://example.com/bg.png' })
30
+ @IsOptional()
31
+ @IsString()
32
+ backgroundImageUrl?: string;
33
+
34
+ @ApiPropertyOptional()
35
+ @IsOptional()
36
+ @IsEnum(AssessmentDetailsLanguage)
37
+ language?: AssessmentDetailsLanguage;
38
+
39
+ @ApiPropertyOptional({ example: 'Leadership' })
40
+ @IsOptional()
41
+ @IsString()
42
+ category?: string;
43
+
44
+ @ApiPropertyOptional({
45
+ example: { duration: 60, language: 'en' },
46
+ type: Object,
47
+ })
48
+ @IsOptional()
49
+ @IsObject()
50
+ configuration?: Record<string, any>;
51
+
52
+ @ApiPropertyOptional({
53
+ example: { duration: 60, language: 'en' },
54
+ type: Object,
55
+ })
56
+ @IsOptional()
57
+ @IsObject()
58
+ details?: Record<string, any>;
59
+ }
@@ -0,0 +1,41 @@
1
+ import { Column, Entity } from 'typeorm/index.js';
2
+ import { BaseEntity } from './base.entity';
3
+
4
+ @Entity('assessment')
5
+ export class AssessmentEntity extends BaseEntity {
6
+ @Column({ nullable: false })
7
+ title: string;
8
+
9
+ @Column({ nullable: false, unique: true })
10
+ slug: string;
11
+
12
+ @Column({ nullable: false })
13
+ type: string;
14
+
15
+ @Column({ nullable: true })
16
+ description?: string;
17
+
18
+ @Column({ nullable: true, name: 'background_image_url' })
19
+ backgroundImageUrl?: string;
20
+
21
+ @Column({ nullable: true })
22
+ price?: number;
23
+
24
+ @Column({ nullable: true, name: 'discount_price' })
25
+ discountPrice?: number;
26
+
27
+ @Column({ nullable: true })
28
+ status?: string;
29
+
30
+ @Column({ nullable: true, name: 'configuration', type: 'json' })
31
+ configuration?: Record<string, any>;
32
+
33
+ @Column({ nullable: true, name: 'published_by' })
34
+ publishedBy?: string;
35
+
36
+ @Column({ default: false, name: 'is_private' })
37
+ isPrivate?: boolean;
38
+
39
+ @Column({ nullable: true, name: 'meta_description' })
40
+ metaDescription?: string;
41
+ }
@@ -0,0 +1,23 @@
1
+ import {
2
+ Column,
3
+ CreateDateColumn,
4
+ PrimaryGeneratedColumn,
5
+ UpdateDateColumn,
6
+ } from 'typeorm/index.js';
7
+
8
+ export abstract class BaseEntity {
9
+ @PrimaryGeneratedColumn()
10
+ id?: number;
11
+
12
+ @Column({ nullable: true })
13
+ createdBy?: string;
14
+
15
+ @CreateDateColumn({ nullable: true })
16
+ createdDate?: Date;
17
+
18
+ @Column({ nullable: true })
19
+ lastModifiedBy?: string;
20
+
21
+ @UpdateDateColumn({ nullable: true })
22
+ lastModifiedDate?: Date;
23
+ }
@@ -0,0 +1,4 @@
1
+ import { AssessmentEntity } from './assessment.entity';
2
+
3
+ import { PredefinedAssessmentEntity } from './predefined-assessment.entity';
4
+ export { AssessmentEntity, PredefinedAssessmentEntity };
@@ -0,0 +1,42 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { Type, Expose as JsonProperty } from 'class-transformer';
3
+ import { BaseEntity } from './base.entity';
4
+
5
+ export class Sort {
6
+ public property: string;
7
+ public direction: 'ASC' | 'DESC' | string;
8
+ constructor(sort: string) {
9
+ if (sort) {
10
+ [this.property, this.direction] = sort.split(',');
11
+ }
12
+ }
13
+
14
+ asOrder(): any {
15
+ const order = {};
16
+ order[this.property] = this.direction;
17
+ return order;
18
+ }
19
+ }
20
+
21
+ export class PageRequest {
22
+ @JsonProperty()
23
+ page: number = 0;
24
+ @JsonProperty()
25
+ size: number = 20;
26
+ @Type(() => Sort)
27
+ sort: Sort = new Sort('id,ASC');
28
+
29
+ constructor(page: number | string, size: number | string, sort: string) {
30
+ this.page = +page || this.page;
31
+ this.size = +size || this.size;
32
+ this.sort = sort ? new Sort(sort) : this.sort;
33
+ }
34
+ }
35
+
36
+ export class Page<T extends BaseEntity> {
37
+ constructor(
38
+ public content: T[],
39
+ public total: number,
40
+ public pageable: PageRequest,
41
+ ) {}
42
+ }
@@ -0,0 +1,31 @@
1
+ import { Column, Entity, OneToMany } from 'typeorm/index.js';
2
+ import { BaseEntity } from './base.entity';
3
+ import { AssessmentDetailsLanguage } from '../enums/language';
4
+ import { PredefinedAssessmentType } from '../enums/predefined-assessment-type';
5
+
6
+ @Entity('predefined_assessment')
7
+ export class PredefinedAssessmentEntity extends BaseEntity {
8
+ @Column({ nullable: false })
9
+ title: string;
10
+
11
+ @Column({ nullable: false, enum: PredefinedAssessmentType })
12
+ type: PredefinedAssessmentType;
13
+
14
+ @Column({ nullable: false })
15
+ description: string;
16
+
17
+ @Column({ nullable: true, name: 'background_image_url' })
18
+ backgroundImageUrl: string;
19
+
20
+ @Column({ nullable: false, enum: AssessmentDetailsLanguage })
21
+ language: AssessmentDetailsLanguage;
22
+
23
+ @Column({ nullable: true })
24
+ category: string;
25
+
26
+ @Column({ nullable: false, type: 'json' })
27
+ details: Record<string, any>;
28
+
29
+ @Column({ nullable: false, type: 'json' })
30
+ configuration: Record<string, any>;
31
+ }
@@ -0,0 +1,4 @@
1
+ import { AssessmentDetailsLanguage } from '../enums/language';
2
+ import { PredefinedAssessmentType } from '../enums/predefined-assessment-type';
3
+
4
+ export { AssessmentDetailsLanguage, PredefinedAssessmentType };
@@ -0,0 +1,5 @@
1
+ export enum AssessmentDetailsLanguage {
2
+ AR = 'AR',
3
+ EN = 'EN',
4
+ ES = 'ES',
5
+ }
@@ -0,0 +1,5 @@
1
+ export enum PredefinedAssessmentType {
2
+ HOLLAND = 'HOLLAND',
3
+ DISC = 'DISC',
4
+ LEADERSHIP = 'LEADERSHIP',
5
+ }
@@ -0,0 +1,6 @@
1
+ export interface AssessmentModuleOptions {
2
+ connectionProvider: {
3
+ getTenantConnection(tenantId: string): Promise<any>;
4
+ getConnection(): Promise<any>;
5
+ };
6
+ }
@@ -0,0 +1,34 @@
1
+ import { AssessmentDto } from '../dto';
2
+ import { AssessmentEntity } from '../entities';
3
+
4
+ export class AssessmentMapper {
5
+ static fromDTOToEntity(assessmentDto: AssessmentDto): AssessmentEntity {
6
+ if (!assessmentDto) {
7
+ return;
8
+ }
9
+ let assessmentEntity = new AssessmentEntity();
10
+
11
+ const fields = Object.getOwnPropertyNames(assessmentDto);
12
+
13
+ fields.forEach((field) => {
14
+ assessmentEntity[field] = assessmentDto[field];
15
+ });
16
+
17
+ return assessmentEntity;
18
+ }
19
+
20
+ static fromEntityToDTO(entity: AssessmentEntity): AssessmentDto {
21
+ if (!entity) {
22
+ return;
23
+ }
24
+ let entityDTO = new AssessmentDto();
25
+
26
+ const fields = Object.getOwnPropertyNames(entity);
27
+
28
+ fields.forEach((field) => {
29
+ entityDTO[field] = entity[field];
30
+ });
31
+
32
+ return entityDTO;
33
+ }
34
+ }
@@ -0,0 +1,36 @@
1
+ import { PredefinedAssessmentDto } from "../dto/predefined-assessment.dto";
2
+ import { PredefinedAssessmentEntity } from "../entities/predefined-assessment.entity";
3
+
4
+
5
+ export class PredefinedAssessmentMapper {
6
+ static fromDTOToEntity(predefinedAssessmentDto: PredefinedAssessmentDto): PredefinedAssessmentEntity {
7
+ if (!predefinedAssessmentDto) {
8
+ return;
9
+ }
10
+
11
+ let predefinedAssessmentEntity = new PredefinedAssessmentEntity();
12
+
13
+ const fields = Object.getOwnPropertyNames(predefinedAssessmentDto);
14
+
15
+ fields.forEach((field) => {
16
+ predefinedAssessmentEntity[field] = predefinedAssessmentDto[field];
17
+ });
18
+
19
+ return predefinedAssessmentEntity;
20
+ }
21
+
22
+ static fromEntityToDTO(entity: PredefinedAssessmentEntity): PredefinedAssessmentDto {
23
+ if (!entity) {
24
+ return;
25
+ }
26
+ let entityDTO = new PredefinedAssessmentDto();
27
+
28
+ const fields = Object.getOwnPropertyNames(entity);
29
+
30
+ fields.forEach((field) => {
31
+ entityDTO[field] = entity[field];
32
+ });
33
+
34
+ return entityDTO;
35
+ }
36
+ }