diff --git a/data/pom.xml b/data/pom.xml
index beaf48c..4307924 100644
--- a/data/pom.xml
+++ b/data/pom.xml
@@ -16,7 +16,7 @@
UTF-8
3.1.0
1.0.2
- org.redlich.data.FakerBeerApp
+ org.redlich.data.BeerApp
diff --git a/data/src/main/java/org/redlich/data/Beer.java b/data/src/main/java/org/redlich/data/Beer.java
new file mode 100644
index 0000000..0c79fdc
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/Beer.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+import jakarta.nosql.Column;
+import jakarta.nosql.Entity;
+import jakarta.nosql.Id;
+
+@Entity
+public class Beer {
+ @Id
+ private int id;
+
+ @Column
+ private String name;
+
+ @Column
+ private BeerType type;
+
+ @Column("brewer_id")
+ private int brewerId;
+
+ @Column
+ private double abv;
+
+ public Beer() {
+ id = 0;
+ name = "{ beer name }";
+ type = BeerType.ALE;
+ brewerId = 0;
+ abv = 10.0;
+ }
+
+ private Beer(int id, String name, BeerType type, int brewerId, double abv) {
+ this.id = id;
+ this.name = name;
+ this.type = type;
+ this.brewerId = brewerId;
+ this.abv = abv;
+ }
+
+ /**
+ * public int getId()
+ * @return id of the Beer entity.
+ */
+ public int getId() {
+ return id;
+ }
+
+ /**
+ * public String getName()
+ * @return the name of the beer.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ *
+ * @return the beer type.
+ */
+ public BeerType getType() {
+ return type;
+ }
+
+ /**
+ *
+ * @return the value of `brewerId` from the Brewer entity.
+ */
+ public int getBrewerId() {
+ return brewerId;
+ }
+
+ /**
+ *
+ * @return the value of `abv`.
+ */
+ public double getAbv() {
+ return abv;
+ }
+
+ @Override
+ public String toString() {
+ return "Beer { " +
+ "id = '" + getId() + '\'' +
+ ", name = '" + getName() + '\'' +
+ ", type = '" + getType() + '\'' +
+ ", brewer_id = '" + getBrewerId() + '\'' +
+ ", abv = '" + getAbv() + '\'' +
+ " }\n";
+ }
+
+ public static BeerBuilder builder() {
+ return new BeerBuilder();
+ }
+
+ public static class BeerBuilder {
+ private int id;
+ private String name;
+ private BeerType type;
+ private int brewer_id;
+ private double abv;
+
+ private BeerBuilder() {
+ }
+
+ public BeerBuilder id(int id) {
+ this.id = id;
+ return this;
+ }
+
+ public BeerBuilder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public BeerBuilder type(BeerType type) {
+ this.type = type;
+ return this;
+ }
+
+ public BeerBuilder brewer_id(int brewer_id) {
+ this.brewer_id = brewer_id;
+ return this;
+ }
+
+ public BeerBuilder abv(double abv) {
+ this.abv = abv;
+ return this;
+ }
+
+ public Beer build() {
+ return new Beer(id, name, type, brewer_id, abv);
+ }
+ }
+}
diff --git a/data/src/main/java/org/redlich/data/BeerApp.java b/data/src/main/java/org/redlich/data/BeerApp.java
new file mode 100644
index 0000000..556d8c4
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/BeerApp.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+import jakarta.data.repository.Page;
+import jakarta.data.repository.Pageable;
+import jakarta.data.repository.Sort;
+import jakarta.enterprise.inject.se.SeContainer;
+import jakarta.enterprise.inject.se.SeContainerInitializer;
+
+import java.util.Optional;
+import java.util.Set;
+
+public class BeerApp {
+
+ public BeerApp() {
+ }
+
+ public static void main(String[] args) {
+ BeerApp app = new BeerApp();
+
+ String title = "[APP] Welcome to the Beer Application using Jakarta Data";
+ app.displayTitle(title);
+
+ try(SeContainer container = SeContainerInitializer.newInstance().initialize()) {
+ BeerRepository beerRepository = container.select(BeerRepository.class).get();
+ BrewerRepository brewerRepository = container.select(BrewerRepository.class).get();
+
+ long noOfBeers = beerRepository.count();
+ long noOfBrewers = brewerRepository.count();
+
+ app.displayTitle("[APP] Let's start by obtaining the number of documents in the Beer and Brewer collections:");
+ System.out.println("[APP] There are " + noOfBeers + " beers in the Beer collection");
+ System.out.println("[APP] There are " + noOfBrewers + " brewers in the Brewer collection");
+
+ app.delay(3000);
+
+ Brewer brewer01 = Brewer.builder()
+ .id((int)noOfBrewers + 1)
+ .name("Narragansett Brewing")
+ .city("Providence")
+ .state("Rhode Island")
+ .build();
+ // brewerRepository.save(brewer01);
+
+ Beer beer01 = Beer.builder()
+ .id((int)noOfBeers + 1)
+ .name("Lunch")
+ .type(BeerType.IPA)
+ .brewer_id(33) // Maine Beer Company
+ .abv(7.0)
+ .build();
+ // beerRepository.save(beer01);
+
+ Beer beer02 = Beer.builder()
+ .id((int)noOfBeers + 2)
+ .name("Caramel Pumpkin Imperial Ale")
+ .type(BeerType.ALE)
+ .brewer_id(1) // Southern Tier
+ .abv(8.6)
+ .build();
+ // beerRepository.save(beer02);
+
+ app.displayTitle("[APP] Let's find beers by using a query named parameter:");
+ beerRepository.query("Pumking").forEach(System.out::println);
+ brewerRepository.query("Apponaug Brewing").forEach(System.out::println);
+
+ app.delay(3000);
+
+ app.displayTitle("[APP] Let's find a beer by its primary key:");
+ Optional id = beerRepository.findById(5);
+ System.out.println("[APP] " + id);
+
+ app.displayTitle("[APP] Let's find a beer by its name");
+ Set beerByName = beerRepository.findByName("Power Plant Amber Lager");
+ beerByName.forEach(System.out::println);
+
+ app.displayTitle("[APP] Let's find a beer by its `brewer_id`:");
+ Set beerByBrewer = beerRepository.findByBrewerId(1);
+ beerByBrewer.forEach(System.out::println);
+
+ app.delay(3000);
+
+ app.displayTitle("[APP] Let's find all beers and paginate with ascending sort:");
+ Pageable page = Pageable.ofPage(1).sortBy(Sort.asc("name"));
+
+ app.displayTitle("[APP] Here is page 1:");
+ Page page1 = beerRepository.findAll(page);
+ page1.forEach(System.out::println);
+
+ app.displayTitle("[APP] Here is page 2:");
+ Pageable secondPage = page.next();
+ Page page2 = beerRepository.findAll(secondPage);
+ page2.forEach(System.out::println);
+
+ app.displayTitle("[APP] Here is page 3:");
+ Pageable thirdPage = secondPage.next();
+ Page page3 = beerRepository.findAll(thirdPage);
+ page3.forEach(System.out::println);
+
+ app.delay(3000);
+
+ app.displayTitle("[APP] Let's find all brewers:");
+ Pageable brewerPage = Pageable.ofSize(40).sortBy(Sort.asc("name"));
+ app.displayTitle("[APP] Here is page 4:");
+ Page page4 = brewerRepository.findAll(brewerPage);
+ page4.forEach(System.out::println);
+
+ app.delay(3000);
+
+ app.displayTitle("[APP] Let's delete a beer by its primary key:");
+ beerRepository.deleteById(31);
+
+ app.displayTitle("[APP] Let's delete a brewer by its primary key:");
+ brewerRepository.deleteById(35);
+
+ app.displayTitle("[APP] COMING SOON: Let's update a document in the database");
+ /*/
+ TO-DO: add an update method
+ /*/
+ }
+ }
+
+ public void displayTitle(String title) {
+ int length = title.length();
+ System.out.print("[APP] ");
+ for(int i = 0; i < length; ++i) {
+ System.out.print("-");
+ }
+ System.out.println();
+ System.out.println(title);
+ System.out.print("[APP] ");
+ for(int i = 0; i < length; ++i) {
+ System.out.print("-");
+ }
+ System.out.println();
+ }
+
+ public void delay(int time) {
+ try {
+ Thread.sleep(time);
+ }
+ catch (InterruptedException exception) {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
\ No newline at end of file
diff --git a/data/src/main/java/org/redlich/data/BeerRepository.java b/data/src/main/java/org/redlich/data/BeerRepository.java
new file mode 100644
index 0000000..9eab4f5
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/BeerRepository.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+import jakarta.data.repository.PageableRepository;
+import jakarta.data.repository.Query;
+import jakarta.data.repository.Repository;
+import jakarta.data.repository.Param;
+
+import java.util.Set;
+
+@Repository
+public interface BeerRepository extends PageableRepository {
+
+ Set findByName(String beer);
+
+ Set findByBrewerId(int brewer_id);
+
+ void deleteById(int id);
+
+ @Query("select * from Beer where name = @name")
+ Set query(@Param("name") String name);
+ }
diff --git a/data/src/main/java/org/redlich/data/BeerType.java b/data/src/main/java/org/redlich/data/BeerType.java
new file mode 100644
index 0000000..e7ee159
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/BeerType.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+public enum BeerType {
+ ALE,
+ STOUT,
+ PORTER,
+ IPA,
+ APA,
+ LAGER,
+ GOSE,
+ SAISON,
+ LAMBIC,
+ KOLSCH,
+ PILSNER,
+ MARZEN,
+ ESB
+ }
diff --git a/data/src/main/java/org/redlich/data/Brewer.java b/data/src/main/java/org/redlich/data/Brewer.java
new file mode 100644
index 0000000..5fab7a5
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/Brewer.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+import jakarta.nosql.Column;
+import jakarta.nosql.Entity;
+import jakarta.nosql.Id;
+
+@Entity
+public class Brewer {
+ @Id
+ private int id;
+
+ @Column
+ private String name;
+
+ @Column
+ private String city;
+
+ @Column
+ private String state;
+
+ public Brewer() {
+ this.id = 0;
+ this.name = "{ brewer name }";
+ this.city = "{ brewer city }";
+ this.state = "{ brewer state }";
+ }
+
+ private Brewer(int id, String name, String city, String state) {
+ this.id = id;
+ this.name = name;
+ this.city = city;
+ this.state = state;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ @Override
+ public String toString() {
+ return "Brewer { " +
+ "id = '" + getId() + '\'' +
+ ", name = '" + getName() + '\'' +
+ ", city = '" + getCity() + '\'' +
+ ", state = '" + getState() + '\'' +
+ " }\n";
+ }
+
+ public static BrewerBuilder builder() {
+ return new BrewerBuilder();
+ }
+
+ public static class BrewerBuilder {
+ private int id;
+ private String name;
+ private String city;
+ private String state;
+
+ private BrewerBuilder() {
+ }
+
+ public BrewerBuilder id(int id) {
+ this.id = id;
+ return this;
+ }
+
+ public BrewerBuilder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public BrewerBuilder city(String city) {
+ this.city = city;
+ return this;
+ }
+
+ public BrewerBuilder state(String state) {
+ this.state = state;
+ return this;
+ }
+
+ public Brewer build() {
+ return new Brewer(id, name, city, state);
+ }
+ }
+ }
diff --git a/data/src/main/java/org/redlich/data/BrewerRepository.java b/data/src/main/java/org/redlich/data/BrewerRepository.java
new file mode 100644
index 0000000..15fe1aa
--- /dev/null
+++ b/data/src/main/java/org/redlich/data/BrewerRepository.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c), Eclipse Foundation, Inc. and its licensors.
+ *
+ * All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v1.0, which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.redlich.data;
+
+import jakarta.data.repository.PageableRepository;
+
+import jakarta.data.repository.Repository;
+import jakarta.data.repository.Query;
+import jakarta.data.repository.Param;
+
+import java.util.Set;
+
+@Repository
+public interface BrewerRepository extends PageableRepository {
+
+ Set findByName(String brewer);
+
+ void deleteById(int id);
+
+ void update(Brewer brewer);
+
+ @Query("select * from Brewer where name = @name")
+ Set query(@Param("name") String name);
+
+ }
diff --git a/data/src/main/resources/META-INF/microprofile-config.properties b/data/src/main/resources/META-INF/microprofile-config.properties
index 9299077..ae72101 100644
--- a/data/src/main/resources/META-INF/microprofile-config.properties
+++ b/data/src/main/resources/META-INF/microprofile-config.properties
@@ -1,4 +1,4 @@
message=Welcome to the Jakarta Data Demo Application
-jnosql.document.database=fakebeersdb
+# jnosql.document.database=fakebeersdb
+jnosql.document.database=beersdb
jnosql.mongodb.host=localhost:27017
-