log_model.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * 日志业务逻辑模型
  3. *
  4. * @author CaiAoLin
  5. * @date 2017/7/27
  6. * @version
  7. */
  8. import BaseModel from "../../common/base/base_model";
  9. import LogType from "../../common/const/log_type_const";
  10. import LogSchema from "./schema/log";
  11. import UAParser from "ua-parser-js";
  12. class LogModel extends BaseModel {
  13. /**
  14. * 构造函数
  15. *
  16. * @return {void}
  17. */
  18. constructor() {
  19. let parent = super();
  20. parent.model = LogSchema;
  21. parent.init();
  22. }
  23. /**
  24. * 新增日志
  25. *
  26. * @param {String} userId
  27. * @param {Number} type
  28. * @param {String|Object} message
  29. * @return {Promise}
  30. */
  31. addLog(userId, type, message) {
  32. let result = null;
  33. if (typeof message === 'string' && message === '') {
  34. return result;
  35. }
  36. if (typeof message === 'object' && Object.keys(message).length <= 0) {
  37. return result;
  38. }
  39. let addData = {
  40. user_id: userId,
  41. type: type,
  42. message: message,
  43. create_time: new Date().getTime()
  44. };
  45. result = this.db.create(addData);
  46. return result;
  47. }
  48. /**
  49. * 新增登录日志
  50. *
  51. * @param {String} userId
  52. * @param {Object} request
  53. * @return {Promise}
  54. */
  55. addLoginLog(userId, request) {
  56. let ip = request.connection.remoteAddress;
  57. ip = ip.split(':');
  58. ip = ip[3] === undefined ? '' : ip[3];
  59. let userAgentObject = new UAParser(request.headers['user-agent']);
  60. let osInfo = userAgentObject.getOS();
  61. let cpuInfo = userAgentObject.getCPU();
  62. let browserInfo = userAgentObject.getBrowser();
  63. let message = {
  64. os: osInfo.name + ' ' + osInfo.version + ' ' + cpuInfo.architecture,
  65. browser: browserInfo.name + ' ' + browserInfo.version,
  66. ip: ip
  67. };
  68. return this.addLog(userId, LogType.LOGIN_LOG, message);
  69. }
  70. /**
  71. * 获取log列表
  72. *
  73. * @param {String} userId
  74. * @param {Number} type
  75. * @param {Number} page
  76. * @param {Number} pageSize
  77. * @return {Promise}
  78. */
  79. async getLog(userId, type, page = 1, pageSize = 3) {
  80. let condition = {
  81. user_id: userId,
  82. type: type
  83. };
  84. page = parseInt(page);
  85. page = page <= 1 ? 1 : page;
  86. let option = {pageSize: pageSize, offset: parseInt((page - 1) * pageSize)};
  87. let logList = await this.db.find(condition, null, option);
  88. logList = logList.length > 0 ? logList : [];
  89. return logList
  90. }
  91. }
  92. export default LogModel;