catenary-backend 0.1.1

import and backend for gtfs data
Documentation
## Install Dependencies

```bash
sudo apt install protobuf-compiler build-essential gcc pkg-config libssl-dev postgresql unzip wget
```

## Loading in Data
Loading in data into the Postgres database is a multistep process. Ensure your postgres database is working and your password is set correctly.

### Download the Transitland repo
Transitland acts as an initial source of knowledge for Catenary-Backend, and associates static feeds and realtime feeds together.
Download and Update it via:
```bash
git submodule init && git submodule update
```

If you already have it, remember to git pull / merge changes
To do this, cd into the folder `transitland-atlas` and run `git pull`

### Download GTFS static data
This downloads the world's GTFS Static Data. This step may take a while, so go play some Minecraft / touch grass and come back when it's all finished!
```bash
cargo run --release --bin transitlanddownload
```

### Unzip and format the zip files
```bash
./src/ingest_gtfs_schedule/unzip-statics.sh
```

### Import data into the postgres database

```bash
cargo run --release --bin import -- --postgres "host=localhost user=postgres password=correcthorsebatterystaple" --threads 25 --startfresh true --isprod false
```

This command writes to `gtfs_stage`. 
Omit startfresh if you would want to wipe the staging directory.

For safety reasons, you are unable to wipe the `gtfs` schema, which is the production database, from this version.

You can also write to production, especially loading in a single agency, like this.

```bash
cargo run --release --bin import -- --postgres "host=localhost user=postgres password=correcthorsebatterystaple" --threads 25 --startfresh false --limittostaticfeed f-9q9-caltrain --isprod true
```

### Moving staging to be the new production database.

Moving the `gtfs_stage` set of tables to `gtfs` is really simple

```bash
cargo run --bin move_to_prod -- --postgres "host=localhost user=postgres password=correcthorsebatterystaple"
```

Move to prod **deletes the current production database, renames the staging and then commits the change**.

You're all done! Data is fully ready for serving to users!

## Running the Application

### Install Systemd Service
```bash
sudo cp transitbackend.service /etc/systemd/system/transitbackend.service
sudo systemctl daemon-reload
sudo systemctl enable --now transitbackend.service
```

Example endpoints

`http://localhost:5401/getroutesperagency?feed_id=f-9mu-orangecountytransportationauthority`

`http://localhost:5401/gettrip?feed_id=f-9mu-orangecountytransportationauthority&trip_id=10995882`

## For Contributors

For unix users, running `git config core.hooksPath .githooks` is required.
Pull requests will not be merged without this.

No option exists for Windows users at the moment. Please try WSL Ubuntu for the moment. We're working on adding this.