rapid-db
Version:
Rapid Database Interface
67 lines (60 loc) • 1.59 kB
JavaScript
/**
* Copyright (c) 2017 Lucky Byte, Inc.
*/
const debug = require('debug')('db');
const uuid = require('uuid');
const pgp = require('../init');
const utils = require('./utils');
/**
* 构造插入交易流水 SQL 语句
*
* 参数:
* record: 见交易流水说明
* uuid: 交易uuid
*
* 返回:
* SQL 语句
*/
const build_insert = (record, trade_uuid) => {
if (!record || !trade_uuid) {
throw new Error('插入交易流水参数无效');
}
// 检查是否缺少必须的字段
for (let i = 0; i < utils.required_keys.length; i++) {
const key = utils.required_keys[i];
if (record[key] == null) {
throw new Error(`插入交易流水缺少必须的字段[${key}]`);
}
}
let fields = { uuid: trade_uuid }
for (key in record) {
if (utils.all_keys.indexOf(key) >= 0) {
fields[key] = record[key];
}
}
return pgp.helpers.insert(fields, null, 'rapid_trades');
}
/**
* 插入一条新交易流水
*
* 参数
* data: 流水记录
* db: 数据库对象,如果为空,则使用全局 _unique_db
* 返回
* 新插入流水 UUID
*/
const insert = async (record, db) => {
db = db || _unique_db;
if (!db) {
throw new Error('数据库对象无效,检查是否已初始化数据库');
}
let trade_uuid;
if (record.uuid) {
trade_uuid = record.uuid;
} else {
trade_uuid = uuid.v4();
}
await db.none(build_insert(record, trade_uuid));
return trade_uuid;
}
module.exports = insert;