BannersController.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import type { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
  2. import Banner from 'App/Models/Banner'
  3. import PaginationService from 'App/Services/PaginationService'
  4. import { schema } from '@ioc:Adonis/Core/Validator'
  5. import FilesService from 'App/Services/FilesService'
  6. export default class BannersController {
  7. private paginationService = new PaginationService(Banner)
  8. public async index({ request }: HttpContextContract) {
  9. const result = await this.paginationService.paginate(request.all())
  10. await Promise.all(
  11. result.map(async (banner) => {
  12. if (banner.img) {
  13. try {
  14. const url = new URL(banner.img)
  15. const filePath = url.pathname.replace(/^\//, '')
  16. banner.img = await FilesService.generateThumbnailUrl(filePath)
  17. } catch (e) {
  18. // ignore invalid url
  19. }
  20. }
  21. })
  22. )
  23. return result
  24. }
  25. public async store({ request, bouncer }: HttpContextContract) {
  26. await bouncer.authorize('admin')
  27. const validationSchema = schema.create({
  28. title: schema.string(),
  29. img: schema.string(),
  30. link: schema.string.optional(),
  31. desc: schema.string.optional()
  32. })
  33. const validatedData = await request.validate({
  34. schema: validationSchema
  35. })
  36. const banner = await Banner.create(validatedData)
  37. return banner
  38. }
  39. public async show({ params }: HttpContextContract) {
  40. const banner = await Banner.findOrFail(params.id)
  41. return banner
  42. }
  43. public async update({ request, params, bouncer }: HttpContextContract) {
  44. await bouncer.authorize('admin')
  45. const validationSchema = schema.create({
  46. title: schema.string.optional(),
  47. img: schema.string.optional(),
  48. link: schema.string.optional(),
  49. desc: schema.string.optional()
  50. })
  51. const validatedData = await request.validate({
  52. schema: validationSchema
  53. })
  54. const banner = await Banner.findOrFail(params.id)
  55. banner.merge(validatedData)
  56. await banner.save()
  57. return banner
  58. }
  59. public async destroy({ params, bouncer }: HttpContextContract) {
  60. await bouncer.authorize('admin')
  61. const banner = await Banner.findOrFail(params.id)
  62. await banner.delete()
  63. }
  64. }