This repository has been archived on 2023-08-16. You can view files and clone it, but cannot push or open issues or pull requests.
Foodloop-Server/README.md

142 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# LocalSpend - Server
This repository contains the server for the LocalSpend system.
## Current Status
*Master:* [![Build Status](https://travis-ci.org/Pear-Trading/Foodloop-Server.svg?branch=master)](https://travis-ci.org/Pear-Trading/Foodloop-Server)
*Development:* [![Build Status](https://travis-ci.org/Pear-Trading/Foodloop-Server.svg?branch=development)](https://travis-ci.org/Pear-Trading/Foodloop-Server)
# Test Environment
## Running Tests
To run the main test framework, first install all the dependencies, then run
the tests:
- `cpanm --installdeps .`
- `prove -lr`
To run the main framework against a PostgreSQL backend, assuming you have
`postgres` installed, you will need some extra dependencies first:
- `cpanm --installdeps . --with-feature postgres`
- `PEAR_TEST_PG=1 prove -lr`
## Setting Up Minion
To set up Minion support, you will need to create a database and user for
it to connect to.
In production his should be a PostgreSQL database, however SQLite can be used
in testing.
To use the SQLite version:
1. Install the SQLite dependencies:
- `cpanm --installdeps --with-feature sqlite .`
2. Ensure that the following is in your configuration file:
- ```
minion => {
SQLite => 'sqlite:minion.db',
},
```
This will then use an SQLite DB for the Minion backend, using `minion.db` as
the database file.
To start the minion itself, run this command:
- `./script/pear-local_loop minion worker`
## Importing Ward Data
To import ward data:
1. Download CSV(s) from [here](https://www.doogal.co.uk/PostcodeDownloads.php)
1. Run the following command:
- ```shell script
./script/pear-local_loop minion job \
--enqueue 'csv_postcode_import' \
--args '[ "⟨ path to CSV ⟩ ]'
```
## Setting Up Entity Postcodes
1. Import Code-Point Open:
- included in `etc/`
- `./script/pear-local_loop codepoint_open --outcodes LA1`
1. Assign postcodes:
- ```shell script
./script/pear-local_loop minion job \
--enqueue entity_postcode_lookup
```
## Example PostgreSQL setup
```
# Example commands - probably not the best ones
# TODO come back and improve these with proper ownership and DDL rights
sudo -u postgres createuser minion
sudo -u postgres createdb localloop_minion
sudo -u postgres psql
psql=# alter user minion with encrypted password 'abc123';
psql=# grant all privileges on database localloop_minion to minion;
```
# Development Environment
There are a couple of setup steps to getting a development environment ready.
## First Time Setup
1. Decide if you're using SQLite or PostgreSQL locally.
- Development supports both, however production uses PostgreSQL.
- For this example we will use SQLite.
- As the default config. is set up for this, no configuration changes are
needed initially.
1. Install dependencies:
- ```shell script
cpanm --installdeps . \
--with-feature=sqlite \
--with-feature=codepoint-open
```
1. Install the database:
- `./script/deploy_db install -c 'dbi:SQLite:dbname=foodloop.db'`
1. Set up the development users:
- `./script/pear-local_loop dev_data --force`
- **DO NOT RUN ON PROD.**
1. Start the minion:
- `./script/pear-local_loop minion worker`
1. Import ward data (see [instructions](#importing-ward-data) above)
1. Set up postcodes (see [instructions](#setting-up-entity-postcodes) above)
1. Create an `environment.dev.ts` file in `src/environments` with your API keys
1. Start the application:
- `morbo script/pear-local_loop -l http://*:3000`
- You can modify the host and port as needed.
## Database Scripts
To upgrade the database after making changes to commit:
1. `./script/deploy_db write_ddl -c 'dbi:SQLite:dbname=foodloop.db'`
1. `./script/deploy_db upgrade -c 'dbi:SQLite:dbname=foodloop.db'`
To redo leaderboards:
1. `./script/pear-local_loop recalc_leaderboards`
# Troubleshooting
## Can't write to /usr/local/share/perl/5.30.0 and /usr/local/bin: Installing modules to /home/<username>/perl5 when running `cpanm` commands
Intall `local::lib` by running the following commands:
```
cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
```
NB: You must run this in each Terminal window; I don't know why.
## Can't load application from file "<path-to-repo>/script/pear-local_loop": Can't locate Data/UUID.pm in @INC (you may need to install the DATA::UUID module) when running server
Ensure you have run the `cpan --installdeps` command.