# SoftwareTest **Repository Path**: zzzzhs333/SoftwareTest ## Basic Information - **Project Name**: SoftwareTest - **Description**: 菜谱生成 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-31 - **Last Updated**: 2026-01-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 食材识别 & 口味菜谱生成(前后端分离) 后端:Spring Boot(REST API) 前端:Vite(独立项目,通过 `/api` 代理访问后端) ## 一键运行(本地) ### 1) 启动后端 ```bash mvn spring-boot:run ``` - 默认后端:`http://localhost:8080` - H2 控制台:`http://localhost:8080/h2-console` - JDBC URL:`jdbc:h2:file:./data/testdb` ### 2) 启动前端 ```bash cd frontend npm install npm run dev ``` 前端:`http://localhost:5173` ## 登录(JWT) - 默认会在启动时自动创建一个本地账号(可在 `src/main/resources/application.properties` 修改): - 用户名:`demo` - 密码:`demo1234` - 前端页面有“登录获取 Token”按钮,登录后会把 token 存在 `localStorage` 并自动带上 `Authorization: Bearer ...` 调用后端接口。 ## 核心接口 ### `POST /api/v1/auth/login` 请求: ```json { "username": "demo", "password": "demo1234" } ``` 响应:`accessToken`(JWT) ### `POST /api/v1/recipes/from-image` - `multipart/form-data` - `image`: 图片文件(`image/*`) - `preferences`: JSON(口味偏好) - Header:`Authorization: Bearer ` ### `GET /api/v1/uploads/{id}` 获取上传后的图片(用于预览/调试)。 ## 存储:本地或 MinIO 在 `src/main/resources/application.properties`: - `app.storage.provider=local`:图片落在本地目录(默认 `uploads/`) - `app.storage.provider=minio`:图片落在 MinIO(需要你本地启动 MinIO,并配置 `app.minio.*`) 上传的元数据会落到 H2(表 `uploads`)。 ## AI:输出 schema 校验 + 自动重试 - OpenAI 返回内容会做“结构校验”(要求包含 `ingredients[]` 和 `recipes[]`,字段类型/范围正确) - 第 1 次输出不合法时会自动再请求 1 次,让模型“只输出合法 JSON” - schema 文件:`src/main/resources/ai/recipe-output.schema.json` ## 启用 OpenAI(可选) 默认使用 `mock`(不调用外部 AI),如需启用 OpenAI: 1. `src/main/resources/application.properties`:`app.ai.provider=openai` 2. 设置环境变量 `OPENAI_API_KEY` 3. 可选:配置 `app.ai.openai.base-url`