Compare commits
2 Commits
eeea0d4d3f
...
c44b373be0
Author | SHA1 | Date | |
---|---|---|---|
|
c44b373be0 | ||
|
1a35063891 |
@ -1,9 +1,6 @@
|
||||
package com.android.mobileappserver.Report;
|
||||
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("api/report")
|
||||
@ -14,8 +11,9 @@ public class ReportController {
|
||||
this.reportService = reportService;
|
||||
}
|
||||
|
||||
@PostMapping("/createReport")
|
||||
public ReportDTO createReport(@RequestBody ReportCreateDTO reportCreateDTO){
|
||||
return reportService.createReport(reportCreateDTO);
|
||||
@GetMapping("/createReport/{dateFrom}/{dateTo}")
|
||||
public ReportDTO createReport(@PathVariable("dateFrom") Long dateFrom,
|
||||
@PathVariable("dateTo") Long dateTo){
|
||||
return reportService.createReport(dateFrom, dateTo);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
package com.android.mobileappserver.Report;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ReportCreateDTO {
|
||||
private Long dateFrom;
|
||||
private Long dateTo;
|
||||
}
|
@ -1,9 +1,13 @@
|
||||
package com.android.mobileappserver.Report;
|
||||
|
||||
import com.android.mobileappserver.Story.StoryDTO;
|
||||
import com.android.mobileappserver.User.UserDTO;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@ -11,14 +15,16 @@ public class ReportDTO {
|
||||
private Long dateFrom;
|
||||
private Long dateTo;
|
||||
private int postCount;
|
||||
private String mostPostAuthor;
|
||||
private UserDTO mostPostAuthor;
|
||||
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.dateTo = dateTo;
|
||||
this.postCount = postCount;
|
||||
this.mostPostAuthor = mostPostAuthor;
|
||||
this.mostPostCount = mostPostCount;
|
||||
this.listPostAuthor = listPostAuthor;
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,12 @@
|
||||
package com.android.mobileappserver.Report;
|
||||
|
||||
import com.android.mobileappserver.Story.StoryDTO;
|
||||
import com.android.mobileappserver.Story.StoryModel;
|
||||
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 org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collections;
|
||||
@ -10,6 +14,7 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class ReportService {
|
||||
private final UserService userService;
|
||||
private final StoryService storyService;
|
||||
@ -20,22 +25,25 @@ public class ReportService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public ReportDTO createReport(ReportCreateDTO reportCreateDTO){
|
||||
List<StoryModel> stories = storyService.getStoriesByDate(reportCreateDTO.getDateFrom(), reportCreateDTO.getDateTo());
|
||||
public ReportDTO createReport(Long dateFrom, Long dateTo){
|
||||
List<StoryModel> stories = storyService.getStoriesByDate(dateFrom, dateTo);
|
||||
int postCount = stories.size();
|
||||
Map<String, Integer> authorWithCount = new HashMap<>();
|
||||
Map<Long, Integer> authorWithCount = new HashMap<>();
|
||||
for (var story: stories) {
|
||||
String authorName = story.getUser().getLogin();
|
||||
if (authorWithCount.containsKey(authorName)) {
|
||||
Long authorId = story.getUser().getId();
|
||||
if (authorWithCount.containsKey(authorId)) {
|
||||
// Если автор уже есть, увеличиваем количество историй
|
||||
authorWithCount.put(authorName, authorWithCount.get(authorName) + 1);
|
||||
authorWithCount.put(authorId, authorWithCount.get(authorId) + 1);
|
||||
} else {
|
||||
// Если автора еще нет в мапе, добавляем его с количеством 1
|
||||
authorWithCount.put(authorName, 1);
|
||||
authorWithCount.put(authorId, 1);
|
||||
}
|
||||
}
|
||||
Map.Entry<String, Integer> maxEntry = Collections.max(authorWithCount.entrySet(), Map.Entry.comparingByValue());
|
||||
return new ReportDTO(reportCreateDTO.getDateFrom(), reportCreateDTO.getDateTo(),
|
||||
postCount, maxEntry.getKey(), maxEntry.getValue());
|
||||
Map.Entry<Long, Integer> maxEntry = Collections.max(authorWithCount.entrySet(), Map.Entry.comparingByValue());
|
||||
UserModel mostPostAuthor = userService.getUserById(maxEntry.getKey());
|
||||
return new ReportDTO(dateFrom, dateTo, postCount, new UserDTO(mostPostAuthor), maxEntry.getValue(),
|
||||
mostPostAuthor.getStories().stream().map(
|
||||
StoryDTO::new
|
||||
).toList());
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,6 @@ import java.util.List;
|
||||
public interface StoryRepository extends JpaRepository<StoryModel, Long> {
|
||||
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);
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
package com.android.mobileappserver.User;
|
||||
|
||||
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.stereotype.Service;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user