log.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package model
  2. import (
  3. "gorm.io/gorm"
  4. "one-api/common"
  5. )
  6. type Log struct {
  7. Id int `json:"id"`
  8. UserId int `json:"user_id" gorm:"index"`
  9. CreatedAt int64 `json:"created_at" gorm:"bigint"`
  10. Type int `json:"type" gorm:"index"`
  11. Content string `json:"content"`
  12. }
  13. const (
  14. LogTypeUnknown = iota
  15. LogTypeTopup
  16. LogTypeConsume
  17. LogTypeManage
  18. LogTypeSystem
  19. )
  20. func RecordLog(userId int, logType int, content string) {
  21. if logType == LogTypeConsume && !common.LogConsumeEnabled {
  22. return
  23. }
  24. log := &Log{
  25. UserId: userId,
  26. CreatedAt: common.GetTimestamp(),
  27. Type: logType,
  28. Content: content,
  29. }
  30. err := DB.Create(log).Error
  31. if err != nil {
  32. common.SysError("failed to record log: " + err.Error())
  33. }
  34. }
  35. func GetAllLogs(logType int, startIdx int, num int) (logs []*Log, err error) {
  36. var tx *gorm.DB
  37. if logType == LogTypeUnknown {
  38. tx = DB
  39. } else {
  40. tx = DB.Where("type = ?", logType)
  41. }
  42. err = tx.Order("id desc").Limit(num).Offset(startIdx).Find(&logs).Error
  43. return logs, err
  44. }
  45. func GetUserLogs(userId int, logType int, startIdx int, num int) (logs []*Log, err error) {
  46. var tx *gorm.DB
  47. if logType == LogTypeUnknown {
  48. tx = DB.Where("user_id = ?", userId)
  49. } else {
  50. tx = DB.Where("user_id = ? and type = ?", userId, logType)
  51. }
  52. err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error
  53. return logs, err
  54. }
  55. func SearchAllLogs(keyword string) (logs []*Log, err error) {
  56. err = DB.Where("type = ? or content LIKE ?", keyword, keyword+"%").Order("id desc").Limit(common.MaxRecentItems).Find(&logs).Error
  57. return logs, err
  58. }
  59. func SearchUserLogs(userId int, keyword string) (logs []*Log, err error) {
  60. err = DB.Where("user_id = ? and type = ?", userId, keyword).Order("id desc").Limit(common.MaxRecentItems).Omit("id").Find(&logs).Error
  61. return logs, err
  62. }