Merge: Mock Github API tests
[nit.git] / contrib / nitrpg / src / web.nit
index 5f4992e..3d54672 100644 (file)
@@ -50,15 +50,15 @@ class RpgAction
                var page = new NitRpgPage(root_url)
                var error = new ErrorPanel(msg)
                page.flow_panels.add error
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 
        # Returns the game with `name` or null if no game exists with this name.
        fun load_game(name: String): nullable Game do
                var repo = api.load_repo(name)
-               if api.was_error or repo == null then return null
-               var game = new Game(api, repo)
+               if repo == null then return null
+               var game = new Game.from_mongo(api, repo)
                game.root_url = root_url
                return game
        end
@@ -66,13 +66,16 @@ class RpgAction
        # Returns the list of saved games from NitRPG data.
        fun load_games: Array[Game] do
                var res = new Array[Game]
-               var rpgdir = "nitrpg_data"
-               if not rpgdir.file_exists then return res
-               for user in rpgdir.files do
-                       for repo in "{rpgdir}/{user}".files do
-                               var game = load_game("{user}/{repo}")
-                               if game != null then res.add game
-                       end
+               # TODO should be option
+               var mongo = new MongoClient("mongodb://mongo:27017")
+               var db = mongo.database("nitrpg")
+               for obj in db.collection("games").find_all(new JsonObject) do
+                       var repo = api.load_repo(obj["name"].to_s)
+                       assert repo != null
+                       var game = new Game(api, repo)
+                       game.from_json(obj)
+                       game.root_url = root_url
+                       res.add game
                end
                return res
        end
@@ -92,7 +95,7 @@ class RpgHome
                page = new NitRpgPage(root_url)
                page.side_panels.add new GamesShortListPanel(root_url, games)
                page.flow_panels.add new MDPanel(readme)
-               response.body = page.write_to_string
+               response.body = page
                return response
        end
 
@@ -123,7 +126,7 @@ class ListGames
                page.breadcrumbs = new Breadcrumbs
                page.breadcrumbs.add_link(root_url / "games", "games")
                page.flow_panels.add new GamesListPanel(root_url, games)
-               response.body = page.write_to_string
+               response.body = page
                return response
        end
 end
@@ -193,7 +196,7 @@ class RepoHome
                page.flow_panels.add new PodiumPanel(game)
                page.flow_panels.add new EventListPanel(game, list_limit, list_from)
                page.flow_panels.add new AchievementsListPanel(game)
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 end
@@ -207,7 +210,7 @@ class ListPlayers
                if is_response_error(rsp) then return rsp
                page.breadcrumbs.add_link(game.url / "players", "players")
                page.flow_panels.add new ListPlayersPanel(game)
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 end
@@ -233,9 +236,10 @@ class PlayerHome
                page.side_panels.clear
                page.side_panels.add new PlayerStatusPanel(game, player)
                page.flow_panels.add new PlayerReviewsPanel(game, player)
+               page.flow_panels.add new PlayerWorkPanel(game, player)
                page.flow_panels.add new AchievementsListPanel(player)
                page.flow_panels.add new EventListPanel(player, list_limit, list_from)
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 end
@@ -249,7 +253,7 @@ class ListAchievements
                if is_response_error(rsp) then return rsp
                page.breadcrumbs.add_link(game.url / "achievements", "achievements")
                page.flow_panels.add new AchievementsListPanel(game)
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 end
@@ -274,7 +278,7 @@ class AchievementHome
                page.breadcrumbs.add_link(achievement.url, achievement.name)
                page.flow_panels.add new AchievementPanel(achievement)
                page.flow_panels.add new EventListPanel(achievement, list_limit, list_from)
-               rsp.body = page.write_to_string
+               rsp.body = page
                return rsp
        end
 end