From b8096f11b23552e26e2cd4d65f982c3f88928f5a Mon Sep 17 00:00:00 2001
From: Dominika Zemanovicova <xzemanov@fi.muni.cz>
Date: Sun, 16 Apr 2023 06:30:19 +0200
Subject: [PATCH] Change Result to Page for paging

---
 .../java/org/fuseri/model/dto/common/Result.java | 16 ----------------
 .../common/DomainMapper.java                     | 14 ++++----------
 .../user/UserController.java                     |  8 ++++----
 .../modulelanguageschool/user/UserFacade.java    |  9 ++++++---
 4 files changed, 14 insertions(+), 33 deletions(-)
 delete mode 100644 application/model/src/main/java/org/fuseri/model/dto/common/Result.java

diff --git a/application/model/src/main/java/org/fuseri/model/dto/common/Result.java b/application/model/src/main/java/org/fuseri/model/dto/common/Result.java
deleted file mode 100644
index c75e421e..00000000
--- a/application/model/src/main/java/org/fuseri/model/dto/common/Result.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.fuseri.model.dto.common;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-@Getter
-@Setter
-public class Result<T extends DomainObjectDto> {
-
-    private long total;
-    private int page;
-    private int pageSize;
-    private List<T> items;
-}
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainMapper.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainMapper.java
index dfc4a7f1..e80dbdb1 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainMapper.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/common/DomainMapper.java
@@ -1,9 +1,7 @@
 package org.fuseri.modulelanguageschool.common;
 import org.fuseri.model.dto.common.DomainObjectDto;
-import org.fuseri.model.dto.common.Result;
-import org.mapstruct.Mapping;
-import org.mapstruct.Mappings;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
 
 import java.util.List;
 
@@ -15,11 +13,7 @@ public interface DomainMapper<T extends DomainObject, S extends DomainObjectDto>
 
     List<S> toDtoList(List<T> entities);
 
-    @Mappings({
-            @Mapping(target = "total", expression = "java(source.getTotalElements())"),
-            @Mapping(target = "page", expression = "java(source.getNumber())"),
-            @Mapping(target = "pageSize", expression = "java(source.getSize())"),
-            @Mapping(target = "items", expression = "java(toDtoList(source.getContent()))")
-    })
-    Result<S> toResult(Page<T> source);
+    default Page<S> toDtoPage(Page<T> entities) {
+        return new PageImpl<>(toDtoList(entities.getContent()), entities.getPageable(), entities.getTotalPages());
+    }
 }
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
index 14fa089d..eb7487a6 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserController.java
@@ -9,13 +9,13 @@ import jakarta.persistence.EntityNotFoundException;
 import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
-import org.fuseri.model.dto.common.Result;
 import org.fuseri.model.dto.course.CourseDto;
 import org.fuseri.model.dto.user.UserAddLanguageDto;
 import org.fuseri.model.dto.user.UserCreateDto;
 import org.fuseri.model.dto.user.UserDto;
 import org.fuseri.model.dto.user.UserLoginDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
@@ -91,8 +91,9 @@ public class UserController {
             @ApiResponse(responseCode = "400", description = "Invalid page number supplied"),
     })
     @GetMapping
-    public ResponseEntity<Result<UserDto>> findAll(@PositiveOrZero @RequestParam int page) {
-        return ResponseEntity.ok(facade.findAll(page));
+    public ResponseEntity<Page<UserDto>> findAll(@PositiveOrZero @NotNull @RequestParam int page) {
+        var a = facade.findAll(page);
+        return ResponseEntity.ok(a);
     }
 
     //TODO: add authentication M3?
@@ -107,7 +108,6 @@ public class UserController {
         return ResponseEntity.ok("user has logged out");
     }
 
-
     @Operation(summary = "get finished courses", description = "retrieves finished courses of user with given Id")
     @ApiResponses(value = {
             @ApiResponse(responseCode = "200", description = "Successfully retrieved finished courses"),
diff --git a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
index 43021ba0..0aa246f2 100644
--- a/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
+++ b/application/module-language-school/src/main/java/org/fuseri/modulelanguageschool/user/UserFacade.java
@@ -1,14 +1,16 @@
 package org.fuseri.modulelanguageschool.user;
 
-import org.fuseri.model.dto.common.Result;
 import org.fuseri.model.dto.course.CourseDto;
 import org.fuseri.model.dto.user.UserAddLanguageDto;
 import org.fuseri.model.dto.user.UserCreateDto;
 import org.fuseri.model.dto.user.UserDto;
+import org.fuseri.modulelanguageschool.common.DomainService;
 import org.fuseri.modulelanguageschool.course.CourseMapper;
 import org.fuseri.modulelanguageschool.course.Language;
 import org.fuseri.modulelanguageschool.course.ProficiencyLevel;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -51,8 +53,9 @@ public class UserFacade {
 
     }
 
-    public Result<UserDto> findAll(int page) {
-        return mapper.toResult(service.findAll(page));
+    public Page<UserDto> findAll(int page) {
+        PageRequest pageRequest = PageRequest.of(page, DomainService.DEFAULT_PAGE_SIZE);
+        return mapper.toDtoPage(service.findAll(pageRequest));
     }
 
     public UserDto addLanguage(Long id, UserAddLanguageDto body) {
-- 
GitLab