Skip to content

Commit bcf9de9

Browse files
committed
retail
1 parent 9a57001 commit bcf9de9

File tree

10 files changed

+86
-135
lines changed

10 files changed

+86
-135
lines changed

deploy.sh

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
minikube start --driver=virtualbox --kubernetes-version=v1.20.2 --cpus 4 --memory "8192mb" --network-plugin=cni
2+
eval $(minikube -p minikube docker-env)
3+
kubectl create secret generic sqlstore-credentials --from-literal=username=infinispan --from-literal=password=secret
4+
kubectl apply deploy/postgres.yaml
5+
6+
#--> deploy and run infinispan, with the postgresql driver inside
7+
8+
cd retail-catalogue
9+
./mvnw clean package -Dquarkus.kubernetes.deploy=true -DskipTests=true
10+
cd ..
11+
cd inmemory-catalogue
12+
./mvnw clean package -Dquarkus.kubernetes.deploy=true -DskipTests=true
13+
cd ..

deploy/postgres.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ spec:
2323
- name: POSTGRES_USER
2424
valueFrom:
2525
secretKeyRef:
26-
name: kineteco-credentials
26+
name: sqlstore-credentials
2727
key: username
2828
- name: POSTGRES_PASSWORD
2929
valueFrom:
3030
secretKeyRef:
31-
name: kineteco-credentials
31+
name: sqlstore-credentials
3232
key: password
3333
---
3434
apiVersion: v1

retail-catalogue/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
1515
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
1616
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
17-
<quarkus.platform.version>2.5.0.CR1</quarkus.platform.version>
17+
<quarkus.platform.version>2.5.0.Final</quarkus.platform.version>
1818
<surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
1919
</properties>
2020
<dependencyManagement>
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,31 @@
11
package org.infinispan.retail;
22

3-
import io.quarkus.hibernate.orm.panache.PanacheQuery;
4-
import io.quarkus.panache.common.Sort;
5-
import io.quarkus.runtime.StartupEvent;
3+
import org.infinispan.retail.model.Customer;
4+
import org.infinispan.retail.model.CustomerCommand;
65
import org.infinispan.retail.model.RetailProduct;
76
import org.jboss.logging.Logger;
87

98
import javax.enterprise.context.ApplicationScoped;
10-
import javax.enterprise.event.Observes;
119
import javax.transaction.Transactional;
12-
import javax.ws.rs.Consumes;
13-
import javax.ws.rs.DELETE;
14-
import javax.ws.rs.GET;
15-
import javax.ws.rs.PATCH;
16-
import javax.ws.rs.POST;
17-
import javax.ws.rs.PUT;
18-
import javax.ws.rs.Path;
19-
import javax.ws.rs.PathParam;
20-
import javax.ws.rs.Produces;
21-
import javax.ws.rs.QueryParam;
22-
import javax.ws.rs.core.Context;
23-
import javax.ws.rs.core.MediaType;
24-
import javax.ws.rs.core.Response;
25-
import javax.ws.rs.core.UriInfo;
2610
import java.util.List;
2711

