Fix and polish category CRUD.
This commit is contained in:
@@ -4,6 +4,7 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codiki.domain.category.exception.CategoryNotFoundException;
|
||||
import org.codiki.domain.category.model.Category;
|
||||
import org.codiki.domain.category.port.CategoryPort;
|
||||
import org.codiki.infrastructure.category.model.CategoryEntity;
|
||||
@@ -31,10 +32,34 @@ public class CategoryJpaAdapter implements CategoryPort {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Category> findAllByIds(final List<UUID> subCategoryIds) {
|
||||
return categoryRepository.findAllById(subCategoryIds)
|
||||
public List<Category> findAllByIds(List<UUID> categoryIds) {
|
||||
final List<Category> categories = categoryRepository.findAllById(categoryIds)
|
||||
.stream()
|
||||
.map(CategoryEntity::toDomain)
|
||||
.toList();
|
||||
|
||||
Optional<UUID> notFoundCategoryId = categories.stream()
|
||||
.filter(category -> !categoryIds.contains(category.id()))
|
||||
.findFirst()
|
||||
.map(Category::id);
|
||||
if (notFoundCategoryId.isPresent()) {
|
||||
throw new CategoryNotFoundException(notFoundCategoryId.get());
|
||||
}
|
||||
return categories;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsAnyAssociatedPublication(UUID categoryId) {
|
||||
return categoryRepository.existsAnyAssociatedPublication(categoryId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteById(UUID categoryId) {
|
||||
categoryRepository.deleteById(categoryId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsById(UUID categoryId) {
|
||||
return categoryRepository.existsById(categoryId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,16 @@ import java.util.UUID;
|
||||
|
||||
import org.codiki.infrastructure.category.model.CategoryEntity;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
public interface CategoryRepository extends JpaRepository<CategoryEntity, UUID> {
|
||||
@Query(value = """
|
||||
SELECT (
|
||||
SELECT COUNT(*)
|
||||
FROM publication p
|
||||
WHERE p.category_id = :categoryId
|
||||
) > 0
|
||||
""", nativeQuery = true)
|
||||
boolean existsAnyAssociatedPublication(@Param("categoryId") UUID categoryId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user