amocrm/internal/controllers/controller.go

332 lines
9.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}