TimeBucket.java

package edu.ucsb.cs156.dining.util;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;

/** Buckets for grouping review statistics over time. */
public enum TimeBucket {
  DAY,
  WEEK,
  MONTH;

  /**
   * @param dateTime a review's {@code dateItemServed}
   * @return the start date of the bucket containing {@code dateTime}
   */
  public LocalDate floor(LocalDateTime dateTime) {
    LocalDate date = dateTime.toLocalDate();
    return switch (this) {
      case DAY -> date;
      case WEEK -> date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
      case MONTH -> date.withDayOfMonth(1);
    };
  }
}