2812
@ApplicationScoped
29-
@Path("/commands")
30-
@Produces(MediaType.APPLICATION_JSON)
31-
@Consumes(MediaType.APPLICATION_JSON)
32-
public class CommandResource {
13+
public class CommandLoader {
3314

34-
@GET
35-
public List<RetailProduct> catalog(@QueryParam("page") Integer page, @QueryParam("size") Integer size) {
36-
if (page == null && size == null) {
37-
return RetailProduct.listAll();
38-
}
39-
PanacheQuery<RetailProduct> query = RetailProduct.findAll(Sort.by("name"));
40-
query.page(page, size);
41-
return query.list();
42-
}
43-
44-
@GET
45-
@Path("/{code}")
46-
public Response getRetailProductByCode(@PathParam("code") String code) {
47-
RetailProduct retailProduct = RetailProduct.findByCode(code);
48-
return Response.ok(retailProduct).build();
49-
}
50-
51-
@POST
52-
@Transactional
53-
public Response create(RetailProduct retailProduct, @Context UriInfo uriInfo) {
54-
retailProduct.persist();
55-
return Response.created(uriInfo.getAbsolutePathBuilder().path(retailProduct.code).build()).build();
56-
}
15+
private static final Logger LOGGER = Logger.getLogger(CommandLoader.class);
5716

58-
@PUT
59-
@Path("/{code}")
6017
@Transactional
61-
public Response update(@PathParam("code") String sku, RetailProduct retailProduct) {
62-
RetailProduct existingProduct = RetailProduct.findByCode(sku);
63-
existingProduct.name = retailProduct.name;
64-
existingProduct.price = retailProduct.price;
65-
existingProduct.stock = retailProduct.stock;
66-
existingProduct.persist();
67-
return Response.ok(existingProduct).build();
68-
}
18+
public void initCommands() {
19+
LOGGER.info("Creating commands");
20+
List<RetailProduct> products = RetailProduct.listAll();
21+
List<Customer> customers = Customer.listAll();
6922

70-
@PATCH
71-
@Path("/{code}")
72-
@Transactional
73-
public Response updateStock(@PathParam("code") String code, @QueryParam("stock") Integer stock) {
74-
int currentStock = RetailProduct.findCurrentStock(code);
75-
RetailProduct.update("stock = ?1 where code= ?2", currentStock + stock, code);
76-
return Response.ok().build();
77-
}
23+
CustomerCommand customerCommand = new CustomerCommand();
24+
customerCommand.promotion = true;
25+
customerCommand.buyer = customers.get(0);
26+
customerCommand.products = products;
7827

79-
@DELETE
80-
@Path("/{code}")
81-
@Transactional
82-
public Response delete(@PathParam("code") String code) {
83-
RetailProduct.delete("code", code);
84-
return Response.ok().build();
28+
customerCommand.persist();
8529
}
8630

8731
}

retail-catalogue/src/main/java/org/infinispan/retail/CommandsResource.java

+7-60
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.quarkus.hibernate.orm.panache.PanacheQuery;
44
import io.quarkus.panache.common.Sort;
55
import io.quarkus.runtime.StartupEvent;
6+
import org.infinispan.retail.model.CustomerCommand;
67
import org.infinispan.retail.model.RetailProduct;
78
import org.jboss.logging.Logger;
89

@@ -27,75 +28,21 @@
2728
import java.util.List;
2829

2930
@ApplicationScoped
30-
@Path("/products")
31+
@Path("/commands")
3132
@Produces(MediaType.APPLICATION_JSON)
3233
@Consumes(MediaType.APPLICATION_JSON)
33-
public class RetailCatalogResource {
34-
private static final Logger LOGGER = Logger.getLogger(RetailCatalogResource.class);
34+
public class CommandsResource {
35+
private static final Logger LOGGER = Logger.getLogger(CommandsResource.class);
3536

36-
@Inject
37-
CommandLoader commandLoader;
38-
39-
void onStart(@Observes StartupEvent ev) {
40-
LOGGER.info("Retail Store is starting Powered by Quarkus");
41-
LOGGER.info(" _ _ _ _ _ _");
42-
LOGGER.info(" / \\ / \\ / \\ / \\ / \\ / \\");
43-
LOGGER.info("( R | e | t | a | i | l )");
44-
LOGGER.info(" \\_/ \\_/ \\_/ \\_/ \\_/ \\_/");
45-
commandLoader.initCommands();
46-
}
4737

4838
@GET
49-
public List<RetailProduct> catalog(@QueryParam("page") Integer page, @QueryParam("size") Integer size) {
39+
public List<CustomerCommand> getAll(@QueryParam("page") Integer page, @QueryParam("size") Integer size) {
5040
if (page == null && size == null) {
51-
return RetailProduct.listAll();
41+
return CustomerCommand.listAll();
5242
}
53-
PanacheQuery<RetailProduct> query = RetailProduct.findAll(Sort.by("name"));
43+
PanacheQuery<CustomerCommand> query = CustomerCommand.findAll();
5444
query.page(page, size);
5545
return query.list();
5646
}
5747

58-
@GET
59-
@Path("/{code}")
60-
public Response getRetailProductByCode(@PathParam("code") String code) {
61-
RetailProduct retailProduct = RetailProduct.findByCode(code);
62-
return Response.ok(retailProduct).build();
63-
}
64-
65-
@POST
66-
@Transactional
67-
public Response create(RetailProduct retailProduct, @Context UriInfo uriInfo) {
68-
retailProduct.persist();
69-
return Response.created(uriInfo.getAbsolutePathBuilder().path(retailProduct.code).build()).build();
70-
}
71-
72-
@PUT
73-
@Path("/{code}")
74-
@Transactional
75-
public Response update(@PathParam("code") String sku, RetailProduct retailProduct) {
76-
RetailProduct existingProduct = RetailProduct.findByCode(sku);
77-
existingProduct.name = retailProduct.name;
78-
existingProduct.price = retailProduct.price;
79-
existingProduct.stock = retailProduct.stock;
80-
existingProduct.persist();
81-
return Response.ok(existingProduct).build();
82-
}
83-
84-
@PATCH
85-
@Path("/{code}")
86-
@Transactional
87-
public Response updateStock(@PathParam("code") String code, @QueryParam("stock") Integer stock) {
88-
int currentStock = RetailProduct.findCurrentStock(code);
89-
RetailProduct.update("stock = ?1 where code= ?2", currentStock + stock, code);
90-
return Response.ok().build();
91-
}
92-
93-
@DELETE
94-
@Path("/{code}")
95-
@Transactional
96-
public Response delete(@PathParam("code") String code) {
97-
RetailProduct.delete("code", code);
98-
return Response.ok().build();
99-
}
100-
10148
}

retail-catalogue/src/main/java/org/infinispan/retail/RetailCatalogResource.java

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import javax.enterprise.context.ApplicationScoped;
1010
import javax.enterprise.event.Observes;
11+
import javax.inject.Inject;
1112
import javax.transaction.Transactional;
1213
import javax.ws.rs.Consumes;
1314
import javax.ws.rs.DELETE;
@@ -32,12 +33,16 @@
3233
public class RetailCatalogResource {
3334
private static final Logger LOGGER = Logger.getLogger(RetailCatalogResource.class);
3435

36+
@Inject
37+
CommandLoader commandLoader;
38+
3539
void onStart(@Observes StartupEvent ev) {
3640
LOGGER.info("Retail Store is starting Powered by Quarkus");
3741
LOGGER.info(" _ _ _ _ _ _");
3842
LOGGER.info(" / \\ / \\ / \\ / \\ / \\ / \\");
3943
LOGGER.info("( R | e | t | a | i | l )");
4044
LOGGER.info(" \\_/ \\_/ \\_/ \\_/ \\_/ \\_/");
45+
commandLoader.initCommands();
4146
}
4247

4348
@GET
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,17 @@
1-
package org.infinispan.retail.model;public class Customer {
1+
package org.infinispan.retail.model;
2+
3+
import io.quarkus.hibernate.orm.panache.PanacheEntity;
4+
import io.quarkus.runtime.annotations.RegisterForReflection;
5+
6+
import javax.persistence.Entity;
7+
8+
@RegisterForReflection
9+
@Entity
10+
public class Customer extends PanacheEntity {
11+
12+
public String name;
13+
public String email;
14+
public String phone;
15+
public String country;
16+
217
}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,23 @@
1-
package org.infinispan.retail.model;public class CustomerCommand {
1+
package org.infinispan.retail.model;
2+
3+
import io.quarkus.hibernate.orm.panache.PanacheEntity;
4+
import io.quarkus.runtime.annotations.RegisterForReflection;
5+
6+
import javax.persistence.Entity;
7+
import javax.persistence.FetchType;
8+
import javax.persistence.OneToMany;
9+
import javax.persistence.OneToOne;
10+
import java.util.List;
11+
12+
@RegisterForReflection
13+
@Entity
14+
public class CustomerCommand extends PanacheEntity {
15+
public Boolean promotion;
16+
17+
@OneToOne(fetch = FetchType.LAZY)
18+
public Customer buyer;
19+
20+
@OneToMany(fetch = FetchType.LAZY)
21+
public List<RetailProduct> products;
22+
223
}

retail-catalogue/src/main/resources/application.properties

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ quarkus.kubernetes.name=retail-store-service
1212
quarkus.hibernate-orm.database.generation = drop-and-create
1313
%prod.quarkus.hibernate-orm.sql-load-script=import.sql
1414

15+
# Sets the dev service port fixed for postgresql
16+
quarkus.datasource.devservices.port=58599
17+
1518
%prod.quarkus.kubernetes-config.enabled=true
1619
%prod.quarkus.kubernetes-config.secrets.enabled=true
1720
%prod.quarkus.kubernetes-config.secrets=sqlstore-credentials
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
-- noinspection SqlNoDataSourceInspectionForFile
2-
INSERT INTO retailproduct(id, code, name, price, stock) VALUES (nextval('hibernate_sequence'), 'c123','Skirt Party','50.0','20');
2+
INSERT INTO retailproduct(id, code, name, price, stock) VALUES (nextval('hibernate_sequence'), 'c123','Skirt Party','50.0','20');
3+
INSERT INTO retailproduct(id, code, name, price, stock) VALUES (nextval('hibernate_sequence'), 'c456','Pants Party','20.0','10');
4+
INSERT INTO retailproduct(id, code, name, price, stock) VALUES (nextval('hibernate_sequence'), 'c789','Dress Party','90.0','20');
5+
INSERT INTO customer(id, name, email, phone, country) VALUES (nextval('hibernate_sequence'), 'Maria Rosario Frechilla','[email protected]','+34 666','Spain');

0 commit comments

Comments
 (0)