From c2c948cae300c20dbbe53e693a13040a29a9bcbc Mon Sep 17 00:00:00 2001 From: Pavel Date: Mon, 10 Jun 2024 20:15:18 +0300 Subject: [PATCH] add all base rest methods for lead target --- go.mod | 2 +- go.sum | 4 +- service/account_svc.go | 91 ++++++++++++++++++++++++++++++++++++++++++ service/service.go | 4 ++ 4 files changed, 98 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 28504d5..122f334 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( google.golang.org/grpc v1.64.0 google.golang.org/protobuf v1.34.1 penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 - penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240610161253-75e1867c7b36 + penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240610170852-3d0ee4560f62 penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990 ) diff --git a/go.sum b/go.sum index acd8ac6..9231937 100644 --- a/go.sum +++ b/go.sum @@ -259,7 +259,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240223054633-6cb3d5ce45b6 h1:oV+/HNX+JPoQ3/GUx08hio7d45WpY0AMGrFs7j70QlA= 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-20240610161253-75e1867c7b36 h1:4cVsuo0H7tKRXH2FG/vgPMNyWpvFDbM3KqG6zw8Trzc= -penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240610161253-75e1867c7b36/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240610170852-3d0ee4560f62 h1:jCrXJmApWkbdM4o7HKrIBnFpZ8fITsusQVSx1Aefvbk= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240610170852-3d0ee4560f62/go.mod h1:n66zm88Dh12+idyfqh0vU5nd9BZYxM6Pv0XYnmy0398= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990 h1:jiO8GWO+3sCnDAV8/NAV8tQIUwae/I6/xiDilW7zf0o= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240421230341-0e086fcbb990/go.mod h1:zswBuTwmEsFHBVRu1nkG3/Fwylk5Vcm8OUm9iWxccSE= diff --git a/service/account_svc.go b/service/account_svc.go index e8468f6..742108e 100644 --- a/service/account_svc.go +++ b/service/account_svc.go @@ -8,6 +8,7 @@ import ( "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/pj_errors" "penahub.gitlab.yandexcloud.net/backend/quiz/core.git/brokers" + "strconv" "time" ) @@ -45,6 +46,11 @@ type GetAccountsResp struct { Items []model.Account `json:"items"` } +type UpdateLeadTarget struct { + ID int64 `json:"id"` + Target string `json:"target"` +} + // getCurrentAccount обработчик для получения текущего аккаунта func (s *Service) getCurrentAccount(ctx *fiber.Ctx) error { accountID, ok := middleware.GetAccountId(ctx) @@ -228,3 +234,88 @@ func (s *Service) ManualDone(ctx *fiber.Ctx) error { return ctx.SendStatus(fiber.StatusOK) } + +func (s *Service) PostLeadTarget(ctx *fiber.Ctx) error { + var req struct { + Type string `json:"type"` + QuizID int32 `json:"quizID"` + Target string `json:"target"` + } + if err := ctx.BodyParser(&req); err != nil { + return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") + } + + accountID, ok := middleware.GetAccountId(ctx) + if !ok { + return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") + } + + if req.Type == "" || req.Target == "" { + return ctx.Status(fiber.StatusBadRequest).SendString("Type and Target don't be nil") + } + + result, err := s.dal.AccountRepo.PostLeadTarget(ctx.Context(), model.LeadTarget{ + AccountID: accountID, + Target: req.Target, + Type: req.Type, + QuizID: req.QuizID, + }) + if err != nil { + return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + + return ctx.Status(fiber.StatusOK).JSON(result) +} + +func (s *Service) DeleteLeadTarget(ctx *fiber.Ctx) error { + leadIDStr := ctx.Params("id") + leadID, err := strconv.ParseInt(leadIDStr, 10, 64) + if err != nil { + return ctx.Status(fiber.StatusBadRequest).SendString("Invalid lead ID format") + } + + err = s.dal.AccountRepo.DeleteLeadTarget(ctx.Context(), leadID) + if err != nil { + return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + return ctx.SendStatus(fiber.StatusOK) +} + +func (s *Service) GetLeadTarget(ctx *fiber.Ctx) error { + accountID, ok := middleware.GetAccountId(ctx) + if !ok { + return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") + } + + result, err := s.dal.AccountRepo.GetLeadTarget(ctx.Context(), accountID) + if err != nil { + return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + + return ctx.Status(fiber.StatusOK).JSON(result) +} + +func (s *Service) UpdateLeadTarget(ctx *fiber.Ctx) error { + var req struct { + ID int64 `json:"id"` + Target string `json:"target"` + } + + if err := ctx.BodyParser(&req); err != nil { + return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") + } + + if req.ID == 0 || req.Target == "" { + return ctx.Status(fiber.StatusBadRequest).SendString("ID and Target don't be nil") + } + + result, err := s.dal.AccountRepo.UpdateLeadTarget(ctx.Context(), model.LeadTarget{ + ID: req.ID, + Target: req.Target, + }) + if err != nil { + return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + + return ctx.Status(fiber.StatusOK).JSON(result) +} diff --git a/service/service.go b/service/service.go index f5dcd27..b45276c 100644 --- a/service/service.go +++ b/service/service.go @@ -60,6 +60,10 @@ func (s *Service) Register(app *fiber.App) { app.Get("/privilege/:userId", s.getPrivilegeByUserID) app.Delete("/account/:userId", s.deleteAccountByUserID) app.Post("/account/manualdone", s.ManualDone) + app.Post("/account/leadtarget", s.PostLeadTarget) + app.Delete("/account/leadtarget/:id", s.DeleteLeadTarget) + app.Get("/account/leadtarget/:id", s.GetLeadTarget) + app.Put("/account/leadtarget", s.UpdateLeadTarget) // result handlers app.Post("/results/getResults/:quizId", s.GetResultsByQuizID)