/invygo-staff-scheduling-api

Staff Scheduling application

Primary LanguageTypeScriptMIT LicenseMIT

invygo-staff-scheduling-api

Staff Scheduling application

😎 Introducing The Project

A TypeScript express node server that serves as a staff scheduking API

🤔 Prerequisite

  • Docker
  • MySQL Database (or you can just use docker instead --explained-later)
  • NPM
  • YARN

🚀 Quick Start

Dev Mode

1) Install the node dependances

$ yarn install

2) Run MySQL database

Simply, run the MYSQL in docker using the following command:

$ docker run -p 3306:3306 --name mysql --platform linux/x86_64 -e "MYSQL_ROOT_PASSWORD=password" -e "MYSQL_DATABASE=invygo" mysql:5.7

OR if you want to connect to your own MySQL DB:

Make sure to update the environment variables in the .env.development.local file so it points to the correct database DB_HOST:DB_PORT

And also update the following to match your setup DB_USER = root, DB_PASSWORD = password

Make sure to create an empty database called invygo.

3) Run Migration script

$ yarn localDBmigration

Now your database is ready to go

4) Run The API

$ yarn dev

Prod Mode

Run within a dockerized container

Run the following command to run the dockerized container

$ docker-compose up -d

🌐 The API :: Postman

After you run the api in DEV/PROD mode the server will start listening at http://localhost:3000

You can find all the details for the api in the postman folder

  • Run Postamn
  • import Invygo.postman_collection.json into your Postman.
  • import Invygo Env.postman_environment.json into your Postman.
  • Enjoy

📗 Swagger :: API Document

Start your app in development mode and navigate to http://localhost:3000/api-docs

🗂 Code Structure

│
├── /.vscode
│   └── settings.json
│
├── /src
│   ├── /api
│   │   ├── /controllers
│   │   │   ├── auth.controller.ts
│   │   │   ├── index.controller.ts
│   │   │   ├── index.ts
│   │   │   ├── user.controller.ts
│   │   │   └── schedule.controller.ts
│   │   │
│   │   │── /dtos
│   │   │   ├── user.dto.ts
│   │   │   ├── schedule.dto.ts
│   │   │   └── index.ts
│   │   │
│   │   │── /exceptions
│   │   │   ├── index.ts
│   │   │   └── HttpException.ts
│   │   │
│   │   │── /middlewares
│   │   │   ├── access.middleware.ts
│   │   │   ├── auth.middleware.ts
│   │   │   ├── error.middleware.ts
│   │   │   ├── index.ts
│   │   │   └── validation.middleware.ts
│   │   │
│   │   │── /routes
│   │   │   ├── auth.route.ts
│   │   │   ├── index.route.ts
│   │   │   ├── index.ts
│   │   │   ├── schedule.route.ts
│   │   │   └── user.route.ts
│   │   │
│   │   │── /services
│   │   │   ├── auth.service.ts
│   │   │   ├── index.ts
│   │   │   ├── schedule.service.ts
│   │   │   └── user.service.ts
│   │
│   ├── /data
│   │   ├── /databases
│   │   │   ├── mysql.ts
│   │   │   └── indexts
│   │   │
│   │   ├── /entities
│   │   │   ├── permission.entity.ts
│   │   │   ├── role.entity.ts
│   │   │   ├── schedule.entity.ts
│   │   │   ├── user.entity.ts
│   │   │   └── index.ts
│   │   │
│   │   ├── /migrations
│   │   │  ├── .gitkeep
│   │   │  └── 1656619200000-InitialMigration.migration.ts
│   │   │
│   │   ├── /repositories
│   │   │   ├── roles.repository.ts
│   │   │   ├── schedules.repository.ts
│   │   │   ├── users.repository.ts
│   │   │   └── index.ts
│   │   │
│   │   ├── /seeders
│   │   │   ├── index.ts
│   │   │   └── initial.seed.ts
│   │
│   │
│   ├── /config
│   │   └── index.ts
│   │
│   ├── /interfaces
│   │   ├── auth.interface.ts
│   │   ├── index.ts
│   │   ├── permissions.interface.ts
│   │   ├── roles.interface.ts
│   │   ├── routes.interface.ts
│   │   ├── schedules.interface.ts
│   │   └── users.interface.ts
│   │
│   ├── /tests
│   │   ├── auth.test.ts
│   │   ├── fixtures.ts
│   │   ├── schedule.test.ts
│   │   └── users.test.ts
│   │
│   ├── /utils
│   │   ├── logger.ts
│   │   ├── util.ts
│   │   └── vaildateEnv.ts
│   │
│   ├── app.ts
│   └── server.ts
│
├── .dockerignore
├── .editorconfig
├── .env.development.local
├── .env.production.local
├── .env.test.local
├── .eslintignore
├── .eslintrc
├── .gitignore
├── .huskyrc
├── .nvmrc
├── .prettierrc
├── .swcrc
├── docker-compose.yml
├── docker-entrypoint.sh
├── Dockerfile
├── ecosystem.config.js
├── jest.config.js
├── LICENSE
├── Makefile
├── nginx.conf
├── nodemon.json
├── package.json
├── swagger.yaml
├── tsconfig.json
└── yarn.lock