init repo
This commit is contained in:
118
api/v1/formula/handler.go
Normal file
118
api/v1/formula/handler.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package formula
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
|
||||
"gitea.com/bitwsd/document_ai/internal/model/formula"
|
||||
"gitea.com/bitwsd/document_ai/internal/service"
|
||||
"gitea.com/bitwsd/document_ai/internal/storage/dao"
|
||||
"gitea.com/bitwsd/document_ai/pkg/common"
|
||||
"gitea.com/bitwsd/document_ai/pkg/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type FormulaEndpoint struct {
|
||||
recognitionService *service.RecognitionService
|
||||
}
|
||||
|
||||
func NewFormulaEndpoint() *FormulaEndpoint {
|
||||
return &FormulaEndpoint{
|
||||
recognitionService: service.NewRecognitionService(),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateTask godoc
|
||||
// @Summary Create a formula recognition task
|
||||
// @Description Create a new formula recognition task from image
|
||||
// @Tags Formula
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param request body CreateFormulaRecognitionRequest true "Create task request"
|
||||
// @Success 200 {object} common.Response{data=CreateTaskResponse}
|
||||
// @Failure 400 {object} common.Response
|
||||
// @Failure 500 {object} common.Response
|
||||
// @Router /v1/formula/recognition [post]
|
||||
func (endpoint *FormulaEndpoint) CreateTask(ctx *gin.Context) {
|
||||
var req formula.CreateFormulaRecognitionRequest
|
||||
if err := ctx.BindJSON(&req); err != nil {
|
||||
ctx.JSON(http.StatusOK, common.ErrorResponse(ctx, common.CodeParamError, "Invalid parameters"))
|
||||
return
|
||||
}
|
||||
|
||||
if !utils.InArray(req.TaskType, []string{string(dao.TaskTypeFormula), string(dao.TaskTypeFormula)}) {
|
||||
ctx.JSON(http.StatusOK, common.ErrorResponse(ctx, common.CodeParamError, "Invalid task type"))
|
||||
return
|
||||
}
|
||||
|
||||
fileExt := filepath.Ext(req.FileName)
|
||||
if !utils.InArray(fileExt, []string{".jpg", ".jpeg", ".png", ".gif", ".bmp", ".tiff", ".webp"}) {
|
||||
ctx.JSON(http.StatusOK, common.ErrorResponse(ctx, common.CodeParamError, "Invalid file type"))
|
||||
return
|
||||
}
|
||||
|
||||
task, err := endpoint.recognitionService.CreateRecognitionTask(ctx, &req)
|
||||
if err != nil {
|
||||
ctx.JSON(http.StatusOK, common.ErrorResponse(ctx, common.CodeSystemError, "Failed to create task"))
|
||||
return
|
||||
}
|
||||
|
||||
ctx.JSON(http.StatusOK, common.SuccessResponse(ctx, &formula.CreateTaskResponse{
|
||||
TaskNo: task.TaskUUID,
|
||||
Status: int(task.Status),
|
||||
}))
|
||||
}
|
||||
|
||||
// GetTaskStatus godoc
|
||||
// @Summary Get formula recognition task status
|
||||
// @Description Get the status and results of a formula recognition task
|
||||
// @Tags Formula
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param task_no path string true "Task No"
|
||||
// @Success 200 {object} common.Response{data=GetTaskStatusResponse}
|
||||
// @Failure 400 {object} common.Response
|
||||
// @Failure 404 {object} common.Response
|
||||
// @Failure 500 {object} common.Response
|
||||
// @Router /v1/formula/recognition/{task_no} [get]
|
||||
func (endpoint *FormulaEndpoint) GetTaskStatus(c *gin.Context) {
|
||||
var req formula.GetRecognitionStatusRequest
|
||||
if err := c.ShouldBindUri(&req); err != nil {
|
||||
c.JSON(http.StatusBadRequest, common.ErrorResponse(c, common.CodeParamError, "invalid task no"))
|
||||
return
|
||||
}
|
||||
|
||||
task, err := endpoint.recognitionService.GetFormualTask(c, req.TaskNo)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeSystemError, "failed to get task status"))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, common.SuccessResponse(c, task))
|
||||
}
|
||||
|
||||
// AI增强识别
|
||||
// @Summary AI增强识别
|
||||
// @Description AI增强识别
|
||||
// @Tags Formula
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Param request body formula.AIEnhanceRecognitionRequest true "AI增强识别请求"
|
||||
// @Success 200 {object} common.Response{data=formula.AIEnhanceRecognitionResponse}
|
||||
// @Router /v1/formula/ai_enhance [post]
|
||||
func (endpoint *FormulaEndpoint) AIEnhanceRecognition(c *gin.Context) {
|
||||
var req formula.AIEnhanceRecognitionRequest
|
||||
if err := c.BindJSON(&req); err != nil {
|
||||
c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeParamError, "Invalid parameters"))
|
||||
return
|
||||
}
|
||||
|
||||
_, err := endpoint.recognitionService.AIEnhanceRecognition(c, &req)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusOK, common.ErrorResponse(c, common.CodeSystemError, err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, common.SuccessResponse(c, nil))
|
||||
}
|
||||
Reference in New Issue
Block a user