diff --git a/go.mod b/go.mod index 1bf0e53..bd9fbd1 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/themakers/hlog v0.0.0-20191205140925-235e0e4baddf go.uber.org/zap v1.26.0 penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d - penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315113539-a26dce3bed0e + penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315133641-4cc870989184 penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240313171802-7da5fbb4caf3 ) diff --git a/go.sum b/go.sum index d608510..1d3dbeb 100644 --- a/go.sum +++ b/go.sum @@ -190,5 +190,7 @@ penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240314133622-a34 penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240314133622-a34c0e2e5168/go.mod h1:okduDAq0NVVDcM+TMyrd4mVXzBMeTzYI2B2/yi1sL1Y= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315113539-a26dce3bed0e h1:nd9ZkwEq2wPDG/Nc5TDh5EFNckqrUKsI6jU4es84vxU= penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315113539-a26dce3bed0e/go.mod h1:okduDAq0NVVDcM+TMyrd4mVXzBMeTzYI2B2/yi1sL1Y= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315133641-4cc870989184 h1:tiQQbN7OHrCohzPVeA6g9M7/WZDWMTahQmEDmYO20d8= +penahub.gitlab.yandexcloud.net/backend/quiz/common.git v0.0.0-20240315133641-4cc870989184/go.mod h1:okduDAq0NVVDcM+TMyrd4mVXzBMeTzYI2B2/yi1sL1Y= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240313171802-7da5fbb4caf3 h1:BLHIUnJAttW9OAW7A63H9ON/HPhXdpBa/YPUQWD4ORA= penahub.gitlab.yandexcloud.net/backend/quiz/worker.git v0.0.0-20240313171802-7da5fbb4caf3/go.mod h1:/BFcX4F10DRuFuAHlwkKO+1QAXPL4i49x1tsrTwxlqE= diff --git a/service/service.go b/service/service.go index fe812fb..19222ac 100644 --- a/service/service.go +++ b/service/service.go @@ -47,4 +47,7 @@ func (s *Service) Register(app *fiber.App) { app.Patch("/result/seen", s.SetStatus) app.Post("/results/:quizID/export", s.ExportResultsToCSV) app.Get("/result/:resultID", s.GetResultAnswers) + + // statistics handlers + app.Post("/statistic/:quizID/devices", s.GetDeviceStatistics) } diff --git a/service/statistic_svc.go b/service/statistic_svc.go new file mode 100644 index 0000000..276a165 --- /dev/null +++ b/service/statistic_svc.go @@ -0,0 +1,37 @@ +package service + +import ( + "github.com/gofiber/fiber/v2" + "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/repository/statistics" + "strconv" +) + +type DeviceStatReq struct { + From uint64 // временные границы выбора статистики + To uint64 +} + +func (s *Service) GetDeviceStatistics(ctx *fiber.Ctx) error { + quizIDStr := ctx.Params("quizID") + + quizID, err := strconv.ParseInt(quizIDStr, 10, 64) + if err != nil { + return ctx.Status(fiber.StatusBadRequest).SendString("Invalid quiz ID format") + } + + var req DeviceStatReq + if err := ctx.BodyParser(&req); err != nil { + return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request data") + } + + deviceStats, err := s.dal.StatisticsRepo.GetDeviceStatistics(ctx.Context(), statistics.DeviceStatReq{ + QuizId: quizID, + From: req.From, + To: req.To, + }) + if err != nil { + return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) + } + + return ctx.Status(fiber.StatusOK).JSON(deviceStats) +}