Ignore:
Timestamp:
10/07/21 20:37:55 (3 years ago)
Author:
NikolaCenevski <cenevskinikola@…>
Branches:
master
Children:
b8a8d06
Parents:
ee0e297
Message:

Added post grouping

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/it/finki/charitable/controller/DonationPostController.java

    ree0e297 r7888b17  
    44import it.finki.charitable.services.*;
    55import it.finki.charitable.util.FileUploadUtil;
    6 import org.springframework.data.domain.Page;
     6import org.springframework.data.domain.*;
    77import org.springframework.format.annotation.DateTimeFormat;
    88import org.springframework.security.core.context.SecurityContextHolder;
     
    1515import java.io.IOException;
    1616import java.time.LocalDate;
    17 import java.util.ArrayList;
    18 import java.util.Arrays;
    19 import java.util.List;
    20 import java.util.Objects;
     17import java.util.*;
    2118import java.util.stream.Collectors;
    2219
     
    126123                        @RequestParam int page,
    127124                        @RequestParam String sort,
    128                         @RequestParam(required = false,defaultValue = "") String order) {
    129         Page<DonationPost> postList = donationPostService.findPaginated(page,6, sort, order, true);
     125                        @RequestParam(required = false, defaultValue = "desc") String order,
     126                        @RequestParam(required = false, defaultValue = "all") String groupBy) {
     127
     128        Sort s = Sort.by(sort);
     129        s = order.equals("asc") ? s.ascending() : s.descending();
     130        Pageable pageable = PageRequest.of(page - 1, 6, s);
     131        Page<DonationPost> postList;
     132        postList = donationPostService.findPaginated(page, 6, sort, order, true);
     133
     134        if (!groupBy.equals("all")) {
     135            List<DonationPost> allPosts = donationPostService.findAllByApproved(true);
     136
     137            if (sort.equals("title")) {
     138                if (order.equals("asc")) {
     139                    allPosts.sort(Comparator.comparing(DonationPost::getTitle, (s1, s2) -> s1.compareToIgnoreCase(s2)));
     140                } else {
     141                    allPosts.sort(Comparator.comparing(DonationPost::getTitle, (s1, s2) -> s2.compareToIgnoreCase(s1)));
     142                }
     143            } else if (sort.equals("dateDue")) {
     144                if (order.equals("asc")) {
     145                    allPosts.sort(Comparator.comparing(DonationPost::getDateDue));
     146                } else {
     147                    allPosts.sort(Comparator.comparing(DonationPost::getDateDue).reversed());
     148                }
     149            } else if (sort.equals("fundsNeeded")) {
     150                if (order.equals("asc")) {
     151                    allPosts.sort(Comparator.comparing(DonationPost::getFundsNeeded));
     152                } else {
     153                    allPosts.sort(Comparator.comparing(DonationPost::getFundsNeeded).reversed());
     154                }
     155            }
     156
     157            if (groupBy.equals("completed")) {
     158                List<DonationPost> completed = allPosts.stream().filter(post -> {
     159                    double fundsCollected = post.getFundsCollected().stream().mapToDouble(FundsCollected::getFunds).sum();
     160                    return fundsCollected >= post.getFundsNeeded();
     161                }).collect(Collectors.toList());
     162
     163                int start = (int) pageable.getOffset();
     164                int end = Math.min((start + pageable.getPageSize()), completed.size());
     165                if (start <= end) {
     166                    postList = new PageImpl<>(completed.subList(start, end), pageable, completed.size());
     167                }
     168            } else if (groupBy.equals("expired")) {
     169                List<DonationPost> expired = allPosts.stream().filter(post -> {
     170                    double fundsCollected = post.getFundsCollected().stream().mapToDouble(FundsCollected::getFunds).sum();
     171                    return LocalDate.now().isAfter(post.getDateDue()) && fundsCollected < post.getFundsNeeded();
     172                }).collect(Collectors.toList());
     173
     174                int start = (int) pageable.getOffset();
     175                int end = Math.min((start + pageable.getPageSize()), expired.size());
     176                if (start <= end) {
     177                    postList = new PageImpl<>(expired.subList(start, end), pageable, expired.size());
     178                }
     179            }
     180        }
     181
    130182        if (postList.getTotalElements() == 0) {
    131183            model.addAttribute("noPosts", true);
     
    193245        DonationPost donationPost = donationPostService.getById(postid);
    194246        ReportPost reportPost = reportPostService.findByDonationPost(donationPost);
    195         if(reportPost == null) {
     247        if (reportPost == null) {
    196248            reportPost = new ReportPost();
    197249            reportPost.setDonationPost(donationPost);
Note: See TracChangeset for help on using the changeset viewer.