From 66de0d440c303b6da25a896cffe9473c9ffae2e7 Mon Sep 17 00:00:00 2001
From: Maciej Szarlinski <mszarlinski@gmail.com>
Date: Tue, 8 Nov 2016 18:18:31 +0100
Subject: [PATCH] Switch off springboot-petclinic-server, adjust client side
 urls to call API Gateway

---
 petclinic-api-gateway/pom.xml                 | 173 +++++++++++++-----
 .../api/infrastructure/config/WebConfig.java  |  14 ++
 .../resources/messages/messages.properties    |   0
 .../resources/messages/messages_de.properties |   0
 .../resources/messages/messages_en.properties |   0
 .../src/main/resources/templates/index.html   |   0
 .../clients/boundary/web/pet/PetResource.java |  14 +-
 .../boundary/web/visit/VisitResource.java     |   4 +-
 pom.xml                                       |   6 -
 .../owner-details/owner-details.component.js  |   2 +-
 .../owner-form/owner-form.component.js        |   2 +-
 .../scripts/vet-list/vet-list.component.js    |   2 +-
 .../src/scripts/visits/visits.component.js    |   2 +-
 13 files changed, 148 insertions(+), 71 deletions(-)
 create mode 100644 petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/infrastructure/config/WebConfig.java
 rename {springboot-petclinic-server => petclinic-api-gateway}/src/main/resources/messages/messages.properties (100%)
 rename {springboot-petclinic-server => petclinic-api-gateway}/src/main/resources/messages/messages_de.properties (100%)
 rename {springboot-petclinic-server => petclinic-api-gateway}/src/main/resources/messages/messages_en.properties (100%)
 rename {springboot-petclinic-server => petclinic-api-gateway}/src/main/resources/templates/index.html (100%)

diff --git a/petclinic-api-gateway/pom.xml b/petclinic-api-gateway/pom.xml
index b28dd9c8..2c683164 100644
--- a/petclinic-api-gateway/pom.xml
+++ b/petclinic-api-gateway/pom.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.springframework.samples.petclinic.api</groupId>
     <artifactId>petclinic-api-gateway</artifactId>
@@ -23,51 +23,130 @@
         <java.version>1.8</java.version>
     </properties>
 
-	<dependencies>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-config</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-eureka</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.cloud</groupId>
-			<artifactId>spring-cloud-starter-zuul</artifactId>
-		</dependency>
-
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.springframework.cloud</groupId>
-				<artifactId>spring-cloud-dependencies</artifactId>
-				<version>Camden.SR1</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
-		</plugins>
-	</build>
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zuul</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.samples</groupId>
+            <artifactId>springboot-petclinic-client</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-eureka</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <finalName>petclinic</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <fork>true</fork>
+                </configuration>
+                <executions>
+                    <execution>
+                        <!-- Spring Boot Actuator displays build-related information if a META-INF/build-info.properties file is present -->
+                        <goals>
+                            <goal>build-info</goal>
+                        </goals>
+                        <configuration>
+                            <additionalProperties>
+                                <encoding.source>${project.build.sourceEncoding}</encoding.source>
+                                <encoding.reporting>${project.reporting.outputEncoding}</encoding.reporting>
+                                <java.source>${maven.compiler.source}</java.source>
+                                <java.target>${maven.compiler.target}</java.target>
+                            </additionalProperties>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- Spring Boot Actuator displays build-related information if a META-INF/build-info.properties file is present -->
+            <plugin>
+                <groupId>pl.project13.maven</groupId>
+                <artifactId>git-commit-id-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>revision</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <verbose>true</verbose>
+                    <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
+                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                    <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties
+                    </generateGitPropertiesFilename>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>0.4.13</version>
+                <configuration>
+                    <imageName>${docker.image.prefix}/springboot-petclinic</imageName>
+                    <dockerDirectory>src/main/docker</dockerDirectory>
+                    <resources>
+                        <resource>
+                            <targetPath>/</targetPath>
+                            <directory>${project.build.directory}</directory>
+                            <include>${project.build.finalName}.jar</include>
+                        </resource>
+                    </resources>
+                    <forceTags>true</forceTags>
+                    <imageTags>
+                        <imageTag>${project.version}</imageTag>
+                        <imageTag>latest</imageTag>
+                    </imageTags>
+                    <useConfigFile>true</useConfigFile>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 
 
 </project>
