| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import Order from 'App/Models/Order'
- import PaginationService from 'App/Services/PaginationService'
- import { schema } from '@ioc:Adonis/Core/Validator'
- import { BadRequestException, InternalServerException } from 'App/Exceptions/Common'
- import Series from 'App/Models/Series'
- import Episode from 'App/Models/Episode'
- import UserBalanceService from 'App/Services/UserBalanceService'
- export default class OrdersController {
- private paginationService = new PaginationService(Order)
- public async index({ request }: HttpContextContract) {
- return await this.paginationService.paginate(request.all())
- }
- public async store({ request, auth }: HttpContextContract) {
- const user = auth.user!
- const data: any = await request.validate({
- schema: schema.create({
- seriesId: schema.number.optional(),
- episodeId: schema.number.optional()
- })
- })
- if (!data.seriesId && !data.episodeId) {
- throw new BadRequestException('seriesId or episodeId must be provided')
- }
- const userBalance = await UserBalanceService.getBalance(user.id)
- if (data.seriesId) {
- const series = await Series.findOrFail(data.seriesId)
- if (series.price.comparedTo(userBalance.balance) > 0) {
- throw new InternalServerException('not enough balance')
- }
- data.price = series.price
- data.type = 'series'
- } else {
- const episode = await Episode.findOrFail(data.episodeId)
- if (episode.price.comparedTo(userBalance.balance) > 0) {
- throw new InternalServerException('not enough balance')
- }
- data.price = episode.price
- data.type = 'episode'
- }
- data.userId = user.id
- await UserBalanceService.modifiyBalance({
- userId: user.id,
- amount: data.price.negated(),
- type: data.type,
- seriesId: data.seriesId,
- episodeId: data.episodeId,
- episodeNum: data.episodeNum
- })
- return await Order.create(data)
- }
- public async show({ params }: HttpContextContract) {
- return await Order.findOrFail(params.id)
- }
- public async update({ response }: HttpContextContract) {
- response.notImplemented()
- }
- public async destroy({ response }: HttpContextContract) {
- response.notImplemented()
- }
- }
|