From bc2ffb6f98bd5432d2ad2480e0a3da97f73fc760 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 1 Dec 2020 14:02:25 +0100
Subject: [PATCH] OZG-31 persist in Database; build docker-image for deployment

---
 README.md                                     |  5 +
 mongodb/docker-compose.yml                    |  8 ++
 .../src/main/protobuf/vorgang.proto           |  4 +-
 pluto-server/Dockerfile                       |  6 ++
 pluto-server/pom.xml                          | 95 +++++++++++++++++++
 .../de/itvsh/ozg/pluto/vorgang/Eingang.java   | 11 +++
 .../ozg/pluto/vorgang/EingangMapper.java      | 11 +++
 .../ozg/pluto/vorgang/GrpcVorgangService.java |  9 ++
 .../de/itvsh/ozg/pluto/vorgang/Vorgang.java   | 32 +++++++
 .../ozg/pluto/vorgang/VorgangHeader.java      | 23 +++++
 .../vorgang/VorgangHeaderRepository.java      |  7 ++
 .../ozg/pluto/vorgang/VorgangMapper.java      |  8 ++
 .../ozg/pluto/vorgang/VorgangRepository.java  |  7 ++
 .../ozg/pluto/vorgang/VorgangService.java     | 15 +++
 .../src/main/resources/application-local.yml  |  0
 .../src/main/resources/application-oc.yml     |  7 ++
 ...application.properties => application.yml} |  0
 17 files changed, 246 insertions(+), 2 deletions(-)
 create mode 100644 README.md
 create mode 100644 mongodb/docker-compose.yml
 create mode 100644 pluto-server/Dockerfile
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Eingang.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/EingangMapper.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Vorgang.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeader.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepository.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangMapper.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
 create mode 100644 pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
 create mode 100644 pluto-server/src/main/resources/application-local.yml
 create mode 100644 pluto-server/src/main/resources/application-oc.yml
 rename pluto-server/src/main/resources/{application.properties => application.yml} (100%)

