forked from lichess-org/lila
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Query.scala
62 lines (35 loc) · 1.64 KB
/
Query.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package lila.game
import lila.db.api._
import lila.user.User
import chess.{ Color, Status }
import play.api.libs.json._
import org.joda.time.DateTime
import org.scala_tools.time.Imports._
object Query {
val all: JsObject = $select.all
val rated: JsObject = Json.obj("ra" -> true)
def rated(u: String): JsObject = user(u) ++ rated
val started: JsObject = Json.obj("s" -> $gte(Status.Started.id))
def started(u: String): JsObject = user(u) ++ started
val playable = Json.obj("s" -> $lt(Status.Aborted.id))
val mate = Json.obj("s" -> Status.Mate.id)
val draw: JsObject = Json.obj("s" -> $in(Status.Draw.id, Status.Stalemate.id))
def draw(u: String): JsObject = user(u) ++ draw
val finished = Json.obj("s" -> $in(Status.Mate.id, Status.Resign.id, Status.Outoftime.id, Status.Timeout.id))
val notFinished: JsObject = Json.obj("s" -> $lte(Status.Started.id))
def notFinished(u: String): JsObject = user(u) ++ notFinished
val frozen = Json.obj("s" -> $gte(Status.Mate.id))
val popular = Json.obj("bm" -> $gt(0))
val imported = Json.obj("me.so" -> Source.Import.id)
def pgnImport(pgn: String) = imported ++ Json.obj("me.pgni.pgn" -> pgn)
def clock(c: Boolean) = Json.obj("c" -> $exists(c))
def user(u: String) = Json.obj("uids" -> u)
// use the uids index
def win(u: String) = user(u) ++ Json.obj("wid" -> u)
def loss(u: String) = user(u) ++ finished ++ Json.obj("wid" -> $ne(u))
def opponents(u1: User, u2: User) =
Json.obj("uids" -> $all(List(u1, u2).sortBy(_.nbGames).map(_.id): _*))
def turnsGt(nb: Int) = Json.obj("t" -> $gt(nb))
val sortCreated = $sort desc "ca"
val sortPopular = $sort desc "bm"
}