Skip to content

Commit

Permalink
feat: create select cursosr at SemistructuredTemplate
Browse files Browse the repository at this point in the history
Signed-off-by: Otavio Santana <otaviopolianasantana@gmail.com>
  • Loading branch information
otaviojava committed Mar 31, 2024
1 parent 6074ec1 commit 19f331a
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@


import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
import jakarta.data.page.PageRequest;
import jakarta.data.page.impl.CursoredPageRecord;
import jakarta.nosql.QueryMapper;

import org.eclipse.jnosql.communication.semistructured.CommunicationEntity;
Expand All @@ -34,6 +37,7 @@

import java.time.Duration;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Consumer;
Expand Down Expand Up @@ -299,6 +303,19 @@ public <T> void deleteAll(Class<T> type) {
manager().delete(DeleteQuery.delete().from(metadata.name()).build());
}

@SuppressWarnings("unchecked")
@Override
public <T> CursoredPage<T> selectCursor(SelectQuery query, PageRequest<T> pageRequest){
Objects.requireNonNull(query, "query is required");
Objects.requireNonNull(pageRequest, "pageRequest is required");
CursoredPage<CommunicationEntity> cursoredPage = this.manager().selectCursor(query, pageRequest);
List<T> entities = cursoredPage.stream().<T>map(c -> converter().toEntity(c)).toList();
PageRequest<T> nextPageRequest = cursoredPage.hasNext()? (PageRequest<T>) cursoredPage.nextPageRequest(): null;
PageRequest<T> beforePageRequest = cursoredPage.hasPrevious()? (PageRequest<T>) cursoredPage.previousPageRequest(): null;
List<PageRequest.Cursor> cursors = ((CursoredPageRecord<CommunicationEntity>) cursoredPage).cursors();
return new CursoredPageRecord<>(entities, cursors, -1, pageRequest, nextPageRequest, beforePageRequest);
}

protected <T> T persist(T entity, UnaryOperator<CommunicationEntity> persistAction) {
return Stream.of(entity)
.map(toUnary(eventManager()::firePreEntity))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
package org.eclipse.jnosql.mapping.semistructured;

import jakarta.data.page.CursoredPage;
import jakarta.data.page.Page;
import jakarta.data.page.PageRequest;
import org.eclipse.jnosql.mapping.PreparedStatement;
import jakarta.nosql.Template;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
package org.eclipse.jnosql.mapping.semistructured;

import jakarta.data.exceptions.NonUniqueResultException;
import jakarta.data.page.CursoredPage;
import jakarta.data.page.PageRequest;
import jakarta.data.page.impl.CursoredPageRecord;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
import org.eclipse.jnosql.mapping.PreparedStatement;
Expand Down Expand Up @@ -43,6 +46,8 @@

import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -439,4 +444,38 @@ void shouldDeleteAll(){
template.deleteAll(Person.class);
verify(managerMock).delete(delete().from("Person").build());
}

@Test
void shouldSelectCursor(){
PageRequest<CommunicationEntity> request = PageRequest.ofSize(2);
PageRequest<CommunicationEntity> afterKey = PageRequest.<CommunicationEntity>ofSize(2)
.afterKey("Ada");
SelectQuery query = select().from("Person").orderBy("name").asc().build();

Mockito.when(managerMock.selectCursor(query, request))
.thenReturn(new CursoredPageRecord<>(content(),
Collections.emptyList(), -1, request, afterKey, null));

PageRequest<Person> personRequest = PageRequest.ofSize(2);
CursoredPage<Person> result = template.selectCursor(query, personRequest);

SoftAssertions.assertSoftly(soft ->{
soft.assertThat(result).isNotNull();
soft.assertThat(result.content()).hasSize(1);
soft.assertThat(result.hasNext()).isTrue();
Person person = result.stream().findFirst().orElseThrow();

soft.assertThat(person.getAge()).isEqualTo(10);
soft.assertThat(person.getName()).isEqualTo("Name");
soft.assertThat(person.getPhones()).containsExactly("234", "432");
});

}


private List<CommunicationEntity> content(){
CommunicationEntity columnEntity = CommunicationEntity.of("Person");
columnEntity.addAll(Stream.of(columns).collect(Collectors.toList()));
return List.of(columnEntity);
}
}

0 comments on commit 19f331a

Please sign in to comment.