Skip to content
Snippets Groups Projects
Commit 8505056f authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5323 implement grpc service

parent c5801eb7
No related branches found
No related tags found
No related merge requests found
Showing
with 390 additions and 2 deletions
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<version>1.10.0-SNAPSHOT</version> <version>1.10.0-SNAPSHOT</version>
<properties> <properties>
<vorgang-manager.version>2.5.0</vorgang-manager.version> <vorgang-manager.version>2.6.0-SNAPSHOT</vorgang-manager.version>
<api-lib.version>0.7.0-SNAPSHOT</api-lib.version> <api-lib.version>0.7.0-SNAPSHOT</api-lib.version>
</properties> </properties>
......
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import lombok.Builder;
import lombok.Getter;
@Builder
@Getter
public class Document {
static final String FIELD_DOCUMENT_TYPE = "type";
static final String FIELD_NACHRICHT_TEXT = "nachrichtText";
static final String FIELD_DOCUMENT_FILE = "documentFile";
private String id;
private String type;
private String fileId;
private String nachrichtSubject;
private String nachrichtText;
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import de.ozgcloud.document.DocumentServiceGrpc.DocumentServiceImplBase;
import io.grpc.stub.StreamObserver;
import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService
@RequiredArgsConstructor
public class DocumentGrpcService extends DocumentServiceImplBase {
private final DocumentService documentService;
private final DocumentMapper documentMapper;
@Override
public void getDocument(GrpcGetDocumentRequest request, StreamObserver<GrpcGetDocumentResponse> responseObserver) {
var document = documentService.getDocument(request.getId());
responseObserver.onNext(buildGetDocumentResponse(document));
responseObserver.onCompleted();
}
GrpcGetDocumentResponse buildGetDocumentResponse(Document document) {
return GrpcGetDocumentResponse.newBuilder().setDocument(documentMapper.toGrpcDocument(document)).build();
}
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
interface DocumentMapper {
@Mapping(target = "unknownFields", ignore = true)
@Mapping(target = "typeBytes", ignore = true)
@Mapping(target = "nachrichtTextBytes", ignore = true)
@Mapping(target = "nachrichtSubjectBytes", ignore = true)
@Mapping(target = "mergeUnknownFields", ignore = true)
@Mapping(target = "mergeFrom", ignore = true)
@Mapping(target = "idBytes", ignore = true)
@Mapping(target = "fileIdBytes", ignore = true)
@Mapping(target = "clearOneof", ignore = true)
@Mapping(target = "clearField", ignore = true)
GrpcDocument toGrpcDocument(Document document);
}
...@@ -93,4 +93,7 @@ public class DocumentService { ...@@ -93,4 +93,7 @@ public class DocumentService {
return Map.of(FIELD_DOCUMENT_TYPE, DOCUMENT_TYPE, FIELD_DOCUMENT_FILE, fileId); return Map.of(FIELD_DOCUMENT_TYPE, DOCUMENT_TYPE, FIELD_DOCUMENT_FILE, fileId);
} }
public Document getDocument(String id) {
return Document.builder().build();
}
} }
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import io.grpc.stub.StreamObserver;
class DocumentGrpcServiceTest {
@Spy
@InjectMocks
private DocumentGrpcService service;
@Mock
private DocumentService documentService;
@Mock
private DocumentMapper documentMapper;
@Nested
class TestGetDocument {
private final static GrpcGetDocumentRequest REQUEST = GrpcGetDocumentRequest.newBuilder().setId(DocumentTestFactory.ID).build();
@Mock
private GrpcGetDocumentResponse response;
@Mock
private StreamObserver<GrpcGetDocumentResponse> responseObserver;
@BeforeEach
void init() {
doReturn(response).when(service).buildGetDocumentResponse(any());
}
@Test
void shouldCallDocumentService() {
service.getDocument(REQUEST, responseObserver);
verify(documentService).getDocument(DocumentTestFactory.ID);
}
@Test
void shouldCallBuildResponse() {
service.getDocument(REQUEST, responseObserver);
verify(service).buildGetDocumentResponse(any());
}
@Test
void shouldCallOnNext() {
service.getDocument(REQUEST, responseObserver);
verify(responseObserver).onNext(response);
}
@Test
void shouldCallOnCompleted() {
service.getDocument(REQUEST, responseObserver);
verify(responseObserver).onCompleted();
}
}
@Nested
class TestBuildGetDocumentResponse {
@Mock
private GrpcDocument grpcDocument;
@BeforeEach
void init() {
when(documentMapper.toGrpcDocument(any())).thenReturn(grpcDocument);
}
@Test
void shouldCallDocumentMapper() {
var document = DocumentTestFactory.create();
service.buildGetDocumentResponse(document);
verify(documentMapper).toGrpcDocument(document);
}
@Test
void shouldSetDocument() {
var result = service.buildGetDocumentResponse(DocumentTestFactory.create());
assertThat(result.getDocument()).isEqualTo(grpcDocument);
}
}
}
\ No newline at end of file
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
class DocumentMapperTest {
private DocumentMapper mapper = Mappers.getMapper(DocumentMapper.class);
@Test
void shouldMapDocument() {
var result = mapper.toGrpcDocument(DocumentTestFactory.create());
assertThat(result).usingRecursiveComparison().isEqualTo(GrpcDocumentTestFactory.create());
}
}
\ No newline at end of file
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
import de.ozgcloud.document.Document.DocumentBuilder;
public class DocumentTestFactory {
public static final String ID = "documentId";
public static final String TYPE = "type";
public static final String DOCUMENT_FILE = "file-id";
public static final String NACHRICHT_SUBJECT = "subject";
public static final String NACHRICHT_TEXT = "text";
public static Document create() {
return createBuilder().build();
}
public static DocumentBuilder createBuilder() {
return Document.builder()
.id(ID)
.type(TYPE)
.fileId(DOCUMENT_FILE)
.nachrichtSubject(NACHRICHT_SUBJECT)
.nachrichtText(NACHRICHT_TEXT);
}
}
/*
* Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
package de.ozgcloud.document;
public class GrpcDocumentTestFactory {
public static GrpcDocument create() {
return createBuilder().build();
}
public static GrpcDocument.Builder createBuilder() {
return GrpcDocument.newBuilder()
.setId(DocumentTestFactory.ID)
.setType(DocumentTestFactory.TYPE)
.setFileId(DocumentTestFactory.DOCUMENT_FILE)
.setNachrichtSubject(DocumentTestFactory.NACHRICHT_SUBJECT)
.setNachrichtText(DocumentTestFactory.NACHRICHT_TEXT);
}
}
...@@ -34,7 +34,7 @@ message GrpcGetDocumentRequest { ...@@ -34,7 +34,7 @@ message GrpcGetDocumentRequest {
} }
message GrpcGetDocumentResponse { message GrpcGetDocumentResponse {
GrpcDocument bescheid = 1; GrpcDocument document = 1;
} }
message GrpcDocument { message GrpcDocument {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment