feat(project): 项目完结
This commit is contained in:
2
internal/trigger/doc.go
Normal file
2
internal/trigger/doc.go
Normal file
@@ -0,0 +1,2 @@
|
||||
// Package trigger contains inbound adapters such as HTTP handlers.
|
||||
package trigger
|
||||
109
internal/trigger/http/agent_handler.go
Normal file
109
internal/trigger/http/agent_handler.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"ai-agent-scaffold-go/internal/api/dto"
|
||||
"ai-agent-scaffold-go/internal/api/response"
|
||||
"ai-agent-scaffold-go/internal/domain/agent/service/chat"
|
||||
"ai-agent-scaffold-go/pkg/types"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func RegisterAgentRoutes(router gin.IRouter, service *chat.Service) {
|
||||
group := router.Group("/api/v1")
|
||||
group.GET("/query_ai_agent_config_list", queryAgentConfigList(service))
|
||||
group.POST("/create_session", createSession(service))
|
||||
group.GET("/create_session", createSessionQuery(service))
|
||||
group.POST("/chat", chatMessage(service))
|
||||
group.POST("/chat_stream", chatStream(service))
|
||||
}
|
||||
|
||||
func queryAgentConfigList(service *chat.Service) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
agents := service.QueryAgentConfigList()
|
||||
responses := make([]dto.AiAgentConfigResponse, 0, len(agents))
|
||||
for _, agent := range agents {
|
||||
responses = append(responses, dto.AiAgentConfigResponse{
|
||||
AgentID: agent.AgentID,
|
||||
AgentName: agent.AgentName,
|
||||
AgentDesc: agent.AgentDesc,
|
||||
})
|
||||
}
|
||||
c.JSON(http.StatusOK, response.Success(responses))
|
||||
}
|
||||
}
|
||||
|
||||
func createSession(service *chat.Service) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
var request dto.CreateSessionRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
writeError(c, types.NewAppError(types.CodeIllegalParameter, err.Error()))
|
||||
return
|
||||
}
|
||||
sessionID, err := service.CreateSession(request.AgentID, request.UserID)
|
||||
if err != nil {
|
||||
writeError(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, response.Success(dto.CreateSessionResponse{SessionID: sessionID}))
|
||||
}
|
||||
}
|
||||
|
||||
func createSessionQuery(service *chat.Service) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
sessionID, err := service.CreateSession(c.Query("agentId"), c.Query("userId"))
|
||||
if err != nil {
|
||||
writeError(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, response.Success(dto.CreateSessionResponse{SessionID: sessionID}))
|
||||
}
|
||||
}
|
||||
|
||||
func chatMessage(service *chat.Service) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
var request dto.ChatRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
writeError(c, types.NewAppError(types.CodeIllegalParameter, err.Error()))
|
||||
return
|
||||
}
|
||||
outputs, err := service.HandleMessage(request.AgentID, request.UserID, request.SessionID, request.Message)
|
||||
if err != nil {
|
||||
writeError(c, err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, response.Success(dto.ChatResponse{Content: strings.Join(outputs, "\n")}))
|
||||
}
|
||||
}
|
||||
|
||||
func chatStream(service *chat.Service) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
var request dto.ChatRequest
|
||||
if err := c.ShouldBindJSON(&request); err != nil {
|
||||
writeError(c, types.NewAppError(types.CodeIllegalParameter, err.Error()))
|
||||
return
|
||||
}
|
||||
outputs, errs := service.HandleMessageStream(request.AgentID, request.UserID, request.SessionID, request.Message)
|
||||
c.Header("Content-Type", "text/event-stream")
|
||||
for output := range outputs {
|
||||
c.SSEvent("message", output)
|
||||
c.Writer.Flush()
|
||||
}
|
||||
if err, ok := <-errs; ok && err != nil {
|
||||
c.SSEvent("error", err.Error())
|
||||
c.Writer.Flush()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func writeError(c *gin.Context, err error) {
|
||||
var appErr *types.AppError
|
||||
if errors.As(err, &appErr) {
|
||||
c.JSON(http.StatusOK, response.Failure(appErr.Code, appErr.Info))
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, response.Failure(types.CodeUnknownError, err.Error()))
|
||||
}
|
||||
Reference in New Issue
Block a user