You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

point_account.go 2.8 kB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package models
  2. import (
  3. "code.gitea.io/gitea/modules/timeutil"
  4. )
  5. type PointAccountStatus int
  6. // Possible PointAccountStatus types.
  7. const (
  8. PointAccountNormal int = iota + 1 // 1
  9. PointAccountFreeze // 2
  10. PointAccountDeleted // 3
  11. )
  12. type PointAccount struct {
  13. ID int64 `xorm:"pk autoincr"`
  14. AccountCode string `xorm:"INDEX NOT NULL"`
  15. Balance int64 `xorm:"NOT NULL DEFAULT 0"`
  16. TotalEarned int64 `xorm:"NOT NULL DEFAULT 0"`
  17. TotalConsumed int64 `xorm:"NOT NULL DEFAULT 0"`
  18. UserId int64 `xorm:"INDEX NOT NULL"`
  19. Status int `xorm:"NOT NULL"`
  20. Version int64 `xorm:"NOT NULL"`
  21. CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
  22. UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`
  23. }
  24. func (account *PointAccount) Increase(amount int64, sourceId string) error {
  25. sess := x.NewSession()
  26. defer sess.Close()
  27. sql := "update point_account set balance = balance + ?,total_earned = total_earned + ? ,version = version + 1 where account_code = ? "
  28. _, err := sess.Exec(sql, amount, amount, account.AccountCode)
  29. if err != nil {
  30. sess.Rollback()
  31. return err
  32. }
  33. accountLog := &PointAccountLog{
  34. AccountCode: account.AccountCode,
  35. UserId: account.UserId,
  36. Type: IncreaseAccountBalance,
  37. SourceId: sourceId,
  38. PointsAmount: amount,
  39. BalanceBefore: account.Balance,
  40. BalanceAfter: account.Balance + amount,
  41. AccountVersion: account.Version,
  42. }
  43. _, err = sess.Insert(accountLog)
  44. if err != nil {
  45. sess.Rollback()
  46. return err
  47. }
  48. sess.Commit()
  49. return nil
  50. }
  51. func (account *PointAccount) Decrease(amount int64, sourceId string) error {
  52. sess := x.NewSession()
  53. defer sess.Close()
  54. sql := "update point_account set balance = balance - ?,total_consumed = total_consumed + ? ,version = version + 1 where account_code = ? "
  55. _, err := sess.Exec(sql, amount, amount, account.AccountCode)
  56. if err != nil {
  57. sess.Rollback()
  58. return err
  59. }
  60. accountLog := &PointAccountLog{
  61. AccountCode: account.AccountCode,
  62. UserId: account.UserId,
  63. Type: DecreaseAccountBalance,
  64. SourceId: sourceId,
  65. PointsAmount: amount,
  66. BalanceBefore: account.Balance,
  67. BalanceAfter: account.Balance - amount,
  68. AccountVersion: account.Version,
  69. }
  70. _, err = sess.Insert(accountLog)
  71. if err != nil {
  72. sess.Rollback()
  73. return err
  74. }
  75. sess.Commit()
  76. return nil
  77. }
  78. func GetAccountByUserId(userId int64) (*PointAccount, error) {
  79. p := &PointAccount{}
  80. has, err := x.Where("user_id = ?", userId).Get(p)
  81. if err != nil {
  82. return nil, err
  83. }
  84. if !has {
  85. return nil, ErrRecordNotExist{}
  86. }
  87. return p, nil
  88. }
  89. func InsertAccount(tl *PointAccount) (int64, error) {
  90. return x.Insert(tl)
  91. }