UNPKG

dodex-vertx

Version:

A java asynchronous server for Dodex and Dodex-mess

151 lines (115 loc) 9.41 kB
### Kotlin, gRPC Web Application ### Getting Started #### Client: * The **html/javascript** client is generated from the **dodex-vertx/handicap/src/grpc/client** directory. * Execute **`npm install`** to download the javascript dependencies. * Execute **`./proto protos/handicap`** to generate the **proto3/gRPC** javascript modules. The proto3 configuration is in **./protos/handicap.proto**. * Execute either **`npm run esbuild:build`** or **`npm run webpack:build`** to package the javascript development client. The output is located in **handicap/src/main/resources/static**. When making changes to javascript/html/css, simply rerun **`npm run esbuild:build`**, if the verticle is running, it will rebuild. For proto3 changes, rerun **`./proto protos/handicap`** first. **Note:** * **`esbuild`** is best for development(very fast) and **webpack** is better for production, e.g. **`npm run webpack:prod`**. * See handicap/src/grpc/client/js/client.js to set up **`ipinfo.io`** so the form will default to local **country/state**. #### Server: * The server **./proto3/gRPC** classes are auto generated from the gradle build script to **handicap/build/classes/java/main/handicap/grpc/**. * From the dodex-vertx directory, execute **`./gradlew run`** to build and execute the application. The **`./gradlew jooqGenerate`** task executes the **jooq** code generator. The generated code can be found in `handicap/src/main/kotlin/golf/handicap/generated`. Objects can then be used to define the queries. By default, the code is included with the project. **Note**: The gradle configuration is a 3 level composite build, it does the following: * compiles and executes the **jooq** java code generator located in **dodex-vertx/handicap/generate**, in development this can also create the database tables * compiles the java and kotlin code located in `dodex-vertx/handicap` * compiles and executes the java and kotlin code in `dodex-vertx` and `handicap` <br/><br/> * The next step is to install/startup the `envoy` proxy server. The javascript client needs a proxy to convert **http/1** to **http/2** as well as **CORS** processing. Assuming **envoy** is installed <https://www.envoyproxy.io/docs/envoy/latest/start/install>, execute the `start.envoy` script in `dodex-vertx`. The configuration for the proxy server is in **dodex-vertx/handicap/handicap.yaml**. * If all goes well, only dodex-vertx at port `8087` should be started, the `handicap` application is turned off by default. **Note:** Setting **enableHandicap** to `true` in **.../resources/application-conf.json** will change the default startup. * Kill **dodex-vertx**(ctrl-c), and set the environment variable **`export USE_HANDICAP=true`** and restart the server. In addition to the usual **8087** port display, there should also be a port `8888` display. * For the standalone handicap application, view at **localhost:8888/handicap.html**, the **dodex** message client will not work from this port. For the complete application use port **8087**. * The frontend html/gRPC javascript client should display. See operation section on how to use the form. **Note:** Only `sqlite3`, `h2`, `mariadb` and `postgres` support the handicap application. * The default database is `h2`. To change the default database, execute **`export DEFAULT_DB=mariadb`**, **`export DEFAULT_DB=postgres`** or **`export DEFAULT_DB=sqlite3`**. * Gradle 8 configuration can now use jdk 19. * Making database changes and using **jooqGenerate** * Set **DEFAULT_DB** to either **sqlite3**, **postgres**, **h2** or ("mariadb" handles booleans and floats differently) * If using **sqlite3** remove **handicap/dodex_tests.db**(Assumes that DbSqlite3.java has been changed as well as all other used databases) * **Note:** In **..../dodex-vertx** directory run for each database, **`find . -name DbSqlite3.java`** to find the db schema * Optionally remove **handicap/src/main/kotlin/golf/handicap/generated** directory * Run **`./gradlew jooqGenerate`** ### Vert.x gRPC Server * Implemented new gRPC server as described in the docs: ''Vert.x gRPC Server is a new gRPC server powered by Vert.x HTTP server superseding the integrated Netty based gRPC client. This server provides a gRPC request/response oriented API as well as the generated stub approach with a service bridge.'' * see __.../handicap/src/main/kotlin/golf/handicap/vertx/HandicapGrpcServer.kt__, however, the Netty configuration is still default. * To use the new gRPC Vert.x server, execute __`export GRPC_SERVER=true`__ or change __`"grpc.server": true`__ in .../src/main/resources/application-conf.json for a permanent change ### Production Build * In **dodex-vertx/handicap/src/grpc/client** execute **`npm run webpack:prod`** or **`npm run esbuild:prod`** * execute **`./gradlew clean`** and **`export USE_HANDICAP=true`** * Make sure your database configurations are correct; **./src/main/resources/database...**, **./handicap/src/main/resources/database...**, **./handicap/generate/src/main/resources/database...** * In **dodex-vertx** execute **`./gradlew shadowJar`** - **Note:** The default database should be **sqlite3** * To start the production verticle, execute **`java -jar build/libs/dodex-vertx-3.1.0-prod.jar`** * For the stand-alone handicap application execute `java -jar handicap/build/libs/handicap-0.0.1-fat.jar` * Production runs on ports, **8880** and **8890**. ### Operation The following are the steps to add golfer info, courses with tee data and golfer scores. * First time login simply enter a **pin**(2 alpha characters with between 4-6 addition alphanumeric characters) with first and last name. Click the login button to create/login to the application. On subsequent logins only the `pin` is needed, don't forget it. The **Country** and **State** should also be selected before creating a **pin** as default values. However, you can change the defaults on any login. Also, **Overlap Years** and **Public** should be set. * Overlap will use the previous year's scores for the handicap if needed. * Public will allow your scores to show up in the **Scores** tab for public viewing. * Add a course by entering its name with one radio button selected for the tee. You can also change the tee's color. The **rating**, **slope** and **par** values are also required. Click the **Add Tee** button. After the first added tee, the others can be added when needed. * When re-logging in and selecting a previously added course the settings for the default tee(white) may not show. Simply select another radio button and then the default button. **Note**: You can disable the course/tee add function by setting **handicap.enableAdmin** to **true** in the **...\resources\application-conf.json** file. And then use the default **`admin.pin`** to administer the courses/tees. When using this pin, a first and last name must be entered on initial use. * To add a score, select a course and tee with values for **Gross Score**, **Adjusted Score** and **Tee Time**. Click the **Add Score** button to add the score. The **Remove Last Score** will remove the last entered score, multiple clicks will remove multiple scores. **Note:** A handicap will be generated after 5 scores have been added. ### Handicap File Structure ``` dodex-vertx/handicap ├── db ├── generate │   └── src │   └── main │   ├── java │   │   └── dmo │   │   └── fs │   │   ├── db │   │   └── utils │   ├── kotlin │   │   └── golf │   │   └── handicap │   └── resources └── src ├── grpc │   └── client │   ├── config │   ├── css │   │   └── dtsel │   ├── html │   ├── js │   │   ├── country-states │   │   │   └── js │   │   ├── dodex │   │   ├── dtsel │   │   ├── handicap │   │   │   ├── json │   │   │   └── protos │   │   └── validate │   ├── protos │   └── static ├── main │   ├── java │   │   └── dmo │   │   └── fs │   │   ├── db │   │   └── utils │   ├── kotlin │   │   └── golf │   │   └── handicap │   │   ├── db │   │   ├── generated │   │   │   ├── keys │   │   │   └── tables │   │   │   ├── records │   │   │   └── references │   │   ├── routes │   │   └── vertx │   ├── proto │   └── resources └── test └── kotlin ├── golf │   └── handicap └── resources ```