Skip to content

Commit bcef65d

Browse files
committed
#51 Replace shared API classes with codegen from OpenAPI/JSON schema - Used JSON schema for Restaurant events in Kitchen Service
1 parent 49adaf9 commit bcef65d

File tree

7 files changed

+118
-13
lines changed

7 files changed

+118
-13
lines changed

ftgo-kitchen-service/build.gradle

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,14 @@ buildscript {
1212
apply plugin: "io.spring.dependency-management"
1313
apply plugin: 'spring-cloud-contract'
1414
apply plugin: IntegrationTestsPlugin
15+
apply plugin: FtgoJSONSchema2PojoPlugin
1516

1617
dependencyManagement {
1718
imports {
1819
mavenBom "org.springframework.cloud:spring-cloud-contract-dependencies:$springCloudContractDependenciesVersion"
1920
}
2021
}
2122

22-
dependencies {
23-
testCompile 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
24-
}
25-
2623
contracts {
2724
contractsDslDir = new File("../ftgo-kitchen-service-contracts/src/main/resources/contracts")
2825
packageWithBaseClasses = 'net.chrisrichardson.ftgo.kitchenservice.contract'
@@ -45,6 +42,7 @@ apply plugin: FtgoServicePlugin
4542

4643
dependencies {
4744

45+
ftgoApiSpecification project(":ftgo-restaurant-service-api-spec")
4846

4947
compile "io.eventuate.tram.core:eventuate-tram-jdbc-kafka:$eventuateTramVersion"
5048
compile "io.eventuate.tram.core:eventuate-tram-events:$eventuateTramVersion"
@@ -53,7 +51,7 @@ dependencies {
5351
compile project(":common-swagger")
5452
compile project(":ftgo-common-jpa")
5553
compile project(":ftgo-kitchen-service-api")
56-
compile project(":ftgo-restaurant-service-api")
54+
compile project(":ftgo-restaurant-service-api-temp")
5755
compile "io.eventuate.tram.core:eventuate-tram-aggregate-domain-events:$eventuateTramVersion"
5856

5957
compile "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
@@ -71,4 +69,18 @@ dependencies {
7169
testCompile "com.jayway.restassured:rest-assured:$restAssuredVersion"
7270
testCompile "com.jayway.jsonpath:json-path:2.3.0"
7371
testCompile "io.eventuate.tram.core:eventuate-tram-testing-support-spring-cloud-contract:$eventuateTramVersion"
72+
73+
testCompile 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
7474
}
75+
76+
ftgoJsonSchema2Pojo {
77+
78+
ftgoRestaurantService {
79+
source = files("${ftgoApiSpecsDir}/ftgo-restaurant-service-api-spec")
80+
targetPackage = "net.chrisrichardson.ftgo.restaurantservice.events"
81+
includeAdditionalProperties = false
82+
generateBuilders = true
83+
useLongIntegers = true
84+
}
85+
86+
}

ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/KitchenService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import io.eventuate.tram.events.aggregates.ResultWithDomainEvents;
44
import net.chrisrichardson.ftgo.kitchenservice.api.TicketDetails;
55
import net.chrisrichardson.ftgo.kitchenservice.api.events.TicketDomainEvent;
6-
import net.chrisrichardson.ftgo.restaurantservice.events.RestaurantMenu;
76
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.transaction.annotation.Transactional;
98

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package net.chrisrichardson.ftgo.kitchenservice.domain;
2+
3+
import net.chrisrichardson.ftgo.common.Money;
4+
import org.apache.commons.lang.builder.EqualsBuilder;
5+
import org.apache.commons.lang.builder.HashCodeBuilder;
6+
import org.apache.commons.lang.builder.ToStringBuilder;
7+
8+
import javax.persistence.Access;
9+
import javax.persistence.AccessType;
10+
import javax.persistence.Embeddable;
11+
12+
@Embeddable
13+
@Access(AccessType.FIELD)
14+
public class MenuItem {
15+
16+
private String id;
17+
private String name;
18+
private Money price;
19+
20+
private MenuItem() {
21+
}
22+
23+
public MenuItem(String id, String name, Money price) {
24+
this.id = id;
25+
this.name = name;
26+
this.price = price;
27+
}
28+
29+
@Override
30+
public boolean equals(Object o) {
31+
return EqualsBuilder.reflectionEquals(this, o);
32+
}
33+
34+
@Override
35+
public int hashCode() {
36+
return HashCodeBuilder.reflectionHashCode(this);
37+
}
38+
39+
@Override
40+
public String toString() {
41+
return ToStringBuilder.reflectionToString(this);
42+
}
43+
44+
public String getId() {
45+
return id;
46+
}
47+
48+
public void setId(String id) {
49+
this.id = id;
50+
}
51+
52+
public String getName() {
53+
return name;
54+
}
55+
56+
public void setName(String name) {
57+
this.name = name;
58+
}
59+
60+
public Money getPrice() {
61+
return price;
62+
}
63+
64+
public void setPrice(Money price) {
65+
this.price = price;
66+
}
67+
}

ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/domain/Restaurant.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import io.eventuate.tram.events.common.DomainEvent;
44
import net.chrisrichardson.ftgo.kitchenservice.api.TicketDetails;
5-
import net.chrisrichardson.ftgo.restaurantservice.events.MenuItem;
6-
import net.chrisrichardson.ftgo.restaurantservice.events.RestaurantMenu;
75

86
import javax.persistence.Access;
97
import javax.persistence.AccessType;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.chrisrichardson.ftgo.kitchenservice.domain;
2+
3+
import java.util.List;
4+
5+
public class RestaurantMenu {
6+
private List<MenuItem> menuItems;
7+
8+
public RestaurantMenu(List<MenuItem> menuItems) {
9+
this.menuItems = menuItems;
10+
}
11+
12+
public List<MenuItem> getMenuItems() {
13+
return menuItems;
14+
}
15+
}

ftgo-kitchen-service/src/main/java/net/chrisrichardson/ftgo/kitchenservice/messagehandlers/KitchenServiceEventConsumer.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import io.eventuate.tram.events.subscriber.DomainEventHandlers;
55
import io.eventuate.tram.events.subscriber.DomainEventHandlersBuilder;
66
import net.chrisrichardson.ftgo.kitchenservice.domain.KitchenService;
7+
import net.chrisrichardson.ftgo.kitchenservice.domain.RestaurantMenu;
78
import net.chrisrichardson.ftgo.restaurantservice.events.RestaurantCreated;
8-
import net.chrisrichardson.ftgo.restaurantservice.events.RestaurantMenu;
99
import net.chrisrichardson.ftgo.restaurantservice.events.RestaurantMenuRevised;
1010
import org.springframework.beans.factory.annotation.Autowired;
1111

@@ -26,15 +26,14 @@ public DomainEventHandlers domainEventHandlers() {
2626
private void createMenu(DomainEventEnvelope<RestaurantCreated> de) {
2727
String restaurantIds = de.getAggregateId();
2828
long id = Long.parseLong(restaurantIds);
29-
RestaurantMenu menu = de.getEvent().getMenu();
29+
RestaurantMenu menu = new RestaurantMenu(RestaurantEventMapper.toMenuItems(de.getEvent().getMenu().getMenuItems()));
3030
kitchenService.createMenu(id, menu);
3131
}
3232

3333
public void reviseMenu(DomainEventEnvelope<RestaurantMenuRevised> de) {
34-
3534
long id = Long.parseLong(de.getAggregateId());
36-
RestaurantMenu revisedMenu = de.getEvent().getRevisedMenu();
37-
kitchenService.reviseMenu(id, revisedMenu);
35+
RestaurantMenu menu = new RestaurantMenu(RestaurantEventMapper.toMenuItems(de.getEvent().getMenu().getMenuItems()));
36+
kitchenService.reviseMenu(id, menu);
3837
}
3938

4039
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.chrisrichardson.ftgo.kitchenservice.messagehandlers;
2+
3+
import net.chrisrichardson.ftgo.common.Money;
4+
import net.chrisrichardson.ftgo.restaurantservice.events.MenuItem;
5+
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
9+
public class RestaurantEventMapper {
10+
11+
public static List<net.chrisrichardson.ftgo.kitchenservice.domain.MenuItem> toMenuItems(List<MenuItem> menuItems) {
12+
return menuItems.stream().map(mi -> new net.chrisrichardson.ftgo.kitchenservice.domain.MenuItem(mi.getId(), mi.getName(), new Money(mi.getPrice()))).collect(Collectors.toList());
13+
}
14+
15+
}

0 commit comments

Comments
 (0)