fix game search date field

This commit is contained in:
Thibault Duplessis 2016-01-31 09:20:54 +07:00
parent 6ca36c6aa7
commit 6aa83ffe70

View file

@ -4,6 +4,7 @@ import chess.{ Mode }
import org.joda.time.DateTime
import play.api.data._
import play.api.data.Forms._
import play.api.data.validation.Constraints
import lila.common.Form._
import lila.search.Range
@ -32,8 +33,8 @@ private[gameSearch] final class DataForm {
"aiLevelMax" -> optional(numberIn(Query.aiLevels)),
"durationMin" -> optional(numberIn(Query.durations)),
"durationMax" -> optional(numberIn(Query.durations)),
"dateMin" -> optional(dateConstraint),
"dateMax" -> optional(dateConstraint),
"dateMin" -> DataForm.dateField,
"dateMax" -> DataForm.dateField,
"status" -> optional(numberIn(Query.statuses)),
"analysed" -> optional(number),
"sort" -> optional(mapping(
@ -43,6 +44,15 @@ private[gameSearch] final class DataForm {
)(SearchData.apply)(SearchData.unapply)) fill SearchData()
}
private[gameSearch] object DataForm {
val DateDelta = """^(\d+)(\w)$""".r
private val dateConstraint = Constraints.pattern(
regex = DateDelta,
error = "Invalid date.")
val dateField = optional(nonEmptyText.verifying(dateConstraint))
}
private[gameSearch] case class SearchData(
players: SearchPlayer = SearchPlayer(),
winnerColor: Option[Int] = None,
@ -90,7 +100,8 @@ private[gameSearch] case class SearchData(
def nonEmptyQuery = Some(query).filter(_.nonEmpty)
private val DateDelta = """^(\d+)(\w)$""".r
import DataForm.DateDelta
private def toDate(delta: String): Option[DateTime] = delta match {
case DateDelta(n, "h") => parseIntOption(n) map DateTime.now.minusHours
case DateDelta(n, "d") => parseIntOption(n) map DateTime.now.minusDays
@ -99,9 +110,6 @@ private[gameSearch] case class SearchData(
case DateDelta(n, "y") => parseIntOption(n) map DateTime.now.minusYears
case _ => None
}
private val dateConstraint = Constraints.pattern(
regex = DateDelta,
error = "Invalid date.")
}
private[gameSearch] case class SearchPlayer(