new query add

This commit is contained in:
2025-05-26 16:39:24 +04:00
parent b035a2b19a
commit 4dd6dd9177
6 changed files with 65 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ import ru.ip.example.domain.FilmRequestDto;
import ru.ip.example.domain.FilmResponseDto; import ru.ip.example.domain.FilmResponseDto;
import ru.ip.example.domain.entity.CountStatistic; import ru.ip.example.domain.entity.CountStatistic;
import ru.ip.example.service.FilmService; import ru.ip.example.service.FilmService;
import ru.ip.example.service.StatisticService;
import java.util.List; import java.util.List;
@@ -28,6 +29,8 @@ public class FilmController {
private final FilmService filmService; private final FilmService filmService;
private final StatisticService statisticService;
@GetMapping("/films/filter") @GetMapping("/films/filter")
@Operation(description = "Ищет фильм по названию") @Operation(description = "Ищет фильм по названию")
public FilmResponseDto getFilmByTitle(@RequestParam(name = "title") String title) { public FilmResponseDto getFilmByTitle(@RequestParam(name = "title") String title) {
@@ -37,7 +40,7 @@ public class FilmController {
@GetMapping("/films/count") @GetMapping("/films/count")
@Operation(description = "Статистика по кол-вам сущностей") @Operation(description = "Статистика по кол-вам сущностей")
public CountStatisticDto count() { public CountStatisticDto count() {
return filmService.countStatistic(); return statisticService.getCountStatistic();
} }
@GetMapping("/films") @GetMapping("/films")

View File

@@ -1,15 +1,21 @@
package ru.ip.example.domain; package ru.ip.example.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CountStatisticDto { public class CountStatisticDto {
private int filmCount; private long filmCount;
private int seazonCount; private long seazonCount;
private int seriesCount; private long seriesCount;
private int subscribeCount; private long subscribeCount;
} }

View File

@@ -13,7 +13,7 @@ public interface FilmRepository extends CrudRepository<FilmEntity, Integer> {
@Query(value = "SELECT * FROM film f WHERE f.title = :title", nativeQuery = true) @Query(value = "SELECT * FROM film f WHERE f.title = :title", nativeQuery = true)
Optional<FilmEntity> findFilmByTitle(@Param("title") String title); Optional<FilmEntity> findFilmByTitle(@Param("title") String title);
@Query(value = "SELECT (SELECT count(*) FROM FILM) as filmCount, (SELECT count(*) FROM SEAZON) as seazonCount, " + // @Query(value = "SELECT (SELECT count(*) FROM FILM) as filmCount, (SELECT count(*) FROM SEAZON) as seazonCount, " +
"(SELECT count(*) FROM SERIES) as seriesCount, (SELECT count(*) FROM SUBSCRIBE) as subscribeCount", nativeQuery = true) // "(SELECT count(*) FROM SERIES) as seriesCount, (SELECT count(*) FROM SUBSCRIBE) as subscribeCount", nativeQuery = true)
CountStatistic countTableStatisticCount(); // CountStatistic countTableStatisticCount();
} }

View File

@@ -0,0 +1,8 @@
package ru.ip.example.service;
import ru.ip.example.domain.CountStatisticDto;
public interface StatisticService {
CountStatisticDto getCountStatistic();
}

View File

@@ -30,8 +30,9 @@ public class FilmServiceImpl implements FilmService {
@Override @Override
public CountStatisticDto countStatistic() { public CountStatisticDto countStatistic() {
CountStatistic countStatistic = filmRepository.countTableStatisticCount(); // CountStatistic countStatistic = filmRepository.countTableStatisticCount();
return filmMapper.toCountDto(countStatistic); // return filmMapper.toCountDto(countStatistic);
return null;
} }
@Transactional(readOnly = true) @Transactional(readOnly = true)

View File

@@ -0,0 +1,37 @@
package ru.ip.example.service.impl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ru.ip.example.domain.CountStatisticDto;
import ru.ip.example.repository.FilmRepository;
import ru.ip.example.repository.SeazonRepository;
import ru.ip.example.repository.SeriesRepository;
import ru.ip.example.repository.SubscribeRepository;
import ru.ip.example.service.StatisticService;
@Service
@RequiredArgsConstructor
public class StatisticServiceImpl implements StatisticService {
private final FilmRepository filmRepository;
private final SeazonRepository seazonRepository;
private final SeriesRepository seriesRepository;
private final SubscribeRepository subscribeRepository;
@Override
public CountStatisticDto getCountStatistic() {
long filmCount = filmRepository.count();
long seazonCount = seazonRepository.count();
long seriesCount = seriesRepository.count();
long subscribeCount = subscribeRepository.count();
return CountStatisticDto.builder()
.filmCount(filmCount)
.seazonCount(seazonCount)
.seriesCount(seriesCount)
.subscribeCount(subscribeCount)
.build();
}
}