package gov.nysenate.openleg.dao.calendar.data;
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.calendar.CalendarId;
import gov.nysenate.openleg.model.updates.UpdateDigest;
import gov.nysenate.openleg.model.updates.UpdateToken;
import gov.nysenate.openleg.model.updates.UpdateType;
import java.time.LocalDateTime;
public interface CalendarUpdatesDao
{
/**
* Returns a list of ids for calendars that have been updated within the specified date time range
*
* @param updateType UpdateType - Determines whether to query by the time of the update or the time of the reference
* @param dateTimeRange Range<LocalDateTime> - Date range to search for digests within
* @param dateOrder SortOrder - Order by the update date/time.
* @param limitOffset LimitOffset - Restrict the result set @return PaginatedList<CalendarUpdateToken>
*/
public PaginatedList<UpdateToken<CalendarId>> getUpdates(
UpdateType updateType, Range<LocalDateTime> dateTimeRange, SortOrder dateOrder, LimitOffset limitOffset);
/**
* Gets a list of calendar update digests that detail the changes made to any calendars.
*
* @param updateType UpdateType
* @param dateTimeRange Range<LocalDateTime>
* @param dateOrder SortOrder
* @param limitOffset LimitOffset
* @return PaginatedList<CalendarUpdateDigest>
*/
public PaginatedList<UpdateDigest<CalendarId>> getDetailedUpdates(
UpdateType updateType, Range<LocalDateTime> dateTimeRange, SortOrder dateOrder, LimitOffset limitOffset);
/**
* Gets a list of calendar update digests for a given calendar that detail the changes made to that calendar
* over the given date time range.
*
* @param updateType UpdateType
* @param calendarId CalendarId
* @param dateTimeRange Range<LocalDateTime>
* @param dateOrder SortOrder @return PaginatedList<CalendarUpdateDigest>
* @param limitOffset
*/
public PaginatedList<UpdateDigest<CalendarId>> getDetailedUpdatesForCalendar(
UpdateType updateType, CalendarId calendarId, Range<LocalDateTime> dateTimeRange,
SortOrder dateOrder, LimitOffset limitOffset);
}