/** * @class StatEvent 事件统计模型 */ const BaseMod = require('./base') const { DateTime } = require('../lib') module.exports = class StatEvent extends BaseMod { constructor() { super() this.tableName = 'events' this.defaultEvent = this.getConfig('event') || { login: '登录', register: '注册', click: '点击', share: '分享', pay_success: '支付成功', pay_fail: '支付失败' } } /** * 获取事件信息 * @param {String} appid: DCloud appid * @param {String} eventKey 事件键值 */ async getEvent(appid, eventKey) { const cacheKey = 'uni-stat-event-' + appid + '-' + eventKey let eventData = await this.getCache(cacheKey) if (!eventData) { const eventInfo = await this.getCollection(this.tableName).where({ appid: appid, event_key: eventKey }).get() eventData = [] if (eventInfo.data.length > 0) { eventData = eventInfo.data[0] await this.setCache(cacheKey, eventData) } } return eventData } /** * 获取事件信息不存在则创建 * @param {String} appid: DCloud appid * @param {String} eventKey 事件键值 */ async getEventAndCreate(appid, eventKey) { const eventInfo = await this.getEvent(appid, eventKey) if (eventInfo.length === 0) { const thisTime = new DateTime().getTime() const insertParam = { appid: appid, event_key: eventKey, event_name: this.defaultEvent[eventKey] ? this.defaultEvent[eventKey] : '', create_time: thisTime, update_time: thisTime } const res = await this.insert(this.tableName, insertParam) if (res && res.id) { return Object.assign(insertParam, { _id: res.id }) } } return eventInfo } }