diff --git a/petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/infrastructure/config/WebConfig.java b/petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/infrastructure/config/WebConfig.java
new file mode 100644
index 00000000..19cd8ae3
--- /dev/null
+++ b/petclinic-api-gateway/src/main/java/org/springframework/samples/petclinic/api/infrastructure/config/WebConfig.java
@@ -0,0 +1,14 @@
+package org.springframework.samples.petclinic.api.infrastructure.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+public class WebConfig extends WebMvcConfigurerAdapter {
+
+    @Override
+    public void addViewControllers(ViewControllerRegistry registry) {
+        registry.addViewController("/").setViewName("index");
+    }
+}
diff --git a/springboot-petclinic-server/src/main/resources/messages/messages.properties b/petclinic-api-gateway/src/main/resources/messages/messages.properties
similarity index 100%
rename from springboot-petclinic-server/src/main/resources/messages/messages.properties
rename to petclinic-api-gateway/src/main/resources/messages/messages.properties
diff --git a/springboot-petclinic-server/src/main/resources/messages/messages_de.properties b/petclinic-api-gateway/src/main/resources/messages/messages_de.properties
similarity index 100%
rename from springboot-petclinic-server/src/main/resources/messages/messages_de.properties
rename to petclinic-api-gateway/src/main/resources/messages/messages_de.properties
diff --git a/springboot-petclinic-server/src/main/resources/messages/messages_en.properties b/petclinic-api-gateway/src/main/resources/messages/messages_en.properties
similarity index 100%
rename from springboot-petclinic-server/src/main/resources/messages/messages_en.properties
rename to petclinic-api-gateway/src/main/resources/messages/messages_en.properties
diff --git a/springboot-petclinic-server/src/main/resources/templates/index.html b/petclinic-api-gateway/src/main/resources/templates/index.html
similarity index 100%
rename from springboot-petclinic-server/src/main/resources/templates/index.html
rename to petclinic-api-gateway/src/main/resources/templates/index.html
diff --git a/petclinic-clients-service/src/main/java/org/springframework/samples/petclinic/clients/boundary/web/pet/PetResource.java b/petclinic-clients-service/src/main/java/org/springframework/samples/petclinic/clients/boundary/web/pet/PetResource.java
index 2ebc2d79..0da9afc4 100644
--- a/petclinic-clients-service/src/main/java/org/springframework/samples/petclinic/clients/boundary/web/pet/PetResource.java
+++ b/petclinic-clients-service/src/main/java/org/springframework/samples/petclinic/clients/boundary/web/pet/PetResource.java
@@ -53,16 +53,6 @@ public class PetResource {
         return petService.findPetTypes();
     }
 
