package controllers import ( "amocrm/internal/models" "amocrm/internal/service" "github.com/gofiber/fiber/v2" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/backend/quiz/core.git/middleware" ) type Deps struct { Service *service.Service Logger *zap.Logger } type Controller struct { service *service.Service logger *zap.Logger } func NewController(deps Deps) *Controller { return &Controller{ service: deps.Service, logger: deps.Logger, } } func (c *Controller) Register(router fiber.Router) { router.Patch("/users", c.UpdateListUsers) router.Get("/users", c.GettingUserFromCash) router.Delete("/utms/:quizID", c.DeletingUserUtm) router.Post("/utms/:quizID", c.SavingUserUtm) router.Get("/utms/:quizID", c.GettingUserUtm) router.Delete("/account", c.SoftDeleteAccount) router.Get("/account", c.GetCurrentAccount) router.Post("/account", c.ConnectAccount) router.Get("/steps", c.GettingStepsFromCash) router.Patch("/steps", c.UpdateListSteps) router.Get("/webhook/create", c.WebhookCreate) router.Get("/webhook/delete", c.WebhookDelete) router.Patch("/pipelines", c.UpdateListPipelines) router.Get("/pipelines", c.GettingPipelinesFromCash) router.Patch("/rules/:quizID", c.ChangeQuizSettings) router.Post("/rules/:quizID", c.SetQuizSettings) router.Get("/rules/:quizID", c.GettingQuizRules) router.Get("/tags", c.GettingTagsFromCash) router.Patch("/tags", c.UpdateListTags) router.Get("/fields", c.GettingFieldsFromCash) router.Patch("/fields", c.UpdateListCustom) } func (c *Controller) Name() string { return "" } func (c *Controller) UpdateListUsers(ctx *fiber.Ctx) error { err := c.service.UpdateListUsers(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) GettingUserFromCash(ctx *fiber.Ctx) error { req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingUserFromCash(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) DeletingUserUtm(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } var request models.ListDeleteUTMIDsReq if err := ctx.BodyParser(&request); err != nil { return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) } err := c.service.DeletingUserUtm(ctx.Context(), &request) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) SavingUserUtm(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } var request models.SaveUserListUTMReq if err := ctx.BodyParser(&request); err != nil { return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) } response, err := c.service.SavingUserUtm(ctx.Context(), &request) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) GettingUserUtm(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingUserUtm(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) SoftDeleteAccount(ctx *fiber.Ctx) error { err := c.service.SoftDeleteAccount(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) GetCurrentAccount(ctx *fiber.Ctx) error { response, err := c.service.GetCurrentAccount(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } // при запросе на этот контроллер приходит только токен из которого получаем id аккаунта в ис // отдает ссылку на подключение к amocrm и создает модель в монге имеющую связь с аккаунтом // в постгресе по accountid // ссылку составляет сервис соц авторизации func (c *Controller) ConnectAccount(ctx *fiber.Ctx) error { accountID, ok := middleware.GetAccountId(ctx) if !ok { return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") } response, err := c.service.ConnectAccount(ctx.Context(), accountID) if err != nil { c.logger.Error("error connect account", zap.Error(err)) return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) GettingStepsFromCash(ctx *fiber.Ctx) error { req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingStepsFromCash(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) UpdateListSteps(ctx *fiber.Ctx) error { err := c.service.UpdateListSteps(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) WebhookCreate(ctx *fiber.Ctx) error { err := c.service.WebhookCreate(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) WebhookDelete(ctx *fiber.Ctx) error { err := c.service.WebhookDelete(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) UpdateListPipelines(ctx *fiber.Ctx) error { err := c.service.UpdateListPipelines(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) GettingPipelinesFromCash(ctx *fiber.Ctx) error { req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingPipelinesFromCash(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) ChangeQuizSettings(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } var request models.RulesReq if err := ctx.BodyParser(&request); err != nil { return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) } err := c.service.ChangeQuizSettings(ctx.Context(), &request) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) SetQuizSettings(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } var request models.RulesReq if err := ctx.BodyParser(&request); err != nil { return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) } err := c.service.SetQuizSettings(ctx.Context(), &request) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) GettingQuizRules(ctx *fiber.Ctx) error { quizID := ctx.Params("quizID") if quizID == "" { return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") } response, err := c.service.GettingQuizRules(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) GettingTagsFromCash(ctx *fiber.Ctx) error { req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingTagsFromCash(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) UpdateListTags(ctx *fiber.Ctx) error { err := c.service.UpdateListTags(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) } func (c *Controller) GettingFieldsFromCash(ctx *fiber.Ctx) error { req, err := extractParams(ctx) if err != nil { return err } response, err := c.service.GettingFieldsFromCash(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.Status(fiber.StatusOK).JSON(response) } func (c *Controller) UpdateListCustom(ctx *fiber.Ctx) error { err := c.service.UpdateListCustom(ctx.Context()) if err != nil { return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") } return ctx.SendStatus(fiber.StatusOK) }