log_store.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from datetime import datetime
  2. from typing import List, Optional, Tuple
  3. from utils.mysql_helper import MySQLHelper
  4. from models.log_data import LogModel
  5. class LogStore:
  6. def __init__(self):
  7. self._db_helper = MySQLHelper()
  8. def insert_log(self, log_data: LogModel):
  9. sql = "INSERT INTO sys_log (username, operation_type, operation_desc, operation_result, operation_data, operation_ip, operation_module, data_changes, created_at) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
  10. params = (
  11. log_data.username,
  12. log_data.operation_type,
  13. log_data.operation_desc,
  14. log_data.operation_result,
  15. log_data.operation_data,
  16. log_data.operation_ip,
  17. log_data.operation_module,
  18. log_data.data_changes,
  19. log_data.created_at
  20. )
  21. with self._db_helper:
  22. self._db_helper.execute_non_query(sql, params)
  23. def query_logs_paginated(self, page: int, per_page: int, username: str = None, operation_type: str = None, operation_module: str = None, start_date: datetime = None, end_date: datetime = None) -> Tuple[List[LogModel], int]:
  24. offset = (page - 1) * per_page
  25. sql_count = "SELECT COUNT(*) as count FROM sys_log WHERE 1=%s"
  26. sql = "SELECT id, username, operation_type, operation_desc, operation_result, operation_data, operation_ip, operation_module, data_changes, created_at FROM sys_log WHERE 1=%s"
  27. params_count = (1,)
  28. params = (1,)
  29. if username:
  30. sql_count += " AND username = %s"
  31. sql += " AND username = %s"
  32. params_count += (username,)
  33. params += (username,)
  34. if operation_type:
  35. sql_count += " AND operation_type = %s"
  36. sql += " AND operation_type = %s"
  37. params_count += (operation_type,)
  38. params += (operation_type,)
  39. if operation_module:
  40. sql_count += " AND operation_module = %s"
  41. sql += " AND operation_module = %s"
  42. params_count += (operation_module,)
  43. params += (operation_module,)
  44. if start_date:
  45. sql_count += " AND created_at >= %s"
  46. sql += " AND created_at >= %s"
  47. params_count += (start_date,)
  48. params += (start_date,)
  49. if end_date:
  50. sql_count += " AND created_at <= %s"
  51. sql += " AND created_at <= %s"
  52. params_count += (end_date,)
  53. params += (end_date,)
  54. sql += " ORDER BY created_at DESC LIMIT %s OFFSET %s"
  55. params += (per_page, offset)
  56. with self._db_helper:
  57. result_count = self._db_helper.fetch_one(sql_count, params_count)
  58. count = result_count["count"] if result_count else 0
  59. result = self._db_helper.execute_query(sql, params)
  60. data = []
  61. if not result:
  62. return data, count
  63. for item in result:
  64. data.append(
  65. LogModel(
  66. log_id=item["id"],
  67. username=item["username"],
  68. operation_type=item["operation_type"],
  69. operation_desc=item["operation_desc"],
  70. operation_result=item["operation_result"],
  71. operation_data=item["operation_data"],
  72. operation_ip=item["operation_ip"],
  73. operation_module=item["operation_module"],
  74. data_changes=item["data_changes"],
  75. created_at=item["created_at"]
  76. )
  77. )
  78. return data, count