log.go 1.6 KB

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