# Shoe store

A simple scotty + persistent + sqlite webapp to demonstrate haskell fu
(or lack thereof).

Kaalani is "leg-wear" in Tamil[1].

## Set up

I haven't tested this outside of a sandbox.

cabal sandbox init
cabal install --dependencies-only --enable-tests
cabal build

## Test Suite

Tests are based on HSpec + Quickcheck.  There can be a lot more tests added,
especially to the web part.  In the interest of saving time, I have added only
the cases that I considered essential to progress with reasonable confidence.

Most of the tests use in-memory Sqlite.  However, for a few higher level tests
that verify atomicity, a persistent DB is used (saved on /tmp).  Text files are
also created and deleted (on /tmp again).

`cabal test`

## Running the app

There are two executables.  The executable for starting the web server (kaalani)
and a primitive executable (kpost) to add a shoe by calling POST on the web server.

The web app creates a Sqlite DB in the current directory (shoes.db).  The uploaded
files are saved on "uploads/img" directory in the source tree.  If the app is run
from a different folder than the root folder (housing kaalani.cabal), the upload
directory needs to be created there.

The following command should get the web server up and running.

`cabal run kaalani`

Assuming `cabal build` completed successfully, the `kpost` executable can be used
to `POST` to the running web server.

The web app can be accessed at: http://localhost:3000/shoes. (POST url is the same).