add query count
This commit is contained in:
@@ -13,8 +13,10 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import ru.ip.example.domain.AddSeazonDto;
|
import ru.ip.example.domain.AddSeazonDto;
|
||||||
|
import ru.ip.example.domain.CountStatisticDto;
|
||||||
import ru.ip.example.domain.FilmRequestDto;
|
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.service.FilmService;
|
import ru.ip.example.service.FilmService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -32,6 +34,12 @@ public class FilmController {
|
|||||||
return filmService.findFilmByTitle(title);
|
return filmService.findFilmByTitle(title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/films/count")
|
||||||
|
@Operation(description = "Статистика по кол-вам сущностей")
|
||||||
|
public CountStatisticDto count() {
|
||||||
|
return filmService.countStatistic();
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/films")
|
@GetMapping("/films")
|
||||||
@Operation(description = "Возвращает список всех фильмов")
|
@Operation(description = "Возвращает список всех фильмов")
|
||||||
public List<FilmResponseDto> getAll() {
|
public List<FilmResponseDto> getAll() {
|
||||||
|
|||||||
15
src/main/java/ru/ip/example/domain/CountStatisticDto.java
Normal file
15
src/main/java/ru/ip/example/domain/CountStatisticDto.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package ru.ip.example.domain;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class CountStatisticDto {
|
||||||
|
|
||||||
|
private int filmCount;
|
||||||
|
|
||||||
|
private int seazonCount;
|
||||||
|
|
||||||
|
private int seriesCount;
|
||||||
|
|
||||||
|
private int subscribeCount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package ru.ip.example.domain.entity;
|
||||||
|
|
||||||
|
public interface CountStatistic {
|
||||||
|
|
||||||
|
int getFilmCount();
|
||||||
|
|
||||||
|
int getSeazonCount();
|
||||||
|
|
||||||
|
int getSeriesCount();
|
||||||
|
|
||||||
|
int getSubscribeCount();
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,9 +2,11 @@ package ru.ip.example.mapper;
|
|||||||
|
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
|
import ru.ip.example.domain.CountStatisticDto;
|
||||||
import ru.ip.example.domain.FilmRequestDto;
|
import ru.ip.example.domain.FilmRequestDto;
|
||||||
import ru.ip.example.domain.FilmResponseDto;
|
import ru.ip.example.domain.FilmResponseDto;
|
||||||
import ru.ip.example.domain.SeazonResponseDto;
|
import ru.ip.example.domain.SeazonResponseDto;
|
||||||
|
import ru.ip.example.domain.entity.CountStatistic;
|
||||||
import ru.ip.example.domain.entity.FilmEntity;
|
import ru.ip.example.domain.entity.FilmEntity;
|
||||||
import ru.ip.example.domain.entity.SeazonEntity;
|
import ru.ip.example.domain.entity.SeazonEntity;
|
||||||
|
|
||||||
@@ -20,4 +22,6 @@ public interface FilmMapper {
|
|||||||
List<SeazonResponseDto> toSeazonsList(List<SeazonEntity> seazonEntities);
|
List<SeazonResponseDto> toSeazonsList(List<SeazonEntity> seazonEntities);
|
||||||
|
|
||||||
FilmEntity toEntity(FilmRequestDto dto);
|
FilmEntity toEntity(FilmRequestDto dto);
|
||||||
|
|
||||||
|
CountStatisticDto toCountDto(CountStatistic stat);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package ru.ip.example.repository;
|
|||||||
import org.springframework.data.jpa.repository.Query;
|
import org.springframework.data.jpa.repository.Query;
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
import org.springframework.data.repository.query.Param;
|
import org.springframework.data.repository.query.Param;
|
||||||
|
import ru.ip.example.domain.entity.CountStatistic;
|
||||||
import ru.ip.example.domain.entity.FilmEntity;
|
import ru.ip.example.domain.entity.FilmEntity;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -11,4 +12,8 @@ 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, " +
|
||||||
|
"(SELECT count(*) FROM SERIES) as seriesCount, (SELECT count(*) FROM SUBSCRIBE) as subscribeCount", nativeQuery = true)
|
||||||
|
CountStatistic countTableStatisticCount();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
package ru.ip.example.service;
|
package ru.ip.example.service;
|
||||||
|
|
||||||
import ru.ip.example.domain.AddSeazonDto;
|
import ru.ip.example.domain.AddSeazonDto;
|
||||||
|
import ru.ip.example.domain.CountStatisticDto;
|
||||||
import ru.ip.example.domain.FilmRequestDto;
|
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 java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface FilmService {
|
public interface FilmService {
|
||||||
|
|
||||||
|
CountStatisticDto countStatistic();
|
||||||
|
|
||||||
FilmResponseDto findFilmByTitle(String title);
|
FilmResponseDto findFilmByTitle(String title);
|
||||||
|
|
||||||
FilmResponseDto saveFilm(FilmRequestDto dto);
|
FilmResponseDto saveFilm(FilmRequestDto dto);
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import ru.ip.example.domain.AddSeazonDto;
|
import ru.ip.example.domain.AddSeazonDto;
|
||||||
|
import ru.ip.example.domain.CountStatisticDto;
|
||||||
import ru.ip.example.domain.FilmRequestDto;
|
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.FilmEntity;
|
import ru.ip.example.domain.entity.FilmEntity;
|
||||||
import ru.ip.example.mapper.FilmMapper;
|
import ru.ip.example.mapper.FilmMapper;
|
||||||
import ru.ip.example.repository.FilmRepository;
|
import ru.ip.example.repository.FilmRepository;
|
||||||
@@ -26,6 +28,12 @@ public class FilmServiceImpl implements FilmService {
|
|||||||
|
|
||||||
private final SeazonRepository seazonRepository;
|
private final SeazonRepository seazonRepository;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CountStatisticDto countStatistic() {
|
||||||
|
CountStatistic countStatistic = filmRepository.countTableStatisticCount();
|
||||||
|
return filmMapper.toCountDto(countStatistic);
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
@Override
|
@Override
|
||||||
public FilmResponseDto findFilmByTitle(String title) {
|
public FilmResponseDto findFilmByTitle(String title) {
|
||||||
|
|||||||
Reference in New Issue
Block a user