Skip to content

Commit

Permalink
add pos in waiting-snake
Browse files Browse the repository at this point in the history
  • Loading branch information
paulhollmann committed Apr 9, 2024
1 parent 8528570 commit ecb6176
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { DataType } from "sequelize-typescript";
import { QueryInterface } from "sequelize";
import { NonAttribute, QueryInterface, VIRTUAL } from "sequelize";
import { TrainingRequest } from "../../src/models/TrainingRequest";
import { TrainingStation } from "../../src/models/TrainingStation";

export const TRAINING_REQUEST_TABLE_STATUS_TYPES = ["requested", "planned", "cancelled", "completed"] as const;

Expand Down Expand Up @@ -64,6 +66,9 @@ export const TRAINING_REQUEST_TABLE_ATTRIBUTES = {
allowNull: false,
defaultValue: "requested",
},
number_in_queue: {
type: DataType.VIRTUAL(DataType.INTEGER),
},
expires: {
type: DataType.DATE,
allowNull: false,
Expand Down
13 changes: 11 additions & 2 deletions src/controllers/solo/SoloAdminController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { User } from "../../models/User";
import { EndorsementGroupsBelongsToUsers } from "../../models/through/EndorsementGroupsBelongsToUsers";
import { TrainingSession } from "../../models/TrainingSession";
import PermissionHelper from "../../utility/helper/PermissionHelper";
import { createSolo as vateudCreateSolo } from "../../libraries/vateud/VateudCoreLibrary";
import { createSolo as vateudCreateSolo, removeSolo as vateudRemoveSolo } from "../../libraries/vateud/VateudCoreLibrary";
import { EndorsementGroup } from "../../models/EndorsementGroup";

type CreateSoloRequestBody = {
Expand Down Expand Up @@ -58,7 +58,7 @@ async function createSolo(request: Request, response: Response, next: NextFuncti
id: Number(body.endorsement_group_id),
},
});

if (endorsementGroup) await vateudCreateSolo(solo, endorsementGroup);

const returnUser = await User.findOne({
Expand Down Expand Up @@ -246,13 +246,22 @@ async function deleteSolo(request: Request, response: Response, next: NextFuncti
return;
}

const solo = await UserSolo.findOne({
where: {
id: body.solo_id,
},
});

// 1. Delete all endorsements that are linked to the solo.
await EndorsementGroupsBelongsToUsers.destroy({
where: {
solo_id: body.solo_id,
},
});

// 2. Delete the VATEUD Core Solo
if (solo) await vateudRemoveSolo(solo);

await UserSolo.destroy({
where: {
id: body.solo_id,
Expand Down
11 changes: 10 additions & 1 deletion src/controllers/training-request/TrainingRequestController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ import { HttpStatusCode } from "axios";
* @param response
*/
async function create(request: Request, response: Response) {
const body = request.body as { course_id: number; training_type_id: number; comment?: string; training_station_id?: number };
const body = request.body as {
course_id: number;
training_type_id: number;
comment?: string;
training_station_id?: number;
};
const user: User = response.locals.user;

// const validation = ValidationHelper.validate([
Expand Down Expand Up @@ -102,6 +107,10 @@ async function getOpen(request: Request, response: Response) {
include: [TrainingRequest.associations.training_type, TrainingRequest.associations.course],
});

for (const trainingRequest of trainingRequests) {
await trainingRequest.appendNumberInQueue();
}

response.send(trainingRequests);
}

Expand Down
4 changes: 4 additions & 0 deletions src/controllers/user/UserTrainingController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,10 @@ async function getActiveRequestsByUUID(request: Request, response: Response) {
include: [TrainingRequest.associations.training_type, TrainingRequest.associations.training_station],
});

for (const trainingRequest of trainingRequests) {
await trainingRequest.appendNumberInQueue();
}

response.send(
trainingRequests.filter(t => {
return t.status == "requested" || t.status == "planned";
Expand Down
12 changes: 7 additions & 5 deletions src/libraries/vateud/VateudCoreLibrary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,21 +102,23 @@ export async function createSolo(userSolo: UserSolo, endorsementGroup: Endorseme
/**
* Removes a solo.
* On failure, it schedules a job which repeats the same request n times until it succeeds
* @param soloInfo
*/
async function removeSolo(soloInfo: VateudCoreSoloRemoveT) {
export async function removeSolo(userSolo: UserSolo) {
const res = await _send<VateudCoreSoloRemoveResponseT>({
endpoint: `/solo/${soloInfo.vateud_solo_id}`,
endpoint: `/solo/${userSolo.vateud_solo_id}`,
method: "delete",
});

if (!userSolo.vateud_solo_id) return;

if (!res) {
await JobLibrary.scheduleJob(JobTypeEnum.VATEUD_CORE, {
type: VateudCoreTypeEnum.SOLO_REMOVE,
method: "delete",
data: {
solo_remove: {
local_solo_id: soloInfo.local_solo_id,
vateud_solo_id: soloInfo.vateud_solo_id,
local_solo_id: userSolo.id,
vateud_solo_id: userSolo.vateud_solo_id,
},
},
});
Expand Down
13 changes: 12 additions & 1 deletion src/models/TrainingRequest.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Association, CreationOptional, ForeignKey, InferAttributes, InferCreationAttributes, Model, NonAttribute } from "sequelize";
import { Association, CreationOptional, ForeignKey, InferAttributes, InferCreationAttributes, Model, NonAttribute, Op } from "sequelize";
import { User } from "./User";
import { TrainingType } from "./TrainingType";
import { TrainingSession } from "./TrainingSession";
Expand Down Expand Up @@ -40,6 +40,7 @@ export class TrainingRequest extends Model<InferAttributes<TrainingRequest>, Inf
declare course?: NonAttribute<Course>;
declare training_session?: NonAttribute<TrainingSession>;
declare training_station?: NonAttribute<TrainingStation>;
declare number_in_queue?: NonAttribute<number>;

declare static associations: {
user: Association<TrainingRequest, User>;
Expand All @@ -64,6 +65,16 @@ export class TrainingRequest extends Model<InferAttributes<TrainingRequest>, Inf
},
});
}

async appendNumberInQueue(): Promise<void> {
this.number_in_queue = await TrainingRequest.count({
where: {
training_type_id: this.training_type_id,
status: "requested",
id: { [Op.lte]: this.id },
},
});
}
}

TrainingRequest.init(TRAINING_REQUEST_TABLE_ATTRIBUTES, {
Expand Down

0 comments on commit ecb6176

Please sign in to comment.