import { pcdata } from "../models/pcdata"; import { grade } from "../models/grade"; import { IDtoRef, GetVersion } from "../util"; import { eisei_grade } from "../models/lightning"; import { badge } from "../models/badge"; export const graderaised: EPR = async (info, data, send) => { const version = GetVersion(info); const iidxid = Number($(data).attr().iidxid); const refid = await IDtoRef(iidxid); const gid = Number($(data).attr().gid); const gtype = Number($(data).attr().gtype); let cflg = Number($(data).attr().cflg); let achi = Number($(data).attr().achi); let pcdata = await DB.FindOne(refid, { collection: "pcdata", version: version }); let grade = await DB.FindOne(refid, { collection: "grade", version: version, style: gtype, gradeId: gid, }); if (version >= 23) cflg = Number($(data).attr().cstage); const isTDJ = !_.isNil($(data).element("lightning_play_data")); // lightning model // const hasEiseiData = (!_.isNil($(data).element("eisei_data")) || !_.isNil($(data).element("eisei_grade_data")) || !_.isNil($(data).element("kiwami_data"))); if (isTDJ && hasEiseiData) { let eisei_clear_type: number; let eisei_grade_id: number; let eisei_grade_type: number; let eisei_stage_num: number; let eisei_option: number; let eisei_past_achievement: number[]; let eisei_past_selected_course: number[]; let eisei_max_past_achievement: number[]; let eisei_max_past_selected_course: number[]; switch (version) { case 27: eisei_clear_type = Number($(data).attr("eisei_data").clear_type); eisei_grade_id = Number($(data).attr("eisei_data").grade_id); eisei_grade_type = Number($(data).attr("eisei_data").grade_type); eisei_stage_num = Number($(data).attr("eisei_data").stage_num); eisei_past_achievement = $(data).element("eisei_data").numbers("past_achievement"); eisei_max_past_achievement = $(data).element("eisei_data").numbers("max_past_achievement"); break; case 30: eisei_clear_type = Number($(data).element("eisei_data").attr().clear_type); eisei_grade_id = Number($(data).element("eisei_data").attr().grade_id); eisei_grade_type = Number($(data).element("eisei_data").attr().grade_type); eisei_stage_num = Number($(data).element("eisei_data").attr().stage_num); eisei_option = Number($(data).element("eisei_data").attr().option); eisei_past_achievement = $(data).element("eisei_data").numbers("past_achievement"); eisei_past_selected_course = $(data).element("eisei_data").numbers("past_selected_course"); eisei_max_past_achievement = $(data).element("eisei_data").numbers("max_past_achievement"); eisei_max_past_selected_course = $(data).element("eisei_data").numbers("max_past_selected_course"); break; case 31: case 32: eisei_clear_type = Number($(data).attr("kiwami_data").clear_type); eisei_grade_id = Number($(data).attr("kiwami_data").grade_id); eisei_grade_type = Number($(data).attr("kiwami_data").grade_type); eisei_stage_num = Number($(data).attr("kiwami_data").stage_num); eisei_option = Number($(data).attr("kiwami_data").option); eisei_past_achievement = $(data).element("kiwami_data").numbers("past_achievement"); eisei_past_selected_course = $(data).element("kiwami_data").numbers("past_selected_course"); eisei_max_past_achievement = $(data).element("kiwami_data").numbers("max_past_achievement"); eisei_max_past_selected_course = $(data).element("kiwami_data").numbers("max_past_selected_course"); break; default: eisei_clear_type = Number($(data).attr("eisei_grade_data").clear_type); eisei_grade_id = Number($(data).attr("eisei_grade_data").grade_id); eisei_grade_type = Number($(data).attr("eisei_grade_data").grade_type); eisei_stage_num = Number($(data).attr("eisei_grade_data").stage_num); eisei_past_achievement = $(data).element("eisei_grade_data").numbers("past_achievement"); eisei_past_selected_course = $(data).element("eisei_grade_data").numbers("past_selected_course"); eisei_max_past_achievement = $(data).element("eisei_grade_data").numbers("max_past_achievement"); eisei_max_past_selected_course = $(data).element("eisei_grade_data").numbers("max_past_selected_course"); break; } await DB.Upsert( refid, { collection: "eisei_grade", version: version, grade_type: eisei_grade_type, grade_id: eisei_grade_id, }, { $set: { clear_type: eisei_clear_type, stage_num: eisei_stage_num, option: eisei_option, past_achievement: eisei_past_achievement, past_selected_course: eisei_past_selected_course, max_past_achievement: eisei_max_past_achievement, max_past_selected_course: eisei_max_past_selected_course, }, } ); return send.object( K.ATTR({ pnum: "1", // This isn't visible to user and seems leftover // }) ); } let updatePcdata = false; let updateGrade = false; if (_.isNil(pcdata)) return send.deny(); if (_.isNil(grade)) { if (cflg == 4) { if (gtype == 0) pcdata.sgid = Math.max(gid, pcdata.sgid); else pcdata.dgid = Math.max(gid, pcdata.dgid); updatePcdata = true; } updateGrade = true; } else { if (cflg >= grade.maxStage || achi >= grade.archive) { cflg = Math.max(cflg, grade.maxStage); achi = Math.max(achi, grade.archive); updateGrade = true; } if (cflg == 4) { if (gtype == 0) pcdata.sgid = Math.max(gid, pcdata.sgid); else pcdata.dgid = Math.max(gid, pcdata.dgid); updatePcdata = true; } } if (updatePcdata) { await DB.Upsert( refid, { collection: "pcdata", version: version, }, { $set: pcdata } ); } if (updateGrade) { await DB.Upsert( refid, { collection: "grade", version: version, style: gtype, gradeId: gid, }, { $set: { maxStage: cflg, archive: achi, } } ); } if (!_.isNil($(data).element("badge"))) { await DB.Upsert( refid, { collection: "badge", version: version, category_name: "grade", flg_id: Number($(data).attr("badge").badge_flg_id), }, { $set: { flg: Number($(data).attr("badge").badge_flg), } } ); } let gradeUser = await DB.Find(null, { collection: "grade", version: version, style: gtype, gradeId: gid, maxStage: 4, }); return send.object( K.ATTR({ pnum: String(gradeUser.length), }) ); };