aboutsummaryrefslogtreecommitdiffstats
path: root/db/normalized/vouchers.js
blob: fa5e12a4dda84c23ce7a58d728194b2abd7ccf8f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
exports.up = function(knex) {
  return knex.schema.createTable('vouchers', function(t) {
    t.increments('id').unsigned().primary();

    t.int('invoice_id').notNull();
    t.foreign('invoice_id').references('invoices.id');

    t.string('redemption_code').notNull();
  
    t.enu('status', ['pending', 'redeemed', 'cancelled']).notNull();
  
    t.timestamps();
  })
}

exports.down = function(knex) {
  return knex.schema.dropTable('vouchers');
};
an class="p">(['lodash'], function (_) { var log = console; function handleNestedFields(object, key, params, paramType) { var attributes = key.split('.'); var field = attributes[0]; params.push(field); if (attributes.length > 1 && paramType[params.join('.')] == 'Object') { var nestedField = attributes.slice(1).join('.'); if (!object[field]) object[field] = {}; if (typeof object[field] == 'object') { object[field][nestedField] = object[key]; delete object[key]; handleNestedFields(object[field], nestedField, params, paramType); } } } function handleNestedFieldsForAllParams(param, paramType) { var result = Object.assign({}, param); Object.keys(result).forEach(function (key) { handleNestedFields(result, key, [], paramType); }); return result } function handleArraysAndObjectFields(param, paramType) { var result = Object.assign({}, param); Object.keys(paramType).forEach(function (key) { if (result[key] && (paramType[key].endsWith('[]') || paramType[key] === 'Object')) { try { result[key] = JSON.parse(result[key]); } catch (e) {;} } }); return result } function tryParsingAsType(object, path, type) { var val = _.get(object, path); if (val !== undefined) { if (type === 'Boolean') { if (val === 'true') { _.set(object, path, true); } else if (val === 'false') { _.set(object, path, false); } else { log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')'); } } else if (type === 'Number') { var parsedInt = parseInt(val, 10); if (!_.isNaN(parsedInt)) { _.set(object, path, parsedInt); } else { log.warn('Failed to parse object value at path [' + path + ']. Value: (' + val + '). Type: (' + type + ')'); } } } } function handleNestedAndParsingFields(param, paramType) { var result = handleArraysAndObjectFields(param, paramType); result = handleNestedFieldsForAllParams(result, paramType); return result; } function tryParsingWithTypes(param, paramType) { var result = Object.assign({}, param); Object.keys(paramType).forEach(function (key) { tryParsingAsType(result, key, paramType[key]); }); return result; } // Converts path params in the {param} format to the accepted :param format, used before inserting the URL params. function convertPathParams(url) { return url.replace(/{(.+?)}/g, ':$1'); } function setLogger(logger) { log = logger; } return { handleNestedAndParsingFields, convertPathParams, tryParsingWithTypes, setLogger }; });