aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-20 21:11:59 +0000
committernanalelfe <nargiza.nosirova@mail.utoronto.ca>2016-07-20 21:11:59 +0000
commitd46b37fcb7c97ab59fd929cfc0a8d766ca8a0b8a (patch)
tree3b51e4c196bacd7c4524e8dbdb472a0e972aac8c
parent3d2f0e48def5b314121f7315ada1008f6801fa2b (diff)
parent7a9c0a4732ba720fba72be06dcafa0dbbf26022b (diff)
Merged
-rw-r--r--.idea/vcs.xml6
-rw-r--r--.idea/workspace.xml403
-rw-r--r--app.js48
-rw-r--r--node_simple.js118
-rw-r--r--routes/index.js49
-rw-r--r--testImports.js27
6 files changed, 182 insertions, 469 deletions
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="VcsDirectoryMappings">
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
- </component>
-</project> \ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
deleted file mode 100644
index dff2e41..0000000
--- a/.idea/workspace.xml
+++ /dev/null
@@ -1,403 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
- <component name="ChangeListManager">
- <list default="true" id="a7cf7e06-fbb7-4b86-8a96-9f79ce1ef8aa" name="Default" comment="">
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/app.js" afterPath="$PROJECT_DIR$/app.js" />
- <change type="MODIFICATION" beforePath="$PROJECT_DIR$/package.json" afterPath="$PROJECT_DIR$/package.json" />
- </list>
- <ignored path="solutions_repo.iws" />
- <ignored path=".idea/workspace.xml" />
- <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
- <option name="TRACKING_ENABLED" value="true" />
- <option name="SHOW_DIALOG" value="false" />
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
- <option name="LAST_RESOLUTION" value="IGNORE" />
- </component>
- <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
- <component name="CreatePatchCommitExecutor">
- <option name="PATCH_PATH" value="" />
- </component>
- <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
- <component name="FavoritesManager">
- <favorites_list name="solutions_repo" />
- </component>
- <component name="FileEditorManager">
- <leaf>
- <file leaf-file-name="app.js" pinned="false" current-in-tab="true">
- <entry file="file://$PROJECT_DIR$/app.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="826">
- <caret line="82" column="0" selection-start-line="82" selection-start-column="0" selection-end-line="82" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- </file>
- </leaf>
- </component>
- <component name="FileTemplateManagerImpl">
- <option name="RECENT_TEMPLATES">
- <list>
- <option value="HTML File" />
- <option value="JavaScript File" />
- <option value="tsconfig.json" />
- </list>
- </option>
- </component>
- <component name="Git.Settings">
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
- </component>
- <component name="IdeDocumentHistory">
- <option name="CHANGED_PATHS">
- <list>
- <option value="$PROJECT_DIR$/solutions.html" />
- <option value="$PROJECT_DIR$/questions.html" />
- <option value="$PROJECT_DIR$/assets/css/style.css" />
- <option value="$PROJECT_DIR$/node_simple.js" />
- <option value="$PROJECT_DIR$/index.html" />
- <option value="$PROJECT_DIR$/server.js" />
- <option value="$PROJECT_DIR$/assets/js/script.js" />
- <option value="$PROJECT_DIR$/app.js" />
- </list>
- </option>
- </component>
- <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
- <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
- <component name="JsGulpfileManager">
- <detection-done>true</detection-done>
- <sorting>DEFINITION_ORDER</sorting>
- </component>
- <component name="ProjectFrameBounds">
- <option name="x" value="4" />
- <option name="y" value="23" />
- <option name="width" value="1274" />
- <option name="height" value="777" />
- </component>
- <component name="ProjectLevelVcsManager" settingsEditedManually="false">
- <OptionsSetting value="true" id="Add" />
- <OptionsSetting value="true" id="Remove" />
- <OptionsSetting value="true" id="Checkout" />
- <OptionsSetting value="true" id="Update" />
- <OptionsSetting value="true" id="Status" />
- <OptionsSetting value="true" id="Edit" />
- <ConfirmationsSetting value="0" id="Add" />
- <ConfirmationsSetting value="0" id="Remove" />
- </component>
- <component name="ProjectView">
- <navigator currentView="ProjectPane" proportions="" version="1">
- <flattenPackages />
- <showMembers />
- <showModules />
- <showLibraryContents />
- <hideEmptyPackages />
- <abbreviatePackageNames />
- <autoscrollToSource />
- <autoscrollFromSource />
- <sortByType />
- <manualOrder />
- <foldersAlwaysOnTop value="true" />
- </navigator>
- <panes>
- <pane id="ProjectPane">
- <subPane>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="solutions_repo" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- </PATH>
- <PATH>
- <PATH_ELEMENT>
- <option name="myItemId" value="solutions_repo" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
- </PATH_ELEMENT>
- <PATH_ELEMENT>
- <option name="myItemId" value="solutions_repo" />
- <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
- </PATH_ELEMENT>
- </PATH>
- </subPane>
- </pane>
- <pane id="Scratches" />
- <pane id="Scope" />
- </panes>
- </component>
- <component name="PropertiesComponent">
- <property name="last_opened_file_path" value="$PROJECT_DIR$/../W10-Code_Example" />
- <property name="WebServerToolWindowFactoryState" value="false" />
- <property name="HbShouldOpenHtmlAsHb" value="" />
- <property name="DefaultHtmlFileTemplate" value="HTML File" />
- <property name="js-jscs-nodeInterpreter" value="/usr/local/bin/node" />
- <property name="settings.editor.selected.configurable" value="JavaScript.Libraries" />
- <property name="settings.editor.splitter.proportion" value="0.2" />
- <property name="nodejs_interpreter_path" value="/usr/local/bin/node" />
- <property name="javascript.nodejs.core.library.configured.version" value="6.2.2" />
- </component>
- <component name="RunManager">
- <configuration default="true" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
- <method />
- </configuration>
- <configuration default="true" type="DartTestRunConfigurationType" factoryName="Dart Test">
- <method />
- </configuration>
- <configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma">
- <config-file value="" />
- <node-interpreter value="project" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
- <method />
- </configuration>
- <configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
- <method />
- </configuration>
- <configuration default="true" type="cucumber.js" factoryName="Cucumber.js">
- <option name="cucumberJsArguments" value="" />
- <option name="executablePath" />
- <option name="filePath" />
- <method />
- </configuration>
- <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
- <node-interpreter>project</node-interpreter>
- <node-options />
- <gulpfile />
- <tasks />
- <arguments />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="js.build_tools.npm" factoryName="npm">
- <command value="run-script" />
- <scripts />
- <node-interpreter value="project" />
- <envs />
- <method />
- </configuration>
- <configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
- <node-interpreter>project</node-interpreter>
- <node-options />
- <working-directory />
- <pass-parent-env>true</pass-parent-env>
- <envs />
- <ui>bdd</ui>
- <extra-mocha-options />
- <test-kind>DIRECTORY</test-kind>
- <test-directory />
- <recursive>false</recursive>
- <method />
- </configuration>
- </component>
- <component name="ShelveChangesManager" show_recycled="false">
- <option name="remove_strategy" value="false" />
- </component>
- <component name="SvnConfiguration">
- <configuration />
- </component>
- <component name="TaskManager">
- <task active="true" id="Default" summary="Default task">
- <changelist id="a7cf7e06-fbb7-4b86-8a96-9f79ce1ef8aa" name="Default" comment="" />
- <created>1468029982798</created>
- <option name="number" value="Default" />
- <option name="presentableId" value="Default" />
- <updated>1468029982798</updated>
- <workItem from="1468029984197" duration="7883000" />
- <workItem from="1468095442948" duration="1589000" />
- <workItem from="1468724924249" duration="24201000" />
- </task>
- <servers />
- </component>
- <component name="TimeTrackingManager">
- <option name="totallyTimeSpent" value="33673000" />
- </component>
- <component name="ToolWindowManager">
- <frame x="4" y="23" width="1274" height="777" extended-state="6" />
- <editor active="false" />
- <layout>
- <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.24581006" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
- <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
- <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.23503649" sideWeight="0.5123703" order="7" side_tool="true" content_ui="tabs" />
- <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32896653" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
- <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.23503649" sideWeight="0.48762968" order="7" side_tool="false" content_ui="tabs" />
- <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
- <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
- <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
- <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
- <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
- <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
- <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
- </layout>
- </component>
- <component name="Vcs.Log.UiProperties">
- <option name="RECENTLY_FILTERED_USER_GROUPS">
- <collection />
- </option>
- <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
- <collection />
- </option>
- </component>
- <component name="VcsContentAnnotationSettings">
- <option name="myLimit" value="2678400000" />
- </component>
- <component name="XDebuggerManager">
- <breakpoint-manager />
- <watches-manager />
- </component>
- <component name="editorHistoryManager">
- <entry file="file://$PROJECT_DIR$/assets/css/style.css">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="3705">
- <caret line="247" column="1" selection-start-line="247" selection-start-column="1" selection-end-line="247" selection-end-column="1" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/solutions.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/questions.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="15">
- <caret line="1" column="16" selection-start-line="1" selection-start-column="16" selection-end-line="1" selection-end-column="16" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/solutions.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="660">
- <caret line="44" column="20" selection-start-line="44" selection-start-column="20" selection-end-line="44" selection-end-column="20" />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/assets/css/style.css">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="-3233">
- <caret line="20" column="19" selection-start-line="20" selection-start-column="19" selection-end-line="20" selection-end-column="19" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/user_solutions.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/about.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/tsconfig.json">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/packages.json">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/testImports.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="165">
- <caret line="18" column="32" selection-start-line="18" selection-start-column="32" selection-end-line="18" selection-end-column="32" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/user_profile_alt.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="270">
- <caret line="28" column="37" selection-start-line="28" selection-start-column="37" selection-end-line="28" selection-end-column="37" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/index.html">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="120">
- <caret line="91" column="48" selection-start-line="91" selection-start-column="26" selection-end-line="91" selection-end-column="48" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/server.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="785">
- <caret line="71" column="30" selection-start-line="71" selection-start-column="30" selection-end-line="71" selection-end-column="30" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/assets/js/script.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="270">
- <caret line="44" column="0" selection-start-line="44" selection-start-column="0" selection-end-line="44" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/node_simple.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="1035">
- <caret line="82" column="35" selection-start-line="82" selection-start-column="35" selection-end-line="82" selection-end-column="35" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/README.md">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="0">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/node_modules/mongodb/lib/server.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="-3255">
- <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/package.json">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="240">
- <caret line="16" column="20" selection-start-line="16" selection-start-column="20" selection-end-line="16" selection-end-column="20" />
- <folding />
- </state>
- </provider>
- </entry>
- <entry file="file://$PROJECT_DIR$/app.js">
- <provider selected="true" editor-type-id="text-editor">
- <state relative-caret-position="826">
- <caret line="82" column="0" selection-start-line="82" selection-start-column="0" selection-end-line="82" selection-end-column="0" />
- <folding />
- </state>
- </provider>
- </entry>
- </component>
-</project> \ No newline at end of file
diff --git a/app.js b/app.js
index ac78e16..72f238e 100644
--- a/app.js
+++ b/app.js
@@ -41,51 +41,3 @@ app.use(express.static(__dirname));
app.use('/', routes);
module.exports = app;
-
-app.listen(3000, function() {
- console.log('listening on http://localhost:3000/');
-});
-
-//to fetch exams given a course code and populate the exams page
-app.get('/exams',function (req,res) {
- console.log(req.query.search);
- var courseName = req.query.search;
- courseName = sanitizer.escape(courseName);
- courseName = courseName.toUpperCase();
- console.log(courseName);
- var result = getExamsForCourseCode(courseName);
- console.log(result);
- res.write(JSON.stringify(result));
-});
-
-function getExamsForCourseCode(courseCode) {
- var minExamInfoArray = [];
- dbFile.get_all_exams(courseCode, function (exams) {
- if (exams.length == 0){
- console.log("Nothing was found");
- }
- else {
- //console.log(exams);
- //only pass over the information that is necessary for the exams page
- for (var i = 0; i<exams.length;i++){
- var minExamInfo = { courseCode:exams[i].course_code,
- year:exams[i].year,
- term:toProperCase(exams[i].term),
- instructors:exams[i].instructors,
- type:toProperCase(exams[i].type) + " Examination"
- };
- minExamInfoArray.push(minExamInfo);
- console.log(minExamInfo);
- }
- }
- });
-
- return minExamInfoArray;
-}
-
-
-/*Helper function to make sure the proper capital case is presented*/
-
-function toProperCase(string) {
- return string.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
-}
diff --git a/node_simple.js b/node_simple.js
index 5542c40..33e9862 100644
--- a/node_simple.js
+++ b/node_simple.js
@@ -13,6 +13,8 @@
* */
+/* I pass in exam id and you give me the number of questions and the comments and solutions associated with each question?*/
+
/* Tables SO FAR:
* 1. exams
* 2. courses
@@ -36,10 +38,10 @@
// |..........|
-// |================================solutions===================================|
-// |_________ _id_____________|exam_id_____________________|q_id_|text____|votes|
-// |==========================|============================|=====|========|=====|
-// |"354ff71ed078933079d6467e"|"578a44ff71ed097fc3079d6e" |1 |"answer"| 1 |
+// |================================solutions============================================|
+// |_________ _id_____________|exam_id_____________________|q_id_|text____|votes|comments|
+// |==========================|============================|=====|========|=====|========|
+// |"354ff71ed078933079d6467e"|"578a44ff71ed097fc3079d6e" |1 |"answer"| 1 |[{},{}] |
// |..........|
var exports = module.exports = {};
@@ -64,6 +66,111 @@ var uri = 'mongodb://general:assignment4@ds057862.mlab.com:57862/solutions_repo'
+
+// this function returns an array where is element contains info for a particular question
+// such as the question number (_id), number of solutions (count), and number of comments
+// (comments). [ {_id,count,comments}, {} ...]
+exports.get_exam_info_by_ID = function (exam_id, callback) {
+
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+
+ var solutions = db.collection('solutions');
+
+ solutions.aggregate(
+ [
+
+ // {$unwind: "$comments"},
+ { $match: { exam_id: exam_id }},
+ {
+ $project:
+ {
+ num_comments: { $size: "$comments" },
+ _id: "$exam_id",
+ q_id: "$q_id"
+ }
+ },
+ {
+ $group : {
+ _id : "$q_id",
+ count: { $sum: 1 },
+ comments: {$sum: "$num_comments"}
+ // num_comments: { $size: "$comments" }
+
+ }
+ }
+
+
+ ]).toArray(function (err, result) {
+ // console.log(result);
+ callback(result);
+
+ });
+ })
+ .catch(function (err) {
+ console.err(err);
+ })
+
+}
+
+
+
+exports.add_comment = function (sol_id, fields) {
+ var Data = {
+ text: fields[0],
+ date: fields[1],
+ by: fields[2]
+ };
+
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+
+ // find the solutions table
+ var solutions = db.collection('solutions');
+ // insert data into table
+ solutions.updateOne( {_id: ObjectId(sol_id)}, {$push: {comments: Data}} , function (err, result) {
+ if (err) throw err;
+ else {
+ console.log("comment added");
+ }
+ });
+
+ })
+ .catch(function (err) {
+ console.error(err);
+ })
+}
+
+// get all solutions given an exam_id and the question number
+exports.get_all_solutions = function (exam_id, q_num, callback) {
+ mongoFactory.getConnection(uri)
+ .then(function (db) {
+
+ var solutions = db.collection('solutions');
+
+ solutions.find(
+ {
+ exam_id: exam_id,
+ q_id: q_num
+ }
+ ).toArray( function (err, docs) {
+ if (err) throw err;
+ else {
+ console.log(docs);
+
+ callback(docs);
+ }
+ });
+
+
+ })
+ .catch(function () {
+ console.error(err);
+ })
+
+
+}
+
/*
* This function will add a solution to the solutions table in the database .
* Params: fields - [exam_id , question_id, solution text]
@@ -76,7 +183,8 @@ exports.add_solution = function (fields) {
exam_id: fields[0],
q_id: fields[1],
text: fields[2],
- votes: 0
+ votes: 0,
+ comments: []
};
// establish a connection
diff --git a/routes/index.js b/routes/index.js
index 60a2c28..84087e7 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -33,9 +33,47 @@ router.get('/questions', function(req, res, next) {
});
/* Render/GET exam page */
-router.get('/exams/:id', function(req, res, next) {
+/* Render/GET exam page */
+//EXAMPLE EXPECTED DATA GIVEN BELOW:
+/*[ { courseCode: 'CSC240',
+ year: 2016,
+ term: 'Fall',
+ instructors: [ 'Faith Ellen', 'Tom F.' ],
+ type: 'Midterm Examination',
+ title: 'Thry of Computation' },
+ { courseCode: 'CSC240',
+ year: 2014,
+ term: 'Fall',
+ instructors: [ 'Faith Ellen', 'Tom F.' ],
+ type: 'Midterm Examination',
+ title: 'Thry of Computation' } ]
+ */
- res.render('exams', {query: req.params.id});
+router.get('/exams/:id', function(req, res, next) {
+ var minExamInfoArray = [];
+ dbFile.get_all_exams(req.params.id, function (exams) {
+ if (exams.length == 0){
+ console.log("Nothing was found");
+ }
+ else {
+ //console.log(exams);
+ //only pass over the information that is necessary for the exams page
+ for (var i = 0; i<exams.length;i++){
+ var minExamInfo = { courseCode:exams[i].course_code,
+ year:exams[i].year,
+ term:toProperCase(exams[i].term),
+ instructors:exams[i].instructors,
+ type:toProperCase(exams[i].type) + " Examination",
+ title:exams[i].title,
+ id:exams[i]._id
+ };
+ //console.log(minExamInfo);
+ minExamInfoArray.push(minExamInfo);
+ }
+ }
+ console.log(minExamInfoArray);
+ res.render('exams', {query: minExamInfoArray});
+ });
});
/* Render/GET search (exam) page */
@@ -75,8 +113,6 @@ app.get('/exams.html', function (req,res) {
});*/
-
-
function getExamsForCourseCode(courseCode) {
dbFile.get_all_exams(courseCode, function (exams) {
if (exams.length == 0){
@@ -88,4 +124,9 @@ function getExamsForCourseCode(courseCode) {
});
}
+
module.exports = router;
+
+function toProperCase(string) {
+ return string.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
+} \ No newline at end of file
diff --git a/testImports.js b/testImports.js
index fc128eb..c9f0bb2 100644
--- a/testImports.js
+++ b/testImports.js
@@ -17,17 +17,38 @@ var questions_array = ["this is q1", "this is q2"];
//test getting all exams database functionality -- USE FOR THE EXAMS PAGES maybe?
-dbFile.get_all_exams("CSC240", function (exams) {
+/*dbFile.get_all_exams("CSC240", function (exams) {
if (exams.length == 0){
console.log("Nothing was found");
}
else {
console.log(exams);
}
-});
+});*/
//test adding course
// dbFile.add_course("CSC148", "Intro to Programming");
//test adding solution
-//dbFile.add_solution(["578a44ff71ed097fc3079d6e", 1, "this is another solution to q1"]);
+//dbFile.add_solution(["578a44ff71ed097fc3079d6e", 2, "this is a solution to q2"]);
+
+
+// the following just prints the exam to console
+// dbFile.get_exam_byID("578a44ff71ed097fc3079d6e");
+
+//test getting all solutions of a given exam and question number
+//dbFile.get_all_solutions("578a44ff71ed097fc3079d6e", 1);
+
+
+//test adding of comments given a solution_id, and the comment information as an array
+// dbFile.add_comment("578f08e43bba452ee98da444", ["this is asdfasdf", "this is the date", "this is the author"]);
+
+
+dbFile.get_exam_info_by_ID("578a44ff71ed097fc3079d6e", function (result) {
+ if (result.length == 0) {
+ console.log("some error occured");
+ }
+ else {
+ console.log(result);
+ }
+}); \ No newline at end of file