login_logging.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict';
  2. /**
  3. * 登录日志-数据模型
  4. *
  5. * @author lanjianrong
  6. * @date 2020/8/31
  7. * @version
  8. */
  9. // const UAParser = require('ua-parser-js');
  10. module.exports = app => {
  11. class LoginLogging extends app.BaseService {
  12. constructor(ctx) {
  13. super(ctx);
  14. this.tableName = 'login_logging';
  15. }
  16. /**
  17. * 创建记录
  18. * @param {Object} payload - 载荷
  19. */
  20. async createLog(payload) {
  21. const transaction = await this.db.beginTransaction();
  22. try {
  23. transaction.insert(this.tableName, payload);
  24. await transaction.commit();
  25. } catch (error) {
  26. await transaction.rollback();
  27. throw error;
  28. }
  29. }
  30. /**
  31. * 创建登录日志
  32. * @return {Boolean} 日志是否创建成功
  33. * @param {Number} type - 登录类型
  34. * @param {Number} status - 是否显示记录
  35. */
  36. async addLoginLog(type, status) {
  37. const { ctx } = this;
  38. const ipMsg = await ctx.helper.getUserIPMsg();
  39. const payload = {
  40. uid: ctx.session.sessionUser.accountId,
  41. pid: ctx.session.sessionProject.id,
  42. type,
  43. show: status,
  44. };
  45. this._.assign(payload, ipMsg);
  46. return await this.createLog(payload);
  47. }
  48. /**
  49. * 获取登录日志
  50. * @param {Number} pid - 项目id
  51. * @param {Number} uid - 用户id
  52. * @return {Promise<Array>} 日志数组
  53. */
  54. async getLoginLogs(pid, uid) {
  55. return this.db.select(this.tableName, {
  56. where: { pid, uid, show: 0 },
  57. orders: [['create_time', 'desc']],
  58. columns: ['browser', 'create_time', 'ip', 'os', 'address'],
  59. limit: 10, offset: 0,
  60. });
  61. }
  62. }
  63. return LoginLogging;
  64. };