Skip to content

Commit fbc43fd

Browse files
committed
Paginated notes showing up on dashboard
1 parent 19ef82d commit fbc43fd

6 files changed

Lines changed: 99 additions & 45 deletions

File tree

src/main/java/edu/tamu/app/controller/NoteController.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,25 @@
44
import static edu.tamu.framework.enums.BusinessValidationType.CREATE;
55
import static edu.tamu.framework.enums.BusinessValidationType.EXISTS;
66

7+
import java.util.HashMap;
8+
import java.util.Iterator;
9+
import java.util.Map;
10+
711
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.data.domain.Page;
13+
import org.springframework.data.domain.Sort;
14+
import org.springframework.data.domain.Sort.Direction;
815
import org.springframework.messaging.simp.SimpMessagingTemplate;
916
import org.springframework.web.bind.annotation.RestController;
1017

18+
import com.fasterxml.jackson.databind.JsonNode;
19+
import com.fasterxml.jackson.databind.node.ArrayNode;
20+
1121
import edu.tamu.app.model.Note;
1222
import edu.tamu.app.model.repo.NoteRepo;
23+
import edu.tamu.app.model.request.FilteredPageRequest;
1324
import edu.tamu.framework.aspect.annotation.ApiCredentials;
25+
import edu.tamu.framework.aspect.annotation.ApiData;
1426
import edu.tamu.framework.aspect.annotation.ApiMapping;
1527
import edu.tamu.framework.aspect.annotation.ApiValidatedModel;
1628
import edu.tamu.framework.aspect.annotation.ApiValidation;
@@ -65,4 +77,33 @@ public ApiResponse remove(@ApiValidatedModel Note note) {
6577
simpMessagingTemplate.convertAndSend("/channel/note", new ApiResponse(SUCCESS, noteRepo.findAll()));
6678
return new ApiResponse(SUCCESS);
6779
}
80+
81+
@ApiMapping("/page")
82+
@Auth(role="ROLE_ANONYMOUS")
83+
public ApiResponse page(@ApiData JsonNode dataNode) {
84+
Direction sortDirection;
85+
if (dataNode.get("direction").get("direction").asText().equals("ASC")) {
86+
sortDirection = Sort.Direction.ASC;
87+
} else {
88+
sortDirection = Sort.Direction.DESC;
89+
}
90+
91+
Map<String, String[]> filters = new HashMap<String, String[]>();
92+
System.out.println("dataNode: " + dataNode.get("filters").get("title"));
93+
filters.put("title", arrayNodeToStringArray((ArrayNode) dataNode.get("filters").get("title")));
94+
95+
FilteredPageRequest filteredPageRequest = new FilteredPageRequest(dataNode.get("page").get("number").asInt(), dataNode.get("page").get("size").asInt(), sortDirection, dataNode.get("direction").get("properties").asText(), filters);
96+
Page<Note> notes = noteRepo.findAll(filteredPageRequest);
97+
return new ApiResponse(SUCCESS, notes);
98+
}
99+
100+
private String[] arrayNodeToStringArray(ArrayNode arrayNode) {
101+
String[] array = new String[arrayNode.size()];
102+
Iterator<JsonNode> arrayIterator = arrayNode.elements();
103+
int i = 0;
104+
while (arrayIterator.hasNext()) {
105+
array[i++] = arrayIterator.next().asText();
106+
}
107+
return array;
108+
}
68109
}
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
package edu.tamu.app.model.repo;
22

3+
import org.springframework.data.domain.Page;
4+
import org.springframework.data.domain.Pageable;
5+
import org.springframework.data.jpa.domain.Specification;
36
import org.springframework.data.jpa.repository.JpaRepository;
7+
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
48

59
import edu.tamu.app.model.Note;
610
import edu.tamu.app.model.repo.custom.NoteRepoCustom;
711

8-
public interface NoteRepo extends JpaRepository<Note, Long>, NoteRepoCustom {
12+
public interface NoteRepo extends JpaRepository<Note, Long>, NoteRepoCustom, JpaSpecificationExecutor<Note> {
913

10-
// public void delete(Note note);
14+
public Page<Note> findAll(Specification<Note> specification, Pageable pageable);
15+
16+
public Page<Note> findAll(Pageable pageable);
1117

1218
}

src/main/java/edu/tamu/app/model/repo/custom/NoteRepoCustom.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,5 @@
66
public interface NoteRepoCustom {
77

88
public Note create(Note note, Credentials credentials);
9-
10-
// public void delete(Note note);
119

1210
}

src/main/java/edu/tamu/app/model/repo/specification/NoteSpecification.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import edu.tamu.app.model.Note;
1515

16-
public class NoteSpecification implements Specification<Note> {
16+
public class NoteSpecification<E> implements Specification<E> {
1717

1818
private Map<String, String[]> filters;
1919

@@ -22,14 +22,25 @@ public NoteSpecification(Map<String, String[]> filters) {
2222
}
2323

2424
@Override
25-
public Predicate toPredicate(Root<Note> root, CriteriaQuery<?> query, CriteriaBuilder cb){
25+
public Predicate toPredicate(Root<E> root, CriteriaQuery<?> query, CriteriaBuilder cb){
2626

27-
List<Predicate> timePredicate = new ArrayList<Predicate>();
28-
29-
30-
31-
return null;
32-
}
33-
34-
27+
List<Predicate> datePredicates = new ArrayList<Predicate>();
28+
// System.out.println("entry set is: " + filters);
29+
// for (Map.Entry<String, String[]> entry : filters.entrySet()) {
30+
// String key = entry.getKey();
31+
// String[] values = entry.getValue();
32+
//
33+
// switch (key) {
34+
// case "date":
35+
// for (String value : values) {
36+
// datePredicates.add(cb.like(cb.lower(root.get(key).as(String.class)), value.toLowerCase()));
37+
// break;
38+
// }
39+
// default:
40+
// break;
41+
// }
42+
// }
43+
44+
return cb.and(datePredicates.toArray(new Predicate[datePredicates.size()]));
45+
}
3546
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package edu.tamu.app.model.request;
2+
3+
import java.util.Map;
4+
5+
import org.springframework.data.domain.PageRequest;
6+
import org.springframework.data.domain.Sort;
7+
8+
public class FilteredPageRequest extends PageRequest {
9+
10+
private static final long serialVersionUID = -190530029013941566L;
11+
private Map<String, String[]> filters;
12+
13+
public FilteredPageRequest() {
14+
super(0, 2);
15+
}
16+
17+
public FilteredPageRequest(int page, int size, Sort.Direction direction, String properties, Map<String, String[]> filters) {
18+
super(page, size, direction, properties);
19+
setFilters(filters);
20+
}
21+
22+
public Map<String, String[]> getFilters() {
23+
return filters;
24+
}
25+
26+
public void setFilters(Map<String, String[]> filters) {
27+
this.filters = filters;
28+
}
29+
}

src/main/java/edu/tamu/app/model/request/NotePageable.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)