332 lines
9.7 KiB
Go
332 lines
9.7 KiB
Go
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)
|
||
}
|