## 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.