| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import Collection from 'App/Models/Collection'
- import PaginationService from 'App/Services/PaginationService'
- import { schema } from '@ioc:Adonis/Core/Validator'
- import Episode from 'App/Models/Episode'
- import Series from 'App/Models/Series'
- export default class CollectionsController {
- private paginationService = new PaginationService(Collection)
- public async index({ request, auth }: HttpContextContract) {
- const page = await this.paginationService.paginate({
- ...request.all(),
- userId: auth.user!.id
- })
- const seriesIds = new Set(
- page
- .all()
- .map((record) => record.seriesId)
- .filter((id) => !!id)
- )
- const series = await Series.findMany(Array.from(seriesIds))
- const episodeIds = new Set(
- page
- .all()
- .map((record) => record.curEpId)
- .filter((id) => !!id)
- )
- const episodes = await Episode.findMany(Array.from(episodeIds))
- page.all().forEach((record) => {
- if (record.seriesId) {
- record.series = series.find((s) => s.id === record.seriesId)
- }
- if (record.curEpId) {
- record.episode = episodes.find((e) => e.id === record.curEpId)
- }
- })
- return page
- }
- public async store({ request, auth }: HttpContextContract) {
- const data = await request.validate({
- schema: schema.create({
- seriesId: schema.number(),
- curEpId: schema.number()
- })
- })
- let collection = await Collection.query()
- .where('user_id', auth.user!.id)
- .where('series_id', data.seriesId)
- .first()
- const ep = await Episode.findOrFail(data.curEpId)
- if (collection) {
- collection.curEpId = data.curEpId
- collection.curEpNum = ep.episodeNum
- await collection.save()
- } else {
- collection = await Collection.create({
- userId: auth.user!.id,
- seriesId: data.seriesId,
- curEpId: data.curEpId,
- curEpNum: ep.episodeNum
- })
- }
- return collection
- }
- public async show({ params, auth }: HttpContextContract) {
- return await Collection.query()
- .where('userId', auth.user!.id)
- .where('seriesId', params.id)
- .firstOrFail()
- }
- public async update({ request, params, bouncer }: HttpContextContract) {
- const data = await request.validate({
- schema: schema.create({
- userId: schema.number.optional(),
- seriesId: schema.number.optional(),
- curEpId: schema.number.optional()
- })
- })
- const collection = await Collection.findOrFail(params.id)
- await bouncer.authorize('owner', collection)
- collection.merge(data)
- return await collection.save()
- }
- public async destroy({ params, auth }: HttpContextContract) {
- await Collection.query()
- .where('userId', auth.user!.id)
- .where('seriesId', params.id)
- .delete()
- }
- }
|