add crud for rule

This commit is contained in:
Pavel 2024-04-23 15:22:12 +03:00
parent 16a3779df5
commit e8642a1077
7 changed files with 110 additions and 36 deletions

2
go.mod

@ -11,7 +11,7 @@ require (
github.com/twmb/franz-go v1.16.1 github.com/twmb/franz-go v1.16.1
go.uber.org/zap v1.27.0 go.uber.org/zap v1.27.0
google.golang.org/protobuf v1.33.0 google.golang.org/protobuf v1.33.0
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240422151612-18b9520cd3db penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240423120424-9cbe8b6b275b
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af
) )

2
go.sum

@ -153,5 +153,7 @@ penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM= penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240422151612-18b9520cd3db h1:wOMm1w2Fc7rLPIfDYCy3jltDxBb82V1g0sxu30iykEE= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240422151612-18b9520cd3db h1:wOMm1w2Fc7rLPIfDYCy3jltDxBb82V1g0sxu30iykEE=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240422151612-18b9520cd3db/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240422151612-18b9520cd3db/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240423120424-9cbe8b6b275b h1:mVDoUMJON/WZSikdZ/i68Pt/A4K9irFhiI4diFRWL4A=
penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240423120424-9cbe8b6b275b/go.mod h1:oRyhT55ctjqp/7ZxIzkR7OsQ7T/NLibsfrbb7Ytns64=
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo= penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af h1:jQ7HaXSutDX5iepU7VRImxhikK7lV/lBKkiloOZ4Emo=
penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I= penahub.gitlab.yandexcloud.net/backend/quiz/core.git v0.0.0-20240219174804-d78fd38511af/go.mod h1:5S5YwjSXWmnEKjBjG6MtyGtFmljjukDRS8CwHk/CF/I=

@ -9,15 +9,23 @@ import (
func extractParams(ctx *fiber.Ctx) (*model.PaginationReq, error) { func extractParams(ctx *fiber.Ctx) (*model.PaginationReq, error) {
pageStr := ctx.Query("page") pageStr := ctx.Query("page")
sizeStr := ctx.Query("size") sizeStr := ctx.Query("size")
page := 1
size := 25
page, err := strconv.Atoi(pageStr) if pageStr != "" {
if err != nil { pageNew, err := strconv.Atoi(pageStr)
return nil, ctx.Status(fiber.StatusBadRequest).SendString("Invalid page parameter") if err != nil {
return nil, ctx.Status(fiber.StatusBadRequest).SendString("Invalid page parameter")
}
page = pageNew
} }
size, err := strconv.Atoi(sizeStr) if sizeStr != "" {
if err != nil { sizeNew, err := strconv.Atoi(sizeStr)
return nil, ctx.Status(fiber.StatusBadRequest).SendString("Invalid size parameter") if err != nil {
return nil, ctx.Status(fiber.StatusBadRequest).SendString("Invalid size parameter")
}
size = sizeNew
} }
req := model.PaginationReq{ req := model.PaginationReq{

@ -2,45 +2,67 @@ package controllers
import ( import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/middleware"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"strconv"
) )
func (c *Controller) ChangeQuizSettings(ctx *fiber.Ctx) error { func (c *Controller) ChangeQuizSettings(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
quizID := ctx.Params("quizID") quizID := ctx.Params("quizID")
if quizID == "" { if quizID == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil")
} }
quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
var request model.RulesReq var request model.RulesReq
if err := ctx.BodyParser(&request); err != nil { if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
} }
err := c.service.ChangeQuizSettings(ctx.Context(), &request) response, err := c.service.ChangeQuizSettings(ctx.Context(), &request, accountID, quizIDInt)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
} }
return ctx.SendStatus(fiber.StatusOK) return ctx.Status(fiber.StatusOK).JSON(response)
} }
func (c *Controller) SetQuizSettings(ctx *fiber.Ctx) error { func (c *Controller) SetQuizSettings(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
quizID := ctx.Params("quizID") quizID := ctx.Params("quizID")
if quizID == "" { if quizID == "" {
return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil")
} }
quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
var request model.RulesReq var request model.RulesReq
if err := ctx.BodyParser(&request); err != nil { if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"}) return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
} }
err := c.service.SetQuizSettings(ctx.Context(), &request) response, err := c.service.SetQuizSettings(ctx.Context(), &request, accountID, quizIDInt)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
} }
return ctx.SendStatus(fiber.StatusOK) return ctx.Status(fiber.StatusOK).JSON(response)
} }
func (c *Controller) GettingQuizRules(ctx *fiber.Ctx) error { func (c *Controller) GettingQuizRules(ctx *fiber.Ctx) error {
@ -49,7 +71,12 @@ func (c *Controller) GettingQuizRules(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil") return ctx.Status(fiber.StatusBadRequest).SendString("quizID is nil")
} }
response, err := c.service.GettingQuizRules(ctx.Context()) quizIDInt, err := strconv.Atoi(quizID)
if err != nil {
return ctx.Status(fiber.StatusBadRequest).SendString("failed convert quizID to int")
}
response, err := c.service.GettingQuizRules(ctx.Context(), quizIDInt)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error") return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")

