Skip to content
Snippets Groups Projects
Commit 0fcf18d7 authored by Krzysztof Witukiewicz's avatar Krzysztof Witukiewicz
Browse files

OZG-7608 OZG-7736 Implement findDeleted

parent 2626c426
Branches
Tags
1 merge request!2Ozg 7608 vorgangshoellen for statistik
Showing
with 295 additions and 24 deletions
...@@ -24,14 +24,17 @@ ...@@ -24,14 +24,17 @@
package de.ozgcloud.apilib.vorgang; package de.ozgcloud.apilib.vorgang;
import java.util.List; import java.util.List;
import java.util.stream.Stream;
public interface OzgCloudVorgangService { public interface OzgCloudVorgangService {
public OzgCloudVorgang getById(OzgCloudVorgangId vorgangId); OzgCloudVorgang getById(OzgCloudVorgangId vorgangId);
public List<OzgCloudVorgangStub> find(OzgCloudVorgangQuery query, Page page); List<OzgCloudVorgangStub> find(OzgCloudVorgangQuery query, Page page);
public List<OzgCloudVorgangStub> search(String searchString); List<OzgCloudVorgangStub> search(String searchString);
public List<OzgCloudVorgangStub> search(String searchString, Page page); List<OzgCloudVorgangStub> search(String searchString, Page page);
Stream<OzgCloudVorgangStub> findDeleted();
} }
...@@ -23,7 +23,10 @@ ...@@ -23,7 +23,10 @@
*/ */
package de.ozgcloud.apilib.vorgang.grpc; package de.ozgcloud.apilib.vorgang.grpc;
import static de.ozgcloud.apilib.vorgang.grpc.StreamingUtils.*;
import java.util.List; import java.util.List;
import java.util.stream.Stream;
import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor; import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor;
import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider; import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
...@@ -34,6 +37,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService; ...@@ -34,6 +37,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub;
import de.ozgcloud.apilib.vorgang.Page; import de.ozgcloud.apilib.vorgang.Page;
import de.ozgcloud.vorgang.vorgang.GrpcFilterBy; import de.ozgcloud.vorgang.vorgang.GrpcFilterBy;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
...@@ -105,6 +110,17 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService { ...@@ -105,6 +110,17 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService {
.build(); .build();
} }
@Override
public Stream<OzgCloudVorgangStub> findDeleted() {
return getFindDeletedVorgangResponses()
.flatMap(response -> response.getVorgangList().stream())
.map(stubMapper::fromGrpc);
}
private Stream<GrpcFindDeletedVorgangResponse> getFindDeletedVorgangResponses() {
return asStream(getVorgangServiceStub().findDeletedVorgang(GrpcFindDeletedVorgangRequest.newBuilder().build()));
}
VorgangServiceBlockingStub getVorgangServiceStub() { VorgangServiceBlockingStub getVorgangServiceStub() {
return vorgangServiceStub.withInterceptors(new OzgCloudCallContextAttachingInterceptor(contextProvider)); return vorgangServiceStub.withInterceptors(new OzgCloudCallContextAttachingInterceptor(contextProvider));
} }
......
...@@ -34,8 +34,8 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader; ...@@ -34,8 +34,8 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader;
public interface OzgCloudVorgangStubMapper { public interface OzgCloudVorgangStubMapper {
@Mapping(target = "header", ignore = true) @Mapping(target = "header", ignore = true)
@Mapping(target = "vorgangName", ignore = true)
@Mapping(target = "vorgangNummer", ignore = true) @Mapping(target = "vorgangNummer", ignore = true)
@Mapping(target = "vorgangName", source = "name")
OzgCloudVorgangStub fromGrpc(GrpcVorgangHeader vorgang); OzgCloudVorgangStub fromGrpc(GrpcVorgangHeader vorgang);
} }
/*
* Copyright (C) 2025 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.apilib.vorgang.grpc;
import java.util.Iterator;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
class StreamingUtils {
static <T> Stream<T> asStream(Iterator<T> iterator) {
var spliterator = Spliterators.spliteratorUnknownSize(iterator, 0);
return StreamSupport.stream(spliterator, false);
}
}
...@@ -30,6 +30,10 @@ public class OzgCloudVorgangStubTestFactory { ...@@ -30,6 +30,10 @@ public class OzgCloudVorgangStubTestFactory {
} }
public static OzgCloudVorgangStub.OzgCloudVorgangStubBuilder createBuilder() { public static OzgCloudVorgangStub.OzgCloudVorgangStubBuilder createBuilder() {
return OzgCloudVorgangStub.builder(); return OzgCloudVorgangStub.builder()
.id(OzgCloudVorgangTestFactory.ID)
.version(OzgCloudVorgangTestFactory.VERSION)
.vorgangName(OzgCloudVorgangTestFactory.VORGANG_NAME)
.header(OzgCloudVorgangHeaderTestFactory.create());
} }
} }
/*
* Copyright (C) 2025 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.apilib.vorgang.grpc;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
class GrpcFindDeletedVorgangRequestTestFactory {
public static GrpcFindDeletedVorgangRequest create() {
return createBuilder().build();
}
public static GrpcFindDeletedVorgangRequest.Builder createBuilder() {
return GrpcFindDeletedVorgangRequest.newBuilder();
}
}
/*
* Copyright (C) 2025 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.apilib.vorgang.grpc;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
class GrpcFindDeletedVorgangResponseTestFactory {
public static GrpcFindDeletedVorgangResponse create() {
return createBuilder().build();
}
public static GrpcFindDeletedVorgangResponse.Builder createBuilder() {
return GrpcFindDeletedVorgangResponse.newBuilder().addVorgang(GrpcVorgangHeaderTestFactory.create());
}
}
...@@ -44,6 +44,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub; ...@@ -44,6 +44,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory;
import de.ozgcloud.apilib.vorgang.Page; import de.ozgcloud.apilib.vorgang.Page;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse;
import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest; import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
...@@ -277,4 +279,40 @@ class GrpcOzgCloudVorgangServiceTest { ...@@ -277,4 +279,40 @@ class GrpcOzgCloudVorgangServiceTest {
return service.buildFindRequest(ozgCloudVorgangQuery, page); return service.buildFindRequest(ozgCloudVorgangQuery, page);
} }
} }
@Nested
class TestFindDeleted {
private final GrpcFindDeletedVorgangRequest request = GrpcFindDeletedVorgangRequestTestFactory.create();
private final GrpcFindDeletedVorgangResponse response = GrpcFindDeletedVorgangResponseTestFactory.create();
private final OzgCloudVorgangStub vorgangStub = OzgCloudVorgangStubTestFactory.create();
@BeforeEach
void mock() {
doReturn(stub).when(service).getVorgangServiceStub();
when(stub.findDeletedVorgang(request)).thenReturn(List.of(response).iterator());
when(stubMapper.fromGrpc(response.getVorgangList().getFirst())).thenReturn(vorgangStub);
}
@Test
void shouldCallGetVorgangServiceStub() {
service.findDeleted().toList();
verify(stub).findDeletedVorgang(request);
}
@Test
void shouldMapResponse() {
service.findDeleted().toList();
verify(stubMapper).fromGrpc(response.getVorgangList().getFirst());
}
@Test
void shouldReturnVorgangStubs() {
var deleted = service.findDeleted().toList();
assertThat(deleted).containsExactly(vorgangStub);
}
}
} }
/*
* Copyright (C) 2025 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.apilib.vorgang.grpc;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory;
class OzgCloudVorgangStubMapperTest {
private OzgCloudVorgangStubMapper mapper = Mappers.getMapper(OzgCloudVorgangStubMapper.class);
@Test
void shouldMapStubFields() {
var expected = OzgCloudVorgangStubTestFactory.createBuilder()
.header(null)
.vorgangNummer(null)
.build();
var mapped = mapper.fromGrpc(GrpcVorgangHeaderTestFactory.create());
assertThat(mapped).usingRecursiveComparison().isEqualTo(expected);
}
}
/*
* Copyright (C) 2025 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.apilib.vorgang.grpc;
import static org.assertj.core.api.Assertions.*;
import java.util.List;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
class StreamingUtilsTest {
@Nested
class TestAsStream {
@Test
void shouldReturnStream() {
var elements = List.of("a", "b", "c");
var stream = StreamingUtils.asStream(elements.iterator());
assertThat(stream.toList()).containsExactlyElementsOf(elements);
}
}
}
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
<failsafe-plugin.version>3.2.5</failsafe-plugin.version> <failsafe-plugin.version>3.2.5</failsafe-plugin.version>
<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version> <maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
<vorgang-manager.version>2.17.0</vorgang-manager.version> <vorgang-manager.version>2.23.0-SNAPSHOT</vorgang-manager.version>
<user-manager.version>2.1.0</user-manager.version> <user-manager.version>2.1.0</user-manager.version>
</properties> </properties>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment