https://github.com/danielc92/bikeshare-api
A bike share REST-API, designed with Node.js, Typescript, TypeORM, Postgres & Docker
https://github.com/danielc92/bikeshare-api
docker postgresql rest-api side-project typeorm typescript
Last synced: about 1 year ago
JSON representation
A bike share REST-API, designed with Node.js, Typescript, TypeORM, Postgres & Docker
- Host: GitHub
- URL: https://github.com/danielc92/bikeshare-api
- Owner: danielc92
- Created: 2020-06-23T12:14:30.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-24T03:27:39.000Z (about 3 years ago)
- Last Synced: 2025-03-12T23:02:02.140Z (about 1 year ago)
- Topics: docker, postgresql, rest-api, side-project, typeorm, typescript
- Language: TypeScript
- Homepage:
- Size: 962 KB
- Stars: 16
- Watchers: 1
- Forks: 3
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Bikeshare API
A bike share REST-API, designed with Node.js, Typescript, TypeORM, Postgres & Docker
### Stack
- Typescript
- Node.js
- TypeORM
- Docker
- Postgres
### Getting started
Prerequisites:
- Install NVM node package manager
- Install docker for desktop
#### Node
```
# Using node package manager install version 12
nvm install 12.0.0
nvm use 12.0.0
# You may check what version is currently being used with
nvm list
# you will need nodemon
npm i -g nodemon
# install rest of dependencies
npm i
```
#### Running development server
```
# Start the docker postgres db
npm run db-start
# Run the development api server
npm run dev
```
#### Testing the controllers
```
# Start the docker postgres db (if you haven't done so already)
npm run db-start
# Running all tests
npm run test
```
#### Testing in postman
- Import the collection from postman folder
- Set `{{host}}` global variable to http://localhost:3050 (or whatever it is set to in `src/index.ts`)
- Set `{{token}}` global variable if youre using authentication. This token is obtainable, each time a successful request to `{{host}}/auth/login` is made
### Available Routes
- /auth/login (allows Riders to authenticate and retrieve jwt token)
- /rider (allows for create, delete, update, retrieval of Rider data)
- /route (allows for create, delete, update, retrieval of Route data)
- /pack (allows for create, delete, update, retrieval of Pack data)
- /bike (allows for create, delete, update, retrieval of Bike data)
- /contact (allows for create, delete, update, retrieval of Contact data)
- /my-routes (allows for create, delete, retrieval of Rider-Route associations)
- /my-packs (allows for create, delete, retrieval of Rider-Pack associations)
### Configuration
TypeORM configuration can be modified in `ormconfig.json` in root of project. Currently the project uses a docker/postgres setup for local development.
### Examples
Loading many to many
```
const data = await connection
.getRepository(Rider)
.createQueryBuilder("rider")
.leftJoinAndSelect("rider.routes", "route")
.getMany();
```
Saving many to many
```
let z = connection.getRepository(Route);
let results = await z.find();
let x = connection.getRepository(Rider);
let rider = await x.findOne();
console.log(rider);
rider.routes = results;
await connection.manager.save(rider);
```
Deleting many to many
```
let aRider = await connection
.getRepository(Rider)
.findOne({ where: { id: 3 }, relations: ["packs"] });
aRider.packs = aRider.packs.filter((p) => p.id !== 3);
await connection.manager.save(aRider);
```
```sql
INSERT INTO permission
("apiRoute", "requestMethod")
VALUES
('/bike', 'get'),('/bike', 'post'),('/bike', 'patch'),('/bike', 'delete'),
('/bike/detail','get'),
('/route', 'get'),('/route', 'post'),('/route', 'patch'),('/route', 'delete'),
('/route/detail','get'),
('/rider', 'get'),('/rider', 'post'),('/rider', 'patch'),('/rider', 'delete'),
('/rider/detail','get'),
('/brand', 'get'),('/brand', 'post'),('/brand', 'patch'),('/brand', 'delete'),
('/brand/detail','get'),
('/contact', 'get'),('/contact', 'post'),('/contact', 'patch'),('/contact', 'delete'),
('/contact/detail','get'),
('/pack', 'get'),('/pack', 'post'),('/pack', 'patch'),('/pack', 'delete'),
('/pack/detail','get'),
('/my-packs', 'get'),('/my-packs', 'patch'),('/my-packs', 'delete'),
('/my-routes', 'get'),('/my-routes', 'patch'),('/my-routes', 'delete'),
('/auth/login','post')
;
```