nitweb: factorize catalog building
[nit.git] / src / nitweb.nit
index 13e3dce..3f3b7f5 100644 (file)
@@ -38,12 +38,9 @@ end
 # Phase that builds the model and wait for http request to serve pages.
 private class NitwebPhase
        super Phase
-       redef fun process_mainmodule(mainmodule, mmodules)
-       do
-               var model = mainmodule.model
-               var modelbuilder = toolcontext.modelbuilder
 
-               # Build catalog
+       # Build the nit catalog used in homepage.
+       fun build_catalog(model: Model, modelbuilder: ModelBuilder): Catalog do
                var catalog = new Catalog(modelbuilder)
                for mpackage in model.mpackages do
                        catalog.deps.add_node(mpackage)
@@ -59,6 +56,19 @@ private class NitwebPhase
                        catalog.git_info(mpackage)
                        catalog.package_page(mpackage)
                end
+               return catalog
+       end
+
+       redef fun process_mainmodule(mainmodule, mmodules)
+       do
+               var model = mainmodule.model
+               var modelbuilder = toolcontext.modelbuilder
+               var catalog = build_catalog(model, modelbuilder)
+
+               # Prepare mongo connection
+               var mongo = new MongoClient("mongodb://localhost:27017/")
+               var db = mongo.database("nitweb")
+               var collection = db.collection("stars")
 
                # Run the server
                var host = toolcontext.opt_host.value or else "localhost"
@@ -67,8 +77,7 @@ private class NitwebPhase
                var app = new App
 
                app.use_before("/*", new RequestClock)
-               app.use("/api", new APIRouter(model, modelbuilder, mainmodule, catalog))
-               app.use("/doc/:namespace", new DocAction(model, mainmodule, modelbuilder))
+               app.use("/api", new NitwebAPIRouter(model, mainmodule, modelbuilder, catalog, stars))
                app.use("/*", new StaticHandler(toolcontext.share_dir / "nitweb", "index.html"))
                app.use_after("/*", new ConsoleLog)
 
@@ -77,21 +86,18 @@ private class NitwebPhase
 end
 
 # Group all api handlers in one router.
-class APIRouter
-       super Router
-
-       # Model to pass to handlers.
-       var model: Model
+class NitwebAPIRouter
+       super APIRouter
 
        # ModelBuilder to pass to handlers.
        var modelbuilder: ModelBuilder
 
-       # Mainmodule to pass to handlers.
-       var mainmodule: MModule
-
        # Catalog to pass to handlers.
        var catalog: Catalog
 
+       # Mongo collection used to store ratings.
+       var collection: MongoCollection
+
        init do
                use("/catalog", new APICatalogRouter(model, mainmodule, catalog))
                use("/list", new APIList(model, mainmodule))
@@ -100,6 +106,13 @@ class APIRouter
                use("/entity/:id", new APIEntity(model, mainmodule))
                use("/code/:id", new APIEntityCode(model, mainmodule, modelbuilder))
                use("/uml/:id", new APIEntityUML(model, mainmodule))
+               use("/linearization/:id", new APIEntityLinearization(model, mainmodule))
+               use("/defs/:id", new APIEntityDefs(model, mainmodule))
+               use("/feedback/", new APIFeedbackRouter(model, mainmodule, collection))
+               use("/inheritance/:id", new APIEntityInheritance(model, mainmodule))
+               use("/graph/", new APIGraphRouter(model, mainmodule))
+               use("/docdown/", new APIDocdown(model, mainmodule, modelbuilder))
+               use("/metrics/", new APIMetricsRouter(model, mainmodule))
        end
 end
 
@@ -107,7 +120,7 @@ end
 var toolcontext = new ToolContext
 var tpl = new Template
 tpl.add "Usage: nitweb [OPTION]... <file.nit>...\n"
-tpl.add "Run a webserver based on nitcorn that serve pages about model."
+tpl.add "Run a webserver based on nitcorn that serves pages about model."
 toolcontext.tooldescription = tpl.write_to_string
 
 # process options