Explorar o código

feat(ocr): 添加收藏功能并优化 API 用户数据访问

- 在 OCR 记录表中添加 favorite 字段
- 更新 OcrRecord 模型,增加 favorite 属性
- 在 OcrRecordController 中添加更新收藏状态和获取收藏记录的方法
- 在路由中注册相关 API 端点
-优化 API 用户的数据访问,隐藏敏感信息
wui hai 9 meses
pai
achega
4d513c15a3

+ 43 - 0
app/Controllers/Http/OcrRecordController.ts

@@ -86,6 +86,49 @@ export default class OcrRecordController {
         }
     }
 
+    public async updateFavorite({ params, response }: HttpContextContract) {
+        const record = await OcrRecord.findBy('id', params.id)
+        if (record) {
+            record.favorite = !record.favorite
+            await record.save()
+            return response.ok(record)
+        } else {
+            return response.notFound({ message: 'Record not found.' })
+        }
+    }
+
+    public async favorite({ request, auth }: HttpContextContract) {
+        const user = auth.user
+        const isApiUser = user?.$attributes?.role === 'api'
+
+        const requestData = request.all()
+        requestData.favorite = 1
+        if (isApiUser) {
+            requestData.channel = user.username
+        }
+
+        const res = await this.paginationService.paginate(requestData)
+        if (isApiUser) {
+            res.forEach((record) => {
+                record.content = ''
+                record.record = ''
+                record.img = ''
+            })
+        } else {
+            await Promise.all(
+                res.map(async (record) => {
+                    if (record.img && record.img !== '-') {
+                        record.img = await Drive.getSignedUrl(
+                            new URL(record.img).pathname.replace(/^\//, '')
+                        )
+                    }
+                })
+            )
+        }
+
+        return res
+    }
+
     public async getAllAddresses({ request }: HttpContextContract) {
         await request.validate({
             schema: schema.create({

+ 3 - 0
app/Models/OcrRecord.ts

@@ -24,6 +24,9 @@ export default class OcrRecord extends AppBaseModel {
     @column()
     public img: string
 
+    @column()
+    public favorite: boolean
+
     @column.dateTime({ autoCreate: true })
     public createdAt: DateTime
 

+ 15 - 0
database/migrations/1743060570939_ocr_records.ts

@@ -0,0 +1,15 @@
+import BaseSchema from '@ioc:Adonis/Lucid/Schema'
+
+export default class extends BaseSchema {
+    protected tableName = 'ocr_records'
+
+    public async up() {
+        this.schema.alterTable(this.tableName, (table) => {
+            table.boolean('favorite').notNullable().defaultTo(false)
+        })
+    }
+
+    public async down() {
+        this.schema.dropTable(this.tableName)
+    }
+}

+ 2 - 0
start/routes.ts

@@ -115,6 +115,8 @@ Route.group(() => {
         Route.post('/detail', 'OcrRecordController.getAllAddresses').middleware('auth:api')
         Route.put('/updateContent', 'OcrRecordController.updateContent').middleware('auth:api')
         Route.get('/updateDetail/:id', 'OcrRecordController.updateDetail').middleware('auth:api')
+        Route.get('/favorite', 'OcrRecordController.favorite').middleware('auth:api')
+        Route.get('/updateFavorite/:id', 'OcrRecordController.updateFavorite').middleware('auth:api')
         Route.post('/', 'OcrRecordController.store')
     }).prefix('/ocrRecord')