| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
- import Banner from 'App/Models/Banner'
- import PaginationService from 'App/Services/PaginationService'
- import { schema } from '@ioc:Adonis/Core/Validator'
- import Drive from '@ioc:Adonis/Core/Drive'
- export default class BannersController {
- private paginationService = new PaginationService(Banner)
- public async index({ request }: HttpContextContract) {
- const result = await this.paginationService.paginate(request.all())
- await Promise.all(
- result.map(async (banner) => {
- if (banner.img) {
- const url = new URL(banner.img)
- const filePath = url.pathname.replace(/^\//, '')
- banner.img = await Drive.getSignedUrl(filePath)
- }
- })
- )
- return result
- }
- public async store({ request, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const validationSchema = schema.create({
- title: schema.string(),
- img: schema.string(),
- link: schema.string.optional(),
- desc: schema.string.optional()
- })
- const validatedData = await request.validate({
- schema: validationSchema
- })
- const banner = await Banner.create(validatedData)
- return banner
- }
- public async show({ params }: HttpContextContract) {
- const banner = await Banner.findOrFail(params.id)
- if (banner.img) {
- const url = new URL(banner.img)
- const filePath = url.pathname.replace(/^\//, '')
- banner.img = await Drive.getSignedUrl(filePath)
- }
- return banner
- }
- public async update({ request, params, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const validationSchema = schema.create({
- title: schema.string.optional(),
- img: schema.string.optional(),
- link: schema.string.optional(),
- desc: schema.string.optional()
- })
- const validatedData = await request.validate({
- schema: validationSchema
- })
- const banner = await Banner.findOrFail(params.id)
- banner.merge(validatedData)
- await banner.save()
- return banner
- }
- public async destroy({ params, bouncer }: HttpContextContract) {
- await bouncer.authorize('admin')
- const banner = await Banner.findOrFail(params.id)
- await banner.delete()
- }
- }
|