Skip to content

Instantly share code, notes, and snippets.

@maple3142
Last active October 13, 2018 08:45
Show Gist options
  • Select an option

  • Save maple3142/be591eeee538e5df4ad7cc109f5343a6 to your computer and use it in GitHub Desktop.

Select an option

Save maple3142/be591eeee538e5df4ad7cc109f5343a6 to your computer and use it in GitHub Desktop.
BahamutQA Api
{
"timeZone": "Asia/Taipei",
"dependencies": {
},
"webapp": {
"access": "ANYONE_ANONYMOUS",
"executeAs": "USER_DEPLOYING"
},
"exceptionLogging": "STACKDRIVER",
"executionApi": {
"access": "ANYONE"
}
}
function getSheet() {
return SpreadsheetApp.openById('1dusrLOmVeFghqpjH95XxlrWNjCJ-F1ydTH5xdOJ0sVY')
}
function getData(sheet) {
return sheet.getDataRange().getValues()
}
function biSearch(ar, fn) {
var l = 0,
r = ar.length - 1
while (l < r) {
var mid = Math.floor((l + r) / 2)
var c = fn(ar[mid])
if (c === 0) return ar[mid]
else if (c === 1) r = mid - 1
else if (c === -1) l = mid + 1
else return null
}
var d = ar[l]
if (!d) return null
else return fn(d) === 0 ? d : null
}
function compare(a, b) {
if (a == b) return 0
else if (a > b) return 1
else return -1
}
function createJson(obj) {
return ContentService.createTextOutput(JSON.stringify(obj)).setMimeType(ContentService.MimeType.JSON)
}
function doGet(e) {
var rawData = getData(getSheet())
if (e.parameter.sn) {
const sn = e.parameter.sn
var result = biSearch(rawData, function(d) {
return compare(d[0], sn)
})
return createJson(result ? row2obj(result) : null)
}
if (e.parameter.type !== 'full') {
return createJson(getSimpleData(rawData))
}
return createJson(parseData(rawData))
}
function doPost(e) {
const error = createJson({ result: 'error' })
Logger.log(e.parameter)
const data = e.parameter.data
if (!data) return error
const x = data.split(',').map(function(x) {
return x.replace(/COMMA/g, ',')
})
if (x.length < 7) return error
const sheet = getSheet()
const rawData = getData(sheet)
const sn = x[0] // string
const snExists = biSearch(rawData, function(d) {
return compare(d[0], sn)
})
if (snExists !== null) return error
sheet.appendRow(x)
Logger.log(x)
sheet.sort(1)
return createJson({ result: 'success' })
}
function row2obj(row) {
return {
sn: parseInt(row[0]),
question: row[1],
answer1: row[2],
answer2: row[3],
answer3: row[4],
answer4: row[5],
answer: parseInt(row[6])
}
}
function parseData(data) {
const result = []
for (var i = 0; i < data.length; i++) {
result.push(row2obj(data[i]))
}
return result
}
function getSimpleData(data) {
var obj = {}
for (var i = 0; i < data.length; i++) {
obj[data[i][0]] = parseInt(data[i][6])
}
return obj
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment