CollectionsController.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import Collection from 'App/Models/Collection'
  3. import PaginationService from 'App/Services/PaginationService'
  4. import { schema } from '@ioc:Adonis/Core/Validator'
  5. import Episode from 'App/Models/Episode'
  6. export default class CollectionsController {
  7. private paginationService = new PaginationService(Collection)
  8. public async index({ request, auth }: HttpContextContract) {
  9. return await this.paginationService.paginate({
  10. ...request.all(),
  11. userId: auth.user!.id
  12. })
  13. }
  14. public async store({ request, auth }: HttpContextContract) {
  15. const data = await request.validate({
  16. schema: schema.create({
  17. seriesId: schema.number(),
  18. curEpId: schema.number()
  19. })
  20. })
  21. let collection = await Collection.query()
  22. .where('user_id', auth.user!.id)
  23. .where('series_id', data.seriesId)
  24. .first()
  25. const ep = await Episode.findOrFail(data.curEpId)
  26. if (collection) {
  27. collection.curEpId = data.curEpId
  28. collection.curEpNum = ep.episodeNum
  29. await collection.save()
  30. } else {
  31. collection = await Collection.create({
  32. userId: auth.user!.id,
  33. seriesId: data.seriesId,
  34. curEpId: data.curEpId,
  35. curEpNum: ep.episodeNum
  36. })
  37. }
  38. return collection
  39. }
  40. public async show({ params, auth }: HttpContextContract) {
  41. return await Collection.query()
  42. .where('userId', auth.user!.id)
  43. .where('seriesId', params.id)
  44. .firstOrFail()
  45. }
  46. public async update({ request, params, bouncer }: HttpContextContract) {
  47. const data = await request.validate({
  48. schema: schema.create({
  49. userId: schema.number.optional(),
  50. seriesId: schema.number.optional(),
  51. curEpId: schema.number.optional()
  52. })
  53. })
  54. const collection = await Collection.findOrFail(params.id)
  55. await bouncer.authorize('owner', collection)
  56. collection.merge(data)
  57. return await collection.save()
  58. }
  59. public async destroy({ params, auth }: HttpContextContract) {
  60. await Collection.query()
  61. .where('userId', auth.user!.id)
  62. .where('seriesId', params.id)
  63. .delete()
  64. }
  65. }