package org.resthub.common.service; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import java.io.Serializable; import java.util.Set; /** * CRUD Service interface. * * @param <T> Your resource POJO to manage, maybe an entity or DTO class * @param <ID> Resource id type, usually Long or String */ public interface CrudService<T, ID extends Serializable> { /** * Create new resource. * * @param resource Resource to create * @return new resource */ T create(T resource); /** * Update existing resource. * * @param resource Resource to update * @return resource updated */ T update(T resource); /** * Delete existing resource. * * @param resource Resource to delete */ void delete(T resource); /** * Delete existing resource. * * @param id Resource id */ void delete(ID id); /** * Delete all existing resource. Do not use cascade remove (not a choice -> JPA specs) */ void deleteAll(); /** * Delete all existing resource, including linked entities with cascade delete */ void deleteAllWithCascade(); /** * Find resource by id. * * @param id Resource id * @return resource */ T findById(ID id); /** * Find resources by their ids. * * @param ids Resource ids * @return a list of retrieved resources, empty if no resource found */ Iterable<T> findByIds(Set<ID> ids); /** * Find all resources. * * @return a list of all resources. */ Iterable<T> findAll(); /** * Find all resources (pageable). * * @param pageRequest page request * @return resources */ Page<T> findAll(Pageable pageRequest); /** * Count all resources. * * @return number of resources */ Long count(); }