diff --git a/README.md b/README.md
new file mode 100644
index 000000000..181fd1c3b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+
+## Configuration
+### Create mongodb user
+
+db.createUser({user:"sh-kiel-pluto",pwd:"...",roles:[{role:"readWrite",database:"sh-kiel"}]})
diff --git a/mongodb/docker-compose.yml b/mongodb/docker-compose.yml
new file mode 100644
index 000000000..17c966c31
--- /dev/null
+++ b/mongodb/docker-compose.yml
@@ -0,0 +1,8 @@
+version: "2.1"
+services:
+  mongo:
+    image: mongo:3.2.4
+    ports:
+     - 27017:27017
+    command: --smallfiles
+    
diff --git a/pluto-interface/src/main/protobuf/vorgang.proto b/pluto-interface/src/main/protobuf/vorgang.proto
index 342cccb4b..ee17425c4 100644
--- a/pluto-interface/src/main/protobuf/vorgang.proto
+++ b/pluto-interface/src/main/protobuf/vorgang.proto
@@ -17,10 +17,10 @@ service VorgangService {
 
 /* Create Vorgang */
 message CreateVorgangRequest {
-	Eingang eingang = 1;
+	GrpcEingang eingang = 1;
 }
 
-message Eingang {
+message GrpcEingang {
 	string id = 1;
 	EingangHeader header = 2;
 	Antragsteller antragsteller = 3;
diff --git a/pluto-server/Dockerfile b/pluto-server/Dockerfile
new file mode 100644
index 000000000..75aee531f
--- /dev/null
+++ b/pluto-server/Dockerfile
@@ -0,0 +1,6 @@
+FROM openjdk:15-slim
+
+COPY /target/pluto-server-0.0.1-SNAPSHOT.jar /opt/pluto.jar
+
+WORKDIR /opt
+CMD java -jar pluto.jar
\ No newline at end of file
diff --git a/pluto-server/pom.xml b/pluto-server/pom.xml
index 5a6cfab87..e6b53aedb 100644
--- a/pluto-server/pom.xml
+++ b/pluto-server/pom.xml
@@ -3,12 +3,14 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
+	
 	<parent>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
 		<version>2.4.0</version>
 		<relativePath /> <!-- lookup parent from repository -->
 	</parent>
+	
 	<groupId>de.itvsh.ozg.pluto</groupId>
 	<artifactId>pluto-server</artifactId>
 	<version>0.0.1-SNAPSHOT</version>
@@ -21,6 +23,7 @@
 
 		<grpc.spring-boot-starter.version>2.10.1.RELEASE
 		</grpc.spring-boot-starter.version>
+		<mapstruct.version>1.4.1.Final</mapstruct.version>
 		<lorem.version>2.1</lorem.version>
 		<faker.version>1.0.2</faker.version>
 	</properties>
@@ -55,6 +58,12 @@
 			<artifactId>javafaker</artifactId>
 			<version>${faker.version}</version>
 		</dependency>
+		<!-- tools -->
+		<dependency>
+			<groupId>org.mapstruct</groupId>
+			<artifactId>mapstruct</artifactId>
+			<version>${mapstruct.version}</version>
+		</dependency>
 
 		<!-- Dev -->
 		<dependency>
@@ -109,6 +118,92 @@
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+					<source>${java.version}</source>
+					<target>${java.version}</target>
+					<annotationProcessorPaths>
+						<path>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+							<version>${lombok.version}</version>
+						</path>
+						<path>
+							<groupId>org.mapstruct</groupId>
+							<artifactId>mapstruct-processor</artifactId>
+							<version>${mapstruct.version}</version>
+						</path>
+						<!-- other annotation processors -->
+					</annotationProcessorPaths>
+
+					<showWarnings>true</showWarnings>
+					<compilerArgs>
+						<compilerArg>
+							-Amapstruct.defaultComponentModel=spring
+						</compilerArg>
+						<compilerArg>
+							-Amapstruct.unmappedTargetPolicy=IGNORE
+						</compilerArg>
+					</compilerArgs>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>com.spotify</groupId>
+				<artifactId>dockerfile-maven-plugin</artifactId>
+				<version>1.4.13</version>
+				<configuration>
+					<username>admin</username>
+					<password>admin</password>
+					<!-- <username>srv-schiffsregister-jenkins</username> -->
+					<!-- <password>Dataport2018!</password> -->
+					<!-- <repository>build.schir:8082/schir-docker/schir</repository> -->
+					<repository>default-route-openshift-image-registry.apps.lab.okd.local/sh-kiel-dev/pluto</repository>
+					<!-- <repository>artefactrepo-ccse.dataport.de/schiffsregister-docker-development</repository> -->
+					<tag>${git.branch}-${project.version}</tag>
+					<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
+					<buildArgs>
+						<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
+					</buildArgs>
+				</configuration>
+				<executions>
+					<execution>
+						<id>default</id>
+						<phase>deploy</phase>
+						<goals>
+							<goal>build</goal>
+							<goal>tag</goal>
+							<goal>push</goal>
+						</goals>
+					</execution>
+				</executions>
+				<dependencies>
+					<dependency>
+						<groupId>javax.activation</groupId>
+						<artifactId>activation</artifactId>
+						<version>1.1.1</version>
+					</dependency>
+				</dependencies>
+			</plugin>
+			<plugin>
+				<groupId>pl.project13.maven</groupId>
+				<artifactId>git-commit-id-plugin</artifactId>
+				<configuration>
+					<offline>true</offline>
+				</configuration>
+				<executions>
+					<execution>
+						<id>get-the-git-infos</id>
+						<goals>
+							<goal>revision</goal>
+						</goals>
+						<phase>initialize</phase>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Eingang.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Eingang.java
new file mode 100644
index 000000000..2aacfd46c
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Eingang.java
@@ -0,0 +1,11 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+public class Eingang {
+
+	private String name;
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/EingangMapper.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/EingangMapper.java
new file mode 100644
index 000000000..fcbdfa67a
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/EingangMapper.java
@@ -0,0 +1,11 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+
+@Mapper
+interface EingangMapper {
+
+	@Mapping(target = "name", source = "header.formName")
+	Eingang fromGrpc(GrpcEingang grpcEingang);
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/GrpcVorgangService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/GrpcVorgangService.java
index 4320ce829..e21b98ad2 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/GrpcVorgangService.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/GrpcVorgangService.java
@@ -7,6 +7,8 @@ import java.util.Locale;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
+import org.springframework.beans.factory.annotation.Autowired;
+
 import com.github.javafaker.Faker;
 import com.thedeanda.lorem.Lorem;
 import com.thedeanda.lorem.LoremIpsum;
@@ -30,11 +32,18 @@ class GrpcVorgangService extends VorgangServiceGrpc.VorgangServiceImplBase {
 		}
 	}
 
+	@Autowired
+	private VorgangService vorgangService;
+	@Autowired
+	private EingangMapper eingangMapper;
+
 	@Override
 	public void createVorgang(CreateVorgangRequest request, StreamObserver<CreateVorgangReply> responseObserver) {
 
 		LOG.info("creating vorgang:\n{}", request.toString());
 
+		vorgangService.createVorgang(eingangMapper.fromGrpc(request.getEingang()));
+
 		var reply = CreateVorgangReply.newBuilder().setMessage("ok").build();
 		responseObserver.onNext(reply);
 		responseObserver.onCompleted();
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Vorgang.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Vorgang.java
new file mode 100644
index 000000000..a6d5f385e
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/Vorgang.java
@@ -0,0 +1,32 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.List;
+
+import org.springframework.data.annotation.Id;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+
+@Getter
+@Builder
+public class Vorgang {
+
+	enum Status {
+		NEU
+	}
+
+	@Id
+	private String id;
+	@Builder.Default
+	private LocalDateTime createdAt = LocalDateTime.now(ZoneId.of("UTC"));
+	private String name;
+
+	@Builder.Default
+	private Status status = Status.NEU;
+
+	@Singular
+	private List<Eingang> eingangs;
+}
\ No newline at end of file
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeader.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeader.java
new file mode 100644
index 000000000..edb0f97ea
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeader.java
@@ -0,0 +1,23 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+import org.springframework.data.annotation.Id;
+
+import lombok.Getter;
+
+@Getter
+public class VorgangHeader {
+
+	enum Status {
+		NEU
+	}
+
+	@Id
+	private String id;
+	private LocalDateTime createdAt = LocalDateTime.now(ZoneId.of("UTC"));
+	private String name;
+
+	private Status status = Status.NEU;
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepository.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepository.java
new file mode 100644
index 000000000..065666b4e
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangHeaderRepository.java
@@ -0,0 +1,7 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import org.springframework.data.repository.CrudRepository;
+
+public interface VorgangHeaderRepository extends CrudRepository<VorgangHeader, String> {
+
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangMapper.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangMapper.java
new file mode 100644
index 000000000..c0609ea45
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangMapper.java
@@ -0,0 +1,8 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import org.mapstruct.Mapper;
+
+@Mapper
+interface VorgangMapper {
+
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
new file mode 100644
index 000000000..aee22961c
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangRepository.java
@@ -0,0 +1,7 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import org.springframework.data.repository.CrudRepository;
+
+interface VorgangRepository extends CrudRepository<Vorgang, String> {
+
+}
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
new file mode 100644
index 000000000..9cd87056d
--- /dev/null
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
@@ -0,0 +1,15 @@
+package de.itvsh.ozg.pluto.vorgang;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+class VorgangService {
+
+	@Autowired
+	private VorgangRepository repository;
+
+	public void createVorgang(Eingang eingang) {
+		repository.save(Vorgang.builder().eingang(eingang).build());
+	}
+}
diff --git a/pluto-server/src/main/resources/application-local.yml b/pluto-server/src/main/resources/application-local.yml
new file mode 100644
index 000000000..e69de29bb
diff --git a/pluto-server/src/main/resources/application-oc.yml b/pluto-server/src/main/resources/application-oc.yml
new file mode 100644
index 000000000..21b95724c
--- /dev/null
+++ b/pluto-server/src/main/resources/application-oc.yml
@@ -0,0 +1,7 @@
+spring:
+  data:
+    mongodb:
+      host: 172.30.190.222
+      authentication-database: admin 
+      username: root
+      password: ldsjfa0avjklz
\ No newline at end of file
diff --git a/pluto-server/src/main/resources/application.properties b/pluto-server/src/main/resources/application.yml
similarity index 100%
rename from pluto-server/src/main/resources/application.properties
rename to pluto-server/src/main/resources/application.yml
-- 
GitLab