-    //TODO: unused?
-//    @GetMapping("/owners/{ownerId}/pets/new")
-//    public String initCreationForm(@PathVariable("ownerId") int ownerId, Map<String, Object> model) {
-//        Owner owner = ownerService.findOwnerById(ownerId);
-//        Pet pet = new Pet();
-//        owner.addPet(pet);
-//        model.put("pet", pet);
-//        return "pets/createOrUpdatePetForm";
-//    }
-
     @PostMapping("/owners/{ownerId}/pets")
     @ResponseStatus(HttpStatus.NO_CONTENT)
     public void processCreationForm(
@@ -76,7 +66,7 @@ public class PetResource {
         save(pet, petRequest);
     }
 
-    @PutMapping("/owners/{ownerId}/pets/{petId}")
+    @PutMapping("/owners/*/pets/{petId}")
     @ResponseStatus(HttpStatus.NO_CONTENT)
     public void processUpdateForm(@RequestBody PetRequest petRequest) {
         save(petService.findPetById(petRequest.getId()), petRequest);
@@ -93,7 +83,7 @@ public class PetResource {
         petService.savePet(pet);
     }
 
-    @GetMapping("/pets/{petId}")
+    @GetMapping("owners/*/pets/{petId}")
     public PetDetails findPet(@PathVariable("petId") int petId) {
         return new PetDetails(petService.findPetById(petId));
     }
diff --git a/petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/boundary/web/visit/VisitResource.java b/petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/boundary/web/visit/VisitResource.java
index 8f528d1b..e67519ea 100644
--- a/petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/boundary/web/visit/VisitResource.java
+++ b/petclinic-visits-service/src/main/java/org/springframework/samples/petclinic/visits/boundary/web/visit/VisitResource.java
@@ -40,7 +40,7 @@ public class VisitResource {
         this.visitService = visitService;
     }
 
-    @PostMapping("/pets/{petId}/visits")
+    @PostMapping("owners/*/pets/{petId}/visits")
     @ResponseStatus(HttpStatus.NO_CONTENT)
     public void create(
         @Valid @RequestBody Visit visit,
@@ -50,7 +50,7 @@ public class VisitResource {
         visitService.saveVisit(visit);
     }
 
-    @GetMapping("/pets/{petId}/visits")
+    @GetMapping("owners/*/pets/{petId}/visits")
     public List<Visit> visits(@PathVariable("petId") int petId) {
         return visitService.findVisitsByPetId(petId);
     }
diff --git a/pom.xml b/pom.xml
index 008eab2c..e6b117d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,6 @@
 
 	<modules>
 		<module>springboot-petclinic-client</module>
-		<module>springboot-petclinic-server</module>
 		<module>petclinic-clients-service</module>
 		<module>petclinic-vets-service</module>
 		<module>petclinic-visits-service</module>
@@ -32,11 +31,6 @@
 
 	<dependencyManagement>
 		<dependencies>
-			<dependency>
-				<groupId>org.springframework.samples</groupId>
-				<artifactId>spring-petclinic-client</artifactId>
-				<version>${project.version}</version>
-			</dependency>
 			<dependency>
 				<groupId>org.springframework.cloud</groupId>
 				<artifactId>spring-cloud-dependencies</artifactId>
diff --git a/springboot-petclinic-client/src/scripts/owner-details/owner-details.component.js b/springboot-petclinic-client/src/scripts/owner-details/owner-details.component.js
index 3569642d..98a43fcb 100644
--- a/springboot-petclinic-client/src/scripts/owner-details/owner-details.component.js
+++ b/springboot-petclinic-client/src/scripts/owner-details/owner-details.component.js
@@ -4,4 +4,4 @@ angular.module('ownerDetails')
     .component('ownerDetails', {
         templateUrl: 'scripts/owner-details/owner-details.template.html',
         controller: 'OwnerDetailsController'
-    });
\ No newline at end of file
+    });
diff --git a/springboot-petclinic-client/src/scripts/owner-form/owner-form.component.js b/springboot-petclinic-client/src/scripts/owner-form/owner-form.component.js
index dd409691..e8dec69c 100644
--- a/springboot-petclinic-client/src/scripts/owner-form/owner-form.component.js
+++ b/springboot-petclinic-client/src/scripts/owner-form/owner-form.component.js
@@ -4,4 +4,4 @@ angular.module('ownerForm')
     .component('ownerForm', {
         templateUrl: 'scripts/owner-form/owner-form.template.html',
         controller: 'OwnerFormController'
-    });
\ No newline at end of file
+    });
diff --git a/springboot-petclinic-client/src/scripts/vet-list/vet-list.component.js b/springboot-petclinic-client/src/scripts/vet-list/vet-list.component.js
index 892f4f98..6d8e9508 100644
--- a/springboot-petclinic-client/src/scripts/vet-list/vet-list.component.js
+++ b/springboot-petclinic-client/src/scripts/vet-list/vet-list.component.js
@@ -4,4 +4,4 @@ angular.module('vetList')
     .component('vetList', {
         templateUrl: 'scripts/vet-list/vet-list.template.html',
         controller: 'VetListController'
-    });
\ No newline at end of file
+    });
diff --git a/springboot-petclinic-client/src/scripts/visits/visits.component.js b/springboot-petclinic-client/src/scripts/visits/visits.component.js
index bf6a17a4..0bfbcad3 100644
--- a/springboot-petclinic-client/src/scripts/visits/visits.component.js
+++ b/springboot-petclinic-client/src/scripts/visits/visits.component.js
@@ -4,4 +4,4 @@ angular.module('visits')
     .component('visits', {
         templateUrl: 'scripts/visits/visits.template.html',
         controller: 'VisitsController'
-    });
\ No newline at end of file
+    });
-- 
GitLab