# RightTree Right Plant Right Place Right Time implementation using React and Django. ## Initial Setup Before running the applications please ensure the following prerequisites have been met. #### Software Most applications in this repository are built using Docker which resolves many dependencies but you will require a local installation of `git`, `docker` and `docker-compose`. ```bash $ sudo apt install git docker-compose ``` To install `docker`, follow the [official installation documentation](https://docs.docker.com/get-docker/). [Instructions are also available for `docker-compose`](https://docs.docker.com/compose/install/). In order to recieve address data while running in development mode you will need to set an environment variable containing a valid linz data service api key. Such a key can be retrieved by signing up to https://data.linz.govt.nz/. One way of setting the variable is exporting it in the same terminal window that you will run the application. To do this please run the following command: ```bash export LINZ_API_KEY= ``` You may also need to give the `dev` script executable permissions using the following command: ``` chmod +x ./dev ``` ### Add shapefiles for database population Please unzip and add the following shapefiles to the `./backend/right_tree/api/data/resources` directory. It should include all the files required by the shapefile and use naming conventions as follows: **Ecological Districts Shapefile:** ``` backend/right_tree/api/data/resources/ecological_districts/ - DOC_EcologicalDistricts_2021_08_02.cpg - DOC_EcologicalDistricts_2021_08_02.dbf - DOC_EcologicalDistricts_2021_08_02.prj - DOC_EcologicalDistricts_2021_08_02.sbn - DOC_EcologicalDistricts_2021_08_02.sbx - DOC_EcologicalDistricts_2021_08_02.shp - DOC_EcologicalDistricts_2021_08_02.shp.xml - DOC_EcologicalDistricts_2021_08_02.shx ``` **Ecological Districts Shapefile:** ``` backend/right_tree/api/data/resources/fundamental_soil_layers/ - fundamental-soil-layers-new-zealand-soil-classification.cpg - fundamental-soil-layers-new-zealand-soil-classification.dbf - fundamental-soil-layers-new-zealand-soil-classification.prj - fundamental-soil-layers-new-zealand-soil-classification.shp - fundamental-soil-layers-new-zealand-soil-classification.shx - fundamental-soil-layers-new-zealand-soil-classification.xml ``` ### Add spreadsheet data for database population The plant spreadsheet should be renamed as `plant_data.xlsx` and placed in the `./backend/right_tree/api/data/resources` directory. ## Running application for development ### Initial build Builds the Django backend docker image. This may need to be re-run if any new dependencies are added. ``` ./dev build ``` ### Initialise database Creates `right_tree` database and installs `postgis` extensions. ``` ./dev init_database ``` ### Run web application Starts up the applications including the frontend, backend and database. ``` ./dev start ``` Once running the components can be accessed as follows: | Application | Hosted | | --- | --- | | React Frontend | http://localhost:3000 | | Django Backend | http://localhost:8000 | | Database | postgis://localhost:5432 | ## Available commands Other commands can be run using the following. ``` ./dev ``` A summary of available commands are outlined below. Note that if the command requires the application to be running (`Requires Run`) please execute `./dev start` in another terminal before running that command. | Command | Description | Requires Run | | --- | --- | --- | | `create_database` | Removes the existing database and data. Then it creates the `right_tree` database within a fresh postgis database instance. | No | `makemigrations` | Performs the django `makemigrations` command in the backend container. | Yes | `migrate` | Performs the django `migrate` command in the backend container. | Yes | `createsuperuser` | Performs the django `createsuperuser` command in the backend container. | Yes | `load_fixtures` | Performs the django `loaddata` command in the backend container. This loads all the fixtures found in the `/backend/right_tree/api/data/fixtures` directory. | Yes | `load_shapefiles` | Performs the custom `loadshapefiles` command in the backend container. This loads the ecological districts and soil layers shape files in `c`. | Yes | `create_plant_fixtures` | Performs the custom `createplantfixtures` command in the backend container. This loads the plant spreadsheet data from `/backend/right_tree/api/data/resources/plant_data.xlsx`. Requires the fixtures to be applied and shapefiles loaded. | Yes | `reset_plants` | Performs the custom `resetplants` command in the backend container. This removes all plant entries from the database. | Yes | `load_plant_fixtures` | Loads the `/backend/right_tree/api/data/fixtures/plants.json` fixture. Requires the `plants.json` file to be created (`./dev create_plant_fixtures`) and the plant table to be empty (`./dev reset_plants`). | Yes | `load_plants` | Creates plants fixtures and loads them into a fresh plant table in the database. Requires the fixtures to be applied and shapefiles loaded. | Yes | `populate_database` | Populates the `right_tree` database with base data (fixtures), provided shapefiles and plant spreadsheet data. Requires the database to be created. | No | `init_database` | Creates and populates the database | No | `reset_database` | Removes, recreates and populates the database | No | `build` | Builds required images | No | `start` | Runs all services including the frontend, backend and postgres database | No