/vantar-api

Vantar Inventory Manager

Primary LanguageTypeScript

Vantar API

This is Vantar Project's API, an API to manage your inventory.

Features

🎯 Key Features

  • Manage Shops: Create an shop where all information are insolated, one shop is diferent from other.

  • Manage Inventory: Create an inventory from using products from your product list.

  • Manage Products: Create your product list to use it when creating an invoice or an inventory.

  • Manage Invoices: You can create invoices to save information about the sells you have.

  • Mailing: When you login or forgot your password, an e-mail will be sent to you.

🔐 Security

This API implements the latest features on security in the Node environment.

Some of those features are:

  • Hashing and encryptation.
  • Inputs validations and sanitization.
  • Rate limit.
  • Caching.
  • Role and Owner Based Access Control.
  • Secure headers.

📄 Documentation

Thanks to the integration of the package nestJS/swagger, Vantar api is well documented, you can access Vantar API's swagger docs through the path /docs and swagger documentation will be shown to you.

Preview

Technologies used

Stack

This app is made in NestJS following Clean Arquitecture principles alongside with Postgres and MongoDB.

📦 Dependencies

  • swc
  • Prisma
  • Class-validator
  • Class-transformer
  • Bcrypt
  • Passport
  • Resend
  • Helmet

Setup

📃 Requirements

  • NodeJS 20.16.0 with pnpm enbled
corepack enable pnpm
  • NestJS CLI
pnpm add @nestjs/cli
  • Docker desktop

✅ Installation

Set env files

# .env
NODE_ENV = development
PORT = 2000
HOST = # app HOST
CLIENT = # clients allowed by cors

# db variables
DB_PASSWORD = #db password
DB_USER = #db user
DB_NAME = #db name

## connection
DATABASE_URL = postgres://${DB_USER}:${DB_PASSWORD}@localhost:5434/${DB_NAME}?schema=public
DIRECT_URL = # only if using supabase
MONGO_URI = # mongo ulr
MONGO_DB_NAME = # mongo db database

# Email config
EMAIL_KEY = # RESEND API KEY
DEAFULT_EMAIL = # YOUR OWN EMAIL SERVER REGISTERED ON RESEND
AUTH_URL = ${HOST}/auth # URL used for account activation endpoint

# Tokens & security
AT_TIME = # Access_token expiry time
RT_TIME = # Refresh_token expiry time
HASH = # Rounds salts for bcrypt
SECRET = # Secret to sign access_tokens
RT_SECRET = # Refresh_token secret to sign them
ACTIVATION_SECRET = # Activation for activation token
RESET_SECRET = # Secret for reset token validation

#Default ADMIN
USER_NAME = # admin name
USER_MAIL = # admin mail
USER_PW = # admin password
# .env.docker
NODE_ENV = development
PORT = 2000
HOST = # app HOST
CLIENT = # clients allowed by cors

# db variables
DB_PASSWORD = # postgres password
DB_USER = # postgres user
DB_NAME = # postgres name

# replace connection variable where host name is localhost and port
DATABASE_URL = postgres://${DB_USER}:${DB_PASSWORD}@database:5432/${DB_NAME}?schema=public
DIRECT_URL = # only if using supabase
MONGO_URI = # mongo database url
MONGO_DB_NAME = # mongoDB name

# Email config
EMAIL_KEY = # RESEND API KEY
DEAFULT_EMAIL = # YOUR OWN EMAIL SERVER REGISTERED ON RESEND
AUTH_URL = ${HOST}/auth # URL used for account activation endpoint

# Tokens & security
AT_TIME = # Access_token expiry time
RT_TIME = # Refresh_token expiry time
HASH = # Rounds salts for bcrypt
SECRET = # Secret to sign access_tokens
RT_SECRET = # Refresh_token secret to sign them
ACTIVATION_SECRET = # Activation for activation token
RESET_SECRET = # Secret for reset token validation

#Default ADMIN
USER_NAME = # admin name
USER_MAIL = # admin mail
USER_PW = # admin password

🔄️ Restore dependencies

pnpm install

Execution

# development
$ pnpm run start

# watch mode
$ pnpm run start:dev

# production mode
$ pnpm run start:prod

Using docker

docker compose --env-file .env.docker up --build -d

Note: --env-file flag is to tell docker that use a diferent .env file in runtime. This example has two environments: local dev & docker dev, if you will only use docker you can remove --env-file flag.

Test

# unit tests
$ pnpm run test

# e2e tests
$ pnpm run test:e2e

# test coverage
$ pnpm run test:cov