added check user privilege for update quiz with gigachat
All checks were successful
Deploy / CreateImage (push) Successful in 2m55s
Deploy / ValidateConfig (push) Successful in 25s
Deploy / MigrateDatabase (push) Successful in 44s
Deploy / DeployService (push) Successful in 24s

This commit is contained in:
pasha1coil 2025-06-05 17:04:31 +03:00
parent b821a546c6
commit a0617293af
4 changed files with 33 additions and 10 deletions

@ -1971,6 +1971,13 @@ paths:
schema: schema:
type: string type: string
default: invalid quiz id default: invalid quiz id
'402':
description: Payment required need gigachat privilege
content:
'application/json':
schema:
type: string
default: payment required
'500': '500':
description: Internal server error description: Internal server error
content: content:

2
go.mod

@ -6,7 +6,7 @@ require (
gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0 gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9
gitea.pena/PenaSide/trashlog v0.0.0-20250224122049-ddb4d72e9d07 gitea.pena/PenaSide/trashlog v0.0.0-20250224122049-ddb4d72e9d07
gitea.pena/SQuiz/common v0.0.0-20250531072420-f9ec7a513967 gitea.pena/SQuiz/common v0.0.0-20250605135518-be6361f19f4c
github.com/caarlos0/env/v8 v8.0.0 github.com/caarlos0/env/v8 v8.0.0
github.com/go-redis/redis/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5
github.com/gofiber/fiber/v2 v2.52.6 github.com/gofiber/fiber/v2 v2.52.6

2
go.sum

@ -11,6 +11,8 @@ gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5 h1:C+iCsGMSUJonOTNNk8
gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U= gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
gitea.pena/SQuiz/common v0.0.0-20250531072420-f9ec7a513967 h1:pS6MAVGSp/84d8TpX8g+xlcKAgkf3ordEWFtpN9Evu0= gitea.pena/SQuiz/common v0.0.0-20250531072420-f9ec7a513967 h1:pS6MAVGSp/84d8TpX8g+xlcKAgkf3ordEWFtpN9Evu0=
gitea.pena/SQuiz/common v0.0.0-20250531072420-f9ec7a513967/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U= gitea.pena/SQuiz/common v0.0.0-20250531072420-f9ec7a513967/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
gitea.pena/SQuiz/common v0.0.0-20250605135518-be6361f19f4c h1:yCpGpEmugxNiIO0nNjhyDi8zmxjd1qHZqEXY5NmINrA=
gitea.pena/SQuiz/common v0.0.0-20250605135518-be6361f19f4c/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0= github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI= github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=

@ -548,7 +548,21 @@ func (r *Quiz) TemplateCopy(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"id": qizID}) return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"id": qizID})
} }
func (s *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error { func (r *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error {
accountID, ok := middleware.GetAccountId(ctx)
if !ok {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
}
account, err := r.dal.AccountRepo.GetAccountByID(ctx.Context(), accountID)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("can`t get account by account id")
}
if _, ok := account.Privileges["quizGigaChat"]; !ok {
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
}
var req struct { var req struct {
Sex bool `json:"sex"` // false - female, true - male Sex bool `json:"sex"` // false - female, true - male
Age string `json:"age"` Age string `json:"age"`
@ -568,7 +582,7 @@ func (s *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request missing required fields") return ctx.Status(fiber.StatusBadRequest).SendString("Invalid request missing required fields")
} }
result, err := s.dal.QuizRepo.CreateQuizAudience(ctx.Context(), quiz.DepsCreateQuizAudience{ result, err := r.dal.QuizRepo.CreateQuizAudience(ctx.Context(), quiz.DepsCreateQuizAudience{
QuizID: quizID, QuizID: quizID,
Age: req.Age, Age: req.Age,
Sex: req.Sex, Sex: req.Sex,
@ -578,7 +592,7 @@ func (s *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
err = s.producerGigaChat.ToGigaChatNotify(ctx.Context(), brokers.MessageGigaChat{ err = r.producerGigaChat.ToGigaChatNotify(ctx.Context(), brokers.MessageGigaChat{
ID: result, ID: result,
QuizID: quizID, QuizID: quizID,
Age: req.Age, Age: req.Age,
@ -591,7 +605,7 @@ func (s *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"ID": result}) return ctx.Status(fiber.StatusOK).JSON(fiber.Map{"ID": result})
} }
func (s *Quiz) GetQuizAuditory(ctx *fiber.Ctx) error { func (r *Quiz) GetQuizAuditory(ctx *fiber.Ctx) error {
quizIDStr := ctx.Params("quizID") quizIDStr := ctx.Params("quizID")
quizID, err := strconv.ParseInt(quizIDStr, 10, 64) quizID, err := strconv.ParseInt(quizIDStr, 10, 64)
if err != nil || quizID == 0 { if err != nil || quizID == 0 {
@ -603,7 +617,7 @@ func (s *Quiz) GetQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
isOwner, err := s.dal.QuizRepo.CheckQuizOwner(ctx.Context(), accountID, uint64(quizID)) isOwner, err := r.dal.QuizRepo.CheckQuizOwner(ctx.Context(), accountID, uint64(quizID))
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to check ownership: " + err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString("failed to check ownership: " + err.Error())
} }
@ -612,7 +626,7 @@ func (s *Quiz) GetQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusForbidden).SendString("you are not the owner") return ctx.Status(fiber.StatusForbidden).SendString("you are not the owner")
} }
result, err := s.dal.QuizRepo.GetQuizAudience(ctx.Context(), quizID) result, err := r.dal.QuizRepo.GetQuizAudience(ctx.Context(), quizID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }
@ -620,7 +634,7 @@ func (s *Quiz) GetQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(result) return ctx.Status(fiber.StatusOK).JSON(result)
} }
func (s *Quiz) DeleteQuizAuditory(ctx *fiber.Ctx) error { func (r *Quiz) DeleteQuizAuditory(ctx *fiber.Ctx) error {
quizIDStr := ctx.Params("quizID") quizIDStr := ctx.Params("quizID")
quizID, err := strconv.ParseInt(quizIDStr, 10, 64) quizID, err := strconv.ParseInt(quizIDStr, 10, 64)
if err != nil || quizID == 0 { if err != nil || quizID == 0 {
@ -638,7 +652,7 @@ func (s *Quiz) DeleteQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required") return ctx.Status(fiber.StatusUnauthorized).SendString("account id is required")
} }
isOwner, err := s.dal.QuizRepo.CheckIsOwnerAudience(ctx.Context(), quizID, audienceID, accountID) isOwner, err := r.dal.QuizRepo.CheckIsOwnerAudience(ctx.Context(), quizID, audienceID, accountID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to check ownership: " + err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString("failed to check ownership: " + err.Error())
} }
@ -646,7 +660,7 @@ func (s *Quiz) DeleteQuizAuditory(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusForbidden).SendString("you are not the owner of this quiz audience") return ctx.Status(fiber.StatusForbidden).SendString("you are not the owner of this quiz audience")
} }
err = s.dal.QuizRepo.DeleteQuizAudience(ctx.Context(), quizID, audienceID) err = r.dal.QuizRepo.DeleteQuizAudience(ctx.Context(), quizID, audienceID)
if err != nil { if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error()) return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
} }