Taarifa Waterpoints
===================

Overview
--------

Taarifa Waterpoints is a mapping application for waterpoint management system for Tanzania. It has frontend written in JavaScript and backed in python. Uses TaarifaAPI as a framefork and MongoDB as a document storage.

Upstream URL: https://github.com/taarifa/TaarifaWaterpoints

API URL: https://github.com/taarifa/TaarifaAPI

Fork URL: https://github.com/trendspotter/TaarifaWaterpoints - the fork contains fixes for python3 compatibility and ready-to-use release package with frontent build using the method below.

MongoDB
-------

Application uses MongoDB NoSQL database as a data storage, currently running as unsecured instance without any admin user.

Data need to be prepopulated before the application can be used for the first time. Prepopulation is done as part of installation script as follows

.. code-block:: bash

    cd /srv/taarifa
    export MONGO_URI=mongodb://taarifa-mongodb/taarifa
    
    python manage.py create_facility
    python manage.py create_service
    python manage.py upload_waterpoints demodata.csv

Frontend build
--------------

Frontend requires Node.js 8, ancient verions of packages, and a bunch of patches to work correctly. Following sequence produces usable dist directory on Debian 10.

.. code-block:: bash

    # Install build packages
    apt-get update
    apt-get -y install build-essential git libpng-dev xz-utils wget

    # Install Node.js 8
    mkdir /usr/local/lib/nodejs ~/.npm-global
    wget https://nodejs.org/dist/latest-v8.x/node-v8.17.0-linux-x64.tar.xz -O - | tar -xJf - -C /usr/local/lib/nodejs
    export PATH=~/.npm-global/bin:/usr/local/lib/nodejs/node-v8.17.0-linux-x64/bin:${PATH}
    npm config set prefix '~/.npm-global'

    # Clone Taarifa Waterpoints
    git clone https://github.com/trendspotter/TaarifaWaterpoints.git /tmp/taarifa
    cd /tmp/taarifa
    git cherry-pick -n 0650b76314133bee8f2a7421ecacfb1c1c572aa8   # Install leaflet-maskcanvas which still supports L.TileLayer.MaskCanvas
    git cherry-pick -n 8576a9d038baf9fd959a948501d1ccf6b3acfaad   # Fail gracefully when geolocation fails
    git cherry-pick -n 219814faaa9bfd1ec4edb0afc2580ce8d1bc5dfd   # Add Czech translation

    # Install NPM packages
    export HOME=/root
    npm install
    ./node_modules/.bin/grunt build --verbose

Should some problems occur using this approach, there is a possibility to revert to the once-working codebase from ~2015 and build frontend using Node.js 4.

.. code-block:: bash

    # Install build packages
    apt-get update
    apt-get -y install build-essential git libpng-dev xz-utils wget

    # Install Node.js 4
    wget https://nodejs.org/dist/latest-v4.x/node-v4.9.1-linux-x64.tar.xz
    mkdir -p /usr/local/lib/nodejs
    tar -xJvf node-v4.9.1-linux-x64.tar.xz -C /usr/local/lib/nodejs
    export PATH=/usr/local/lib/nodejs/node-v4.9.1-linux-x64/bin:${PATH}

    # Clone Taarifa Waterpoints
    git clone https://github.com/trendspotter/TaarifaWaterpoints.git /tmp/taarifa
    cd /tmp/taarifa
    git checkout 7d0c784eb01b811e65c829796c88d9367f8fa5f7
    git cherry-pick -n 984a6353f8b50e9f7f643d22e5c77ad0eb352bcb   # Load tiles via https
    git cherry-pick -n 0650b76314133bee8f2a7421ecacfb1c1c572aa8   # Install leaflet-maskcanvas which still supports L.TileLayer.MaskCanvas
    git cherry-pick -n 8576a9d038baf9fd959a948501d1ccf6b3acfaad   # Fail gracefully when geolocation fails
    git cherry-pick -n 219814faaa9bfd1ec4edb0afc2580ce8d1bc5dfd   # Add Czech translation

    # Install NPM packages
    export HOME=/root
    npm install
    npm install -g grunt-cli bower
    bower install --allow-root

    # Hackfix grunt task and build dist
    sed -i "s/'bower',//" Gruntfile.js
    grunt build