@ -2,32 +2,35 @@ package service
import ( import (
"context" "context"
"go.uber.org/zap"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
) )
func (s *Service) ChangeQuizSettings(ctx context.Context, request *model.RulesReq) error { func (s *Service) ChangeQuizSettings(ctx context.Context, request *model.RulesReq, accountID string, quizID int) (*model.Rule, error) {
err := s.repository.AmoRepo.ChangeQuizSettings(ctx, request) rule, err := s.repository.AmoRepo.ChangeQuizSettings(ctx, request, accountID, quizID)
if err != nil {
return err
}
return nil
}
func (s *Service) SetQuizSettings(ctx context.Context, request *model.RulesReq) error {
err := s.repository.AmoRepo.SetQuizSettings(ctx, request)
if err != nil {
return err
}
return nil
}
func (s *Service) GettingQuizRules(ctx context.Context) (*model.Rule, error) {
response, err := s.repository.AmoRepo.GettingQuizRules(ctx)
if err != nil { if err != nil {
s.logger.Error("error change quiz settings", zap.Error(err))
return nil, err return nil, err
} }
return response, nil return rule, nil
}
func (s *Service) SetQuizSettings(ctx context.Context, request *model.RulesReq, accountID string, quizID int) (*model.Rule, error) {
rule, err := s.repository.AmoRepo.SetQuizSettings(ctx, request, accountID, quizID)
if err != nil {
s.logger.Error("error setting quiz settings", zap.Error(err))
return nil, err
}
return rule, nil
}
func (s *Service) GettingQuizRules(ctx context.Context, quizID int) (*model.Rule, error) {
rule, err := s.repository.AmoRepo.GettingQuizRules(ctx, quizID)
if err != nil {
s.logger.Error("error getting quiz settings", zap.Error(err))
return nil, err
}
return rule, nil
} }

@ -65,6 +65,7 @@ func (s *Service) ConnectAccount(ctx context.Context, accountID string) (*model.
link, err := s.socialAuthClient.GenerateAmocrmAuthURL(accountID) link, err := s.socialAuthClient.GenerateAmocrmAuthURL(accountID)
if err != nil { if err != nil {
s.logger.Error("error sending request to pena social auth service:", zap.Error(err)) s.logger.Error("error sending request to pena social auth service:", zap.Error(err))
return nil, err
} }
response := model.ConnectAccountResp{ response := model.ConnectAccountResp{

@ -8,7 +8,6 @@ tags:
- name: main - name: main
description: Операции связанные с AmoCRM description: Операции связанные с AmoCRM
paths: paths:
/account: /account:
post: post:
@ -203,6 +202,8 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/UserListResp" $ref: "#/components/schemas/UserListResp"
'400':
$ref: '#/components/responses/400'
'401': '401':
$ref: '#/components/responses/401' $ref: '#/components/responses/401'
'500': '500':
@ -251,6 +252,8 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/UserListPipelinesResp" $ref: "#/components/schemas/UserListPipelinesResp"
'400':
$ref: '#/components/responses/400'
'401': '401':
$ref: '#/components/responses/401' $ref: '#/components/responses/401'
'500': '500':
@ -299,6 +302,8 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/UserListStepsResp" $ref: "#/components/schemas/UserListStepsResp"
'400':
$ref: '#/components/responses/400'
'401': '401':
$ref: '#/components/responses/401' $ref: '#/components/responses/401'
'500': '500':
@ -347,6 +352,8 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/UserListFieldsResp" $ref: "#/components/schemas/UserListFieldsResp"
'400':
$ref: '#/components/responses/400'
'401': '401':
$ref: '#/components/responses/401' $ref: '#/components/responses/401'
'500': '500':
@ -395,6 +402,8 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/UserListTagsResp" $ref: "#/components/schemas/UserListTagsResp"
'400':
$ref: '#/components/responses/400'
'401': '401':
$ref: '#/components/responses/401' $ref: '#/components/responses/401'
'500': '500':
@ -432,6 +441,10 @@ paths:
'application/json': 'application/json':
schema: schema:
$ref: "#/components/schemas/Rule" $ref: "#/components/schemas/Rule"
'400':
$ref: '#/components/responses/400'
'500':
$ref: '#/components/responses/500'
post: post:
operationId: SetQuizSettings operationId: SetQuizSettings
description: создание настроек интеграции для конкретного квиза description: создание настроек интеграции для конкретного квиза
@ -451,7 +464,17 @@ paths:
$ref: "#/components/schemas/RulesReq" $ref: "#/components/schemas/RulesReq"
responses: responses:
'200': '200':
description: Success description: после публикации возвращается опубликованное правило
content:
'application/json':
schema:
$ref: "#/components/schemas/Rule"
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
patch: patch:
operationId: ChangeQuizSettings operationId: ChangeQuizSettings
description: изменение настроек интеграции для конкретного квиза description: изменение настроек интеграции для конкретного квиза
@ -471,7 +494,17 @@ paths:
$ref: "#/components/schemas/RulesReq" $ref: "#/components/schemas/RulesReq"
responses: responses:
'200': '200':
description: Success description: после изменения возвращается измененное правило
content:
'application/json':
schema:
$ref: "#/components/schemas/Rule"
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'500':
$ref: '#/components/responses/500'
components: components:
schemas: schemas: