/*
 * Copyright (c) 京北方信息技术股份有限公司 Corporation 2021 . All rights reserved.
 *
 */
package net.northking.cctp.common.jpa;

import net.northking.cctp.common.db.Pagination;
import net.northking.cctp.common.http.QueryByPage;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;

import java.util.Optional;

/**
 * 抽象JPA Repository
 *
 * @author : xiusong.xie
 * @version : 1.0
 */
@NoRepositoryBean
public interface BasicJpaRepository<T, ID> extends JpaRepository<T, ID>
{
  /**
   * 分页查询
   *
   * @param queryByPage 分页查询对象
   * @param <S>         查询结果
   * @return 分页结果
   */
  <S extends T> Pagination<T> findAll(QueryByPage<S> queryByPage);

  /**
   * 是否归属当前租户
   *
   * @param record 数据库实体类
   * @return
   */
  boolean isOwn(T record);

  /**
   * 根据主键和租户ID查询
   *
   * @param id 主键
   * @return 数据
   */
  Optional<T> findByIdAndTenant(ID id);


  /**
   * 根据主键删除当前租户的数据
   *
   * @param id 主键
   */
  int deleteByIdAndTenant(ID id);

  /**
   * 根据主键批量删除当前租户的数据
   *
   * @param ids 主键集合
   */
  int deleteAllByIdsAndTenant(Iterable<ID> ids);


}
