add query count

This commit is contained in:
2025-05-25 14:09:00 +04:00
parent b956909b1a
commit b035a2b19a
7 changed files with 57 additions and 0 deletions

View File

@@ -13,8 +13,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ru.ip.example.domain.AddSeazonDto;
import ru.ip.example.domain.CountStatisticDto;
import ru.ip.example.domain.FilmRequestDto;
import ru.ip.example.domain.FilmResponseDto;
import ru.ip.example.domain.entity.CountStatistic;
import ru.ip.example.service.FilmService;
import java.util.List;
@@ -32,6 +34,12 @@ public class FilmController {
return filmService.findFilmByTitle(title);
}
@GetMapping("/films/count")
@Operation(description = "Статистика по кол-вам сущностей")
public CountStatisticDto count() {
return filmService.countStatistic();
}
@GetMapping("/films")
@Operation(description = "Возвращает список всех фильмов")
public List<FilmResponseDto> getAll() {

View 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;
}

View File

@@ -0,0 +1,13 @@
package ru.ip.example.domain.entity;
public interface CountStatistic {
int getFilmCount();
int getSeazonCount();
int getSeriesCount();
int getSubscribeCount();
}

View File

@@ -2,9 +2,11 @@ package ru.ip.example.mapper;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import ru.ip.example.domain.CountStatisticDto;
import ru.ip.example.domain.FilmRequestDto;
import ru.ip.example.domain.FilmResponseDto;
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.SeazonEntity;
@@ -20,4 +22,6 @@ public interface FilmMapper {
List<SeazonResponseDto> toSeazonsList(List<SeazonEntity> seazonEntities);
FilmEntity toEntity(FilmRequestDto dto);
CountStatisticDto toCountDto(CountStatistic stat);
}

View File

@@ -3,6 +3,7 @@ package ru.ip.example.repository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import ru.ip.example.domain.entity.CountStatistic;
import ru.ip.example.domain.entity.FilmEntity;
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)
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();
}

View File

@@ -1,13 +1,17 @@
package ru.ip.example.service;
import ru.ip.example.domain.AddSeazonDto;
import ru.ip.example.domain.CountStatisticDto;
import ru.ip.example.domain.FilmRequestDto;
import ru.ip.example.domain.FilmResponseDto;
import ru.ip.example.domain.entity.CountStatistic;
import java.util.List;
public interface FilmService {
CountStatisticDto countStatistic();
FilmResponseDto findFilmByTitle(String title);
FilmResponseDto saveFilm(FilmRequestDto dto);

View File

@@ -4,8 +4,10 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ru.ip.example.domain.AddSeazonDto;
import ru.ip.example.domain.CountStatisticDto;
import ru.ip.example.domain.FilmRequestDto;
import ru.ip.example.domain.FilmResponseDto;
import ru.ip.example.domain.entity.CountStatistic;
import ru.ip.example.domain.entity.FilmEntity;
import ru.ip.example.mapper.FilmMapper;
import ru.ip.example.repository.FilmRepository;
@@ -26,6 +28,12 @@ public class FilmServiceImpl implements FilmService {
private final SeazonRepository seazonRepository;
@Override
public CountStatisticDto countStatistic() {
CountStatistic countStatistic = filmRepository.countTableStatisticCount();
return filmMapper.toCountDto(countStatistic);
}
@Transactional(readOnly = true)
@Override
public FilmResponseDto findFilmByTitle(String title) {