BannersController.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 Drive from '@ioc:Adonis/Core/Drive'
  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. const url = new URL(banner.img)
  14. const filePath = url.pathname.replace(/^\//, '')
  15. banner.img = await Drive.getSignedUrl(filePath)
  16. }
  17. })
  18. )
  19. return result
  20. }
  21. public async store({ request, bouncer }: HttpContextContract) {
  22. await bouncer.authorize('admin')
  23. const validationSchema = schema.create({
  24. title: schema.string(),
  25. img: schema.string(),
  26. link: schema.string.optional(),
  27. desc: schema.string.optional()
  28. })
  29. const validatedData = await request.validate({
  30. schema: validationSchema
  31. })
  32. const banner = await Banner.create(validatedData)
  33. return banner
  34. }
  35. public async show({ params }: HttpContextContract) {
  36. const banner = await Banner.findOrFail(params.id)
  37. if (banner.img) {
  38. const url = new URL(banner.img)
  39. const filePath = url.pathname.replace(/^\//, '')
  40. banner.img = await Drive.getSignedUrl(filePath)
  41. }
  42. return banner
  43. }
  44. public async update({ request, params, bouncer }: HttpContextContract) {
  45. await bouncer.authorize('admin')
  46. const validationSchema = schema.create({
  47. title: schema.string.optional(),
  48. img: schema.string.optional(),
  49. link: schema.string.optional(),
  50. desc: schema.string.optional()
  51. })
  52. const validatedData = await request.validate({
  53. schema: validationSchema
  54. })
  55. const banner = await Banner.findOrFail(params.id)
  56. banner.merge(validatedData)
  57. await banner.save()
  58. return banner
  59. }
  60. public async destroy({ params, bouncer }: HttpContextContract) {
  61. await bouncer.authorize('admin')
  62. const banner = await Banner.findOrFail(params.id)
  63. await banner.delete()
  64. }
  65. }