| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package controller
- import (
- "log"
- "net/http"
- "strconv"
- "github.com/2930134478/AI-CS/backend/service"
- "github.com/gin-gonic/gin"
- )
- // FAQController 负责处理 FAQ(常见问题)相关的 HTTP 请求。
- type FAQController struct {
- faqService *service.FAQService
- users *service.UserService
- }
- // NewFAQController 创建 FAQController 实例。
- func NewFAQController(faqService *service.FAQService, users *service.UserService) *FAQController {
- return &FAQController{faqService: faqService, users: users}
- }
- // ListFAQs 获取 FAQ 列表,支持关键词搜索。
- // GET /faqs?query=openai%api%调用
- func (f *FAQController) ListFAQs(c *gin.Context) {
- if !requirePermission(c, f.users, string(service.PermFAQs)) {
- return
- }
- // 获取查询参数
- query := c.Query("query")
- // 查询 FAQ 列表
- faqs, err := f.faqService.ListFAQs(query)
- if err != nil {
- log.Printf("查询 FAQ 列表失败: %v", err)
- c.JSON(http.StatusInternalServerError, gin.H{"error": "查询 FAQ 列表失败"})
- return
- }
- c.JSON(http.StatusOK, gin.H{
- "faqs": faqs,
- })
- }
- // GetFAQ 获取 FAQ 详情。
- // GET /faqs/:id
- func (f *FAQController) GetFAQ(c *gin.Context) {
- if !requirePermission(c, f.users, string(service.PermFAQs)) {
- return
- }
- // 获取 ID
- idStr := c.Param("id")
- id, err := strconv.ParseUint(idStr, 10, 64)
- if err != nil || id == 0 {
- c.JSON(http.StatusBadRequest, gin.H{"error": "FAQ ID 不合法"})
- return
- }
- // 查询 FAQ
- faq, err := f.faqService.GetFAQ(uint(id))
- if err != nil {
- log.Printf("查询 FAQ 失败: %v", err)
- c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
- return
- }
- c.JSON(http.StatusOK, faq)
- }
- // CreateFAQ 创建新的 FAQ 记录。
- // POST /faqs
- func (f *FAQController) CreateFAQ(c *gin.Context) {
- if !requirePermission(c, f.users, string(service.PermFAQs)) {
- return
- }
- var req struct {
- Question string `json:"question" binding:"required"`
- Answer string `json:"answer" binding:"required"`
- Keywords string `json:"keywords"`
- }
- if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
- return
- }
- // 创建 FAQ
- faq, err := f.faqService.CreateFAQ(service.CreateFAQInput{
- Question: req.Question,
- Answer: req.Answer,
- Keywords: req.Keywords,
- })
- if err != nil {
- log.Printf("创建 FAQ 失败: %v", err)
- c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
- return
- }
- c.JSON(http.StatusOK, faq)
- }
- // UpdateFAQ 更新 FAQ 记录。
- // PUT /faqs/:id
- func (f *FAQController) UpdateFAQ(c *gin.Context) {
- if !requirePermission(c, f.users, string(service.PermFAQs)) {
- return
- }
- // 获取 ID
- idStr := c.Param("id")
- id, err := strconv.ParseUint(idStr, 10, 64)
- if err != nil || id == 0 {
- c.JSON(http.StatusBadRequest, gin.H{"error": "FAQ ID 不合法"})
- return
- }
- var req struct {
- Question *string `json:"question"`
- Answer *string `json:"answer"`
- Keywords *string `json:"keywords"`
- }
- if err := c.ShouldBindJSON(&req); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
- return
- }
- // 更新 FAQ
- faq, err := f.faqService.UpdateFAQ(uint(id), service.UpdateFAQInput{
- Question: req.Question,
- Answer: req.Answer,
- Keywords: req.Keywords,
- })
- if err != nil {
- log.Printf("更新 FAQ 失败: %v", err)
- c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
- return
- }
- c.JSON(http.StatusOK, faq)
- }
- // DeleteFAQ 删除 FAQ 记录。
- // DELETE /faqs/:id
- func (f *FAQController) DeleteFAQ(c *gin.Context) {
- if !requirePermission(c, f.users, string(service.PermFAQs)) {
- return
- }
- // 获取 ID
- idStr := c.Param("id")
- id, err := strconv.ParseUint(idStr, 10, 64)
- if err != nil || id == 0 {
- c.JSON(http.StatusBadRequest, gin.H{"error": "FAQ ID 不合法"})
- return
- }
- // 删除 FAQ
- if err := f.faqService.DeleteFAQ(uint(id)); err != nil {
- log.Printf("删除 FAQ 失败: %v", err)
- c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
- return
- }
- c.JSON(http.StatusOK, gin.H{"message": "删除成功"})
- }
|