redef var stats is lazy do return new GameStatsManager(game, self)
- redef fun save do
- super
- stats.save_in(self.key)
- end
-
redef fun pretty do
var res = new FlatBuffer
res.append super
res.append stats.pretty
return res.write_to_string
end
+
+ redef fun save do
+ super
+ stats.save
+ end
end
redef class Player
redef var stats is lazy do return new GameStatsManager(game, self)
- redef fun save do
- super
- stats.save_in(self.key)
- end
-
redef fun nitcoins do return stats["nitcoins"]
redef fun nitcoins=(nc) do stats["nitcoins"] = nc
res.append stats.pretty
return res.write_to_string
end
+
+ redef fun save do
+ super
+ stats.save
+ end
end
# Store game stats for defined period.
# The GameEntity monitored by these statistics.
var owner: GameEntity
- redef var key = "stats"
+ # Current date to extract stats
+ private var date = new Tm.gmtime
# Returns the `GameStats` instance for the overall statistics.
- var overall: GameStats is lazy do
- return load_stats_for("all")
- end
+ var overall: GameStats = load_stats_for("all") is lazy
# Returns the `GameStats` instance for the current year statistics.
- var yearly: GameStats is lazy do
- var date = new Tm.gmtime
- var key = date.strftime("%Y")
- return load_stats_for(key)
- end
+ var yearly: GameStats = load_stats_for(date.strftime("%Y")) is lazy
# Returns the `GameStats` instance for the current month statistics.
- var monthly: GameStats is lazy do
- var date = new Tm.gmtime
- var key = date.strftime("%Y-%m")
- return load_stats_for(key)
- end
+ var monthly: GameStats = load_stats_for(date.strftime("%Y-%m")) is lazy
# Returns the `GameStats` instance for the current day statistics.
- var daily: GameStats is lazy do
- var date = new Tm.gmtime
- var key = date.strftime("%Y-%m-%d")
- return load_stats_for(key)
- end
+ var daily: GameStats = load_stats_for(date.strftime("%Y-%m-%d")) is lazy
# Returns the `GameStats` instance for the current week statistics.
- var weekly: GameStats is lazy do
- var date = new Tm.gmtime
- var key = date.strftime("%Y-W%U")
- return load_stats_for(key)
- end
+ var weekly: GameStats = load_stats_for(date.strftime("%Y-W%U")) is lazy
# Load statistics for a `period` key.
fun load_stats_for(period: String): GameStats do
- var key = owner.key / self.key / period
- if not game.store.has_key(key) then
- return new GameStats(game, period)
+ var req = new JsonObject
+ req["period"] = period
+ req["owner"] = owner.key
+ var obj = game.db.collection("statistics").find(req)
+ if obj isa JsonObject then
+ return new GameStats.from_json(game, period, owner, obj)
+ else
+ return new GameStats(game, period, owner)
end
- var json = game.store.load_object(key)
- return new GameStats.from_json(game, period, json)
end
redef fun [](key) do return overall[key]
weekly.dec(e)
end
- redef fun save_in(key) do
- overall.save_in(key / self.key)
- yearly.save_in(key / self.key)
- monthly.save_in(key / self.key)
- daily.save_in(key / self.key)
- weekly.save_in(key / self.key)
+ redef fun save do
+ overall.save
+ yearly.save
+ monthly.save
+ daily.save
+ weekly.save
end
redef fun pretty do return overall.pretty
redef var game
- # The pedriod these stats are about.
+ redef var collection_name = "statistics"
+
+ # The period these stats are about.
var period: String
- redef fun key do return period
+ # The game entity these stats are about.
+ var owner: GameEntity
+
+ redef var key = "{owner.key}-{period}" is lazy
# Load `self` from saved data.
- init from_json(game: Game, period: String, json: JsonObject) do
- for k, v in json do self[k] = v.as(Int)
+ init from_json(game: Game, period: String, owner: GameEntity, json: JsonObject) do
+ init(game, period, owner)
+ var values = json.get_or_null("values")
+ if not values isa JsonObject then return
+ for k, v in values do self[k] = v.as(Int)
end
- redef fun to_json do
- var obj = new JsonObject
- for k, v in self do obj[k] = v
+ redef fun to_json_object do
+ var obj = super
+ obj["period"] = period
+ obj["owner"] = owner.key
+ var values = new JsonObject
+ values.add_all(self)
+ obj["values"] = values
return obj
end
game.stats.inc("comments")
player.stats.inc("comments")
# FIXME use a more precise way to locate reviews
- if comment.has_ok_review then
+ if comment.is_ack then
game.stats.inc("reviews")
player.stats.inc("reviews")
end
end
end
end
-
-redef class IssueComment
- # Does this comment contain a "+1"?
- fun has_ok_review: Bool do return body.has("\\+1\\b".to_re)
-end