remove extra relation db indexes

pull/83/head
Thibault Duplessis 2013-05-23 16:19:30 +02:00
parent deb447fe10
commit ff131071c6
3 changed files with 12 additions and 6 deletions

View File

@ -71,8 +71,6 @@ print('create relation collection');
db.createCollection('relation') db.createCollection('relation')
db.relation.ensureIndex({u1:1}) db.relation.ensureIndex({u1:1})
db.relation.ensureIndex({u2:1}) db.relation.ensureIndex({u2:1})
db.relation.ensureIndex({u1:1, f:1})
db.relation.ensureIndex({u2:1, f:1})
// print("Reset lobby_room"); // print("Reset lobby_room");
// db.lobby_room.drop(); // db.lobby_room.drop();

View File

@ -17,6 +17,9 @@ trait PimpedJson {
def long(key: String): Option[Long] = def long(key: String): Option[Long] =
(js \ key).asOpt[Long] (js \ key).asOpt[Long]
def boolean(key: String): Option[Boolean] =
(js \ key).asOpt[Boolean]
def obj(key: String): Option[JsObject] = def obj(key: String): Option[JsObject] =
(js \ key).asOpt[JsObject] (js \ key).asOpt[JsObject]

View File

@ -3,6 +3,7 @@ package lila.relation
import lila.db.Implicits._ import lila.db.Implicits._
import lila.db.api._ import lila.db.api._
import tube.relationTube import tube.relationTube
import lila.common.PimpedJson._
import play.api.libs.json._ import play.api.libs.json._
@ -19,11 +20,15 @@ private[relation] object RelationRepo {
def blockers(userId: ID) = relaters(userId, Block) def blockers(userId: ID) = relaters(userId, Block)
def blocking(userId: ID) = relating(userId, Block) def blocking(userId: ID) = relating(userId, Block)
private def relaters(userId: ID, relation: Boolean): Fu[Set[ID]] = private def relaters(userId: ID, relation: Relation): Fu[Set[ID]] =
$primitive(Json.obj("u2" -> userId, "r" -> relation), "u1")(_.asOpt[ID]) map (_.toSet) $projection(Json.obj("u2" -> userId), Seq("u1", "f")) { obj
obj str "u1" map { _ -> ~(obj boolean "f") }
} map (_.filter(_._2 == relation).map(_._1).toSet)
private def relating(userId: ID, relation: Boolean): Fu[Set[ID]] = private def relating(userId: ID, relation: Relation): Fu[Set[ID]] =
$primitive(Json.obj("u1" -> userId, "r" -> relation), "u2")(_.asOpt[ID]) map (_.toSet) $projection(Json.obj("u1" -> userId), Seq("u2", "f")) { obj
obj str "u2" map { _ -> ~(obj boolean "f") }
} map (_.filter(_._2 == relation).map(_._1).toSet)
def follow(u1: ID, u2: ID): Funit = save(u1, u2, Follow) def follow(u1: ID, u2: ID): Funit = save(u1, u2, Follow)
def unfollow(u1: ID, u2: ID): Funit = remove(u1, u2) def unfollow(u1: ID, u2: ID): Funit = remove(u1, u2)