|
@@ -3,15 +3,27 @@ import Series from 'App/Models/Series'
|
|
|
import PaginationService from 'App/Services/PaginationService'
|
|
import PaginationService from 'App/Services/PaginationService'
|
|
|
import { schema } from '@ioc:Adonis/Core/Validator'
|
|
import { schema } from '@ioc:Adonis/Core/Validator'
|
|
|
import Decimal from 'decimal.js'
|
|
import Decimal from 'decimal.js'
|
|
|
|
|
+import Drive from '@ioc:Adonis/Core/Drive'
|
|
|
|
|
+import FilesService from 'App/Services/FilesService'
|
|
|
|
|
|
|
|
export default class SeriesController {
|
|
export default class SeriesController {
|
|
|
private paginationService = new PaginationService(Series)
|
|
private paginationService = new PaginationService(Series)
|
|
|
public async index({ request }: HttpContextContract) {
|
|
public async index({ request }: HttpContextContract) {
|
|
|
const data = request.all()
|
|
const data = request.all()
|
|
|
- return await this.paginationService.paginate(request.all(), (q) => {
|
|
|
|
|
|
|
+ const result = await this.paginationService.paginate(request.all(), (q) => {
|
|
|
q.preload('categories')
|
|
q.preload('categories')
|
|
|
this.queryCategories(q, data.categories)
|
|
this.queryCategories(q, data.categories)
|
|
|
})
|
|
})
|
|
|
|
|
+ await Promise.all(
|
|
|
|
|
+ result.map(async (series) => {
|
|
|
|
|
+ if (series.cover) {
|
|
|
|
|
+ const url = new URL(series.cover)
|
|
|
|
|
+ const filePath = url.pathname.replace(/^\//, '')
|
|
|
|
|
+ series.cover = await FilesService.generateThumbnailUrl(filePath)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ )
|
|
|
|
|
+ return result
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private queryCategories(q: any, categories: any) {
|
|
private queryCategories(q: any, categories: any) {
|
|
@@ -45,15 +57,33 @@ export default class SeriesController {
|
|
|
landscapeCover: schema.string.optional(),
|
|
landscapeCover: schema.string.optional(),
|
|
|
tags: schema.array.optional().members(schema.string()),
|
|
tags: schema.array.optional().members(schema.string()),
|
|
|
releaseDate: schema.date.optional(),
|
|
releaseDate: schema.date.optional(),
|
|
|
- meta: schema.object.optional().anyMembers()
|
|
|
|
|
|
|
+ meta: schema.object.optional().anyMembers(),
|
|
|
|
|
+ categories: schema.array.optional().anyMembers()
|
|
|
})
|
|
})
|
|
|
})
|
|
})
|
|
|
- return await Series.create(request.all())
|
|
|
|
|
|
|
+ const payload = request.all()
|
|
|
|
|
+ const serie = await Series.create(payload)
|
|
|
|
|
+ if (payload.categories) {
|
|
|
|
|
+ await serie
|
|
|
|
|
+ .related('categories')
|
|
|
|
|
+ .sync(payload.categories.map((item: any) => item.id ?? item))
|
|
|
|
|
+ }
|
|
|
|
|
+ return serie
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public async show({ params }: HttpContextContract) {
|
|
public async show({ params }: HttpContextContract) {
|
|
|
const data = await Series.findOrFail(params.id)
|
|
const data = await Series.findOrFail(params.id)
|
|
|
await data.load('categories')
|
|
await data.load('categories')
|
|
|
|
|
+ if (data.cover) {
|
|
|
|
|
+ const url = new URL(data.cover)
|
|
|
|
|
+ const filePath = url.pathname.replace(/^\//, '')
|
|
|
|
|
+ data.cover = await Drive.getSignedUrl(filePath)
|
|
|
|
|
+ }
|
|
|
|
|
+ if (data.landscapeCover) {
|
|
|
|
|
+ const url = new URL(data.landscapeCover)
|
|
|
|
|
+ const filePath = url.pathname.replace(/^\//, '')
|
|
|
|
|
+ data.landscapeCover = await Drive.getSignedUrl(filePath)
|
|
|
|
|
+ }
|
|
|
return data
|
|
return data
|
|
|
}
|
|
}
|
|
|
|
|
|