首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"io"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"resume-platform/internal/service/document"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// DocumentHandler 文档处理器,负责作品集文档的上传、查询和删除
|
||||
type DocumentHandler struct {
|
||||
documentService document.DocumentService
|
||||
}
|
||||
|
||||
// NewDocumentHandler 创建文档处理器实例
|
||||
// @param documentService 文档服务层
|
||||
// @return *DocumentHandler 处理器实例
|
||||
// @author sunct
|
||||
func NewDocumentHandler(documentService document.DocumentService) *DocumentHandler {
|
||||
return &DocumentHandler{documentService: documentService}
|
||||
}
|
||||
|
||||
// UploadDocument 上传文档接口,读取文件内容后交给 Service 层做向量化处理
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *DocumentHandler) UploadDocument(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
if userID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id is required"})
|
||||
return
|
||||
}
|
||||
|
||||
file, err := c.FormFile("file")
|
||||
if err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "file is required"})
|
||||
return
|
||||
}
|
||||
|
||||
fileType := filepath.Ext(file.Filename)
|
||||
|
||||
reader, err := file.Open()
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to open file"})
|
||||
return
|
||||
}
|
||||
defer reader.Close()
|
||||
|
||||
content, err := io.ReadAll(reader)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "failed to read file"})
|
||||
return
|
||||
}
|
||||
|
||||
document, err := h.documentService.UploadDocument(c.Request.Context(), userID, file.Filename, fileType, file.Size, string(content))
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"id": document.ID, "name": document.Name, "status": document.Status})
|
||||
}
|
||||
|
||||
// GetDocuments 获取用户文档列表接口
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *DocumentHandler) GetDocuments(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
if userID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id is required"})
|
||||
return
|
||||
}
|
||||
|
||||
documents, err := h.documentService.GetDocuments(c.Request.Context(), userID)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, documents)
|
||||
}
|
||||
|
||||
// GetDocument 获取单篇文档详情接口
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *DocumentHandler) GetDocument(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
documentID := c.Param("id")
|
||||
|
||||
if userID == "" || documentID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id and document_id are required"})
|
||||
return
|
||||
}
|
||||
|
||||
document, err := h.documentService.GetDocument(c.Request.Context(), userID, documentID)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "document not found"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, document)
|
||||
}
|
||||
|
||||
// DeleteDocument 删除文档接口
|
||||
// @param c Gin 上下文
|
||||
// @author sunct
|
||||
func (h *DocumentHandler) DeleteDocument(c *gin.Context) {
|
||||
userID := c.Query("user_id")
|
||||
documentID := c.Param("id")
|
||||
|
||||
if userID == "" || documentID == "" {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "user_id and document_id are required"})
|
||||
return
|
||||
}
|
||||
|
||||
err := h.documentService.DeleteDocument(c.Request.Context(), userID, documentID)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{"message": "document deleted successfully"})
|
||||
}
|
||||
Reference in New Issue
Block a user