amocrm/internal/controllers/rules.go

116 lines
3.5 KiB
Go
Raw Normal View History

package controllers
import (
2024-06-04 16:05:53 +00:00
"errors"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/lib/pq"
2024-04-23 12:22:12 +00:00
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
2024-04-17 12:21:06 +00:00
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors"
2024-04-23 12:22:12 +00:00
"strconv"
)
func (c *Controller) ChangeQuizSettings(ctx *fiber.Ctx) error {
2024-05-04 18:41:04 +00:00
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
2024-04-23 12:22:12 +00:00
quizID := ctx.Params("quizID")
if quizID == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil")
}
2024-04-23 12:22:12 +00:00
quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
2024-06-04 16:05:53 +00:00
//accountID := "64f2cd7a7047f28fdabf6d9e"
2024-04-17 12:21:06 +00:00
var request model.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, accountID, quizIDInt)
if err != nil {
2024-06-04 16:05:53 +00:00
switch {
case errors.Is(err, pj_errors.ErrNotFound):
2024-06-04 16:05:53 +00:00
return ctx.Status(fiber.StatusNotFound).SendString("rule not found")
default:
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
}
return ctx.SendStatus(fiber.StatusOK)
}
func (c *Controller) SetQuizSettings(ctx *fiber.Ctx) error {
2024-04-23 12:22:12 +00:00
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
quizID := ctx.Params("quizID")
if quizID == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil")
}
2024-04-23 12:22:12 +00:00
quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
2024-06-04 16:05:53 +00:00
//accountID := "64f2cd7a7047f28fdabf6d9e"
2024-04-29 22:36:49 +00:00
2024-04-17 12:21:06 +00:00
var request model.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, accountID, quizIDInt)
if err != nil {
pqErr, ok := err.(*pq.Error)
if ok && pqErr.Code == "23505" {
return ctx.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("quiz settings already exist for accountID %s and quizID %d", accountID, quizIDInt))
}
2024-06-04 16:05:53 +00:00
switch {
case errors.Is(err, pj_errors.ErrNotFound):
2024-06-04 16:07:46 +00:00
return ctx.Status(fiber.StatusNotFound).SendString("not found user for this rule")
2024-06-04 16:05:53 +00:00
default:
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")
}
2024-04-23 12:22:12 +00:00
quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
2024-11-28 22:31:35 +00:00
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
2024-04-23 12:22:12 +00:00
2024-11-28 22:31:35 +00:00
response, err := c.service.GettingQuizRules(ctx.Context(),accountID, quizIDInt)
if err != nil {
2024-06-04 16:05:53 +00:00
switch {
case errors.Is(err, pj_errors.ErrNotFound):
2024-06-04 16:05:53 +00:00
return ctx.Status(fiber.StatusNotFound).SendString("rule not found")
default:
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
}
return ctx.Status(fiber.StatusOK).JSON(response)
}