restructured material
This commit is contained in:
@ -27,6 +27,9 @@ const router = express.Router();
|
||||
// TODO: convert filter value to number according to table model
|
||||
// TODO: validation for filter parameters
|
||||
// TODO: location/device sort/filter
|
||||
|
||||
// TODO: think about material numbers
|
||||
|
||||
router.get('/samples', async (req, res, next) => {
|
||||
if (!req.auth(res, ['read', 'write', 'maintain', 'dev', 'admin'], 'all')) return;
|
||||
|
||||
@ -311,7 +314,7 @@ router.get('/samples', async (req, res, next) => {
|
||||
if (!fieldsToAdd.find(e => /spectrum\./.test(e))) { // use streaming when including spectrum files
|
||||
collection.aggregate(query).exec((err, data) => {
|
||||
if (err) return next(err);
|
||||
if (data[0].count) {
|
||||
if (data[0] && data[0].count) {
|
||||
res.header('x-total-items', data[0].count.length > 0 ? data[0].count[0].count : 0);
|
||||
res.header('Access-Control-Expose-Headers', 'x-total-items');
|
||||
data = data[0].samples;
|
||||
@ -425,14 +428,12 @@ router.put('/sample/' + IdValidate.parameter(), (req, res, next) => {
|
||||
|
||||
// only maintain and admin are allowed to edit other user's data
|
||||
if (sampleData.user_id.toString() !== req.authDetails.id && !req.auth(res, ['maintain', 'admin'], 'basic')) return;
|
||||
|
||||
if (sample.hasOwnProperty('material_id')) {
|
||||
if (!await materialCheck(sample, res, next)) return;
|
||||
}
|
||||
else if (sample.hasOwnProperty('color')) {
|
||||
if (!await materialCheck(sample, res, next, sampleData.material_id)) return;
|
||||
}
|
||||
|
||||
if (sample.hasOwnProperty('condition') && !(_.isEmpty(sample.condition) && _.isEmpty(sampleData.condition))) { // do not execute check if condition is and was empty
|
||||
if (!await conditionCheck(sample.condition, 'change', res, next, sampleData.condition.condition_template.toString() !== sample.condition.condition_template)) return;
|
||||
}
|
||||
@ -615,11 +616,8 @@ module.exports = router;
|
||||
|
||||
async function numberGenerate (sample, req, res, next) { // generate number in format Location32, returns false on error
|
||||
const sampleData = await SampleModel
|
||||
// .findOne({number: new RegExp('^' + req.authDetails.location + '[0-9]+$', 'm')})
|
||||
// .sort({number: -1})
|
||||
// .lean()
|
||||
.aggregate([
|
||||
{$match: {number: new RegExp('^' + 'Rng' + '[0-9]+$', 'm')}},
|
||||
{$match: {number: new RegExp('^' + req.authDetails.location + '[0-9]+$', 'm')}},
|
||||
// {$addFields: {number2: {$toDecimal: {$arrayElemAt: [{$split: [{$arrayElemAt: [{$split: ['$number', 'Rng']}, 1]}, '_']}, 0]}}}}, // not working with MongoDb 3.6
|
||||
{$addFields: {sortNumber: {$let: {
|
||||
vars: {tmp: {$concat: ['000000000000000000000000000000', {$arrayElemAt: [{$split: [{$arrayElemAt: [{$split: ['$number', 'Rng']}, 1]}, '_']}, 0]}]}},
|
||||
@ -650,10 +648,6 @@ async function materialCheck (sample, res, next, id = sample.material_id) { //
|
||||
res.status(400).json({status: 'Material not available'});
|
||||
return false;
|
||||
}
|
||||
if (sample.hasOwnProperty('color') && sample.color !== '' && !materialData.numbers.find(e => e.color === sample.color)) { // color for material not specified
|
||||
res.status(400).json({status: 'Color not available for material'});
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -764,7 +758,6 @@ function addFilterQueries (queryPtr, filters) { // returns array of match queri
|
||||
}
|
||||
|
||||
function filterQueries (filters) {
|
||||
console.log(filters);
|
||||
return filters.map(e => {
|
||||
if (e.mode === 'or') { // allow or queries (needed for $ne added)
|
||||
return {['$' + e.mode]: e.values};
|
||||
|
Reference in New Issue
Block a user