Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { MyModels } from "../models";
import {literal, Sequelize, Transaction} from "sequelize";
import Rating from "../types/Rating";
import { RatingAttributes } from "../models/Ratings";
import Position, { GeoJSONPoint, PositionParams } from "../types/Position";
import { ConflictError, InvalidKeyError } from "../types/errors";
import {logger} from "../server";
/**
* Add a dumpster to the database table.
* When adding, the dumpster does not yet have an ID.
* A rather complex routine since a revision must be created,
* and the dumpster's current revision must be set to the one that was added.
*
* @param dumpster
* @return The newly posted data, with an ID
*/
export default function ({
Ratings,
sequelize,
}: MyModels) {
return {
/**
* Adds a rating to a dumpster, returning the inserted entity
*
* @param dumpsterID
* @param rating
* @param userID
*/
addOne: async (dumpsterID : number, rating : number, userID : number ) => {
// Perform transaction
return await sequelize.transaction(async t => {
return await Ratings.create(
{
dumpsterID,
rating,
userID
},
{transaction: t},
).catch(_ => {
throw new ConflictError(
"A rating already exists for this dumpster by this user",
);
});
});
},
/**
* update a rating to a dumpster, returning the inserted entity
*
* @param userID
* @param dumpsterID
* @param rating
*/
updateOne: async (userID : number, dumpsterID : number, rating : number) => {
return sequelize.transaction(async t => {
// Check that the pair of revision and dumpster ID is valid
const match = await Ratings.findOne({
where: {
userID,
dumpsterID,
},
transaction: t,
});
Iif (!match)
throw new InvalidKeyError(
"There is no rating for this dumpster from this user",
);
const updatedRating = await Ratings.update(
{
rating,
},
{
where: {
userID,
dumpsterID,
},
transaction: t,
},
);
Iif(!updatedRating) return false;
else return true;
});
},
}
} |