package gov.nysenate.openleg.dao.entity.committee.data;
import gov.nysenate.openleg.model.base.SessionYear;
import gov.nysenate.openleg.model.entity.*;
import gov.nysenate.openleg.model.sobi.SobiFragment;
import org.springframework.dao.DataAccessException;
import java.util.List;
public interface CommitteeDao
{
/**
* Retrieves the most recent information on the committee designated by name
*
* @param committeeId
* @return Committee
*/
public Committee getCommittee(CommitteeId committeeId) throws DataAccessException;
/**
* Retrieves committee information for the specified committee name at a particular time
*
* @param committeeVersionId
* @return Committee
*/
public Committee getCommittee(CommitteeVersionId committeeVersionId) throws DataAccessException;
/**
* Retrieves a list containing all committee ids
*
* @return List<Committee>
*/
public List<CommitteeId> getCommitteeList() throws DataAccessException;
/**
* Retrieves a list of all session years with committee data
* @return
* @throws DataAccessException
*/
public List<SessionYear> getEligibleYears() throws DataAccessException;
/**
* Retrieves a list of all valid committee session ids
* @return
* @throws DataAccessException
*/
public List<CommitteeSessionId> getAllSessionIds() throws DataAccessException;
/**
* Retrieves a list of committee versions for a given committee that occur within the given date range
* ordered by session year and creation date
*
* @param committeeSessionId
* @return List<Committee>
*/
public List<Committee> getCommitteeHistory(CommitteeSessionId committeeSessionId) throws DataAccessException;
/**
* Retrieves a list of committee versions for a given committee, ordered from first version to most recent
*
* @param committee
* @param sobiFragment
*/
public void updateCommittee(Committee committee, SobiFragment sobiFragment) throws DataAccessException;
/**
* Deletes all records for a given committee
*
* @param committeeId
*/
public void deleteCommittee(CommitteeId committeeId) throws DataAccessException;
}