Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
{
"version": 3,
"sources": ["../../../../server/chat-plugins/trivia/transactions.ts"],
"sourcesContent": ["/**\n * SQL transactions for the Trivia plugin.\n */\n\nimport type { TransactionEnvironment } from '../../../lib/sql';\nimport type { TriviaHistory, TriviaQuestion } from './trivia';\n\nexport const transactions = {\n\taddHistory: (\n\t\targs: { history: Iterable<TriviaHistory>, gameHistoryInsertion: string, scoreHistoryInsertion: string },\n\t\tenv: TransactionEnvironment\n\t) => {\n\t\tconst gameHistoryInsertion = env.statements.get(args.gameHistoryInsertion);\n\t\tconst scoreHistoryInsertion = env.statements.get(args.scoreHistoryInsertion);\n\t\tif (!gameHistoryInsertion || !scoreHistoryInsertion) throw new Error('Statements not found');\n\n\t\tfor (const game of args.history) {\n\t\t\tconst { lastInsertRowid } = gameHistoryInsertion.run(\n\t\t\t\tgame.mode, game.length, game.category, game.startTime, game.creator, Number(game.givesPoints)\n\t\t\t);\n\t\t\tfor (const userid in game.scores) {\n\t\t\t\tscoreHistoryInsertion.run(lastInsertRowid, userid, game.scores[userid]);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\teditQuestion(\n\t\targs: { oldQuestionText: string, newQuestionText?: string, newAnswers?: string[] },\n\t\tenv: TransactionEnvironment,\n\t) {\n\t\t// Question editing is likely to be infrequent, so I've optimized for readability and proper argument checking\n\t\t// rather than performance (i.e. not passing in prepared statements).\n\t\tconst { oldQuestionText, newQuestionText, newAnswers } = args;\n\n\t\tif (newAnswers) {\n\t\t\tconst questionID = (env.db\n\t\t\t\t.prepare('SELECT question_id FROM trivia_questions WHERE question = ?')\n\t\t\t\t.get(oldQuestionText) as AnyObject | null)?.question_id;\n\t\t\tif (!questionID) throw new Error('Question not found');\n\t\t\tenv.db.prepare('DELETE FROM trivia_answers WHERE question_id = ?').run(questionID);\n\t\t\tconst insert = env.db.prepare('INSERT INTO trivia_answers (question_id, answer) VALUES (?, ?)');\n\t\t\tfor (const answer of newAnswers) {\n\t\t\t\tinsert.run([questionID, answer]);\n\t\t\t}\n\t\t}\n\n\t\tif (newQuestionText) {\n\t\t\tenv.db\n\t\t\t\t.prepare(`UPDATE trivia_questions SET question = ? WHERE question = ?`)\n\t\t\t\t.run([newQuestionText, oldQuestionText]);\n\t\t}\n\t},\n\n\taddQuestions: (\n\t\targs: {\n\t\t\tquestions: Iterable<TriviaQuestion>,\n\t\t\tquestionInsertion: string,\n\t\t\tanswerInsertion: string,\n\t\t\tisSubmission: boolean,\n\t\t},\n\t\tenv: TransactionEnvironment\n\t) => {\n\t\tconst questionInsertion = env.statements.get(args.questionInsertion);\n\t\tconst answerInsertion = env.statements.get(args.answerInsertion);\n\t\tif (!questionInsertion || !answerInsertion) throw new Error('Statements not found');\n\n\t\tconst isSubmissionForSQLite = Number(args.isSubmission);\n\t\tfor (const question of args.questions) {\n\t\t\tconst { lastInsertRowid } = questionInsertion.run(\n\t\t\t\tquestion.question, question.category, question.addedAt, question.user, isSubmissionForSQLite\n\t\t\t);\n\t\t\tfor (const answer of question.answers) {\n\t\t\t\tanswerInsertion.run(lastInsertRowid, answer);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n};\n"],
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,MAAM,eAAe;AAAA,EAC3B,YAAY,CACX,MACA,QACI;AACJ,UAAM,uBAAuB,IAAI,WAAW,IAAI,KAAK,oBAAoB;AACzE,UAAM,wBAAwB,IAAI,WAAW,IAAI,KAAK,qBAAqB;AAC3E,QAAI,CAAC,wBAAwB,CAAC;AAAuB,YAAM,IAAI,MAAM,sBAAsB;AAE3F,eAAW,QAAQ,KAAK,SAAS;AAChC,YAAM,EAAE,gBAAgB,IAAI,qBAAqB;AAAA,QAChD,KAAK;AAAA,QAAM,KAAK;AAAA,QAAQ,KAAK;AAAA,QAAU,KAAK;AAAA,QAAW,KAAK;AAAA,QAAS,OAAO,KAAK,WAAW;AAAA,MAC7F;AACA,iBAAW,UAAU,KAAK,QAAQ;AACjC,8BAAsB,IAAI,iBAAiB,QAAQ,KAAK,OAAO,MAAM,CAAC;AAAA,MACvE;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,aACC,MACA,KACC;AAGD,UAAM,EAAE,iBAAiB,iBAAiB,WAAW,IAAI;AAEzD,QAAI,YAAY;AACf,YAAM,aAAc,IAAI,GACtB,QAAQ,6DAA6D,EACrE,IAAI,eAAe,GAAwB;AAC7C,UAAI,CAAC;AAAY,cAAM,IAAI,MAAM,oBAAoB;AACrD,UAAI,GAAG,QAAQ,kDAAkD,EAAE,IAAI,UAAU;AACjF,YAAM,SAAS,IAAI,GAAG,QAAQ,gEAAgE;AAC9F,iBAAW,UAAU,YAAY;AAChC,eAAO,IAAI,CAAC,YAAY,MAAM,CAAC;AAAA,MAChC;AAAA,IACD;AAEA,QAAI,iBAAiB;AACpB,UAAI,GACF,QAAQ,6DAA6D,EACrE,IAAI,CAAC,iBAAiB,eAAe,CAAC;AAAA,IACzC;AAAA,EACD;AAAA,EAEA,cAAc,CACb,MAMA,QACI;AACJ,UAAM,oBAAoB,IAAI,WAAW,IAAI,KAAK,iBAAiB;AACnE,UAAM,kBAAkB,IAAI,WAAW,IAAI,KAAK,eAAe;AAC/D,QAAI,CAAC,qBAAqB,CAAC;AAAiB,YAAM,IAAI,MAAM,sBAAsB;AAElF,UAAM,wBAAwB,OAAO,KAAK,YAAY;AACtD,eAAW,YAAY,KAAK,WAAW;AACtC,YAAM,EAAE,gBAAgB,IAAI,kBAAkB;AAAA,QAC7C,SAAS;AAAA,QAAU,SAAS;AAAA,QAAU,SAAS;AAAA,QAAS,SAAS;AAAA,QAAM;AAAA,MACxE;AACA,iBAAW,UAAU,SAAS,SAAS;AACtC,wBAAgB,IAAI,iBAAiB,MAAM;AAAA,MAC5C;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;",
"names": []
}