mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 09:35:39 -05:00
84e3ee270a
Exclude levels if classroom.aceConfig.language == level.primerLanguage Closes #3856
211 lines
6 KiB
CoffeeScript
211 lines
6 KiB
CoffeeScript
Level = require 'models/Level'
|
|
Course = require 'models/Course'
|
|
Courses = require 'collections/Courses'
|
|
Campaign = require 'models/Campaign'
|
|
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'
|
|
Prepaid = require 'models/Prepaid'
|
|
|
|
module.exports = {
|
|
|
|
makeCourse: (attrs, sources={}) ->
|
|
_id = _.uniqueId('course_')
|
|
attrs = _.extend({}, {
|
|
_id: _id
|
|
name: _.string.humanize(_id)
|
|
releasePhase: 'released'
|
|
concepts: []
|
|
}, attrs)
|
|
|
|
attrs.campaignID ?= sources.campaign?.id or _.uniqueId('campaign_')
|
|
return new Course(attrs)
|
|
|
|
makeCampaign: (attrs, sources={}) ->
|
|
_id = _.uniqueId('campaign_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
name: _.string.humanize(_id)
|
|
levels: [@makeLevel(), @makeLevel()]
|
|
}, attrs)
|
|
|
|
if sources.levels
|
|
levelsMap = {}
|
|
sources.levels.each (level) ->
|
|
levelsMap[level.id] = level
|
|
attrs.levels = levelsMap
|
|
|
|
return new Campaign(attrs)
|
|
|
|
makeLevel: (attrs) ->
|
|
_id = _.uniqueId('level_')
|
|
attrs = _.extend({}, {
|
|
_id: _id
|
|
name: _.string.humanize(_id)
|
|
slug: _.string.dasherize(_id)
|
|
original: _id+'_original'
|
|
version:
|
|
major: 0
|
|
minor: 0
|
|
isLatestMajor: true
|
|
isLatestMinor: true
|
|
}, attrs)
|
|
return new Level(attrs)
|
|
|
|
makeUser: (attrs, sources={}) ->
|
|
_id = _.uniqueId('user_')
|
|
attrs = _.extend({
|
|
_id: _id
|
|
permissions: []
|
|
email: _id+'@email.com'
|
|
anonymous: false
|
|
name: _.string.humanize(_id)
|
|
}, attrs)
|
|
|
|
if sources.prepaid and not attrs.coursePrepaid
|
|
attrs.coursePrepaid = sources.prepaid.pick('_id', 'startDate', 'endDate')
|
|
|
|
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', 'primerLanguage', '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)
|
|
attrs.level.primerLanguage = level.get('primerLanguage') if level.get('primerLanguage')
|
|
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)
|
|
|
|
makePayment: (attrs, sources={}) ->
|
|
_id = _.uniqueId('payment_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
}, attrs)
|
|
return new ThangType(attrs)
|
|
|
|
makePrepaid: (attrs, sources={}) ->
|
|
_id = _.uniqueId('prepaid_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
type: 'course'
|
|
maxRedeemers: 10
|
|
endDate: moment().add(1, 'month').toISOString()
|
|
startDate: moment().subtract(1, 'month').toISOString()
|
|
}, attrs)
|
|
|
|
if not attrs.redeemers
|
|
redeemers = sources.redeemers or new Users()
|
|
attrs.redeemers = ({
|
|
userID: redeemer.id
|
|
date: moment().subtract(1, 'month').toISOString()
|
|
} for redeemer in redeemers.models)
|
|
|
|
return new Prepaid(attrs)
|
|
|
|
makeTrialRequest: (attrs, sources={}) ->
|
|
_id = _.uniqueId('trial_request_')
|
|
attrs = _.extend({}, {
|
|
_id
|
|
properties: {
|
|
firstName: 'Mr'
|
|
lastName: 'Professorson'
|
|
name: 'Mr Professorson'
|
|
email: 'an@email.com'
|
|
phoneNumber: '555-555-5555'
|
|
organization: 'Greendale'
|
|
district: 'Green District'
|
|
}
|
|
}, attrs)
|
|
}
|
|
|