oglimmer/lunchy

View on GitHub
README.md

Summary

Maintainability
Test Coverage
LUNCHY
======

Lunchy is an application to provide lunch location information.

START LUNCHY (the easy way)
===========================

1.) Make sure you've java, mvn and docker installed

2.) run `./run_local.sh -f`

3.) Browse to http://localhost:8080 

LET IT RUN AGAINST A LOCAL MYSQL
================================

1.) Start a local mysql server with an empty database called "MYSQL_SCHEMA" (MYSQL_USER/MYSQL_PASSWORD)

2.) mvn -Dlunchy.db.user=MYSQL_USER -Dlunchy.db.user=MYSQL_PASSWORD -Dlunchy.db.schema=MYSQL_SCHEMA "-Dlunchy.picturedir=$TMPDIR" -DcreateTables=true jetty:run

3.) Browse to http://localhost:8080 


LET IT RUN AGAINST A LOCAL HSQLDB
================================= 

1.) mvn -Dlunchy.db.user=SA -Dlunchy.db.url=jdbc:hsqldb:file: -Dlunchy.db.schema=lunchydb -Dlunchy.db.driver=org.hsqldb.jdbc.JDBCDriver -DcreateTables=true process-resources && mvn -Dlunchy.db.user=SA -Dlunchy.db.url=jdbc:hsqldb:file: -Dlunchy.db.schema=lunchydb -Dlunchy.db.driver=org.hsqldb.jdbc.JDBCDriver "-Dlunchy.picturedir=$TMPDIR" -Dhsqldb=true jetty:run

2.) Browse to http://localhost:8080 


TESTING THE PORTAL PAGE
======================= 

1.) add to /etc/hosts
```
127.0.0.1     localhost.lunchylunch.local
127.0.0.1     lunchylunch.local
```

2.) Browse http://lunchylunch.local:8080 to see the portal page

3.) Browse http://localhost.lunchylunch.local:8080 to see the user space created via the setup


RUNNING THE E2E TESTS
===================== 

DOCKER

1.) install docker

2.) cd docker-e2e-test && ./run.sh

LOCAL

1.) install protractor http://angular.github.io/protractor/#/ (e.g. npm -g install protractor && webdriver-manager update)

2.) run e2e-test.sh


TIPS FOR DEV
============

- install coffee-script (https://www.npmjs.org/package/coffee-script) and run `coffee -o webapp/js  -cw coffee/` from src/main

- as the latest version of maven-release-plugin is only available on the Adobe maven repository, you need: https://repo.adobe.com to release a version

- run "mvn -DgenerateDBClasses=true compile" to (re-)generate the JOOQ DB beans/proxies

- mysql and java should run in UTC. The angular FE converts to local (browser returned) time zones.

HOW TO RE-CALC THE TURN_ROUND_TIMES ON LOCATION
===============================================
update location set turn_around_time = (select ifnull(avg(travel_Time),0)+ifnull(avg(on_Site_Time),0) from reviews where reviews.fk_location=location.id);
update location set turn_around_time = null where turn_around_time = 0;

MYSQL COMPLAINS ABOUT DEFAULT VALUE FOR TIMESTAMPS?
===================================================

SET GLOBAL ...

SET SESSION ...

... sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'   

HOW TO EXTEND THE DB DATA MODEL
===============================

Preperation
-----------

- brew install liquibase

- Either add a user/password to all following mysql commands or put it into ~/.my.cnf

Initial setup
-------------

### Clean dev and staging schema (as there is difference in liquibase between DBs created via the maven package (`mvn -DcreateTables=true`) and standalone java program)

0.) mysql -e "drop database oli_lunchy; drop database oli_lunchy_staging;"

### Create the dev schema ('oli_lunchy')

1.) mysql -e "create database oli_lunchy"

2.) ./db-manage.sh -a

### Create the staging & prod schemas ('oli_lunchy_staging')

1.) mysql -e "create database oli_lunchy_staging"

2.) ./db-manage.sh -u

3.) Use the sql from the editor to set up the prod schema (you need to change the schema)

Changing the schema
-------------------

### Let's create a new table `foo`

1.) mysql oli_lunchy -e "CREATE TABLE foo ( id int(11) NOT NULL AUTO_INCREMENT, info varchar(255) NOT NULL, PRIMARY KEY (id) )"

### Create the liquibase xml definition

2.) ./db-manage.sh -d

### Add the liquibase xml definition to the source code

3.) Add the XML from the editor to the end of all_tables.xml. Add objectQuotingStrategy="QUOTE_ALL_OBJECTS" to all changeSets.

### Create the java classes (jooq)

4.) mvn -DgenerateDBClasses=true generate-sources

### Update the staging & prod schemas

5.) ./db-manage.sh -u

6.) Use the sql from the editor to set up the prod schema  (you need to change the schema)

### Finally update the liquibase meta data in the dev schema ('DATABASECHANGELOG')

7.) ./db-manage.sh -i