Frequently Asked Questions
Use the @nestjs/schedule
module with a cron job to trigger the RemindersService
to check for due reminders and send them via the Plivo API. The cron job's frequency is configurable via the REMINDER_CHECK_CRON_TIME
environment variable. The service queries the database for pending reminders and updates their status as they're processed.
Plivo is a cloud communications platform that provides the SMS sending functionality. The NestJS application integrates with Plivo's API using the official Plivo Node.js SDK to send SMS messages based on scheduled reminders stored in the database.
TypeORM simplifies database interactions by providing an object-relational mapper (ORM) for TypeScript. It allows you to define entities and interact with the database using familiar JavaScript methods, while PostgreSQL offers a robust and reliable database solution.
The synchronize: true
setting in TypeORM should always be set to false
in a production environment. While convenient for development, it can lead to data loss. Use TypeORM migrations to manage schema changes safely in production.
Yes, you can potentially adapt the code to use a different database. TypeORM supports various databases. You would need to change the type
in the TypeOrmModule
configuration and install the appropriate database driver for TypeORM.
Store your Plivo Auth ID, Auth Token, and sender number in a .env
file. This file should be added to your .gitignore
to prevent it from being committed to version control. The @nestjs/config
module loads these variables into your application's environment.
These libraries provide robust validation and transformation for incoming request data in NestJS. class-validator
allows you to define validation rules using decorators in your DTOs (Data Transfer Objects), while class-transformer
automatically transforms request payloads into DTO instances.
The cron schedule is defined by the REMINDER_CHECK_CRON_TIME
environment variable. Use cron expression syntax to specify the frequency. For example,
represents every minute, and 0 0
represents every day at midnight. See crontab.guru for help with cron syntax.
If Plivo's API returns an error during SMS sending, the application logs the error, updates the reminder's status to FAILED
, and stores the error message in the database. An optional retryFailedReminder
method can be used to attempt resending failed messages.
The article recommends using an LTS (Long-Term Support) version of Node.js for this project. LTS versions receive security updates and bug fixes for an extended period, ensuring stability and compatibility.
Migrations are managed using the TypeORM CLI. After installing it (npm install -g typeorm
), you can generate migrations with npm run migration:generate --name=YourMigrationName
and run them with npm run migration:run
. Ensure you build the project first with npm run build
to compile the migration files.
The PROCESSING
status is used to prevent race conditions in a multi-instance deployment, ensuring that a reminder is not picked up and processed multiple times concurrently. The cron job acquires a lock on pending reminders by setting their status to PROCESSING
before sending the SMS.
NestJS modules promote modularity and organization. Features like Plivo integration, database interaction, and reminder management are separated into distinct modules. This improves maintainability and testability.
The sendAt
field in the Reminder
entity uses the timestamp with time zone
data type in PostgreSQL to store dates with timezone awareness. It is crucial to consistently store dates in UTC within your database to avoid timezone-related issues.
Your Plivo Auth ID and Auth Token can be found in your Plivo console. After logging in, they are displayed on the main dashboard. You'll also need a Plivo phone number to send SMS messages from, which can be purchased or found in the 'Numbers' section under 'Messaging'.
Content Loading Error
We encountered an error while processing this content.