diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 64d1d25..72c3577 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,11 +24,11 @@ jobs: run: npm install -g fauna-shell - name: Setup Test Database - run: ./test/setup.sh + run: ./scripts/setup.sh - name: Test sample app run: | ./gradlew build FAUNA_ENDPOINT=http://localhost:8443 FAUNA_SECRET=`cat .fauna_key` ./gradlew bootRun > bootrun.log 2>&1 & - ./test/validate.sh - cat bootrun.log \ No newline at end of file + ./scripts/validate.sh + cat bootrun.log diff --git a/README.md b/README.md index 4651f8e..e67859e 100644 --- a/README.md +++ b/README.md @@ -66,21 +66,17 @@ To run the app, you'll need: - A [Fauna account](https://dashboard.fauna.com/register). You can sign up for a free account at https://dashboard.fauna.com/register. -- Your preferred flavor of Java 17 +- Your preferred flavor of Java 17. -- [Fauna CLI](https://docs.fauna.com/fauna/current/tools/shell/) v3.0.0 or later. +- [Fauna CLI v4 beta](https://docs.fauna.com/fauna/current/build/cli/v4/) or later. + - [Node.js](https://nodejs.org/en/download/) v20.x or later. To install the CLI, run: ```sh - npm install -g fauna-shell@latest + npm install -g fauna-shell@">=4.0.0-beta" ``` -You should also be familiar with basic Fauna CLI commands and usage. For an -overview, see the [Fauna CLI -docs](https://docs.fauna.com/fauna/current/tools/shell/). - - ## Setup 1. Clone the repo and navigate to the `java-sample-app` directory: @@ -90,75 +86,56 @@ docs](https://docs.fauna.com/fauna/current/tools/shell/). cd java-sample-app ``` -2. Log in to Fauna using the Fauna CLI: +2. If you haven't already, log in to Fauna using the Fauna CLI: ```sh - fauna cloud-login + fauna login ``` - When prompted, enter: - - * **Endpoint name:** `cloud` (Press Enter) - * **Email address:** The email address for your Fauna account. - * **Password:** The password for your Fauna account. - * **Which endpoint would you like to set as default?** The `cloud-*` - endpoint for your preferred region group. For example, to use the US - region group, use `cloud-us`. - - The command requires an email and password login. If you log in to Fauna - using GitHub or Netlify, you can enable email and password login using the - [Forgot Password](https://dashboard.fauna.com/forgot-password) workflow. - -3. Use the Fauna CLI to create the `ECommerceJava` database: +3. Use the CLI to create the `ECommerceJava` database: ```sh - fauna create-database ECommerceJava + # Replace 'us' with your preferred Region Group: + # 'us' (United States), 'eu' (Europe), or `global` (available to Pro accounts and above). + fauna database create \ + --name ECommerceJava \ + --database us ``` -4. Create a - [`.fauna-project`](https://docs.fauna.com/fauna/current/tools/shell/#proj-config) - config file for the project: - - ```sh - fauna project init - ``` - - When prompted, enter: - - * `schema` as the schema directory. - * `dev` as the environment name. - * The default endpoint. - * `ECommerce` as the database. - -5. Push the `.fsl` files in the `schema` directory to the `ECommerceJava` +4. Push the `.fsl` files in the `schema` directory to the `ECommerceJava` database: ```sh - fauna schema push + # Replace 'us' with your Region Group. + fauna schema push \ + --database us/ECommerceJava ``` When prompted, accept and stage the schema. -6. Check the status of the staged schema: +5. Check the status of the staged schema: ```sh - fauna schema status + fauna schema status \ + --database us/ECommerceJava ``` -7. When the status is `ready`, commit the staged schema to the database: +6. When the status is `ready`, commit the staged schema to the database: ```sh - fauna schema commit + fauna schema commit \ + --database us/ECommerceJava ``` The commit applies the staged schema to the database. The commit creates the collections and user-defined functions (UDFs) defined in the `.fsl` files of the `schema` directory. -8. Create a key with the `server` role for the `ECommerceJava` database: +7. Create a key with the `server` role for the `ECommerceJava` database: ```sh - fauna create-key --environment='' ECommerceJava server + fauna query "Key.create({ role: 'server' })" \ + --database us/ECommerceJava ``` Copy the returned `secret`. The app can use the key's secret to authenticate @@ -166,11 +143,12 @@ docs](https://docs.fauna.com/fauna/current/tools/shell/). ## Add sample data -The app includes a setup script that adds sample documents to the +The app includes a seed script that adds sample documents to the `ECommerceJava` database. From the root directory, run: ```sh -FAUNA_SECRET= ./setup.sh +chmod +x ./scripts/seed.sh +FAUNA_SECRET= ./scripts/seed.sh ``` You can view documents created by the script in the [Fauna @@ -232,7 +210,7 @@ Customer documents and related API responses: 1. If you haven't already, add the sample data: ```sh - FAUNA_SECRET= ./setup.sh + FAUNA_SECRET= ./scripts/seed.sh ``` If the app server is running, stop the server by pressing Ctrl+C. @@ -263,21 +241,25 @@ Customer documents and related API responses: database to stage the changes: ```sh - fauna schema push + fauna schema push \ + --database us/ECommerceJava ``` When prompted, accept and stage the schema. 4. Check the status of the staged schema: + ```sh - fauna schema status + fauna schema status \ + --database us/ECommerceJava ``` 5. When the status is `ready`, commit the staged schema changes to the database: ```sh - fauna schema commit + fauna schema commit \ + --database us/ECommerceJava ``` 6. In `CustomersController.java`, add the diff --git a/test/http-client.env.json b/scripts/http-client.env.json similarity index 100% rename from test/http-client.env.json rename to scripts/http-client.env.json diff --git a/test/requests.http b/scripts/requests.http similarity index 100% rename from test/requests.http rename to scripts/requests.http diff --git a/scripts/seed.sh b/scripts/seed.sh new file mode 100644 index 0000000..156a00a --- /dev/null +++ b/scripts/seed.sh @@ -0,0 +1,7 @@ +fauna query --input seed/categories.fql --secret "$FAUNA_SECRET" +echo -e "\n\n" +fauna query --input seed/customers.fql --secret "$FAUNA_SECRET" +echo -e "\n\n" +fauna query --input seed/products.fql --secret "$FAUNA_SECRET" +echo -e "\n\n" +fauna query --input seed/orders.fql --secret "$FAUNA_SECRET" diff --git a/test/setup.sh b/scripts/setup.sh similarity index 82% rename from test/setup.sh rename to scripts/setup.sh index bfd81de..1a853b4 100755 --- a/test/setup.sh +++ b/scripts/setup.sh @@ -18,7 +18,7 @@ fauna eval "Key.create({ role: 'server' }).secret" | xargs > .fauna_key fauna schema push -y --active --dir=schema -fauna import --collection Category --path seed/categories.json -fauna import --collection Customer --path seed/customers.json +fauna eval --file seed/categories.fql +fauna eval --file seed/customers.fql fauna eval --file seed/products.fql fauna eval --file seed/orders.fql diff --git a/test/validate.sh b/scripts/validate.sh similarity index 100% rename from test/validate.sh rename to scripts/validate.sh diff --git a/seed/categories.fql b/seed/categories.fql index 867f4d9..0534bda 100644 --- a/seed/categories.fql +++ b/seed/categories.fql @@ -1,4 +1,4 @@ -{"query": "[ +[ { 'name': 'electronics' }, @@ -8,4 +8,4 @@ { 'name': 'movies' } -].map(c => Category.byName(c.name).first() ?? Category.create({ name: c.name, description: \"Bargain #{c.name}!\" }))"} +].map(c => Category.byName(c.name).first() ?? Category.create({ name: c.name, description: "Bargain #{c.name}!" })) diff --git a/seed/categories.json b/seed/categories.json deleted file mode 100644 index 68c8183..0000000 --- a/seed/categories.json +++ /dev/null @@ -1,14 +0,0 @@ -[ - { - "name": "electronics", - "description": "bargain electronics" - }, - { - "name": "books", - "description": "bargain books" - }, - { - "name": "movies", - "description": "bargain movies" - } -] diff --git a/seed/customers.fql b/seed/customers.fql index 0cb732c..cfbbdf3 100644 --- a/seed/customers.fql +++ b/seed/customers.fql @@ -1,4 +1,4 @@ -{"query":"[ +[ { id: '999', name: 'Valued Customer', @@ -11,4 +11,4 @@ country: 'Netherlands' } } -].map(c => Customer.byEmail(c.email).first() ?? Customer.create(c))"} +].map(c => Customer.byEmail(c.email).first() ?? Customer.create(c)) diff --git a/seed/customers.json b/seed/customers.json deleted file mode 100644 index 0c70300..0000000 --- a/seed/customers.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - { - "name": "Valued Customer", - "email": "fake@fauna.com", - "address": { - "street": "Herengracht", - "city": "Amsterdam", - "state": "North Holland", - "postalCode": "1015BT", - "country": "Netherlands" - } - } -]