package com.qqchen.deploy.backend.framework.service;

import com.qqchen.deploy.backend.framework.domain.Entity;
import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.framework.query.BaseQuery;
import org.springframework.data.domain.Page;

import java.io.Serializable;
import java.util.List;

/**
 * 通用服务接口
 */
public interface IBaseService<T extends Entity<ID>, D extends BaseDTO, Q extends BaseQuery, ID extends Serializable> {
    D create(D dto);

    D update(ID id, D dto);

    void delete(ID id);

    D findById(ID id);

    List<D> findAll();

    Page<D> page(Q query);

    List<D> findAll(Q query);

    void batchProcess(List<D> dtos);

    T findEntityById(ID id);

    Class<T> getEntityClass();

    T findByIdWithLock(ID id);

    D updateWithRetry(ID id, D dto);
}