| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import PlayHistory from 'App/Models/PlayHistory'
- import PaginationService from 'App/Services/PaginationService'
- import { schema } from '@ioc:Adonis/Core/Validator'
- import Series from 'App/Models/Series'
- import Episode from 'App/Models/Episode'
- export default class PlayHistoriesController {
- private paginationService = new PaginationService(PlayHistory)
- public async index({ request, auth }: HttpContextContract) {
- return await this.paginationService.paginate({
- ...request.all(),
- userId: auth.user!.id,
- order: 'updatedAt,desc'
- })
- }
- public async store({ request, auth }: HttpContextContract) {
- const data: any = await request.validate({
- schema: schema.create({
- episodeId: schema.number(),
- duration: schema.number()
- })
- })
- const episode = await Episode.findOrFail(data.episodeId)
- const series = await Series.findOrFail(episode.seriesId)
- data.seriesId = series.id
- data.userId = auth.user!.id
- let history = await PlayHistory.query()
- .where('userId', auth.user!.id)
- .where('seriesId', data.seriesId)
- .first()
- if (history) {
- history.episodeId = data.episodeId
- history.duration = data.duration
- await history.save()
- } else {
- history = await PlayHistory.create({
- ...data,
- userId: auth.user!.id
- })
- }
- await Series.query().where('id', series.id).increment('playCount', 1)
- await Episode.query().where('id', episode.id).increment('playCount', 1)
- return history
- }
- public async show({ params }: HttpContextContract) {
- return await PlayHistory.findOrFail(params.id)
- }
- public async destroy({ params, bouncer }: HttpContextContract) {
- const playHistory = await PlayHistory.findOrFail(params.id)
- await bouncer.authorize('owner', playHistory)
- await playHistory.delete()
- return playHistory
- }
- }
|