import 'isomorphic-fetch'; import * as uuid from 'node-uuid'; import { IDeviceRegistration, IDevice, IDeviceUpdate } from '../model/device'; import { transaction } from 'objection'; import { Device } from 'iworks-db-model'; import { omit } from 'lodash'; export async function registerDevice(data: IDeviceRegistration): Promise { const knex = Device.knex(); const id = uuid.v4(); const date = (new Date()).toISOString(); if (!data.userId) { throw 'UserId is not specified'; } const dataToInsert = { id, deviceType: data.deviceType, deviceId: data.deviceId, pushToken: data.pushToken, userId: data.userId, osType: data.osType, osVersion: data.osVersion, jsVersion: data.jsVersion, nativeVersion: data.nativeVersion, nativeCode: data.nativeCode, status: 0, createdAt: date, }; return transaction(knex, async (trx: any) => { const devices = await Device .query(trx) .where('device_id', data.deviceId); if (devices.length > 0) { const device = devices[0]; const dataToUpdate: Partial = omit(data, [ 'deviceId', 'id', 'status', 'createdAt']); return Device .query(trx) .patchAndFetchById(device.id, { ...dataToUpdate, updatedAt: date }); } return Device .query(trx) .insertAndFetch(dataToInsert); }); } export async function updateDevice(data: Partial): Promise { const knex = Device.knex(); const date = (new Date()).toISOString(); return transaction(knex, async (trx: any) => { const device = await Device .query(trx) .findById(data.id); const dataToUpdate: Partial = omit(data, ['deviceId', 'id', 'status', 'createdAt', 'updatedAt']); return Device .query(trx) .patchAndFetchById(data.id!, { ...dataToUpdate, updatedAt: date }); }); }