Skip to content

Commit e69bbed

Browse files
amortensonDerekTBrown
authored andcommitted
added course search method (#118)
* added course search method * fixing conflicts * updated schema
1 parent b0d9f2d commit e69bbed

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

client/imports/course/methods.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Meteor.methods({
2+
'search_courses': function(text : String){
3+
console.log("searching courses");
4+
}
5+
});

collections/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ The following document describes the MongoDB Schema used by the TuxLab app:
6060
course_number: "15-131",
6161
course_name: "Great Practical Ideas for Computer Scientists",
6262
instructor_ids: ["948fhp23irjer9823r3rwef", "573de804b17eca6c452d9ff7"],
63+
hidden: true, // Course is hidden from students. Default is true.
64+
disabled: false, // Enrollment for course is unavailable. Default is false.
6365
course_description: {
6466
content: "This is the course description.",
6567
syllabus: "This is the course syllabus"

server/imports/course/methods.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
var async = require ('async');
2+
var future = require('fibers/future');
3+
4+
Meteor.methods({
5+
'search_courses': function(text : String, results_per_page : Number, page_no : Number) {
6+
7+
var courses = Collections.courses;
8+
9+
var search_pattern = new RegExp(text,"i");
10+
if (results_per_page <= 0 || results_per_page > 200) results_per_page = 200;
11+
12+
var search_object =
13+
{$and : [
14+
{"hidden" : false},
15+
{$or : [
16+
{"course_number" : search_pattern},
17+
{$where: "this.course_number.replace(/[ .-]/g,'') == '"+text+"'"},
18+
{"course_name" : search_pattern}
19+
]}
20+
]};
21+
22+
var search_options =
23+
{limit : results_per_page,
24+
skip : results_per_page * page_no,
25+
fields : {
26+
"course_number" : 1,
27+
"course_name" : 1,
28+
"instructor_ids" : 1,
29+
"course_description" : 1}
30+
};
31+
32+
var result = new future();
33+
34+
async.parallel(
35+
{
36+
"course_count" : function(callback) {callback(null, courses.find(search_object).count());},
37+
"course_results" : function(callback) {callback(null, courses.find(search_object, search_options).fetch());}
38+
},
39+
function(err, results) {
40+
if(err) result.throw(error);
41+
result.return(results);
42+
});
43+
44+
return result.wait();
45+
}
46+
});

server/main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ var NodeCache = require('node-cache');
4343

4444
//import Meteor Methods
4545
import "./imports/lab/methods.ts"
46+
import "./imports/course/methods.ts"

0 commit comments

Comments
 (0)