Skip to content

Commit

Permalink
Merge branch 'sqlite-overhaul' into records-cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathaniel Moschkin committed Feb 8, 2024
2 parents 2e5a59e + f2306f6 commit 464c83d
Show file tree
Hide file tree
Showing 22 changed files with 4,352 additions and 1,474 deletions.
284 changes: 283 additions & 1 deletion app/controllers/api.controller.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import { Router, Request, Response } from 'express';
import { DataCoreAPI, LogData } from '../logic';
import { ApiResult, DataCoreAPI, LogData } from '../logic';
import { PlayerData } from '../datacore/player';
import { ITrackedAssignment, ITrackedVoyage } from '../datacore/voyage';
import { IFBB_BossBattle_Document } from '../models/BossBattles';
import { CrewTrial, Solve } from '../datacore/boss';

// Assign router to the express.Router() instance
const router: Router = Router();
Expand All @@ -15,6 +19,7 @@ function getLogDataFromReq(req: Request): LogData {
return logData;
}

// This method will be deprecated in favor of /postProfile
router.post('/post_profile', async (req: Request, res: Response, next) => {
if (!req.body || !req.body.dbid || !req.body.player_data) {
res.status(400).send('Whaat?');
Expand Down Expand Up @@ -189,5 +194,282 @@ router.get('/voyagesByCrew', async (req: Request, res: Response, next) => {
}
});

/** Overhauled SQLite routes */

router.get('/queryAlive', async (req: Request, res: Response, next) => {
if (!req.query || !req.query.what) {
res.status(400).send('Whaat?');
return;
}

try {
let apiResult = {
Status: 200,
Body: {
service: req.query.what,
result: "UP"
}
}

res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});


router.post('/postProfile', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}
try {
let playerData = req.body as PlayerData;
let apiResult = await DataCoreAPI.postPlayerData(playerData.player.dbid.toString(), playerData, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.get('/getProfile', async (req: Request, res: Response, next) => {
if (!req.query || (!req.query.dbid && !req.query.dbidhash)) {
res.status(400).send('Whaat?');
return;
}

try {
let apiResult: ApiResult | undefined = undefined;

if (req.query.dbid) {
apiResult = await DataCoreAPI.sqliteGetPlayerData(Number.parseInt(req.query.dbid.toString()));
}
else if (req.query.dbidhash) {
apiResult = await DataCoreAPI.sqliteGetPlayerData(undefined, req.query.dbidhash.toString());
}
if (apiResult) {
res.status(apiResult.Status).send(apiResult.Body);
}
else {
res.status(500).send();
}
} catch (e) {
next(e);
}
});


router.post('/postVoyage', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}
try {
let dbid = req.body.dbid;
let voyage = req.body.voyage as ITrackedVoyage;
let apiResult = await DataCoreAPI.sqlitePostTrackedVoyage(dbid, voyage, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.get('/getVoyages', async (req: Request, res: Response, next) => {
if (!req.query || (!req.query.dbid && !req.query.trackerId )) {
res.status(400).send('Whaat?');
return;
}

try {
let dbid = req.query?.dbid ? Number.parseInt(req.query.dbid.toString()) : undefined;
let trackerId = req.query?.trackerId ? Number.parseInt(req.query.trackerId.toString()) : undefined;
let apiResult = await DataCoreAPI.sqliteGetTrackedVoyages(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.post('/postAssignment', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}

try {
let dbid = Number.parseInt(req.body.dbid);
let crew = req.body.crew;
let assignment = req.body.assignment as ITrackedAssignment;
let apiResult = await DataCoreAPI.sqlitePostTrackedAssignment(dbid, crew, assignment, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.post('/postAssignments', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}

try {
let dbid = Number.parseInt(req.body.dbid);
let assign = req.body.assignments as { [key: string]: ITrackedAssignment[] };
let crew = Object.keys(assign);
let assignmap = Object.values(assign);
let assignments = [] as ITrackedAssignment[];
let finalcrew = [] as string[];
let x = 0;

for (let a1 of assignmap) {
let symbol = crew[x];
for (let a2 of a1) {
assignments.push(a2);
finalcrew.push(symbol);
}
x++;
}

let apiResult = await DataCoreAPI.sqlitePostTrackedAssignmentsMany(dbid, finalcrew, assignments, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.get('/getAssignments', async (req: Request, res: Response, next) => {
if (!req.query || (!req.query.dbid && !req.query.trackerId )) {
res.status(400).send('Whaat?');
return;
}

try {
let dbid = req.query?.dbid ? Number.parseInt(req.query.dbid.toString()) : undefined;
let trackerId = req.query?.trackerId ? Number.parseInt(req.query.trackerId.toString()) : undefined;
let apiResult = await DataCoreAPI.sqliteGetTrackedVoyages(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.get('/getTrackedData', async (req: Request, res: Response, next) => {
if (!req.query || (!req.query.dbid && !req.query.trackerId )) {
res.status(400).send('Whaat?');
return;
}

try {
let dbid = req.query?.dbid ? Number.parseInt(req.query.dbid.toString()) : undefined;
let trackerId = req.query?.trackerId ? Number.parseInt(req.query.trackerId.toString()) : undefined;
let apiResult = await DataCoreAPI.sqliteGetTrackedData(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.post('/postBossBattle', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}

try {
if ("id" in req.body) {
req.body.bossBattleId = req.body.id;
delete req.body.id;
}
let battle = req.body as IFBB_BossBattle_Document;
let apiResult = await DataCoreAPI.sqlitePostBossBattle(battle);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});


router.post('/postBossBattleSolves', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}

try {
let fleetId = req.body.fleetId as number;
let bossBattleId = req.body.bossBattleId as number;
let chainIndex = req.body.chainIndex as number;
let solves = req.body.solves as Solve[];

if (!fleetId || !bossBattleId || !chainIndex || !solves) {
res.status(400).send("Bad data");
}

let apiResult = await DataCoreAPI.sqlitePostSolves(fleetId, bossBattleId, chainIndex, solves);

res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

router.post('/postBossBattleTrials', async (req: Request, res: Response, next) => {
if (!req.body) {
res.status(400).send('Whaat?');
return;
}

try {
let fleetId = req.body.fleetId as number;
let bossBattleId = req.body.bossBattleId as number;
let chainIndex = req.body.chainIndex as number;
let trials = req.body.trials as CrewTrial[];

if (!fleetId || !bossBattleId || !chainIndex || !trials) {
res.status(400).send("Bad data");
}

let apiResult = await DataCoreAPI.sqlitePostTrials(fleetId, bossBattleId, chainIndex, trials);

res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});


router.get('/getBossBattle', async (req: Request, res: Response, next) => {
if (!req.query || !req.query.fleetId || (!req.query.room && !req.query.id)) {
res.status(400).send('Whaat?');
return;
}

try {
let room = undefined as string | undefined;
let id = undefined as number | undefined;
let fleetId: number | undefined = undefined;

if (req.query.room) {
room = req.query.room as string;
}
if (req.query.id) {
id = Number.parseInt(req.query.id as string);
}
if (req.query.fleetId) {
fleetId = Number.parseInt(req.query.fleetId as string);
}
else {
res.status(500).send({});
return;
}

let apiResult = await DataCoreAPI.sqliteGetCollaboration(fleetId, id, room);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
}
});

// Export the express.Router() instance to be used by server.ts
export const ApiController: Router = router;
62 changes: 62 additions & 0 deletions app/datacore/archetype.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { Icon } from "./game-elements"

export interface ArchetypeRoot20 {
archetypes: Archetype20[]
}

export interface ArchetypeRoot17 {
archetypes: Archetype17[]
}

export interface ArchetypeBase {
id: number;
type: string | number;
symbol: string;
name: string;
icon: Icon;
flavor: string;
rarity: number;
recipe?: ArchetypeRecipe;
item_sources: ItemSource[];
bonuses?: ArchetypeBonus;
short_name?: string;
}

export interface Archetype20 extends ArchetypeBase {
type: string;
item_type: number;
}

export interface Archetype17 extends ArchetypeBase {
type: number;
}

export interface ArchetypeRecipe {
demands: ArchetypeDemand[]
validity_hash: string
}

export interface ArchetypeDemand {
archetype_id: number
count: number
}

export interface ItemSource {
challenge_id?: number
challenge_skill?: string
challenge_difficulty?: number
type: number
id: number
name: string
energy_quotient: number
chance_grade: number
place?: string
mission?: number
dispute?: number
mastery?: number
}

export interface ArchetypeBonus {
[key: string]: number | undefined;
}

Loading

0 comments on commit 464c83d

Please sign in to comment.