UserBalanceService.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import BalanceRecord, { BalanceRecordType } from 'App/Models/BalanceRecord'
  2. import UserBalance from 'App/Models/UserBalance'
  3. import Decimal from 'decimal.js'
  4. class UserBalanceService {
  5. public async getBalance(userId: number) {
  6. let userBalance = await UserBalance.findBy('userId', userId)
  7. if (!userBalance) {
  8. userBalance = await UserBalance.create({
  9. userId,
  10. balance: new Decimal(0),
  11. lastBalance: new Decimal(0)
  12. })
  13. }
  14. return userBalance
  15. }
  16. public async modifiyBalance(params: {
  17. userId: number
  18. amount: Decimal
  19. type: BalanceRecordType
  20. description?: string
  21. seriesId?: number
  22. episodeId?: number
  23. episodeNum?: number
  24. }) {
  25. const userBalance = await this.getBalance(params.userId)
  26. userBalance.lastBalance = userBalance.balance
  27. userBalance.balance = userBalance.balance.plus(params.amount)
  28. await userBalance.save()
  29. const balanceRecord = new BalanceRecord()
  30. balanceRecord.merge(params)
  31. balanceRecord.balance = userBalance.balance
  32. balanceRecord.lastBalance = userBalance.lastBalance
  33. await balanceRecord.save()
  34. }
  35. }
  36. export default new UserBalanceService()