PlayHistoriesController.ts 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import PlayHistory from 'App/Models/PlayHistory'
  3. import PaginationService from 'App/Services/PaginationService'
  4. import { schema } from '@ioc:Adonis/Core/Validator'
  5. import Series from 'App/Models/Series'
  6. import Episode from 'App/Models/Episode'
  7. export default class PlayHistoriesController {
  8. private paginationService = new PaginationService(PlayHistory)
  9. public async index({ request, auth }: HttpContextContract) {
  10. return await this.paginationService.paginate({
  11. ...request.all(),
  12. userId: auth.user!.id,
  13. order: 'updatedAt,desc'
  14. })
  15. }
  16. public async store({ request, auth }: HttpContextContract) {
  17. const data: any = await request.validate({
  18. schema: schema.create({
  19. episodeId: schema.number(),
  20. duration: schema.number()
  21. })
  22. })
  23. const episode = await Episode.findOrFail(data.episodeId)
  24. const series = await Series.findOrFail(episode.seriesId)
  25. data.seriesId = series.id
  26. data.userId = auth.user!.id
  27. let history = await PlayHistory.query()
  28. .where('userId', auth.user!.id)
  29. .where('seriesId', data.seriesId)
  30. .first()
  31. if (history) {
  32. history.episodeId = data.episodeId
  33. history.duration = data.duration
  34. await history.save()
  35. } else {
  36. history = await PlayHistory.create({
  37. ...data,
  38. userId: auth.user!.id
  39. })
  40. }
  41. await Series.query().where('id', series.id).increment('playCount', 1)
  42. await Episode.query().where('id', episode.id).increment('playCount', 1)
  43. return history
  44. }
  45. public async show({ params }: HttpContextContract) {
  46. return await PlayHistory.findOrFail(params.id)
  47. }
  48. public async destroy({ params, bouncer }: HttpContextContract) {
  49. const playHistory = await PlayHistory.findOrFail(params.id)
  50. await bouncer.authorize('owner', playHistory)
  51. await playHistory.delete()
  52. return playHistory
  53. }
  54. }