| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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 FilesService from 'App/Services/FilesService'
- 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) {
- try {
- const url = new URL(banner.img)
- const filePath = url.pathname.replace(/^\//, '')
- banner.img = await FilesService.generateThumbnailUrl(filePath)
- } catch (e) {
- // ignore invalid url
- }
- }
- })
- )
- 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)
- 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()
- }
- }
|