BalanceRecordsController.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import BalanceRecord from 'App/Models/BalanceRecord'
  3. import Episode from 'App/Models/Episode'
  4. import Series from 'App/Models/Series'
  5. import PaginationService from 'App/Services/PaginationService'
  6. export default class BalanceRecordsController {
  7. private paginationService = new PaginationService(BalanceRecord)
  8. public async index({ request, auth }: HttpContextContract) {
  9. const page = await this.paginationService.paginate({
  10. ...request.all(),
  11. userId: auth.user!.id
  12. })
  13. const seriesIds = new Set(
  14. page
  15. .all()
  16. .map((record) => record.seriesId)
  17. .filter((id) => !!id)
  18. )
  19. const series = await Series.findMany(Array.from(seriesIds))
  20. const episodeIds = new Set(
  21. page
  22. .all()
  23. .map((record) => record.episodeId)
  24. .filter((id) => !!id)
  25. )
  26. const episodes = await Episode.findMany(Array.from(episodeIds))
  27. page.all().forEach((record) => {
  28. if (record.seriesId) {
  29. record.series = series.find((s) => s.id === record.seriesId)
  30. }
  31. if (record.episodeId) {
  32. record.episode = episodes.find((e) => e.id === record.episodeId)
  33. }
  34. })
  35. return page
  36. }
  37. }