mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-11 00:02:19 -05:00
147 lines
4.1 KiB
CoffeeScript
147 lines
4.1 KiB
CoffeeScript
|
Level = require 'models/Level'
|
||
|
Course = require 'models/Course'
|
||
|
Courses = require 'collections/Courses'
|
||
|
User = require 'models/User'
|
||
|
Classroom = require 'models/Classroom'
|
||
|
LevelSession = require 'models/LevelSession'
|
||
|
CourseInstance = require 'models/CourseInstance'
|
||
|
Achievement = require 'models/Achievement'
|
||
|
EarnedAchievement = require 'models/EarnedAchievement'
|
||
|
ThangType = require 'models/ThangType'
|
||
|
Users = require 'collections/Users'
|
||
|
|
||
|
module.exports = {
|
||
|
|
||
|
makeCourse: (attrs, sources={}) ->
|
||
|
_id = _.uniqueId('course_')
|
||
|
attrs = _.extend({}, {
|
||
|
_id: _id
|
||
|
name: _.string.humanize(_id)
|
||
|
}, attrs)
|
||
|
|
||
|
attrs.campaignID ?= sources.campaign?.id or _.uniqueId('campaign_')
|
||
|
return new Course(attrs)
|
||
|
|
||
|
makeLevel: (attrs) ->
|
||
|
_id = _.uniqueId('level_')
|
||
|
attrs = _.extend({}, {
|
||
|
_id: _id
|
||
|
name: _.string.humanize(_id)
|
||
|
original: _id+'_original'
|
||
|
version:
|
||
|
major: 0
|
||
|
minor: 0
|
||
|
isLatestMajor: true
|
||
|
isLatestMinor: true
|
||
|
}, attrs)
|
||
|
return new Level(attrs)
|
||
|
|
||
|
makeUser: (attrs) ->
|
||
|
_id = _.uniqueId('user_')
|
||
|
attrs = _.extend({
|
||
|
_id: _id
|
||
|
permissions: []
|
||
|
email: _id+'@email.com'
|
||
|
anonymous: false
|
||
|
name: _.string.humanize(_id)
|
||
|
}, attrs)
|
||
|
return new User(attrs)
|
||
|
|
||
|
makeClassroom: (attrs, sources={}) ->
|
||
|
levels = sources.levels or [] # array of Levels collections
|
||
|
courses = sources.courses or new Courses()
|
||
|
members = sources.members or new Users()
|
||
|
|
||
|
_id = _.uniqueId('classroom_')
|
||
|
attrs = _.extend({}, {
|
||
|
_id: _id,
|
||
|
name: _.string.humanize(_id)
|
||
|
aceConfig: { language: 'python' }
|
||
|
}, attrs)
|
||
|
|
||
|
# populate courses
|
||
|
if not attrs.courses
|
||
|
courses = sources.courses or new Courses()
|
||
|
attrs.courses = (course.pick('_id') for course in courses.models)
|
||
|
|
||
|
# populate levels
|
||
|
for [courseAttrs, levels] in _.zip(attrs.courses, levels)
|
||
|
break if not courseAttrs
|
||
|
course ?= @makeCourse()
|
||
|
levels ?= new Levels()
|
||
|
courseAttrs.levels = (level.pick('_id', 'slug', 'name', 'original', 'type') for level in levels.models)
|
||
|
|
||
|
# populate members
|
||
|
if not attrs.members
|
||
|
members = members or new Users()
|
||
|
attrs.members = (member.id for member in members.models)
|
||
|
|
||
|
return new Classroom(attrs)
|
||
|
|
||
|
makeLevelSession: (attrs, sources={}) ->
|
||
|
level = sources.level or @makeLevel()
|
||
|
creator = sources.creator or @makeUser()
|
||
|
attrs = _.extend({}, {
|
||
|
level:
|
||
|
original: level.get('original'),
|
||
|
creator: creator.id,
|
||
|
}, attrs)
|
||
|
return new LevelSession(attrs)
|
||
|
|
||
|
makeCourseInstance: (attrs, sources={}) ->
|
||
|
_id = _.uniqueId('course_instance_')
|
||
|
course = sources.course or @makeCourse()
|
||
|
classroom = sources.classroom or @makeClassroom()
|
||
|
owner = sources.owner or @makeUser()
|
||
|
members = sources.members or new Users()
|
||
|
attrs = _.extend({}, {
|
||
|
_id
|
||
|
courseID: course.id
|
||
|
classroomID: classroom.id
|
||
|
ownerID: owner.id
|
||
|
members: members.pluck('_id')
|
||
|
}, attrs)
|
||
|
return new CourseInstance(attrs)
|
||
|
|
||
|
makeLevelCompleteAchievement: (attrs, sources={}) ->
|
||
|
_id = _.uniqueId('achievement_')
|
||
|
level = sources.level or @makeLevel()
|
||
|
attrs = _.extend({}, {
|
||
|
_id
|
||
|
name: _.string.humanize(_id)
|
||
|
query: {
|
||
|
'state.complete': true,
|
||
|
'level.original': level.get('original')
|
||
|
}
|
||
|
rewards: { gems: 10 }
|
||
|
worth: 20
|
||
|
}, attrs)
|
||
|
return new Achievement(attrs)
|
||
|
|
||
|
makeEarnedAchievement: (attrs, sources={}) ->
|
||
|
_id = _.uniqueId('earned_achievement_')
|
||
|
achievement = sources.achievement or @makeLevelCompleteAchievement()
|
||
|
user = sources.user or @makeUser()
|
||
|
attrs = _.extend({}, {
|
||
|
_id,
|
||
|
"achievement": achievement.id,
|
||
|
"user": user.id,
|
||
|
"earnedRewards": _.clone(achievement.get('rewards')),
|
||
|
"earnedPoints": achievement.get('worth'),
|
||
|
"achievementName": achievement.get('name'),
|
||
|
"notified": true
|
||
|
}, attrs)
|
||
|
return new EarnedAchievement(attrs)
|
||
|
|
||
|
makeThangType: (attrs) ->
|
||
|
_id = _.uniqueId('thang_type_')
|
||
|
attrs = _.extend({}, {
|
||
|
_id
|
||
|
name: _.string.humanize(_id)
|
||
|
}, attrs)
|
||
|
return new ThangType(attrs)
|
||
|
|
||
|
}
|
||
|
|
||
|
|