From 39ce7386d56e4bf96885db57f1023e82f4428a77 Mon Sep 17 00:00:00 2001 From: Martin Kuba Date: Tue, 2 Apr 2024 15:25:59 +0200 Subject: [PATCH] updated for SpringDoc 2.5.0 --- .../chat/generated/server/api/ChatImpl.java | 18 ++++++----- .../chat/server/rest/ChatRestController.java | 5 +-- .../chat/server/service/ChatServiceImpl.java | 7 +++-- openapi.yaml | 31 ++++++++++++------- pom.xml | 2 +- 5 files changed, 40 insertions(+), 23 deletions(-) diff --git a/chat-server-generated/src/main/java/cz/muni/chat/generated/server/api/ChatImpl.java b/chat-server-generated/src/main/java/cz/muni/chat/generated/server/api/ChatImpl.java index 673e440..ea1f293 100644 --- a/chat-server-generated/src/main/java/cz/muni/chat/generated/server/api/ChatImpl.java +++ b/chat-server-generated/src/main/java/cz/muni/chat/generated/server/api/ChatImpl.java @@ -12,6 +12,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; @@ -52,22 +53,25 @@ public ResponseEntity createMessage(NewChatMessageRequest r, String .author(author) .textColor(textColor != null ? textColor.getValue() : null) .backgroundColor(backgroundColor); - messages.add(0, chatMessage); + messages.addFirst(chatMessage); return new ResponseEntity<>(chatMessage, HttpStatus.CREATED); } @Override public ResponseEntity paged(Integer page, Integer size, List sort) { - log.debug("paged(page={}, size={}, sort={})", page, size, sort); - PageRequest p = PageRequest.of(page, size); + log.debug("paged(page={}, size={})", page, size); + PageRequest p = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "timestamp")); List chatMessages = messages.stream().skip(p.getOffset()).limit(p.getPageSize()).toList(); Page m = new PageImpl<>(chatMessages, p, messages.size()); // copy to generated models :-( - SortObject s = new SortObject() - .sorted(p.getSort().isSorted()) - .unsorted(p.getSort().isUnsorted()) - .empty(p.getSort().isEmpty()); + List s = p.getSort().get().map(order -> new SortObject() + .property(order.getProperty()) + .ascending(order.isAscending()) + .direction(order.getDirection().name()) + .ignoreCase(order.isIgnoreCase()) + .nullHandling(order.getNullHandling().name()) + ).toList(); PageableObject pageableObject = new PageableObject() .paged(p.isPaged()) .unpaged(p.isUnpaged()) diff --git a/chat-server/src/main/java/cz/muni/chat/server/rest/ChatRestController.java b/chat-server/src/main/java/cz/muni/chat/server/rest/ChatRestController.java index e3c7c14..2bd11b3 100644 --- a/chat-server/src/main/java/cz/muni/chat/server/rest/ChatRestController.java +++ b/chat-server/src/main/java/cz/muni/chat/server/rest/ChatRestController.java @@ -187,9 +187,10 @@ public ChatMessage createMessage(@Valid @RequestBody NewChatMessageRequest r, @Operation( summary = "Paged messages", description = """ - Returns a page of chat messages. Messages are ordered from the newest to the oldest. + Returns a page of chat messages. The parameter `page` specifies zero-based index of the requested page, - and the parameter `size` specifies the size of the page. + the parameter `size` specifies the size of the page. + The parameter `sort` is ignored, sorting is always from the newest to the oldest. """) @GetMapping(path = "/paged") @CrossOrigin(origins = "*") diff --git a/chat-server/src/main/java/cz/muni/chat/server/service/ChatServiceImpl.java b/chat-server/src/main/java/cz/muni/chat/server/service/ChatServiceImpl.java index 9251aff..7a702d5 100644 --- a/chat-server/src/main/java/cz/muni/chat/server/service/ChatServiceImpl.java +++ b/chat-server/src/main/java/cz/muni/chat/server/service/ChatServiceImpl.java @@ -5,7 +5,9 @@ import org.slf4j.LoggerFactory; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import java.time.ZonedDateTime; @@ -39,7 +41,7 @@ public StoredMessage createNewMessage(String text, String author, String textCol UUID uuid = UUID.randomUUID(); StoredMessage c = new StoredMessage(uuid.toString(), ZonedDateTime.now(), text, author, textColor, backgroundColor, random.nextLong()); - messages.add(0, c); + messages.addFirst(c); return c; } @@ -62,7 +64,8 @@ public Page getPageOfMessages(Pageable pageable) { .skip(pageable.getOffset()) .limit(pageable.getPageSize()) .toList(); - Page page = new PageImpl<>(msgs, pageable, messages.size()); + Page page = new PageImpl<>(msgs, PageRequest.of(pageable.getPageNumber(), pageable.getPageSize(), + Sort.Direction.DESC, "timestamp"), messages.size()); log.debug("pageable = {}", pageable); log.debug("page: {}", page); return page; diff --git a/openapi.yaml b/openapi.yaml index f7628b0..7467488 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -100,9 +100,10 @@ paths: - Chat summary: Paged messages description: | - Returns a page of chat messages. Messages are ordered from the newest to the oldest. + Returns a page of chat messages. The parameter `page` specifies zero-based index of the requested page, - and the parameter `size` specifies the size of the page. + the parameter `size` specifies the size of the page. + The parameter `sort` is ignored, sorting is always from the newest to the oldest. operationId: paged parameters: - name: page @@ -257,12 +258,12 @@ components: PageChatMessage: type: object properties: - totalElements: - type: integer - format: int64 totalPages: type: integer format: int32 + totalElements: + type: integer + format: int64 pageable: $ref: '#/components/schemas/PageableObject' first: @@ -280,7 +281,9 @@ components: type: integer format: int32 sort: - $ref: '#/components/schemas/SortObject' + type: array + items: + $ref: '#/components/schemas/SortObject' numberOfElements: type: integer format: int32 @@ -299,7 +302,9 @@ components: type: integer format: int64 sort: - $ref: '#/components/schemas/SortObject' + type: array + items: + $ref: '#/components/schemas/SortObject' paged: type: boolean unpaged: @@ -307,11 +312,15 @@ components: SortObject: type: object properties: - sorted: - type: boolean - empty: + direction: + type: string + nullHandling: + type: string + ascending: type: boolean - unsorted: + property: + type: string + ignoreCase: type: boolean responses: SingleMessageResponse: diff --git a/pom.xml b/pom.xml index c5e0c4f..b381766 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ org.springdoc springdoc-openapi-starter-webmvc-ui - 2.3.0 + 2.5.0 org.apache.commons