Compare commits

...

2 Commits

Author SHA1 Message Date
maxnes3
c44b373be0 Улучшил Report 2023-12-28 13:35:56 +04:00
maxnes3
1a35063891 Back работает правильно 2023-12-27 16:40:10 +04:00
6 changed files with 32 additions and 35 deletions

View File

@ -1,9 +1,6 @@
package com.android.mobileappserver.Report; package com.android.mobileappserver.Report;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("api/report") @RequestMapping("api/report")
@ -14,8 +11,9 @@ public class ReportController {
this.reportService = reportService; this.reportService = reportService;
} }
@PostMapping("/createReport") @GetMapping("/createReport/{dateFrom}/{dateTo}")
public ReportDTO createReport(@RequestBody ReportCreateDTO reportCreateDTO){ public ReportDTO createReport(@PathVariable("dateFrom") Long dateFrom,
return reportService.createReport(reportCreateDTO); @PathVariable("dateTo") Long dateTo){
return reportService.createReport(dateFrom, dateTo);
} }
} }

View File

@ -1,12 +0,0 @@
package com.android.mobileappserver.Report;
import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ReportCreateDTO {
private Long dateFrom;
private Long dateTo;
}

View File

@ -1,9 +1,13 @@
package com.android.mobileappserver.Report; package com.android.mobileappserver.Report;
import com.android.mobileappserver.Story.StoryDTO;
import com.android.mobileappserver.User.UserDTO;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import java.util.List;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@ -11,14 +15,16 @@ public class ReportDTO {
private Long dateFrom; private Long dateFrom;
private Long dateTo; private Long dateTo;
private int postCount; private int postCount;
private String mostPostAuthor; private UserDTO mostPostAuthor;
private int mostPostCount; private int mostPostCount;
private List<StoryDTO> listPostAuthor;
public ReportDTO(Long dateFrom, Long dateTo, int postCount, String mostPostAuthor, int mostPostCount){ public ReportDTO(Long dateFrom, Long dateTo, int postCount, UserDTO mostPostAuthor, int mostPostCount, List<StoryDTO> listPostAuthor){
this.dateFrom = dateFrom; this.dateFrom = dateFrom;
this.dateTo = dateTo; this.dateTo = dateTo;
this.postCount = postCount; this.postCount = postCount;
this.mostPostAuthor = mostPostAuthor; this.mostPostAuthor = mostPostAuthor;
this.mostPostCount = mostPostCount; this.mostPostCount = mostPostCount;
this.listPostAuthor = listPostAuthor;
} }
} }

View File

@ -1,8 +1,12 @@
package com.android.mobileappserver.Report; package com.android.mobileappserver.Report;
import com.android.mobileappserver.Story.StoryDTO;
import com.android.mobileappserver.Story.StoryModel; import com.android.mobileappserver.Story.StoryModel;
import com.android.mobileappserver.Story.StoryService; import com.android.mobileappserver.Story.StoryService;
import com.android.mobileappserver.User.UserDTO;
import com.android.mobileappserver.User.UserModel;
import com.android.mobileappserver.User.UserService; import com.android.mobileappserver.User.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Collections; import java.util.Collections;
@ -10,6 +14,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Service
public class ReportService { public class ReportService {
private final UserService userService; private final UserService userService;
private final StoryService storyService; private final StoryService storyService;
@ -20,22 +25,25 @@ public class ReportService {
} }
@Transactional @Transactional
public ReportDTO createReport(ReportCreateDTO reportCreateDTO){ public ReportDTO createReport(Long dateFrom, Long dateTo){
List<StoryModel> stories = storyService.getStoriesByDate(reportCreateDTO.getDateFrom(), reportCreateDTO.getDateTo()); List<StoryModel> stories = storyService.getStoriesByDate(dateFrom, dateTo);
int postCount = stories.size(); int postCount = stories.size();
Map<String, Integer> authorWithCount = new HashMap<>(); Map<Long, Integer> authorWithCount = new HashMap<>();
for (var story: stories) { for (var story: stories) {
String authorName = story.getUser().getLogin(); Long authorId = story.getUser().getId();
if (authorWithCount.containsKey(authorName)) { if (authorWithCount.containsKey(authorId)) {
// Если автор уже есть, увеличиваем количество историй // Если автор уже есть, увеличиваем количество историй
authorWithCount.put(authorName, authorWithCount.get(authorName) + 1); authorWithCount.put(authorId, authorWithCount.get(authorId) + 1);
} else { } else {
// Если автора еще нет в мапе, добавляем его с количеством 1 // Если автора еще нет в мапе, добавляем его с количеством 1
authorWithCount.put(authorName, 1); authorWithCount.put(authorId, 1);
} }
} }
Map.Entry<String, Integer> maxEntry = Collections.max(authorWithCount.entrySet(), Map.Entry.comparingByValue()); Map.Entry<Long, Integer> maxEntry = Collections.max(authorWithCount.entrySet(), Map.Entry.comparingByValue());
return new ReportDTO(reportCreateDTO.getDateFrom(), reportCreateDTO.getDateTo(), UserModel mostPostAuthor = userService.getUserById(maxEntry.getKey());
postCount, maxEntry.getKey(), maxEntry.getValue()); return new ReportDTO(dateFrom, dateTo, postCount, new UserDTO(mostPostAuthor), maxEntry.getValue(),
mostPostAuthor.getStories().stream().map(
StoryDTO::new
).toList());
} }
} }

View File

@ -11,6 +11,6 @@ import java.util.List;
public interface StoryRepository extends JpaRepository<StoryModel, Long> { public interface StoryRepository extends JpaRepository<StoryModel, Long> {
Page<StoryModel> findAllByUserId(Long userIdб, Pageable pageable); Page<StoryModel> findAllByUserId(Long userIdб, Pageable pageable);
@Query("SELECT s FROM _story s WHERE s.dateFrom = :dateFrom AND s.dateTo = :dateTo") @Query("SELECT s FROM StoryModel s WHERE s.postdate >= :dateFrom AND s.postdate <= :dateTo")
List<StoryModel> findStoriesBetweenDates(@Param("dateFrom") Long dateFrom, @Param("dateTo") Long dateTo); List<StoryModel> findStoriesBetweenDates(@Param("dateFrom") Long dateFrom, @Param("dateTo") Long dateTo);
} }

View File

@ -1,9 +1,6 @@
package com.android.mobileappserver.User; package com.android.mobileappserver.User;
import com.android.mobileappserver.Story.StoryModel; import com.android.mobileappserver.Story.StoryModel;
import com.android.mobileappserver.Story.StoryNotFoundException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;