log.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. log := &Log{
  22. UserId: userId,
  23. CreatedAt: common.GetTimestamp(),
  24. Type: logType,
  25. Content: content,
  26. }
  27. err := DB.Create(log).Error
  28. if err != nil {
  29. common.SysError("failed to record log: " + err.Error())
  30. }
  31. }
  32. func GetAllLogs(logType int, startIdx int, num int) (logs []*Log, err error) {
  33. var tx *gorm.DB
  34. if logType == LogTypeUnknown {
  35. tx = DB
  36. } else {
  37. tx = DB.Where("type = ?", logType)
  38. }
  39. err = tx.Order("id desc").Limit(num).Offset(startIdx).Find(&logs).Error
  40. return logs, err
  41. }
  42. func GetUserLogs(userId int, logType int, startIdx int, num int) (logs []*Log, err error) {
  43. var tx *gorm.DB
  44. if logType == LogTypeUnknown {
  45. tx = DB.Where("user_id = ?", userId)
  46. } else {
  47. tx = DB.Where("user_id = ? and type = ?", userId, logType)
  48. }
  49. err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error
  50. return logs, err
  51. }
  52. func SearchAllLogs(keyword string) (logs []*Log, err error) {
  53. err = DB.Where("type = ? or content LIKE ?", keyword, keyword+"%").Order("id desc").Limit(common.MaxRecentItems).Find(&logs).Error
  54. return logs, err
  55. }
  56. func SearchUserLogs(userId int, keyword string) (logs []*Log, err error) {
  57. err = DB.Where("user_id = ? and type = ?", userId, keyword).Order("id desc").Limit(common.MaxRecentItems).Omit("id").Find(&logs).Error
  58. return logs, err
  59. }