UserBalancesController.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import UserBalance from 'App/Models/UserBalance'
  3. import PaginationService from 'App/Services/PaginationService'
  4. import { schema } from '@ioc:Adonis/Core/Validator'
  5. import UserBalanceService from 'App/Services/UserBalanceService'
  6. import Decimal from 'decimal.js'
  7. import { BalanceRecordType } from 'App/Models/BalanceRecord'
  8. export default class UserBalancesController {
  9. private paginationService = new PaginationService(UserBalance)
  10. public async index({ request }: HttpContextContract) {
  11. return await this.paginationService.paginate(request.all())
  12. }
  13. public async store({ request }: HttpContextContract) {
  14. const data: any = await request.validate({
  15. schema: schema.create({
  16. userId: schema.number(),
  17. balance: schema.string()
  18. })
  19. })
  20. const userBalance = await UserBalance.create(data)
  21. return userBalance
  22. }
  23. public async show({ params, bouncer }: HttpContextContract) {
  24. const row = await UserBalanceService.getBalance(params.id)
  25. await bouncer.authorize('owner', row)
  26. return row
  27. }
  28. public async update({ params, request }: HttpContextContract) {
  29. const userBalance = await UserBalance.findOrFail(params.id)
  30. const data: any = await request.validate({
  31. schema: schema.create({
  32. userId: schema.number.optional(),
  33. amount: schema.number.optional(),
  34. type: schema.string.optional(),
  35. description: schema.string.optional()
  36. })
  37. })
  38. userBalance.merge(data)
  39. await userBalance.save()
  40. return userBalance
  41. }
  42. public async destroy({ params }: HttpContextContract) {
  43. const userBalance = await UserBalance.findOrFail(params.id)
  44. await userBalance.delete()
  45. }
  46. public async recharge({ request }: HttpContextContract) {
  47. console.log(JSON.stringify(request.all(), null, 4))
  48. UserBalanceService.modifiyBalance({
  49. userId: parseInt(request.param('userId')),
  50. amount: new Decimal(request.input('id')),
  51. type: BalanceRecordType.Recharge
  52. })
  53. const data = request.all()
  54. return {
  55. ok: true,
  56. data: {
  57. id: data.id,
  58. latest_receipt: true,
  59. transaction: data.transaction
  60. }
  61. }
  62. }
  63. }