Skip to content

Commit

Permalink
Move Voyage Tracking to individualized SQLites
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathaniel Moschkin committed Dec 4, 2023
1 parent 4d31e6a commit 6087751
Show file tree
Hide file tree
Showing 8 changed files with 498 additions and 90 deletions.
16 changes: 8 additions & 8 deletions app/controllers/api.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ router.post('/postVoyage', async (req: Request, res: Response, next) => {
try {
let dbid = req.body.dbid;
let voyage = req.body.voyage as ITrackedVoyage;
let apiResult = await DataCoreAPI.mongoPostTrackedVoyage(dbid, voyage, getLogDataFromReq(req));
let apiResult = await DataCoreAPI.sqlitePostTrackedVoyage(dbid, voyage, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand All @@ -289,7 +289,7 @@ router.get('/getVoyages', async (req: Request, res: Response, next) => {
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.mongoGetTrackedVoyages(dbid, trackerId);
let apiResult = await DataCoreAPI.sqliteGetTrackedVoyages(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand All @@ -303,10 +303,10 @@ router.post('/postAssignment', async (req: Request, res: Response, next) => {
}

try {
let dbid = req.body.dbid;
let dbid = Number.parseInt(req.body.dbid);
let crew = req.body.crew;
let assignment = req.body.assignment as ITrackedAssignment;
let apiResult = await DataCoreAPI.mongoPostTrackedAssignment(dbid, crew, assignment, getLogDataFromReq(req));
let apiResult = await DataCoreAPI.sqlitePostTrackedAssignment(dbid, crew, assignment, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand All @@ -320,7 +320,7 @@ router.post('/postAssignments', async (req: Request, res: Response, next) => {
}

try {
let dbid = req.body.dbid;
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);
Expand All @@ -337,7 +337,7 @@ router.post('/postAssignments', async (req: Request, res: Response, next) => {
x++;
}

let apiResult = await DataCoreAPI.mongoPostTrackedAssignmentsMany(dbid, finalcrew, assignments, getLogDataFromReq(req));
let apiResult = await DataCoreAPI.sqlitePostTrackedAssignmentsMany(dbid, finalcrew, assignments, getLogDataFromReq(req));
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand All @@ -353,7 +353,7 @@ router.get('/getAssignments', async (req: Request, res: Response, next) => {
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.mongoGetTrackedVoyages(dbid, trackerId);
let apiResult = await DataCoreAPI.sqliteGetTrackedVoyages(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand All @@ -369,7 +369,7 @@ router.get('/getTrackedData', async (req: Request, res: Response, next) => {
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.mongoGetTrackedData(dbid, trackerId);
let apiResult = await DataCoreAPI.sqliteGetTrackedData(dbid, trackerId);
res.status(apiResult.Status).send(apiResult.Body);
} catch (e) {
next(e);
Expand Down
310 changes: 309 additions & 1 deletion app/logic/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ import { PlayerData } from '../datacore/player';
import { ITrackedAssignment, ITrackedVoyage } from '../datacore/voyage';
import { TrackedCrew, TrackedVoyage } from '../mongoModels/voyageHistory';
import { connectToMongo } from '../mongo';
import { IFBB_BossBattle_Document, IFBB_Solve_Document, IFBB_Trial_Document } from '../mongoModels/playerCollab';
import { IFBB_BossBattle_Document } from '../mongoModels/playerCollab';
import { CrewTrial, Solve } from '../datacore/boss';
import { postOrPutVoyage_sqlite, getVoyagesByDbid_sqlite, getVoyagesByTrackerId_sqlite, postOrPutAssignmentsMany_sqlite, getAssignmentsByDbid_sqlite, getAssignmentsByTrackerId_sqlite, postOrPutAssignment_sqlite } from './voyagetracker';

require('dotenv').config();

Expand Down Expand Up @@ -841,6 +842,313 @@ export class ApiClass {
}




async sqlitePostTrackedVoyage(dbid: number, voyage: ITrackedVoyage, logData: LogData): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Tracked Voyage data', { dbid, voyage, logData });

const timeStamp = new Date();

try {
let res = await postOrPutVoyage_sqlite(dbid, voyage, timeStamp);
if (res >= 300) {
return {
Status: res,
Body: {
'dbid': dbid,
'error': 'Unable to insert record.',
'timeStamp': timeStamp.toISOString()
}
};
}
} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

return {
Status: 201,
Body: {
'dbid': dbid,
'trackerId': voyage.tracker_id,
timeStamp: timeStamp.toISOString()
}
};
}

async sqliteGetTrackedVoyages(dbid?: number, trackerId?: number): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Get voyage data', { dbid, trackerId });
let voyages: TrackedVoyage[] | null = null;

if (!dbid && !trackerId) return {
Status: 400,
Body: { result: "bad input" }
}

if (!dbid) return {
Status: 400,
Body: { result: "bad input" }
}

try {
if (trackerId) {
voyages = (trackerId ? await getVoyagesByTrackerId_sqlite(dbid, trackerId) : null);
}
else {
voyages = await getVoyagesByDbid_sqlite(dbid)
}
} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

if (voyages) {
return {
Status: 200,
Body: voyages
};
}
else {
return {
Status: 200, // 204
Body: []
};
}

}



async sqlitePostTrackedAssignment(dbid: number, crew: string, assignment: ITrackedAssignment, logData: LogData): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Tracked Voyage data', { dbid, voyage: assignment, logData });

const timeStamp = new Date();

try {
let res = await postOrPutAssignment_sqlite(dbid, crew, assignment, timeStamp);
if (res >= 300) {
return {
Status: res,
Body: {
'dbid': dbid,
'error': 'Unable to insert record.',
'timeStamp': timeStamp.toISOString()
}
};
}
} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

return {
Status: 201,
Body: {
'dbid': dbid,
'trackerId': assignment.tracker_id,
timeStamp: timeStamp.toISOString()
}
};
}


async sqlitePostTrackedAssignmentsMany(dbid: number, crew: string[], assignments: ITrackedAssignment[], logData: LogData): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Tracked Voyage data', { dbid, voyage: assignments, logData });

const timeStamp = new Date();

try {
let res = await postOrPutAssignmentsMany_sqlite(dbid, crew, assignments, timeStamp);
if (res >= 300) {
return {
Status: res,
Body: {
'dbid': dbid,
'error': 'Unable to insert record.',
'timeStamp': timeStamp.toISOString()
}
};
}
} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

return {
Status: 201,
Body: {
'dbid': dbid,
'trackerIds': assignments.map(a => a.tracker_id),
timeStamp: timeStamp.toISOString()
}
};
}


async sqliteGetTrackedAssignments(dbid?: number, trackerId?: number): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Get voyage data', { dbid, trackerId });
let assignments: TrackedCrew[] | null = null;

if (!dbid && !trackerId) return {
Status: 400,
Body: { result: "bad input" }
}

if (!dbid) return {
Status: 400,
Body: { result: "bad input" }
}

try {
if (trackerId) {
assignments = (trackerId ? await getAssignmentsByTrackerId_sqlite(dbid, trackerId) : null);
}
else {
assignments = await getAssignmentsByDbid_sqlite(dbid);
}

} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

if (assignments) {
return {
Status: 200,
Body: assignments
};
}
else {
return {
Status: 200, // 204
Body: []
};
}

}


async sqliteGetTrackedData(dbid?: number, trackerId?: number): Promise<ApiResult> {
if (!this.mongoAvailable) return { Status: 500, Body: 'Database is down' };

Logger.info('Get tracked data', { dbid, trackerId });
let voyages: TrackedVoyage[] | null = null;
let assignments: TrackedCrew[] | null = null;

if (!dbid && !trackerId) return {
Status: 400,
Body: { result: "bad input" }
}

if (!dbid) return {
Status: 400,
Body: { result: "bad input" }
}

try {
if (trackerId) {
voyages = (trackerId ? await getVoyagesByTrackerId_sqlite(dbid, trackerId) : null);
assignments = (trackerId ? await getAssignmentsByTrackerId_sqlite(dbid, trackerId) : null);
}
else {
voyages = await getVoyagesByDbid_sqlite(dbid);
assignments = await getAssignmentsByDbid_sqlite(dbid);
}
} catch (err) {
if (typeof err === 'string') {
return {
Status: 500,
Body: err
};
}
else if (err instanceof Error) {
return {
Status: 500,
Body: err.toString()
};
}
}

if (voyages || assignments) {
return {
Status: 200,
Body: {
voyages,
assignments
}
};
}
else {
return {
Status: 200, // 204
Body: { voyages: [], assignments: [] }
};
}

}



}

export let DataCoreAPI = new ApiClass();
Loading

0 comments on commit 6087751

Please sign in to comment.