Skip to content

Commit

Permalink
refactor & training session changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ngoerlitz committed Sep 9, 2023
1 parent 2776172 commit 5c4f0f6
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 43 deletions.
5 changes: 3 additions & 2 deletions src/Router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,11 @@ router.use(
routerGroup((r: Router) => {
r.get("/template", LogTemplateAdministrationController.getAll);
r.post("/template", LogTemplateAdministrationController.create);
r.get("/template/min", LogTemplateAdministrationController.getAllMinimalData);

r.get("/template/:id", LogTemplateAdministrationController.getByID);
r.patch("/template/:id", LogTemplateAdministrationController.update);

r.get("/template/min", LogTemplateAdministrationController.getAllMinimalData);
r.delete("/template/:id", LogTemplateAdministrationController.destroy);
})
);

Expand Down
23 changes: 23 additions & 0 deletions src/controllers/log-template/LogTemplateAdminController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,33 @@ async function update(request: Request, response: Response, next: NextFunction)
}
}

/**
* Delete a training log template
* @param request
* @param response
* @param next
*/
async function destroy(request: Request, response: Response, next: NextFunction) {
try {
const params = request.params as { id: string };

await TrainingLogTemplate.destroy({
where: {
id: params.id,
},
});

response.sendStatus(HttpStatusCode.Ok);
} catch (e) {
next(e);
}
}

export default {
getAll,
getAllMinimalData,
getByID,
create,
update,
destroy,
};
76 changes: 37 additions & 39 deletions src/controllers/training-session/TrainingSessionAdminController.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Request, Response } from "express";
import { NextFunction, Request, Response } from "express";
import { User } from "../../models/User";
import _TrainingSessionAdminValidator from "./_TrainingSessionAdminValidator";
import { Course } from "../../models/Course";
Expand Down Expand Up @@ -358,39 +358,39 @@ async function getCourseTrainingTypes(request: Request, response: Response) {
response.send(session.course?.training_types);
}

async function createTrainingLogs(request: Request, response: Response) {
const user: User = request.body.user;
const params = request.params as { uuid: string };
const body = request.body as {
user_id: number;
next_training_id: number;
course_completed: boolean;
log_public: boolean;
passed: boolean;
user_log: any[];
}[];

if (body == null || body.length == 0) {
response.sendStatus(HttpStatusCode.BadRequest);
return;
}

const session = await TrainingSession.findOne({
where: {
uuid: params.uuid,
},
include: [TrainingSession.associations.course],
});

if (session == null) {
response.sendStatus(HttpStatusCode.InternalServerError);
return;
}

async function createTrainingLogs(request: Request, response: Response, next: NextFunction) {
// All of these steps MUST complete, else we are left in an undefined state
const t = await sequelize.transaction();

try {
const user: User = request.body.user;
const params = request.params as { uuid: string };
const body = request.body as {
user_id: number;
next_training_id: number;
course_completed: boolean;
log_public: boolean;
passed: boolean;
user_log: any[];
}[];

if (body == null || body.length == 0) {
response.sendStatus(HttpStatusCode.BadRequest);
return;
}

const session = await TrainingSession.findOne({
where: {
uuid: params.uuid,
},
include: [TrainingSession.associations.course],
});

if (session == null) {
response.sendStatus(HttpStatusCode.InternalServerError);
return;
}

for (let i = 0; i < body.length; i++) {
const user_id = body[i].user_id;

Expand Down Expand Up @@ -476,18 +476,16 @@ async function createTrainingLogs(request: Request, response: Response) {
}

await t.commit();

await session.update({
completed: true,
});

response.sendStatus(HttpStatusCode.Ok);
} catch (e) {
await t.rollback();
response.sendStatus(HttpStatusCode.BadRequest);
console.error(e);
return;
next(e);
}

await session.update({
completed: true,
});

response.sendStatus(HttpStatusCode.Ok);
}

export default {
Expand Down
5 changes: 3 additions & 2 deletions src/middlewares/ExceptionInterceptorMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import { ValidationException } from "../exceptions/ValidationException";
import { UnauthorizedException } from "../exceptions/UnauthorizedException";
import { VatsimConnectException } from "../exceptions/VatsimConnectException";

const sequelizeErrors = ["SequelizeValidationError", "SequelizeForeignKeyConstraintError"];

export async function exceptionInterceptorMiddleware(error: any, request: Request, response: Response, next: NextFunction) {
if (error instanceof UnauthorizedException) {
response.status(HttpStatusCode.Unauthorized).send({
Expand Down Expand Up @@ -42,7 +44,7 @@ export async function exceptionInterceptorMiddleware(error: any, request: Reques
return;
}

if (error.name === "SequelizeValidationError") {
if (sequelizeErrors.includes(error.name)) {
response.status(HttpStatusCode.InternalServerError).send({
path: request.url,
method: request.method,
Expand All @@ -52,7 +54,6 @@ export async function exceptionInterceptorMiddleware(error: any, request: Reques
return;
}

console.error(error);
response.status(HttpStatusCode.InternalServerError).send({
path: request.url,
method: request.method,
Expand Down

0 comments on commit 5c4f0f6

Please sign in to comment.