rtech-struct
Version:
Rtech Platform Superstruct Entity
105 lines (102 loc) • 4.63 kB
JavaScript
const s = require('superstruct')
const Email = s.define('Email', require('is-email'))
const { ZuluDateTimeStruct, Uuid } = require('./lib')
const Instance = process.env.NODE_APP_INSTANCE || 'DEMO'
exports.bid = function (config = null, auction = null) {
let InstanceName = Instance
let Score = ['0', '0', '0']
let Rating = 3
let Validatoremail = 'shaq@yoctu.com'
let Logo = 'https://www.yoctu.com/wp-content/themes/yoctu/images/logo.svg'
if (config && config.app && config.app.usercodename) InstanceName = Instance
if (config && config.score) Score = config.score
if (config && config.shaq && config.shaq.rating) Rating = config.shaq.rating
if (config && config.shaq && config.app.validatoremail) Validatoremail = config.app.validatoremail
if (config && config.app && config.app.logourl) Logo = config.app.logourl + Instance + '.png'
return s.defaulted(
s.type({
id: s.optional(Uuid),
type: s.string(),
key: s.size(s.string(), 8, 128),
from: s.size(s.string(), 0, 128),
status: s.enums([
'created',
'cancelled',
'running',
'expired',
'declined',
'forwarded',
'authorized',
'approved'
]),
status_reason: s.optional(s.size(s.string(), 0, 254)),
reported_at: ZuluDateTimeStruct,
archived_at: s.optional(ZuluDateTimeStruct),
valid_until: ZuluDateTimeStruct,
options: s.optional(s.array(s.enums(['ALLOW_EXTEND_ON_EXPIRED']))),
creator: s.size(s.string(), 2, 32),
source: s.size(s.array(s.size(s.string(), 2, 64)), 0, 5),
sourceComment: s.optional(s.size(s.array(s.size(s.string(), 2, 512)), 0, 8)),
target: s.size(s.array(s.size(s.string(), 2, 64)), 0, 5),
targetComment: s.optional(s.size(s.array(s.size(s.string(), 2, 256)), 0, 8)),
targetRating: s.optional(s.size(s.number(), 0, 5)),
bidRating: s.optional(s.size(s.number(), 0, 5)),
logo: s.optional(s.string()), //TODO: determine the format for all
validatorEmails: s.optional(Email),
currency: s.enums(['EUR', 'DOLLAR']),
puPlace: s.optional(s.size(s.array(s.size(s.string(), 0, 256)), 5, 6)),
puDate: s.optional(ZuluDateTimeStruct),
puDateRange: s.optional(ZuluDateTimeStruct),
dePlace: s.optional(s.size(s.array(s.size(s.string(), 0, 256)), 5, 6)),
deDate: s.optional(ZuluDateTimeStruct),
deDateRange: s.optional(ZuluDateTimeStruct),
files: s.optional(s.array(s.string())),
vehicule: s.optional(s.string()),
lang: s.optional(s.string()),
forwarder: s.optional(s.string()),
decision_maker: s.optional(s.string()),
loaded: s.optional(s.enums(['Yes', 'No'])),
tracker: s.optional(s.string()),
driver: s.optional(s.string()),
score: s.optional(s.array(s.union([s.number(), s.string()]))),
tms: s.optional(s.string()),
price: s.union([s.number(), s.string()]),
priceDetails: s.optional(s.array(s.string())),
bid_score: s.optional(s.number()),
bid_score_process: s.optional(s.size(s.string(), 2, 254)),
target_status: s.optional(s.array(s.enums(['', 'approved']))),
tags: s.optional(s.array(s.string()))
}),
{
id: require('uuid').v4(),
key: auction && auction.key ? auction.key : '',
auction: auction && auction.key ? auction.key : '',
tms: auction && auction.creator ? auction.creator : '',
creator: 'DEMO',
reported_at: new Date().toISOString(),
valid_until:
auction && auction.valid_until
? auction.valid_until
: new Date(new Date().setDate(new Date().getDate() + 1)).toISOString(),
type: 'bid',
status: 'created',
from: Instance,
driver: Instance,
tracker: 'ftk',
source: [Instance],
price: -3.1415,
score: Score,
targetRating: Rating,
target: auction && auction.source ? auction.source : '',
currency: auction && auction.currency ? auction.currency : 'EUR',
puPlace: auction && auction.puPlace ? auction.puPlace : ['NA', 'NA', 'NA', 'NA', 'NA'],
puDate: auction && auction.puDate ? auction.puDate : new Date().toISOString(),
puDateRange: auction && auction.puDateRange ? auction.puDateRange : new Date().toISOString(),
dePlace: auction && auction.dePlace ? auction.dePlace : ['NA', 'NA', 'NA', 'NA', 'NA'],
deDate: auction && auction.deDate ? auction.deDate : new Date().toISOString(),
deDateRange: auction && auction.deDateRange ? auction.deDateRange : new Date().toISOString(),
validatorEmails: Validatoremail,
logo: Logo
}
)
}