package gov.nysenate.openleg.dao.hearing;
import com.google.common.collect.Range;
import gov.nysenate.openleg.dao.base.LimitOffset;
import gov.nysenate.openleg.dao.base.PaginatedList;
import gov.nysenate.openleg.dao.base.SortOrder;
import gov.nysenate.openleg.model.hearing.PublicHearing;
import gov.nysenate.openleg.model.hearing.PublicHearingFile;
import gov.nysenate.openleg.model.hearing.PublicHearingId;
import gov.nysenate.openleg.model.hearing.PublicHearingUpdateToken;
import org.springframework.dao.EmptyResultDataAccessException;
import java.time.LocalDateTime;
import java.util.List;
public interface PublicHearingDao
{
/**
* Retrieves all PublicHearingId's.
* @return
*/
public List<PublicHearingId> getPublicHearingIds(SortOrder dateOrder, LimitOffset limOff);
/**
* Retrieves a {@link PublicHearing} via its {@link PublicHearingId}.
* @param publicHearingId
* @return
*/
public PublicHearing getPublicHearing(PublicHearingId publicHearingId) throws EmptyResultDataAccessException;
/**
* Updates the backing store with the given instance or inserts
* if if the record doesn't already exist.
* @param publicHearing The {@link gov.nysenate.openleg.model.hearing.PublicHearing} to update.
* @param publicHearingFile The {@link gov.nysenate.openleg.model.hearing.PublicHearingFile}
* which updated the Public Hearing.
*/
public void updatePublicHearing(PublicHearing publicHearing, PublicHearingFile publicHearingFile);
/**
* Fetches new and updated public hearings from a specified date range.
* @param dateRange Range{@literal <}LocalDateTime{@literal >} - The date range to search within.
* @param dateOrder SortOrder - Order by the date/time.
* @param limOff LimitOffset - Restrict the result set.
* @return List of PublicHearingUpdateToken
*/
public PaginatedList<PublicHearingUpdateToken> publicHearingsUpdatedDuring(Range<LocalDateTime> dateRange, SortOrder dateOrder, LimitOffset limOff);
}