diff options
author | Adrián Oliva <adrian.oliva@cimat.mx> | 2023-05-25 21:35:01 -0600 |
---|---|---|
committer | Adrián Oliva <adrian.oliva@cimat.mx> | 2023-05-25 21:35:01 -0600 |
commit | ad37e97ef75cbe8f48a98d71874d4632dc157d59 (patch) | |
tree | 7f0e648bbf684da3e09057e8bf1829a3e1ef7d76 /src/main/java/com/encora | |
parent | b51e47b7abfb8340ab4ee67a2fc95cb07fcbfbd1 (diff) | |
download | ToDo-App-BE-ad37e97ef75cbe8f48a98d71874d4632dc157d59.tar.gz ToDo-App-BE-ad37e97ef75cbe8f48a98d71874d4632dc157d59.zip |
New GET for sorted to dos.
GET request with path "/todos/{field}/{order}", where {field} can be
"Id", "Priority" or "DueDate" for sorting the corresponding fields, and
{order} can be "ASC" or "DESC" for ascending or descending order,
respectively.
Diffstat (limited to '')
-rw-r--r-- | src/main/java/com/encora/Main.java | 21 | ||||
-rw-r--r-- | src/main/java/com/encora/ToDosRepository.java | 59 |
2 files changed, 71 insertions, 9 deletions
diff --git a/src/main/java/com/encora/Main.java b/src/main/java/com/encora/Main.java index 63c6a48..a233550 100644 --- a/src/main/java/com/encora/Main.java +++ b/src/main/java/com/encora/Main.java @@ -2,11 +2,13 @@ package com.encora; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; +import java.util.Objects; @SpringBootApplication @RestController @@ -100,4 +102,23 @@ public class Main { selectedToDo.setDoneDate(null); toDosRepository.save(selectedToDo); } + + + // Getting sorted to dos. + enum SortingsFields { + Id, Priority, DueDate + } + enum SortingOrders { + ASC, DESC + } + @GetMapping("/todos/{field}/{order}") + @ResponseStatus(value=HttpStatus.OK) + public List<ToDos> getFilteredToDos(@PathVariable("field") SortingsFields field, @PathVariable("order") SortingOrders order) { + Sort sortingMethod = Sort.by(String.valueOf(field)); + if (Objects.equals(String.valueOf(order), "DESC")) { + sortingMethod = sortingMethod.descending(); + } + + return toDosRepository.findAll(sortingMethod); + } } diff --git a/src/main/java/com/encora/ToDosRepository.java b/src/main/java/com/encora/ToDosRepository.java index f19d1ce..65c1b39 100644 --- a/src/main/java/com/encora/ToDosRepository.java +++ b/src/main/java/com/encora/ToDosRepository.java @@ -11,10 +11,7 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.FluentQuery; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import java.util.function.Function; public class ToDosRepository implements JpaRepository<ToDos, Integer> { @@ -39,6 +36,21 @@ public class ToDosRepository implements JpaRepository<ToDos, Integer> { return this.todos; } + // Return all to dos and sorted. + @Override + public List<ToDos> findAll(Sort sort) { + List<ToDos> sortedList = new ArrayList<>(this.todos); + + try { + Comparator<ToDos> comparator = this.getToDoComparator(sort); + Collections.sort(sortedList, comparator); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return sortedList; + } + // Save new element. @Override public <S extends ToDos> S save(S entity) { @@ -81,6 +93,40 @@ public class ToDosRepository implements JpaRepository<ToDos, Integer> { return null; } + private Comparator<ToDos> getToDoComparator(Sort sort) throws Exception { + // Personal function. Creates a `Comparator` based on the `sort` + // parameter. This is for us to successfully sort our List without the + // need of a database. + String sortString = sort.toString(); // <- '{field}: {order}' + String[] sortCriteria = sortString.split(": "); + + String field = sortCriteria[0]; + String order = sortCriteria[1]; + + Comparator<ToDos> comparator = null; + switch (field) { + case "Id": + comparator = Comparator.comparing(ToDos::getId); + break; + + case "Priority": + comparator = Comparator.comparing(ToDos::getPriority); + break; + + case "DueDate": + comparator = Comparator.comparing(ToDos::getDueDate); + break; + + default: + throw new Exception("Field sorting not implemented."); + } + + if (order.equalsIgnoreCase("desc")) { + comparator = comparator.reversed(); + } + return comparator; + } + /* * N O T Y E T D E F I N E D . */ @@ -210,11 +256,6 @@ public class ToDosRepository implements JpaRepository<ToDos, Integer> { } @Override - public List<ToDos> findAll(Sort sort) { - return null; - } - - @Override public Page<ToDos> findAll(Pageable pageable) { return null; } |