Advanced Tutorial: Using the user meta field
Script
'use strict';
const {
app,
loggerPlugin,
toolsLib
} = this.pluginLibraries;
const { query, validationResult } = require('express-validator');
const moment = require('moment');
const USER_META_FIELD_NAME = 'trade_count_plugin-latest_trade';
const init = async () => {
loggerPlugin.info(
'PLUGIN TRADE COUNT initializing...'
);
if (!toolsLib.getKitConfig().user_meta[USER_META_FIELD_NAME]) {
loggerPlugin.verbose(
'PLUGIN TRADE COUNT',
`User meta field ${USER_META_FIELD_NAME} not found. Creating field.`
);
await toolsLib.addKitUserMeta(
USER_META_FIELD_NAME,
'date-time',
'Last trade timestamp used for trade-count plugin',
false
);
}
loggerPlugin.info(
'PLUGIN TRADE COUNT initialized'
);
};
init()
.then(() => {
app.get(
'/plugins/trade-count/check',
[
toolsLib.security.verifyBearerTokenExpressMiddleware(['admin']),
query('user_id').isInt({ min: 1 }).toInt().optional()
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
const { user_id } = req.query;
loggerPlugin.verbose(
req.uuid,
'GET /plugins/trade-count/check auth',
req.auth.sub,
'user_id:',
user_id
);
try {
const user = await toolsLib.user.getUserByKitId(user_id, false);
if (!user) {
throw new Error('User not found');
}
const lastTradeTimestamp = user.meta[USER_META_FIELD_NAME];
const queryStartDate = toolsLib.isDatetime(lastTradeTimestamp)
? moment(lastTradeTimestamp).add(1, 'ms').toISOString()
: null;
loggerPlugin.verbose(
req.uuid,
'GET /plugins/trade-count/check',
'user last trade timestamp',
lastTradeTimestamp,
'trades query start date',
queryStartDate
);
const trades = await toolsLib.order.getAllUserTradesByKitId(
user.id,
null,
1,
1,
'timestamp',
'desc',
queryStartDate
);
loggerPlugin.verbose(
req.uuid,
'GET /plugins/trade-count/check',
'trade count',
trades.count
);
if (trades.count === 0) {
return res.json({
count: 0
});
}
const lastTrade = trades.data[0];
loggerPlugin.verbose(
req.uuid,
'GET /plugins/trade-count/check',
'last trade timestamp',
lastTrade.timestamp
);
await user.update({
meta: {
...user.meta,
[USER_META_FIELD_NAME]: lastTrade.timestamp
}
});
return res.json({
count: trades.count
});
} catch (err) {
loggerPlugin.error(
req.uuid,
'GET /plugins/trade-count/check err',
err.message
);
return res.status(400).json({ message: err.message });
}
}
);
})
.catch((err) => {
loggerPlugin.error(
'PLUGIN TRADE COUNT err during initialization',
err.message
);
});
Breakdown
Import Requirements
Set meta field name
Check if meta field exists in init
Create an endpoint for counting user trades
Last updated