chore(core): 清理Demo代码并优化配置文件

删除DemoController和PostReviewStatusEnum等测试/废弃代码;
.gitignore、SaTokenConfigure、SendMailUtils、application.yml小幅更新;
AppleAppStoreConfig改用流式读取私钥,适配容器化部署。
This commit is contained in:
2025-12-18 15:51:46 +08:00
parent 95fb77a575
commit c4d0c60ea8
7 changed files with 8 additions and 173 deletions

View File

@@ -1,125 +0,0 @@
package com.yolo.keyborad.controller;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.json.JSONUtil;
import com.yolo.keyborad.common.BaseResponse;
import com.yolo.keyborad.common.ResultUtils;
import com.yolo.keyborad.model.dto.EmbedSaveReq;
import com.yolo.keyborad.model.dto.IosPayVerifyReq;
import com.yolo.keyborad.model.dto.SearchEmbedReq;
import com.yolo.keyborad.model.dto.TextSearchReq;
import com.yolo.keyborad.model.vo.QdrantSearchItem;
import com.yolo.keyborad.service.impl.QdrantVectorService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.embedding.Embedding;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.boot.context.properties.bind.DefaultValue;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import java.util.Arrays;
import java.util.List;
/*
* @author: ziin
* @date: 2025/10/28 20:42
*/
@RestController
@RequestMapping("/demo")
@Slf4j
@CrossOrigin
@Tag(name = "测试控制器", description = "测试控制器")
public class DemoController {
@Resource
private ChatClient client;
@Resource
private OpenAiEmbeddingModel embeddingModel;
@Resource
private QdrantVectorService qdrantVectorService;
@GetMapping("/test")
@Operation(summary = "测试接口", description = "测试接口")
public BaseResponse<String> testDemo(){
return ResultUtils.success("hello world");
}
@GetMapping("/talk")
@Operation(summary = "测试聊天接口", description = "测试接口")
@Parameter(name = "userInput",required = true,description = "测试聊天接口",example = "talk to something")
public Flux<String> testTalk(@DefaultValue("you are so cute!") String userInput){
return client
.prompt("""
You're a 25-year-old guy—witty and laid-back, always replying in English.
Read the user's last message, then write three short and funny replies that sound like something a guy would say.
Go easy on the emojis.
Keep each under 20 words.
User message: %s
""".formatted(userInput))
.system("""
Format rules (very important):
- Return EXACTLY 3 replies.
- Use "<SPLIT>" as the separator between replies.
- Output format: reply1<SPLIT>reply2<SPLIT>reply3
- Do NOT use "<SPLIT>" inside any reply.
""")
.user(userInput)
.options(OpenAiChatOptions.builder()
.user(StpUtil.getLoginIdAsString())// ✅ 这里每次请求都会重新取当前登录用户
.build())
.stream()
.content();
}
@PostMapping("/embed")
@Operation(summary = "测试向量接口", description = "测试向量接口")
@Parameter(name = "userInput",required = true,description = "测试向量接口",example = "you are so cute!")
public BaseResponse<Embedding> testEmbed(@DefaultValue("you are so cute!") @RequestBody List<String> userInput){
EmbeddingResponse response = embeddingModel.embedForResponse(userInput);
return ResultUtils.success(response.getResult());
}
// @PostMapping("/testSaveEmbed")
// @Operation(summary = "测试存储向量接口", description = "测试存储向量接口")
// @Parameter(name = "userInput",required = true,description = "测试存储向量接口")
// public BaseResponse<Boolean> testSaveEmbed(@RequestBody EmbedSaveReq embedSaveReq) {
// qdrantVectorService.upsertPoint(embedSaveReq.getRecordItem().getId()
// , embedSaveReq.getVector()
// , JSONUtil.toJsonStr(embedSaveReq.getRecordItem()));
// return ResultUtils.success(true);
// }
// @PostMapping("/testSearch")
// @Operation(summary = "测试搜索向量接口", description = "测试搜索向量接口")
// @Parameter(name = "userInput",required = true,description = "测试搜索向量接口")
// public BaseResponse<List<QdrantSearchItem>> testSearch(@RequestBody SearchEmbedReq searchEmbedReq) {
// return ResultUtils.success(qdrantVectorService.searchPoint(searchEmbedReq.getUserInputEmbed(), 3));
// }
@PostMapping("/tsetSearchText")
@Operation(summary = "测试搜索语义接口", description = "测试搜索语义接口")
@Parameter(name = "userInput",required = true,description = "测试搜索语义接口")
public BaseResponse<List<QdrantSearchItem>> testSearchText(@RequestBody TextSearchReq textSearchReq) {
return ResultUtils.success(qdrantVectorService.searchText(textSearchReq.getUserInput()));
}
}