From abc9620f65f10a056edccad90d8e077ed799ed41 Mon Sep 17 00:00:00 2001 From: Hu Date: Thu, 14 Dec 2023 13:46:23 -0500 Subject: [PATCH] add default sorting order --- .../AbstractGsrsEntityController.java | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/gsrs-spring-boot-autoconfigure/src/main/java/gsrs/controller/AbstractGsrsEntityController.java b/gsrs-spring-boot-autoconfigure/src/main/java/gsrs/controller/AbstractGsrsEntityController.java index b2bdbe99..d2b3b4f3 100644 --- a/gsrs-spring-boot-autoconfigure/src/main/java/gsrs/controller/AbstractGsrsEntityController.java +++ b/gsrs-spring-boot-autoconfigure/src/main/java/gsrs/controller/AbstractGsrsEntityController.java @@ -3,6 +3,8 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; import java.net.URLDecoder; import java.security.Principal; import java.util.ArrayList; @@ -15,8 +17,12 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.persistence.EntityManager; +import javax.persistence.Id; +import javax.persistence.metamodel.Metamodel; import javax.servlet.http.HttpServletRequest; +import org.hibernate.metadata.ClassMetadata; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Sort; @@ -75,8 +81,6 @@ public abstract class AbstractGsrsEntityController page(@RequestParam(value = "top", defaultValue = " @RequestParam(value = "skip", defaultValue = "0") long skip, @RequestParam(value = "order", required = false) String order, @RequestParam Map queryParameters){ - - + Page page = getEntityService().page(new OffsetBasedPageRequest(skip, top,parseSortFromOrderParam(order))); String view=queryParameters.get("view"); @@ -419,10 +422,27 @@ public ResponseEntity page(@RequestParam(value = "top", defaultValue = " return new ResponseEntity<>(new PagedResult(page, queryParameters), HttpStatus.OK); } - private Sort parseSortFromOrderParam(String order){ - //match Gsrs Play API - if(order ==null || order.trim().isEmpty()){ - return Sort.sort(getEntityService().getEntityClass()); + private Sort parseSortFromOrderParam(String order){ + if(order == null || order.trim().isEmpty()){ + Field[] fields = getEntityService().getEntityClass().getFields(); + + boolean found = false; + String name = ""; + for(Field field: fields) { + if(found) + break; + name = field.getName(); + Annotation[] annotations = field.getAnnotations(); + if(annotations.length > 0) { + for(Annotation annotation : annotations) { + if(annotation.annotationType().equals(Id.class)) { + found = true; + break; + } + } + } + } + return Sort.by(Sort.Direction.ASC, name); } char firstChar = order.charAt(0); if('$'==firstChar){