Explorar o código

feat(banners): 优化
BannersController 的图片处理逻辑

- 在 index 方法中添加对 banner.img 的 URL 处理,生成缩略图 URL
- 引入 FilesService 以支持缩略图生成
- 改进了分页查询的返回结果

wuyi hai 5 meses
pai
achega
fb59213f15
Modificáronse 2 ficheiros con 18 adicións e 4 borrados
  1. 2 1
      .gitignore
  2. 16 3
      app/Controllers/Http/BannersController.ts

+ 2 - 1
.gitignore

@@ -4,4 +4,5 @@ coverage
 .DS_STORE
 tmp
 .vscode/*
-!.vscode/launch.json
+!.vscode/launch.json
+.idea/*

+ 16 - 3
app/Controllers/Http/BannersController.ts

@@ -2,13 +2,26 @@ 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 { page, perPage } = request.qs()
-        const pagination = await this.paginationService.paginate(request.all())
-        return pagination
+        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) {