2014-05-12 17:16:31 -07:00
do (setupLodash = this) ->
GLOBAL._ = require ' lodash '
_.str = require ' underscore.string '
_ . mixin _ . str . exports ( )
2014-09-03 16:14:33 -07:00
GLOBAL.Aether = Aether = require ' aether '
2014-05-12 17:16:31 -07:00
async = require ' async '
serverSetup = require ' ../server_setup '
2016-04-06 10:56:06 -07:00
Level = require ' ../server/models/Level '
LevelSession = require ' ../server/models/LevelSession '
2014-08-30 13:43:56 -07:00
{ createAetherOptions } = require ' ../app/lib/aether_utils '
2014-05-12 17:16:31 -07:00
2014-06-05 16:48:31 -07:00
i = 0
2014-05-12 17:16:31 -07:00
transpileLevelSession = (sessionID, cb) ->
2014-07-01 10:16:26 +08:00
query = LevelSession . findOne ( ' _id ' : sessionID ) . select ( ' team teamSpells submittedCode submittedCodeLanguage ' ) . lean ( )
2014-05-12 17:16:31 -07:00
query . exec (err, session) ->
if err then return cb err
submittedCode = session . submittedCode
2014-06-05 14:06:28 -07:00
unless session . submittedCodeLanguage
2014-10-19 17:38:10 -07:00
console . log ' \n \n \n # {i++} SUBMITTED CODE LANGUAGE DOESN \' T EXIST \n ' , session , ' \n \n '
return cb ( )
2014-06-05 14:06:28 -07:00
else
2014-06-05 16:48:31 -07:00
console . log " Transpiling code for session #{ i ++ } #{ session . _id } in language #{ session . submittedCodeLanguage } "
2014-05-12 17:16:31 -07:00
transpiledCode = { }
2014-06-05 14:06:28 -07:00
#console.log "Updating session #{sessionID}"
2014-05-12 17:16:31 -07:00
for thang , spells of submittedCode
transpiledCode [ thang ] = { }
for spellID , spell of spells
2014-07-01 10:16:26 +08:00
spellName = thang + ' / ' + spellID
2014-08-30 13:43:56 -07:00
continue if session . teamSpells and not ( spellName in session . teamSpells [ session . team ] )
2014-06-05 16:48:31 -07:00
#console.log "Transpiling spell #{spellName}"
2014-08-30 13:43:56 -07:00
aetherOptions = createAetherOptions functionName: spellID , codeLanguage: session . submittedCodeLanguage
2014-05-12 17:16:31 -07:00
aether = new Aether aetherOptions
transpiledCode [ thang ] [ spellID ] = aether . transpile spell
2014-05-25 12:15:32 -07:00
conditions =
2014-07-01 10:16:26 +08:00
' _id ' : sessionID
2014-05-25 12:15:32 -07:00
update =
2014-07-01 10:16:26 +08:00
' transpiledCode ' : transpiledCode
query = LevelSession . update ( conditions , update )
2014-05-25 12:15:32 -07:00
2014-05-14 10:14:18 -07:00
query . exec (err, numUpdated) -> cb err
2014-05-12 17:16:31 -07:00
findLadderLevelSessions = (levelID, cb) ->
2014-05-25 12:15:32 -07:00
queryParameters =
2014-07-01 10:16:26 +08:00
' level.original ' : levelID + ' '
2014-05-12 17:16:31 -07:00
submitted: true
2014-05-25 12:15:32 -07:00
2014-07-01 10:16:26 +08:00
selectString = ' _id '
2014-05-14 10:14:18 -07:00
query = LevelSession . find ( queryParameters ) . select ( selectString ) . lean ( )
2014-05-25 12:15:32 -07:00
2014-05-12 17:16:31 -07:00
query . exec (err, levelSessions) ->
if err then return cb err
2014-07-01 10:16:26 +08:00
levelSessionIDs = _ . pluck levelSessions , ' _id '
2014-05-14 10:14:18 -07:00
async . eachSeries levelSessionIDs , transpileLevelSession , (err) ->
if err then return cb err
2014-06-05 16:48:31 -07:00
return cb null
2014-05-25 12:15:32 -07:00
2014-05-12 17:16:31 -07:00
transpileLadderSessions = ->
2014-05-25 12:15:32 -07:00
queryParameters =
2014-07-01 10:16:26 +08:00
type: ' ladder '
' version.isLatestMajor ' : true
' version.isLatestMinor ' : true
selectString = ' original '
2014-05-14 10:14:18 -07:00
query = Level . find ( queryParameters ) . select ( selectString ) . lean ( )
2014-05-25 12:15:32 -07:00
2014-05-12 17:16:31 -07:00
query . exec (err, ladderLevels) ->
throw err if err
2014-07-01 10:16:26 +08:00
ladderLevels = _ . pluck ladderLevels , ' original '
2014-05-14 10:14:18 -07:00
async . eachSeries ladderLevels , findLadderLevelSessions , (err) ->
2014-05-12 17:16:31 -07:00
throw err if err
2014-05-14 10:14:18 -07:00
2014-05-12 17:16:31 -07:00
serverSetup . connectToDatabase ( )
2014-06-19 15:41:35 -07:00
transpileLadderSessions ( )
2014-06-21 22:31:10 -07:00
# 2014-06-21: took about an hour to do 5480 sessions, ~93/min
# eta: db.level.sessions.find({submitted: true}).count() / 93