/lunchy

Keep track of lunch locations

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

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