SignInRecordsController.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import SignInRecord from 'App/Models/SignInRecord'
  3. import { DateTime } from 'luxon'
  4. import { addDays, format, startOfDay, endOfDay } from 'date-fns'
  5. import Decimal from 'decimal.js'
  6. import UserBalanceService from 'App/Services/UserBalanceService'
  7. import { BalanceRecordType } from 'App/Models/BalanceRecord'
  8. export default class SignInRecordsController {
  9. public async index({ auth }: HttpContextContract) {
  10. const start = startOfDay(addDays(new Date(), -1))
  11. const end = endOfDay(addDays(new Date(), 6))
  12. const records = await SignInRecord.query()
  13. .where('date', '>=', start)
  14. .where('date', '<=', end)
  15. .where('user_id', auth.user!.id)
  16. const res: any[] = []
  17. for (let i = 0; i < 7; i++) {
  18. const date = addDays(start, i)
  19. const record = records.find(
  20. (record) => record.date.toISODate() === DateTime.fromJSDate(date).toISODate()
  21. )
  22. res.push({
  23. date: format(date, 'yyyy-MM-dd'),
  24. reward: record?.reward ?? new Decimal(10),
  25. isSigned: !!record
  26. })
  27. }
  28. return res
  29. }
  30. public async store({ request, auth }: HttpContextContract) {
  31. const record = await SignInRecord.query()
  32. .where('date', DateTime.now().toISODate())
  33. .where('user_id', auth.user!.id)
  34. .first()
  35. if (record) {
  36. throw new Error('今天已经签到过了')
  37. }
  38. const signInRecord = await SignInRecord.create({
  39. date: DateTime.now(),
  40. userId: auth.user!.id,
  41. reward: new Decimal(10)
  42. })
  43. await UserBalanceService.modifiyBalance({
  44. userId: auth.user!.id,
  45. amount: signInRecord.reward,
  46. type: BalanceRecordType.Reward,
  47. description: '签到奖励'
  48. })
  49. return signInRecord
  50. }
  51. }