Files
legolog/src/controllers/brick-controller.js
Ben 3ed429f0f4 fixed basket bug and added brick page
Former-commit-id: d08446b9bf6d9398ed6762b7688ce493509e4731
2022-04-15 17:21:23 +01:00

74 lines
2.5 KiB
JavaScript

const Database = require('../database/database.js');
const PgFormat = require('pg-format');
async function GetBulkBricks(bricksArr) {
await Database.Query('BEGIN TRANSACTION;');
const dbres = await Database.Query(PgFormat(`
SELECT lego_brick.id, lego_brick.name, tag.name AS "tag", inv.price, inv.new_price AS "discount"
FROM lego_brick
LEFT JOIN lego_brick_tag AS tags ON tags.brick_id = lego_brick.id
LEFT JOIN tag AS tag ON tags.tag = tag.id
LEFT JOIN lego_brick_inventory AS inv ON inv.brick_id = lego_brick.id
WHERE lego_brick.id IN (%L);
`, bricksArr), []);
await Database.Query('END TRANSACTION;');
// validate database response
if (dbres.rows.length === 0) {
return {
error: 'Bricks not found',
long: 'The bricks you are looking for do not exist',
};
}
const bricks = dbres.rows;
// combine tags into a single array
for (const brick of bricks) {
brick.tags = brick.tag.split(',');
}
return bricks;
}
async function GetBrick(brickId) {
await Database.Query('BEGIN TRANSACTION;');
const dbres = await Database.Query(`
SELECT lego_brick.id, lego_brick.name, tag.name AS "tag",
inv.price, inv.new_price AS "discount", inv.stock,
inv.last_updated AS "last_stock_update",
weight, dimensions_x, dimensions_y, dimensions_z
FROM lego_brick
LEFT JOIN lego_brick_inventory AS inv on inv.brick_id = lego_brick.id
LEFT JOIN lego_brick_tag AS tags ON tags.brick_id = lego_brick.id
LEFT JOIN tag AS tag ON tags.tag = tag.id
WHERE lego_brick.id = $1;
`, [brickId]);
const colDbres = await Database.Query(`
SELECT lego_brick_colour.id, lego_brick_colour.name, lego_brick_colour.hexrgb,
colour_type.name AS "colour_type"
FROM lego_brick_colour
LEFT JOIN colour_type AS colour_type ON lego_brick_colour.col_type = colour_type.id
`, []);
await Database.Query('END TRANSACTION;');
// validate database response
if (dbres.rows.length === 0) {
return {
error: 'Brick not found',
long: 'The brick you are looking for does not exist',
};
}
const brick = dbres.rows[0];
brick.colours = colDbres.rows;
brick.tags = brick.tag.split(',');
brick.type = 'brick';
return brick;
}
module.exports = {
GetBulkBricks,
GetBrick,
};