@solidstarters/solid-core 1.2.201 → 1.2.202
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/config/cache.options.d.ts +1 -1
- package/dist/config/cache.options.d.ts.map +1 -1
- package/dist/config/cache.options.js +2 -2
- package/dist/config/cache.options.js.map +1 -1
- package/dist/config/iam.config.d.ts +4 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +2 -0
- package/dist/config/iam.config.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts +25 -0
- package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/model-metadata.controller.js +23 -0
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/setting.controller.d.ts +1 -2
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +21 -42
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/decorators/sms-provider.decorator.d.ts +3 -0
- package/dist/decorators/sms-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/sms-provider.decorator.js +11 -0
- package/dist/decorators/sms-provider.decorator.js.map +1 -0
- package/dist/dtos/navigation.dto.d.ts +6 -0
- package/dist/dtos/navigation.dto.d.ts.map +1 -0
- package/dist/dtos/navigation.dto.js +33 -0
- package/dist/dtos/navigation.dto.js.map +1 -0
- package/dist/dtos/sign-in.dto.js +3 -3
- package/dist/dtos/sign-in.dto.js.map +1 -1
- package/dist/entities/common.entity.js +5 -4
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -1
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +5 -4
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +5 -1
- package/dist/entities/model-metadata.entity.js.map +1 -1
- package/dist/factories/mail.factory.d.ts.map +1 -1
- package/dist/factories/mail.factory.js.map +1 -1
- package/dist/factories/sms.factory.d.ts +14 -0
- package/dist/factories/sms.factory.d.ts.map +1 -0
- package/dist/factories/sms.factory.js +53 -0
- package/dist/factories/sms.factory.js.map +1 -0
- package/dist/helpers/date.helper.d.ts.map +1 -1
- package/dist/helpers/date.helper.js +13 -4
- package/dist/helpers/date.helper.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +3 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +7 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/index.js.map +1 -1
- package/dist/jobs/database/{sms-publisher-database.service.d.ts → msg91-sms-publisher-database.service.d.ts} +2 -2
- package/dist/jobs/database/msg91-sms-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-publisher-database.service.js → msg91-sms-publisher-database.service.js} +8 -8
- package/dist/jobs/database/msg91-sms-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.d.ts → msg91-sms-queue-database-options.d.ts} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -0
- package/dist/jobs/database/{sms-queue-database-options.js → msg91-sms-queue-database-options.js} +1 -1
- package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.d.ts → msg91-sms-subscriber-database.service.d.ts} +5 -5
- package/dist/jobs/database/msg91-sms-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/{sms-subscriber-database.service.js → msg91-sms-subscriber-database.service.js} +14 -12
- package/dist/jobs/database/msg91-sms-subscriber-database.service.js.map +1 -0
- package/dist/jobs/database/otp-subscriber-database.service.d.ts +4 -4
- package/dist/jobs/database/otp-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/otp-subscriber-database.service.js +6 -4
- package/dist/jobs/database/otp-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts +3 -3
- package/dist/jobs/database/twilio-sms-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js +6 -4
- package/dist/jobs/database/twilio-sms-subscriber-database.service.js.map +1 -1
- package/dist/jobs/{sms-publisher.service.d.ts → msg91-otp-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-otp-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{sms-publisher.service.js → msg91-otp-publisher.service.js} +8 -8
- package/dist/jobs/msg91-otp-publisher.service.js.map +1 -0
- package/dist/jobs/{sms-queue-options.d.ts → msg91-otp-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -0
- package/dist/jobs/{otp-queue-options.js → msg91-otp-queue-options.js} +1 -1
- package/dist/jobs/msg91-otp-queue-options.js.map +1 -0
- package/dist/jobs/{sms-subscriber.service.d.ts → msg91-otp-subscriber.service.d.ts} +6 -6
- package/dist/jobs/msg91-otp-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{otp-subscriber.service.js → msg91-otp-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-otp-subscriber.service.js.map +1 -0
- package/dist/jobs/{otp-publisher.service.d.ts → msg91-sms-publisher.service.d.ts} +2 -2
- package/dist/jobs/msg91-sms-publisher.service.d.ts.map +1 -0
- package/dist/jobs/{otp-publisher.service.js → msg91-sms-publisher.service.js} +8 -8
- package/dist/jobs/msg91-sms-publisher.service.js.map +1 -0
- package/dist/jobs/{otp-queue-options.d.ts → msg91-sms-queue-options.d.ts} +1 -1
- package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -0
- package/dist/jobs/{sms-queue-options.js → msg91-sms-queue-options.js} +1 -1
- package/dist/jobs/msg91-sms-queue-options.js.map +1 -0
- package/dist/jobs/{otp-subscriber.service.d.ts → msg91-sms-subscriber.service.d.ts} +7 -7
- package/dist/jobs/msg91-sms-subscriber.service.d.ts.map +1 -0
- package/dist/jobs/{sms-subscriber.service.js → msg91-sms-subscriber.service.js} +14 -12
- package/dist/jobs/msg91-sms-subscriber.service.js.map +1 -0
- package/dist/jobs/twilio-sms-subscriber.service.d.ts +3 -3
- package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/twilio-sms-subscriber.service.js +6 -4
- package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +23 -1
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +30 -25
- package/dist/seeders/user-seeder.service.d.ts.map +1 -1
- package/dist/seeders/user-seeder.service.js +5 -4
- package/dist/seeders/user-seeder.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +6 -3
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +48 -13
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/crud.service.d.ts +1 -2
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/excel.service.d.ts +1 -0
- package/dist/services/excel.service.d.ts.map +1 -1
- package/dist/services/excel.service.js +4 -0
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +28 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +109 -2
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +3 -45
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms/Msg91BaseSMSService.js +6 -6
- package/dist/services/sms/Msg91BaseSMSService.js.map +1 -1
- package/dist/services/sms/Msg91OTPService.d.ts.map +1 -1
- package/dist/services/sms/Msg91OTPService.js +3 -1
- package/dist/services/sms/Msg91OTPService.js.map +1 -1
- package/dist/services/sms/Msg91SMSService.d.ts.map +1 -1
- package/dist/services/sms/Msg91SMSService.js +3 -1
- package/dist/services/sms/Msg91SMSService.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.d.ts.map +1 -1
- package/dist/services/sms/TwilioSMSService.js +2 -0
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +1 -0
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +14 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/solid-core-cli.module.js +1 -1
- package/dist/solid-core-cli.module.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +22 -13
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.d.ts.map +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js +1 -1
- package/dist/subscribers/scheduled-job.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +2 -2
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +28 -6
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/config/cache.options.ts +6 -3
- package/src/config/iam.config.ts +2 -1
- package/src/controllers/model-metadata.controller.ts +21 -1
- package/src/controllers/setting.controller.ts +32 -36
- package/src/decorators/sms-provider.decorator.ts +7 -0
- package/src/dtos/navigation.dto.ts +14 -0
- package/src/dtos/sign-in.dto.ts +3 -3
- package/src/entities/common.entity.ts +7 -7
- package/src/entities/field-metadata.entity.ts +1 -1
- package/src/entities/legacy-common.entity.ts +6 -5
- package/src/entities/model-metadata.entity.ts +1 -1
- package/src/factories/mail.factory.ts +0 -1
- package/src/factories/sms.factory.ts +43 -0
- package/src/helpers/date.helper.ts +38 -9
- package/src/helpers/solid-registry.ts +9 -0
- package/src/index.ts +9 -6
- package/src/jobs/database/{sms-publisher-database.service.ts → msg91-sms-publisher-database.service.ts} +2 -2
- package/src/jobs/database/{sms-subscriber-database.service.ts → msg91-sms-subscriber-database.service.ts} +9 -4
- package/src/jobs/database/otp-subscriber-database.service.ts +8 -2
- package/src/jobs/database/twilio-sms-subscriber-database.service.ts +5 -2
- package/src/jobs/{otp-publisher.service.ts → msg91-otp-publisher.service.ts} +2 -2
- package/src/jobs/{otp-subscriber.service.ts → msg91-otp-subscriber.service.ts} +10 -4
- package/src/jobs/{sms-publisher.service.ts → msg91-sms-publisher.service.ts} +2 -2
- package/src/jobs/{sms-subscriber.service.ts → msg91-sms-subscriber.service.ts} +9 -4
- package/src/jobs/twilio-sms-subscriber.service.ts +6 -2
- package/src/seeders/module-metadata-seeder.service.ts +30 -5
- package/src/seeders/seed-data/email-templates/email-on-signup.handlebars.html +155 -0
- package/src/seeders/seed-data/sms-templates/text-on-signup.handlebars.txt +10 -0
- package/src/seeders/seed-data/solid-core-metadata.json +31 -26
- package/src/seeders/user-seeder.service.ts +5 -4
- package/src/services/authentication.service.ts +73 -10
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +1 -2
- package/src/services/crud.service.ts +17 -18
- package/src/services/excel.service.ts +6 -0
- package/src/services/model-metadata.service.ts +151 -0
- package/src/services/setting.service.ts +12 -52
- package/src/services/sms/Msg91BaseSMSService.ts +6 -6
- package/src/services/sms/Msg91OTPService.ts +3 -2
- package/src/services/sms/Msg91SMSService.ts +3 -1
- package/src/services/sms/TwilioSMSService.ts +3 -3
- package/src/services/solid-introspect.service.ts +22 -0
- package/src/solid-core-cli.module.ts +2 -2
- package/src/solid-core.module.ts +24 -13
- package/src/subscribers/scheduled-job.subscriber.ts +9 -2
- package/src/transformers/typeorm/local-date-time-transformer.ts +38 -13
- package/dist/jobs/database/sms-publisher-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-publisher-database.service.js.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.d.ts.map +0 -1
- package/dist/jobs/database/sms-queue-database-options.js.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.d.ts.map +0 -1
- package/dist/jobs/database/sms-subscriber-database.service.js.map +0 -1
- package/dist/jobs/otp-publisher.service.d.ts.map +0 -1
- package/dist/jobs/otp-publisher.service.js.map +0 -1
- package/dist/jobs/otp-queue-options.d.ts.map +0 -1
- package/dist/jobs/otp-queue-options.js.map +0 -1
- package/dist/jobs/otp-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/otp-subscriber.service.js.map +0 -1
- package/dist/jobs/sms-publisher.service.d.ts.map +0 -1
- package/dist/jobs/sms-publisher.service.js.map +0 -1
- package/dist/jobs/sms-queue-options.d.ts.map +0 -1
- package/dist/jobs/sms-queue-options.js.map +0 -1
- package/dist/jobs/sms-subscriber.service.d.ts.map +0 -1
- package/dist/jobs/sms-subscriber.service.js.map +0 -1
- /package/src/jobs/database/{sms-queue-database-options.ts → msg91-sms-queue-database-options.ts} +0 -0
- /package/src/jobs/{otp-queue-options.ts → msg91-otp-queue-options.ts} +0 -0
- /package/src/jobs/{sms-queue-options.ts → msg91-sms-queue-options.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidstarters/solid-core",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.202",
|
|
4
4
|
"description": "This module is a NestJS module containing all the required core providers required by a Solid application",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -3,15 +3,19 @@ import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
|
3
3
|
import { redisStore } from 'cache-manager-redis-store';
|
|
4
4
|
import { isRedisConfigured } from 'src/helpers/environment.helper';
|
|
5
5
|
|
|
6
|
-
export const
|
|
6
|
+
export const CacheManagerOptions: CacheModuleAsyncOptions = {
|
|
7
7
|
isGlobal: true,
|
|
8
8
|
imports: [ConfigModule],
|
|
9
9
|
useFactory: async (configService: ConfigService) => {
|
|
10
|
+
|
|
11
|
+
// This defaults to in-memory cache
|
|
10
12
|
if (!isRedisConfigured(configService)) {
|
|
11
13
|
return {
|
|
12
14
|
ttl: 0
|
|
13
|
-
}
|
|
15
|
+
}
|
|
14
16
|
}
|
|
17
|
+
|
|
18
|
+
// If redis is configured we use that...
|
|
15
19
|
const store = await createRedisStore(configService);
|
|
16
20
|
return {
|
|
17
21
|
store: () => store,
|
|
@@ -28,4 +32,3 @@ async function createRedisStore(configService: ConfigService<Record<string, unkn
|
|
|
28
32
|
},
|
|
29
33
|
});
|
|
30
34
|
}
|
|
31
|
-
|
package/src/config/iam.config.ts
CHANGED
|
@@ -26,6 +26,7 @@ export const iamConfig = registerAs('iam', () => {
|
|
|
26
26
|
iamAutoGeneratedPassword:process.env.IAM_AUTOGENERATED_PASSWORD || true,
|
|
27
27
|
passwordPepper: process.env.IAM_PASSWORD_PEPPER || '', // Adding a pepper to the password hashing process for extra security,
|
|
28
28
|
showNameFieldsForRegistration:process.env.IAM_SHOW_NAME_FIELDS_FOR_REGISTRATION === 'true' ? true : false,
|
|
29
|
+
sendWelcomeEmailOnSignup: (process.env.IAM_SEND_WELCOME_EMAIL_ON_SIGNUP ?? 'false').toLowerCase() === 'true',
|
|
30
|
+
sendWelcomeSmsOnSignup: (process.env.IAM_SEND_WELCOME_SMS_ON_SIGNUP ?? 'false').toLowerCase() === 'true',
|
|
29
31
|
};
|
|
30
32
|
})
|
|
31
|
-
|
|
@@ -5,6 +5,7 @@ import { BasicFilterDto } from '../dtos/basic-filters.dto';
|
|
|
5
5
|
import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
|
|
6
6
|
import { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';
|
|
7
7
|
import { ModelMetadataService } from '../services/model-metadata.service';
|
|
8
|
+
import { NavigationDto } from 'src/dtos/navigation.dto';
|
|
8
9
|
|
|
9
10
|
@Controller('model-metadata')
|
|
10
11
|
@ApiTags("Solid Core")
|
|
@@ -43,13 +44,31 @@ export class ModelMetadataController {
|
|
|
43
44
|
offset: 0,
|
|
44
45
|
filters: [],
|
|
45
46
|
groupBy: [],
|
|
46
|
-
populate: [],
|
|
47
|
+
populate: [],
|
|
47
48
|
populateMedia: [],
|
|
48
49
|
sort: []
|
|
49
50
|
}
|
|
50
51
|
return this.modelMetadataService.findMany(basicFilterDto);
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
@ApiBearerAuth("jwt")
|
|
55
|
+
@ApiQuery({ name: 'modelName', required: true, type: String })
|
|
56
|
+
@ApiQuery({ name: 'recordId', required: true, type: Number })
|
|
57
|
+
@ApiQuery({ name: 'limit', required: false, type: Number })
|
|
58
|
+
@ApiQuery({ name: 'offset', required: false, type: Number })
|
|
59
|
+
@ApiQuery({ name: 'fields', required: false, type: Array })
|
|
60
|
+
@ApiQuery({ name: 'sort', required: false, type: Array })
|
|
61
|
+
@ApiQuery({ name: 'groupBy', required: false, type: Array })
|
|
62
|
+
@ApiQuery({ name: 'populate', required: false, type: Array })
|
|
63
|
+
@ApiQuery({ name: 'populateMedia', required: false, type: Array })
|
|
64
|
+
@ApiQuery({ name: 'filters', required: false, type: Array })
|
|
65
|
+
@Get("/navigation")
|
|
66
|
+
async navigation(
|
|
67
|
+
@Query() navigationDto: NavigationDto
|
|
68
|
+
) {
|
|
69
|
+
return this.modelMetadataService.navigation(navigationDto);
|
|
70
|
+
}
|
|
71
|
+
|
|
53
72
|
@ApiBearerAuth("jwt")
|
|
54
73
|
@Get(':id')
|
|
55
74
|
findOne(@Param('id', ParseIntPipe) id: number, @Query() query: any) {
|
|
@@ -94,4 +113,5 @@ export class ModelMetadataController {
|
|
|
94
113
|
return this.modelMetadataService.remove(id);
|
|
95
114
|
}
|
|
96
115
|
|
|
116
|
+
|
|
97
117
|
}
|
|
@@ -27,6 +27,26 @@ export class SettingController {
|
|
|
27
27
|
return this.service.insertMany(createDtos, filesArray, solidRequestContext);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Important to keep this method just above the @Put(':id') definition that follows as otherwise it will conflict.
|
|
32
|
+
*
|
|
33
|
+
* @param body
|
|
34
|
+
* @param files
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
@ApiBearerAuth("jwt")
|
|
38
|
+
@Put('/bulk')
|
|
39
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
40
|
+
async updateSettings(@Body() body: any, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
41
|
+
let settings: CreateSettingDto[] = [];
|
|
42
|
+
|
|
43
|
+
try {
|
|
44
|
+
settings = typeof body.settings === 'string' ? JSON.parse(body.settings) : body.settings;
|
|
45
|
+
} catch (e) {
|
|
46
|
+
throw new BadRequestException('Invalid settings payload');
|
|
47
|
+
}
|
|
48
|
+
return this.service.updateSettings(settings, files);
|
|
49
|
+
}
|
|
30
50
|
|
|
31
51
|
@ApiBearerAuth("jwt")
|
|
32
52
|
@Put(':id')
|
|
@@ -54,7 +74,6 @@ export class SettingController {
|
|
|
54
74
|
return this.service.getAllSettings();
|
|
55
75
|
}
|
|
56
76
|
|
|
57
|
-
|
|
58
77
|
@ApiBearerAuth("jwt")
|
|
59
78
|
@ApiQuery({ name: 'showHeader', required: false, type: String })
|
|
60
79
|
@ApiQuery({ name: 'inListView', required: false, type: String })
|
|
@@ -97,40 +116,17 @@ export class SettingController {
|
|
|
97
116
|
return this.service.delete(id, solidRequestContext);
|
|
98
117
|
}
|
|
99
118
|
|
|
100
|
-
@ApiBearerAuth("jwt")
|
|
101
|
-
@Post('/bulk
|
|
102
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
103
|
-
async
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
throw new BadRequestException('Invalid settings payload');
|
|
113
|
-
}
|
|
114
|
-
return this.service.updateSettings(settings, files);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
@ApiBearerAuth("jwt")
|
|
119
|
-
@Post('/bulk/user')
|
|
120
|
-
@UseInterceptors(AnyFilesInterceptor())
|
|
121
|
-
async updateUserSettings(
|
|
122
|
-
@Body() body: any,
|
|
123
|
-
@UploadedFiles() files: Array<Express.Multer.File>
|
|
124
|
-
) {
|
|
125
|
-
let settings: CreateSettingDto[] = [];
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
settings = typeof body.settings === 'string' ? JSON.parse(body.settings) : body.settings;
|
|
129
|
-
} catch (e) {
|
|
130
|
-
throw new BadRequestException('Invalid settings payload');
|
|
131
|
-
}
|
|
132
|
-
return this.service.updateSettings(settings, files);
|
|
133
|
-
}
|
|
134
|
-
|
|
119
|
+
// @ApiBearerAuth("jwt")
|
|
120
|
+
// @Post('/bulk/user')
|
|
121
|
+
// @UseInterceptors(AnyFilesInterceptor())
|
|
122
|
+
// async updateUserSettings(@Body() body: any, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
123
|
+
// let settings: CreateSettingDto[] = [];
|
|
124
|
+
// try {
|
|
125
|
+
// settings = typeof body.settings === 'string' ? JSON.parse(body.settings) : body.settings;
|
|
126
|
+
// } catch (e) {
|
|
127
|
+
// throw new BadRequestException('Invalid settings payload');
|
|
128
|
+
// }
|
|
129
|
+
// return this.service.updateSettings(settings, files);
|
|
130
|
+
// }
|
|
135
131
|
|
|
136
132
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Type } from "class-transformer";
|
|
2
|
+
import { IsNumber, IsOptional, IsString } from "class-validator";
|
|
3
|
+
import { BasicFilterDto } from "./basic-filters.dto";
|
|
4
|
+
|
|
5
|
+
export class NavigationDto extends BasicFilterDto {
|
|
6
|
+
|
|
7
|
+
@IsString()
|
|
8
|
+
modelName: string;
|
|
9
|
+
|
|
10
|
+
@Type(() => Number)
|
|
11
|
+
@IsNumber()
|
|
12
|
+
@IsOptional()
|
|
13
|
+
recordId: number;
|
|
14
|
+
}
|
package/src/dtos/sign-in.dto.ts
CHANGED
|
@@ -3,19 +3,19 @@ import { IsEmail, IsNotEmpty, IsOptional, IsString, MinLength } from 'class-vali
|
|
|
3
3
|
|
|
4
4
|
export class SignInDto {
|
|
5
5
|
|
|
6
|
-
@ApiProperty({ default: '
|
|
6
|
+
@ApiProperty({ default: 'sa@solidxai.com' })
|
|
7
7
|
@IsEmail()
|
|
8
8
|
// @IsNotEmpty()
|
|
9
9
|
@IsOptional()
|
|
10
10
|
email: string;
|
|
11
11
|
|
|
12
|
-
@ApiProperty({ default: '
|
|
12
|
+
@ApiProperty({ default: 'sa' })
|
|
13
13
|
@IsString()
|
|
14
14
|
// @IsNotEmpty()
|
|
15
15
|
@IsOptional()
|
|
16
16
|
username: string;
|
|
17
17
|
|
|
18
|
-
@ApiProperty({ default: '
|
|
18
|
+
@ApiProperty({ default: '' })
|
|
19
19
|
@IsOptional()
|
|
20
20
|
password: string;
|
|
21
21
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Column, CreateDateColumn, DeleteDateColumn, Index,
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import { Column, CreateDateColumn, DeleteDateColumn, Index, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
|
|
2
|
+
import { Exclude, Expose } from "class-transformer";
|
|
3
|
+
import { LocalDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
|
|
4
4
|
|
|
5
5
|
@Exclude()
|
|
6
6
|
export abstract class CommonEntity {
|
|
@@ -8,13 +8,13 @@ export abstract class CommonEntity {
|
|
|
8
8
|
@PrimaryGeneratedColumn({ type: 'integer' })
|
|
9
9
|
id: number
|
|
10
10
|
|
|
11
|
-
@CreateDateColumn({ name: "created_at" })
|
|
11
|
+
@CreateDateColumn({ name: "created_at", transformer: LocalDateTimeTransformer })
|
|
12
12
|
createdAt: Date;
|
|
13
13
|
|
|
14
|
-
@UpdateDateColumn({ name: "updated_at" })
|
|
14
|
+
@UpdateDateColumn({ name: "updated_at", transformer: LocalDateTimeTransformer })
|
|
15
15
|
updatedAt: Date;
|
|
16
16
|
|
|
17
|
-
@DeleteDateColumn({ name: "deleted_at" })
|
|
17
|
+
@DeleteDateColumn({ name: "deleted_at", transformer: LocalDateTimeTransformer })
|
|
18
18
|
@Index()
|
|
19
19
|
deletedAt: Date;
|
|
20
20
|
|
|
@@ -22,7 +22,7 @@ export abstract class CommonEntity {
|
|
|
22
22
|
deletedTracker: string;
|
|
23
23
|
|
|
24
24
|
@Expose()
|
|
25
|
-
@Column({ name: 'published_at', default: null, nullable: true })
|
|
25
|
+
@Column({ name: 'published_at', default: null, nullable: true, transformer: LocalDateTimeTransformer })
|
|
26
26
|
publishedAt: Date;
|
|
27
27
|
|
|
28
28
|
@Expose()
|
|
@@ -159,7 +159,7 @@ export class FieldMetadata extends CommonEntity {
|
|
|
159
159
|
relationJoinTableName: string;
|
|
160
160
|
|
|
161
161
|
@Column({ name: 'enable_audit_tracking', default: false })
|
|
162
|
-
enableAuditTracking: boolean;
|
|
162
|
+
enableAuditTracking: boolean = false;
|
|
163
163
|
|
|
164
164
|
@Column({ name: "is_multiSelect", default: false })
|
|
165
165
|
isMultiSelect: boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Exclude, Expose, Type } from "class-transformer";
|
|
2
2
|
import { Column, CreateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, UpdateDateColumn } from "typeorm";
|
|
3
3
|
import type { User } from "./user.entity";
|
|
4
|
+
import { LocalDateTimeTransformer } from "src/transformers/typeorm/local-date-time-transformer";
|
|
4
5
|
|
|
5
6
|
export const LEGACY_TABLE_FIELDS_PREFIX = 'ss';
|
|
6
7
|
|
|
@@ -11,13 +12,13 @@ export abstract class LegacyCommonEntity {
|
|
|
11
12
|
// @Generated("increment")
|
|
12
13
|
// id: number
|
|
13
14
|
|
|
14
|
-
@CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at
|
|
15
|
+
@CreateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_at`, transformer: LocalDateTimeTransformer })
|
|
15
16
|
createdAt: Date;
|
|
16
17
|
|
|
17
|
-
@UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at
|
|
18
|
+
@UpdateDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_at`, transformer: LocalDateTimeTransformer })
|
|
18
19
|
updatedAt: Date;
|
|
19
20
|
|
|
20
|
-
@DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at
|
|
21
|
+
@DeleteDateColumn({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_deleted_at`, transformer: LocalDateTimeTransformer })
|
|
21
22
|
@Index()
|
|
22
23
|
deletedAt: Date;
|
|
23
24
|
|
|
@@ -25,7 +26,7 @@ export abstract class LegacyCommonEntity {
|
|
|
25
26
|
deletedTracker: string;
|
|
26
27
|
|
|
27
28
|
@Expose()
|
|
28
|
-
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null
|
|
29
|
+
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_published_at`, default: null, nullable: true, transformer: LocalDateTimeTransformer })
|
|
29
30
|
publishedAt: Date;
|
|
30
31
|
|
|
31
32
|
@Expose()
|
|
@@ -51,7 +52,7 @@ export abstract class LegacyCommonEntity {
|
|
|
51
52
|
@Expose()
|
|
52
53
|
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_created_by_id`, nullable: true })
|
|
53
54
|
createdBy: number;
|
|
54
|
-
|
|
55
|
+
|
|
55
56
|
@Expose()
|
|
56
57
|
@Column({ name: `${LEGACY_TABLE_FIELDS_PREFIX}_updated_by_id`, nullable: true })
|
|
57
58
|
updatedBy: number;
|
|
@@ -34,7 +34,7 @@ export class ModelMetadata extends CommonEntity {
|
|
|
34
34
|
enableSoftDelete: boolean;
|
|
35
35
|
|
|
36
36
|
@Column({ name: "enable_audit_tracking", default: false })
|
|
37
|
-
enableAuditTracking: boolean;
|
|
37
|
+
enableAuditTracking: boolean = false;
|
|
38
38
|
|
|
39
39
|
@Column({ name: "internationalisation", default: false })
|
|
40
40
|
internationalisation: boolean;
|
|
@@ -20,7 +20,6 @@ export class MailFactory {
|
|
|
20
20
|
private readonly commonConfiguration: ConfigType<typeof commonConfig>,
|
|
21
21
|
) { }
|
|
22
22
|
|
|
23
|
-
|
|
24
23
|
getMailService(): IMail {
|
|
25
24
|
const mailServiceName = this.commonConfiguration.emailProvider;
|
|
26
25
|
const mailProviders = this.solidRegistry.getMailProviders();
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Inject, Injectable, Logger } from "@nestjs/common";
|
|
2
|
+
import { ConfigType } from "@nestjs/config";
|
|
3
|
+
import { ModuleRef } from "@nestjs/core";
|
|
4
|
+
import commonConfig from "src/config/common.config";
|
|
5
|
+
import { SolidRegistry } from "src/helpers/solid-registry";
|
|
6
|
+
import { ISMS } from "src/interfaces";
|
|
7
|
+
|
|
8
|
+
function norm(s?: string) {
|
|
9
|
+
return s?.trim().toLowerCase();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// This factory will be use to return a mail service instance, using the configured environment variables
|
|
13
|
+
@Injectable()
|
|
14
|
+
export class SmsFactory {
|
|
15
|
+
private readonly logger = new Logger(this.constructor.name);
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
private readonly moduleRef: ModuleRef,
|
|
19
|
+
private readonly solidRegistry: SolidRegistry,
|
|
20
|
+
@Inject(commonConfig.KEY)
|
|
21
|
+
private readonly commonConfiguration: ConfigType<typeof commonConfig>,
|
|
22
|
+
) { }
|
|
23
|
+
|
|
24
|
+
getSmsService(name: string = null): ISMS {
|
|
25
|
+
// This is the default provider
|
|
26
|
+
const smsServiceName = name || this.commonConfiguration.smsProvider;
|
|
27
|
+
if (!smsServiceName) {
|
|
28
|
+
throw new Error("Unable to resolve sms provider")
|
|
29
|
+
}
|
|
30
|
+
const smsProviders = this.solidRegistry.getSmsProviders();
|
|
31
|
+
|
|
32
|
+
// Return the instance which matches the smsServicename
|
|
33
|
+
if (!smsProviders.length) {
|
|
34
|
+
// throw new Error("No mail providers are registered.");
|
|
35
|
+
this.logger.error("No sms providers are registered.");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const smsServiceProvider = smsProviders.find(provider => provider.name === smsServiceName);
|
|
39
|
+
|
|
40
|
+
return smsServiceProvider.instance as ISMS;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
}
|
|
@@ -1,34 +1,63 @@
|
|
|
1
1
|
import dayjs from 'dayjs';
|
|
2
2
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
3
|
+
|
|
3
4
|
dayjs.extend(customParseFormat);
|
|
4
5
|
|
|
5
6
|
export function parseFlexibleDate(value: any): Date | null {
|
|
6
7
|
if (!value) return null;
|
|
8
|
+
|
|
9
|
+
// Already a valid Date (ExcelJS often gives this)
|
|
7
10
|
if (value instanceof Date && !isNaN(value.getTime())) {
|
|
8
11
|
return value;
|
|
9
12
|
}
|
|
13
|
+
|
|
14
|
+
// Excel serial number
|
|
10
15
|
if (typeof value === 'number') {
|
|
11
16
|
const excelEpoch = new Date(Date.UTC(1899, 11, 30));
|
|
12
17
|
const d = new Date(excelEpoch.getTime() + value * 86400000);
|
|
13
18
|
return isNaN(d.getTime()) ? null : d;
|
|
14
19
|
}
|
|
15
|
-
|
|
20
|
+
|
|
21
|
+
let str = value.toString().trim();
|
|
22
|
+
|
|
23
|
+
// STRIP "(British Summer Time)" or any "(...)" suffix
|
|
24
|
+
str = str.replace(/\s*\(.*\)$/, '');
|
|
25
|
+
|
|
16
26
|
const formats = [
|
|
27
|
+
// strict business formats
|
|
17
28
|
'DD-MM-YYYY',
|
|
29
|
+
|
|
30
|
+
// common alternates
|
|
18
31
|
'YYYY-MM-DD',
|
|
19
32
|
'DD/MM/YYYY',
|
|
20
33
|
'MM/DD/YYYY',
|
|
21
34
|
'D-M-YYYY',
|
|
22
35
|
'YYYY/MM/DD',
|
|
36
|
+
|
|
37
|
+
// JS Date.toString() (without timezone name)
|
|
38
|
+
// (handle single-digit day + different offset shapes)
|
|
39
|
+
'ddd MMM D YYYY HH:mm:ss [GMT]ZZ', // GMT+0100
|
|
40
|
+
'ddd MMM DD YYYY HH:mm:ss [GMT]ZZ',
|
|
41
|
+
'ddd MMM D YYYY HH:mm:ss [GMT]Z', // GMT+01:00
|
|
42
|
+
'ddd MMM DD YYYY HH:mm:ss [GMT]Z',
|
|
43
|
+
|
|
44
|
+
// ISO variants
|
|
23
45
|
'YYYY-MM-DD HH:mm:ss',
|
|
24
|
-
'YYYY-MM-DDTHH:mm:ss',
|
|
25
|
-
'YYYY-MM-DDTHH:mm:ss.SSS',
|
|
26
|
-
'YYYY-MM-DDTHH:mm:ssZ',
|
|
46
|
+
'YYYY-MM-DDTHH:mm:ss',
|
|
47
|
+
'YYYY-MM-DDTHH:mm:ss.SSS',
|
|
48
|
+
'YYYY-MM-DDTHH:mm:ssZ',
|
|
27
49
|
];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
50
|
+
|
|
51
|
+
const parsed = dayjs(str, formats, true); // strict
|
|
52
|
+
if (parsed.isValid()) {
|
|
53
|
+
return parsed.toDate();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Fallback: native Date can parse this JS format very reliably
|
|
57
|
+
const native = new Date(str);
|
|
58
|
+
if (!isNaN(native.getTime())) {
|
|
59
|
+
return native;
|
|
31
60
|
}
|
|
32
|
-
return parsed.toDate();
|
|
33
|
-
}
|
|
34
61
|
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
@@ -81,6 +81,7 @@ export class SolidRegistry {
|
|
|
81
81
|
private dashboardQuestionDataProviders: Set<InstanceWrapper> = new Set();
|
|
82
82
|
private mailProviders: Set<InstanceWrapper> = new Set();
|
|
83
83
|
private whatsappProviders: Set<InstanceWrapper> = new Set();
|
|
84
|
+
private smsProviders: Set<InstanceWrapper> = new Set();
|
|
84
85
|
private securityRuleConfigProviders: Set<InstanceWrapper> = new Set();
|
|
85
86
|
private errorCodeProviders: Set<InstanceWrapper> = new Set();
|
|
86
87
|
|
|
@@ -92,6 +93,10 @@ export class SolidRegistry {
|
|
|
92
93
|
this.whatsappProviders.add(whatsappProvider);
|
|
93
94
|
}
|
|
94
95
|
|
|
96
|
+
registerSmsProvider(smsProvider: InstanceWrapper): void {
|
|
97
|
+
this.smsProviders.add(smsProvider);
|
|
98
|
+
}
|
|
99
|
+
|
|
95
100
|
registerSecurityRuleConfigProvider(securityRuleConfigProvider: InstanceWrapper): void {
|
|
96
101
|
this.securityRuleConfigProviders.add(securityRuleConfigProvider);
|
|
97
102
|
}
|
|
@@ -148,6 +153,10 @@ export class SolidRegistry {
|
|
|
148
153
|
return Array.from(this.whatsappProviders);
|
|
149
154
|
}
|
|
150
155
|
|
|
156
|
+
getSmsProviders(): Array<InstanceWrapper> {
|
|
157
|
+
return Array.from(this.smsProviders);
|
|
158
|
+
}
|
|
159
|
+
|
|
151
160
|
getSecurityRuleConfigProviders(): Array<InstanceWrapper> {
|
|
152
161
|
return Array.from(this.securityRuleConfigProviders);
|
|
153
162
|
}
|
package/src/index.ts
CHANGED
|
@@ -24,6 +24,7 @@ export * from './decorators/solid-database-module.decorator'
|
|
|
24
24
|
export * from './decorators/solid-service.decorator'
|
|
25
25
|
export * from './decorators/mail-provider.decorator'
|
|
26
26
|
export * from './decorators/security-rule-config-provider.decorator'
|
|
27
|
+
export * from './decorators/sms-provider.decorator'
|
|
27
28
|
|
|
28
29
|
export * from './dtos/post-chatter-message.dto'
|
|
29
30
|
export * from './dtos/security-rule-config.dto'
|
|
@@ -194,12 +195,12 @@ export * from './jobs/api-email-subscriber.service'
|
|
|
194
195
|
export { SmtpEmailQueuePublisherRabbitmq, SmtpEmailQueuePublisherRabbitmq as EmailQueuePublisher } from './jobs/smtp-email-publisher.service' // alias for backward compatibility
|
|
195
196
|
export * from './jobs/smtp-email-queue-options'
|
|
196
197
|
export { SmtpEmailQueueSubscriberRabbitmq, SmtpEmailQueueSubscriberRabbitmq as EmailQueueSubscriber } from './jobs/smtp-email-subscriber.service' // alias for backward compatibility
|
|
197
|
-
export * from './jobs/otp-publisher.service'
|
|
198
|
-
export * from './jobs/otp-queue-options'
|
|
199
|
-
export * from './jobs/otp-subscriber.service'
|
|
200
|
-
export * from './jobs/sms-publisher.service'
|
|
201
|
-
export * from './jobs/sms-queue-options'
|
|
202
|
-
export * from './jobs/sms-subscriber.service'
|
|
198
|
+
export * from './jobs/msg91-otp-publisher.service'
|
|
199
|
+
export * from './jobs/msg91-otp-queue-options'
|
|
200
|
+
export * from './jobs/msg91-otp-subscriber.service'
|
|
201
|
+
export * from './jobs/msg91-sms-publisher.service'
|
|
202
|
+
export * from './jobs/msg91-sms-queue-options'
|
|
203
|
+
export * from './jobs/msg91-sms-subscriber.service'
|
|
203
204
|
export * from './jobs/msg91-whatsapp-publisher.service'
|
|
204
205
|
export * from './jobs/msg91-whatsapp-queue-options'
|
|
205
206
|
export * from './jobs/msg91-whatsapp-subscriber.service'
|
|
@@ -281,6 +282,8 @@ export * from './services/ai-interaction.service'
|
|
|
281
282
|
|
|
282
283
|
// Factories
|
|
283
284
|
export * from './factories/mail.factory'
|
|
285
|
+
export * from './factories/sms.factory'
|
|
286
|
+
export * from './factories/whatsapp.factory'
|
|
284
287
|
|
|
285
288
|
// Repositories
|
|
286
289
|
export * from './repository/solid-base.repository'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
|
-
import smsQueueOptions from './sms-queue-database-options';
|
|
3
|
+
import smsQueueOptions from './msg91-sms-queue-database-options';
|
|
4
4
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
5
5
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
6
6
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
7
7
|
import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class Msg91SmsQueuePublisherDatabase extends DatabasePublisher<any> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
3
|
import { QueueMessage } from 'src/interfaces/mq';
|
|
4
|
-
import smsQueueOptions from './sms-queue-database-options';
|
|
4
|
+
import smsQueueOptions from './msg91-sms-queue-database-options';
|
|
5
5
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
6
6
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
7
7
|
import { Msg91SMSService } from 'src/services/sms/Msg91SMSService';
|
|
8
8
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
9
9
|
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
|
-
export class
|
|
14
|
+
export class Msg91SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly smsService: Msg91SMSService,
|
|
16
|
+
// private readonly smsService: Msg91SMSService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
16
18
|
readonly mqMessageService: MqMessageService,
|
|
17
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
20
|
readonly poller: PollerService,
|
|
@@ -27,6 +29,9 @@ export class SmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
|
|
32
|
+
const smsService: Msg91SMSService = this.smsFactory.getSmsService(Msg91SMSService.name) as Msg91SMSService;
|
|
33
|
+
return smsService.sendSMSSynchronously(message);
|
|
34
|
+
|
|
35
|
+
// return this.smsService.sendSMSSynchronously(message);
|
|
31
36
|
}
|
|
32
37
|
}
|
|
@@ -8,11 +8,14 @@ import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.serv
|
|
|
8
8
|
import { Msg91OTPService } from 'src/services/sms/Msg91OTPService';
|
|
9
9
|
import { QueuesModuleOptions } from 'src/interfaces';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
14
|
export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly otpService: Msg91OTPService,
|
|
16
|
+
// private readonly otpService: Msg91OTPService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
18
|
+
|
|
16
19
|
readonly mqMessageService: MqMessageService,
|
|
17
20
|
readonly poller: PollerService,
|
|
18
21
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -27,6 +30,9 @@ export class OTPQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
30
|
}
|
|
28
31
|
|
|
29
32
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
this.
|
|
33
|
+
const otpService: Msg91OTPService = this.smsFactory.getSmsService(Msg91OTPService.name) as Msg91OTPService;
|
|
34
|
+
return otpService.sendSMSSynchronously(message);
|
|
35
|
+
|
|
36
|
+
// this.otpService.sendSMSSynchronously(message);
|
|
31
37
|
}
|
|
32
38
|
}
|
|
@@ -8,11 +8,13 @@ import { QueuesModuleOptions } from 'src/interfaces';
|
|
|
8
8
|
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
9
9
|
import { TwilioSMSService } from 'src/services/sms/TwilioSMSService';
|
|
10
10
|
import { PollerService } from 'src/services/poller.service';
|
|
11
|
+
import { SmsFactory } from 'src/factories/sms.factory';
|
|
11
12
|
|
|
12
13
|
@Injectable()
|
|
13
14
|
export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
14
15
|
constructor(
|
|
15
|
-
private readonly smsService: TwilioSMSService,
|
|
16
|
+
// private readonly smsService: TwilioSMSService,
|
|
17
|
+
private readonly smsFactory: SmsFactory,
|
|
16
18
|
readonly mqMessageService: MqMessageService,
|
|
17
19
|
readonly mqMessageQueueService: MqMessageQueueService,
|
|
18
20
|
readonly poller: PollerService,
|
|
@@ -27,6 +29,7 @@ export class TwilioSmsQueueSubscriberDatabase extends DatabaseSubscriber<any> {
|
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
subscribe(message: QueueMessage<any>) {
|
|
30
|
-
|
|
32
|
+
const smsService: TwilioSMSService = this.smsFactory.getSmsService(TwilioSMSService.name) as TwilioSMSService;
|
|
33
|
+
return smsService.sendSMSSynchronously(message);
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
3
|
import { RabbitMqPublisher } from 'src/services/queues/rabbitmq-publisher.service';
|
|
4
|
-
import otpQueueOptions from './otp-queue-options';
|
|
4
|
+
import otpQueueOptions from './msg91-otp-queue-options';
|
|
5
5
|
import { MqMessageQueueService } from 'src/services/mq-message-queue.service';
|
|
6
6
|
import { MqMessageService } from 'src/services/mq-message.service';
|
|
7
7
|
import { QueuesModuleOptions } from "../interfaces";
|
|
8
8
|
|
|
9
9
|
@Injectable()
|
|
10
|
-
export class
|
|
10
|
+
export class Msg91OTPQueuePublisher extends RabbitMqPublisher<any> {
|
|
11
11
|
constructor(
|
|
12
12
|
protected readonly mqMessageService: MqMessageService,
|
|
13
13
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|