rappopo-sob-marine
Version:
Rappopo Sob - Marine
96 lines (92 loc) • 2.47 kB
JavaScript
const { _, Sequelize } = require('rappopo-sob').Helper
const schema = {
id: { type: Sequelize.STRING(100), allowNull: false, primaryKey: true },
siteId: { type: Sequelize.INTEGER, defaultValue: 0 },
mmsi: Sequelize.STRING(20),
mid: Sequelize.STRING(20),
imo: Sequelize.STRING(20),
name: Sequelize.STRING(50),
callSign: Sequelize.STRING(20),
class: Sequelize.STRING(20),
subClass: Sequelize.STRING(20),
flag: Sequelize.STRING(2),
loa: Sequelize.INTEGER,
breadth: Sequelize.INTEGER,
draught: Sequelize.INTEGER,
dwt: Sequelize.DOUBLE,
gt: Sequelize.DOUBLE,
builtYear: Sequelize.INTEGER,
builtPlace: Sequelize.STRING(50),
displacement: Sequelize.DOUBLE,
speedMax: Sequelize.DOUBLE,
oilCap: Sequelize.DOUBLE,
owner: Sequelize.INTEGER,
operator: Sequelize.INTEGER,
note: Sequelize.TEXT
}
const fields = _.concat(
['id', 'createdAt', 'updatedAt'],
_.keys(schema)
)
module.exports = ({ dbSql }) => {
return {
mixins: [dbSql],
model: {
define: schema,
options: {
underscored: true,
indexes: [
{ fields: ['mmsi'] },
{ fields: ['mid'] },
{ fields: ['imo'] },
{ fields: ['name'] },
{ fields: ['call_sign'] },
{ fields: ['class'] },
{ fields: ['sub_class'] },
{ fields: ['flag'] }
]
}
},
settings: {
fields,
webApi: {
alias: {
'GET /ais': 'apiAisOnlyList',
'GET /vms': 'apiVmsOnlyList'
}
}
},
actions: {
async apiAisOnlyList (ctx) {
const params = this.sanitizeParams(ctx, ctx.params)
let query = params.query
const aisOnly = {
$and: [
{ mmsi: { $ne: '' } },
{ mmsi: { $ne: null } }
]
}
if (query) query = { $and: [query, aisOnly] }
else query = aisOnly
params.query = query
ctx.params = params
return this._apiList(ctx, params)
},
async apiVmsOnlyList (ctx) {
const params = this.sanitizeParams(ctx, ctx.params)
let query = params.query
const vmsOnly = {
$and: [
{ mid: { $ne: '' } },
{ mid: { $ne: null } }
]
}
if (query) query = { $and: [query, vmsOnly] }
else query = vmsOnly
params.query = query
ctx.params = params
return this._apiList(ctx, params)
}
}
}
}