UNPKG

ilp-core

Version:

ILP core module managing ledger abstraction

150 lines (127 loc) 3.89 kB
'use strict' module.exports = ActivityLogFactory const _ = require('lodash') const Container = require('constitute').Container const Model = require('five-bells-shared').Model const PersistentModelMixin = require('five-bells-shared').PersistentModelMixin const Database = require('../lib/db') const Validator = require('five-bells-shared/lib/validator') const Sequelize = require('sequelize') const UserFactory = require('./user') const PaymentFactory = require('./payment') const WithdrawalFactory = require('./withdrawal') const SettlementFactory = require('./settlement') const ActivityLogsItemFactory = require('./activity_logs_item') ActivityLogFactory.constitute = [Database, Validator, Container] function ActivityLogFactory (sequelize, validator, container) { let ActivityLogsItem let Payment let Settlement let Withdrawal class ActivityLog extends Model { static convertFromExternal (data) { return data } static convertToExternal (data) { delete data.created_at delete data.updated_at return data } static convertFromPersistent (data) { data = _.omit(data, _.isNull) return data } static convertToPersistent (data) { return data } static * getUserActivityLog (userId, page, limit) { page = page > 0 ? Number(page) : 1 limit = Number(limit) // TODO:BEFORE_DEPLOY don't include all of the fields return ActivityLog.DbModel.findAndCountAll({ distinct: true, where: { user_id: userId }, include: [ { model: Payment.DbModel }, { model: Settlement.DbModel }, { model: Withdrawal.DbModel } ], order: [['created_at', 'DESC']], limit, offset: limit * (page - 1) }) } static * getActivityLog (id) { // TODO:BEFORE_DEPLOY don't include all of the fields return ActivityLog.findOne({ where: { id }, include: [ { model: Payment.DbModel }, { model: Settlement.DbModel }, { model: Withdrawal.DbModel } ] }) } } ActivityLog.validateExternal = validator.create('ActivityLog') PersistentModelMixin(ActivityLog, sequelize, { id: { type: Sequelize.UUID, primaryKey: true, defaultValue: Sequelize.UUIDV4 } // TODO:BEFORE_DEPLOY update migration }) container.schedulePostConstructor(User => { ActivityLog.DbModel.belongsTo(User.DbModel) }, [ UserFactory ]) container.schedulePostConstructor(model => { ActivityLogsItem = model container.schedulePostConstructor(model => { Payment = model // Payment ActivityLog.DbModel.belongsToMany(Payment.DbModel, { through: { model: ActivityLogsItem.DbModel, unique: false, scope: { item_type: 'payment' } }, foreignKey: 'activity_log_id', constraints: false }) }, [ PaymentFactory ]) // Settlement container.schedulePostConstructor(model => { Settlement = model ActivityLog.DbModel.belongsToMany(Settlement.DbModel, { through: { model: ActivityLogsItem.DbModel, unique: false, scope: { item_type: 'settlement' } }, foreignKey: 'activity_log_id', constraints: false }) }, [ SettlementFactory ]) // Withdrawal container.schedulePostConstructor(model => { Withdrawal = model ActivityLog.DbModel.belongsToMany(Withdrawal.DbModel, { through: { model: ActivityLogsItem.DbModel, unique: false, scope: { item_type: 'withdrawal' } }, foreignKey: 'activity_log_id', constraints: false }) }, [ WithdrawalFactory ]) }, [ ActivityLogsItemFactory ]) return ActivityLog }