diff options
| -rw-r--r-- | .idea/vcs.xml | 6 | ||||
| -rw-r--r-- | .idea/workspace.xml | 403 | ||||
| -rw-r--r-- | app.js | 48 | ||||
| -rw-r--r-- | node_simple.js | 118 | ||||
| -rw-r--r-- | routes/index.js | 49 | ||||
| -rw-r--r-- | testImports.js | 27 |
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 @@ -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 |
