added logic for send req to ai, neew work with client process and client response
This commit is contained in:
parent
f8adf9b338
commit
be718cfde3
36
clients/aiClient.go
Normal file
36
clients/aiClient.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package clients
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AIClient struct {
|
||||||
|
baseURL string
|
||||||
|
httpClient *fiber.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
type SendAnswerRequest struct {
|
||||||
|
Tipe string `json:"type"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Final bool `json:"final"`
|
||||||
|
Session string `json:"session"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAiClient(baseURL string) *AIClient {
|
||||||
|
return &AIClient{
|
||||||
|
baseURL: baseURL,
|
||||||
|
httpClient: fiber.AcquireClient(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (client *AIClient) SendAnswerer(final bool, tipe, message, session string) error {
|
||||||
|
req := SendAnswerRequest{
|
||||||
|
Tipe: tipe,
|
||||||
|
Message: message,
|
||||||
|
Final: final,
|
||||||
|
Session: session,
|
||||||
|
}
|
||||||
|
fmt.Println(req)
|
||||||
|
return nil
|
||||||
|
}
|
@ -33,6 +33,7 @@ type Service struct {
|
|||||||
workerSendClientCh chan<- model.Answer
|
workerSendClientCh chan<- model.Answer
|
||||||
encrypt *utils.Encrypt
|
encrypt *utils.Encrypt
|
||||||
redirectURl string
|
redirectURl string
|
||||||
|
aiClient *clients.AIClient
|
||||||
}
|
}
|
||||||
|
|
||||||
type ServiceDeps struct {
|
type ServiceDeps struct {
|
||||||
@ -42,6 +43,7 @@ type ServiceDeps struct {
|
|||||||
WorkerSendClientCh chan<- model.Answer
|
WorkerSendClientCh chan<- model.Answer
|
||||||
Encrypt *utils.Encrypt
|
Encrypt *utils.Encrypt
|
||||||
RedirectURl string
|
RedirectURl string
|
||||||
|
AiClient *clients.AIClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(deps ServiceDeps) *Service {
|
func New(deps ServiceDeps) *Service {
|
||||||
@ -54,6 +56,7 @@ func New(deps ServiceDeps) *Service {
|
|||||||
workerSendClientCh: deps.WorkerSendClientCh,
|
workerSendClientCh: deps.WorkerSendClientCh,
|
||||||
encrypt: deps.Encrypt,
|
encrypt: deps.Encrypt,
|
||||||
redirectURl: deps.RedirectURl,
|
redirectURl: deps.RedirectURl,
|
||||||
|
aiClient: deps.AiClient,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,6 +365,33 @@ func (s *Service) PutAnswersOnePiece(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
for _, ans := range answersRaw {
|
for _, ans := range answersRaw {
|
||||||
|
|
||||||
|
if quiz.Status == model.StatusAI {
|
||||||
|
final := false
|
||||||
|
if finalStr, exists := form.Value["final"]; exists && len(finalStr) > 0 {
|
||||||
|
parsedFinal, err := strconv.ParseBool(finalStr[0])
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(fiber.StatusBadRequest).SendString("invalid final value")
|
||||||
|
}
|
||||||
|
final = parsedFinal
|
||||||
|
}
|
||||||
|
|
||||||
|
question, err := s.dal.QuestionRepo.GetQuestionListByIDs(c.Context(), []int32{int32(ans.QuestionId)})
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(fiber.StatusInternalServerError).SendString("can not get questions")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(question) == 0 {
|
||||||
|
return c.Status(fiber.StatusNotFound).SendString("no questions found")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.aiClient.SendAnswerer(final, question[0].Type, ans.Content, cs)
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("can not send answer to ai, err: %s", err.Error()))
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo тут надо создать вопрос по ответу от ai
|
||||||
|
}
|
||||||
|
|
||||||
ans.DeviceType = deviceType
|
ans.DeviceType = deviceType
|
||||||
ans.OS = os
|
ans.OS = os
|
||||||
ans.Browser = browser
|
ans.Browser = browser
|
||||||
|
Loading…
Reference in New Issue
Block a user