log.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. err = DB.Where("type = ?", logType).Order("id desc").Limit(num).Offset(startIdx).Find(&logs).Error
  34. return logs, err
  35. }
  36. func GetUserLogs(userId int, logType int, startIdx int, num int) (logs []*Log, err error) {
  37. var tx *gorm.DB
  38. if logType == LogTypeUnknown {
  39. tx = DB.Where("user_id = ?", userId)
  40. } else {
  41. tx = DB.Where("user_id = ? and type = ?", userId, logType)
  42. }
  43. err = tx.Order("id desc").Limit(num).Offset(startIdx).Omit("id").Find(&logs).Error
  44. return logs, err
  45. }
  46. func SearchAllLogs(keyword string) (logs []*Log, err error) {
  47. err = DB.Where("type = ? or content LIKE ?", keyword, keyword+"%").Order("id desc").Limit(common.MaxRecentItems).Find(&logs).Error
  48. return logs, err
  49. }
  50. func SearchUserLogs(userId int, keyword string) (logs []*Log, err error) {
  51. err = DB.Where("user_id = ? and type = ?", userId, keyword).Order("id desc").Limit(common.MaxRecentItems).Omit("id").Find(&logs).Error
  52. return logs, err
  53. }