package com.kamco.cd.kamcoback.common.service;

import org.springframework.data.domain.Page;

/**
 * Base Core Service Interface
 *
 * <p>CRUD operations를 정의하는 기본 서비스 인터페이스
 *
 * @param <T> Entity 타입
 * @param <ID> Entity의 ID 타입
 * @param <S> Search Request 타입
 */
public interface BaseCoreService<T, ID, S> {

  /**
   * ID로 엔티티를 삭제합니다.
   *
   * @param id 삭제할 엔티티의 ID
   */
  void remove(ID id);

  /**
   * ID로 단건 조회합니다.
   *
   * @param id 조회할 엔티티의 ID
   * @return 조회된 엔티티
   */
  T getOneById(ID id);

  /**
   * 검색 조건과 페이징으로 조회합니다.
   *
   * @param searchReq 검색 조건
   * @return 페이징 처리된 검색 결과
   */
  Page<T> search(S searchReq);
}
