Source code for Kaizen's backend. Kaizen is a web-native collaborative task management software for humans™. Provides a web API that the client uses to function and perform various tasks. Developed as a NitHub final project submission.
- Supports creating tasks with priorities, and due dates.
- Supports teams for collaborative task management.
- User management system and access controls.
- Secure authentication and authorization via JWT access tokens.
- Sensitive endpoints require authorization via access tokens.
- Passwords are hashed before storing in the database.
- User verification is required before accessing protected endpoints, users are verified via email.
- Adheres to industry best practices with abstraction and encapsulation via OOP.
- Rate limiting to minimize / prevent API abuse.
- Deployment via Docker images.
- NodeJS (Typescript & ExpressJS): asynchronous server-side js runtime engine.
- PostgreSQL: for primary persistent application data.
- Prisma: ORM for working with PostgreSQL.
- Redis: for fast key-value caching.
- MailerSend: for sending emails securely.
- Docker: for containerization & deployments.
An overview of API endpoints that are available. The core API features are accessible through the /v1
prefix.
-
Base:
-
[GET]
/
- Base endpoint, returns 200 OK if the server is running. -
[GET]
/health
- Used to check API health status, 200 if server is healthy.
-
-
Authentication:
-
[POST]
/auth/signup
- Validates credentials and attempts to create a new Kaizen user. -
[POST]
/auth/signin
- Validates credentials and attempts to login authorized users. Will generate a verification link if the user is not verified. -
[POST]
/auth/generate
- This endpoint generates verification links for successfully created users. The link is only valid for 24 hours.
-
-
Email:
- [GET]
/email/verify
- This endpoint attempts to verify users based on a previously generated code.
- [GET]
-
User:
- [GET]
/user/info/:username
- This endpoint returns information about the currently authorized user, rejects the request otherwise.
- [GET]
-
Task:
-
[GET]
/task/personal/:username
- Returns all tasks belonging to the authorized user, rejects the request otherwise. -
[POST]
/task/personal/:username
- Creates a personal task for the currently authorized user, rejects otherwise. -
[PATCH]
/task/personal/:username
- Batch updates the currently authorized user tasks, rejects request otherwise. -
[DELETE]
/task/personal/:username?id=ID
- Deletes a singular task with the provided id for the authorized user, rejects request otherwise.
-
After cloning the repository, you can setup a local instance by following these steps:
- install npm packages using
yarn install
. - Configure environment variables using the .env.example template, see the configuration options here.
- Perform database migrations using
./scripts/db.sh --migrate
, after generating a Prisma client vianpx prisma generate
. - Start the development server using
./scripts/dev.sh
.
These scripts need execution permission which you can grant using chmod +x <path-to-script>
Variable | Default | Description |
---|---|---|
PORT | 8080 | Server port. |
HOSTNAME | localhost | The hostname of the deployed instance or localhost. |
ENVIRONMENT | dev | The environment the server is running from. |
DEPLOYED_URL | http://localhost:8080/v1 | Full URL of the deployed instance or localhost, prefixed with v1 . |
CLIENT_URL | http://localhost:3000 | Full URL of the deployed web client. |
DATABASE_URL | PostgreSQL database connection URL (pooled). | |
DIRECT_URL | PostgreSQL non-pooled connection URL. | |
REDIS_URI | Redis server connection URI. | |
ACCESS_TOKEN_SECRET | Access token secret key. | |
REFRESH_TOKEN_SECRET | Refresh token secret key. | |
EMAIL_VERIFICATION_SECRET | Email verification secret key. | |
MAILSERVICE_API_KEY | API key for the mailing service. (mailersend) | |
KAIZEN_EMAIL | Address to send emails from. | |
KAIZEN_EMAIL_NAME | Email sender name. |