Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
d95acb653b | |||
772e788dbe |
3
go.mod
3
go.mod
@ -6,7 +6,7 @@ require (
|
||||
gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9
|
||||
gitea.pena/PenaSide/trashlog v0.0.0-20250224122049-ddb4d72e9d07
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610192732-9f01faa53ea9
|
||||
gitea.pena/SQuiz/common v0.0.0-20250629151736-5656e784ba68
|
||||
github.com/caarlos0/env/v8 v8.0.0
|
||||
github.com/go-redis/redis/v8 v8.11.5
|
||||
github.com/gofiber/fiber/v2 v2.52.6
|
||||
@ -24,7 +24,6 @@ require (
|
||||
)
|
||||
|
||||
require (
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 // indirect
|
||||
github.com/ClickHouse/clickhouse-go v1.5.4 // indirect
|
||||
github.com/andybalholm/brotli v1.1.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
|
18
go.sum
18
go.sum
@ -3,24 +3,10 @@ gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0 h1:+gvpAPo1+1WtCpA
|
||||
gitea.pena/PenaSide/common v0.0.0-20250421103113-7e4b3ae9e1e0/go.mod h1:91EuBCgcqgJ6mG36n2pds8sPwwfaJytLWOzY3h2YFKU=
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9 h1:tBkXWNIt8icmkMMnq8MA421RWkUy4OZh5P7C3q8uCu4=
|
||||
gitea.pena/PenaSide/hlog v0.0.0-20241125221102-a54c29c002a9/go.mod h1:sanhSL8aEsfcq21P+eItYiAnKAre+B67nGJmDfk2cf0=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735 h1:jDVeUhGBTXBibmW5dmtJg2m2+z5z2Rf6J4G0LpjVoJ0=
|
||||
gitea.pena/PenaSide/linters-golang v0.0.0-20241207122018-933207374735/go.mod h1:gdd+vOT6up9STkEbxa2qESLIMZFjCmRbkcheFQCVgZU=
|
||||
gitea.pena/PenaSide/trashlog v0.0.0-20250224122049-ddb4d72e9d07 h1:bUIUgzXQt16aBqSccI//BaODpRCTIaqlddSepM98QSc=
|
||||
gitea.pena/PenaSide/trashlog v0.0.0-20250224122049-ddb4d72e9d07/go.mod h1:GRfWJerTUlgy82CiYAxE4tVYSVV54zEJJQy17Fx46E4=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250514124515-870e52266ca5 h1:C+iCsGMSUJonOTNNk8wWYOfzZ0Jjw+2IQ5FaEGwRVT0=
|
||||
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/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=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250606140534-fb272e7a1763 h1:v0X5uSedghzFgu+ohU8ZnNaFIUm35hsZuaMoTqhNPJQ=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250606140534-fb272e7a1763/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610095902-6f4789f42acd h1:ZQPOMUNq7ElkZnbhLNvvDRtUZ+OS4CAob4vtDwCXcdo=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610095902-6f4789f42acd/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610100937-ce7096a3dd37 h1:JD5YDqRrwvZ8AmxEZnek0O5vCTXFtfjw+7RGx/yKA8c=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610100937-ce7096a3dd37/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610192732-9f01faa53ea9 h1:y97VEguCy1Qf/hl/XT9IfX3EgwLgAkn2+1sBDuxjo7Q=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250610192732-9f01faa53ea9/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250629151736-5656e784ba68 h1:U+rO77EY1Cp7RAEtDjLIl1Z2tFcEouUuQ+J4LnFUe6g=
|
||||
gitea.pena/SQuiz/common v0.0.0-20250629151736-5656e784ba68/go.mod h1:zCrUwDh0APpztKk6NUqTZv+zhjVbWpGBJiJ5z9dAH0U=
|
||||
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/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
|
||||
|
@ -583,21 +583,79 @@ func (r *Quiz) CreateQuizAuditory(ctx *fiber.Ctx) error {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
||||
}
|
||||
|
||||
const privKey = "quizGigaChat"
|
||||
usage, err := r.dal.QuizRepo.GetQuizPrivilegeUsage(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("can't get usage: " + err.Error())
|
||||
}
|
||||
|
||||
// 1 случай - вырублен GigaChat
|
||||
if !quizAud.GigaChat {
|
||||
if _, ok := account.Privileges["quizGigaChat"]; !ok {
|
||||
if _, ok := account.Privileges[privKey]; !ok {
|
||||
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
|
||||
}
|
||||
err = r.dal.QuizRepo.UpdateGigaChatQuizFlag(ctx.Context(), quizID, accountID)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
||||
// если уже был - обнуляем count - 0
|
||||
if usage != nil {
|
||||
err = r.dal.QuizRepo.ResetQuizPrivilegeUsageCount(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to reset usage: " + err.Error())
|
||||
}
|
||||
} else {
|
||||
// если нет то создаем count - 0
|
||||
usage, err = r.dal.QuizRepo.InsertQuizPrivilegeUsage(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to insert usage: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
idPrivilege := account.Privileges["quizGigaChat"].ID
|
||||
newAmount := account.Privileges["quizGigaChat"].Amount - 1
|
||||
// врубаем флаг гигачата
|
||||
err = r.dal.QuizRepo.UpdateGigaChatQuizFlag(ctx.Context(), quizID, accountID, true)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to enable GigaChat: " + err.Error())
|
||||
}
|
||||
|
||||
idPrivilege := account.Privileges[privKey].ID
|
||||
newAmount := account.Privileges[privKey].Amount - 1
|
||||
err = r.dal.AccountRepo.UpdatePrivilegeAmount(ctx.Context(), idPrivilege, newAmount)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString(err.Error())
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to update privilege amount: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// 2 случай - врублен GigaChat но количество использований больше допустимого
|
||||
if quizAud.GigaChat && usage != nil && usage.UsedCount >= model.QuizGigaChatPrivilegeLimitUsage {
|
||||
// проверяем есть ли привилегия, если есть то повторяем шаг из 1 случая
|
||||
if _, ok := account.Privileges[privKey]; !ok {
|
||||
return ctx.Status(fiber.StatusPaymentRequired).SendString("payment required")
|
||||
}
|
||||
|
||||
err = r.dal.QuizRepo.ResetQuizPrivilegeUsageCount(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to reset usage: " + err.Error())
|
||||
}
|
||||
|
||||
idPrivilege := account.Privileges[privKey].ID
|
||||
newAmount := account.Privileges[privKey].Amount - 1
|
||||
err = r.dal.AccountRepo.UpdatePrivilegeAmount(ctx.Context(), idPrivilege, newAmount)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to update privilege: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// посредственный случай который скорее на стейдже произойдет gigachat = true а usage = nil, росто нужно создать usage
|
||||
if quizAud.GigaChat && usage == nil {
|
||||
// уже была списана привилегия просто создаем usage
|
||||
usage, err = r.dal.QuizRepo.InsertQuizPrivilegeUsage(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to insert usage: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
// 3 случай - когда у нас usage!=nil и usage.UsedCount < model.QuizGigaChatPrivilegeLimitUsage и прошли 1 и 2 случай
|
||||
if usage != nil && usage.UsedCount < model.QuizGigaChatPrivilegeLimitUsage {
|
||||
err = r.dal.QuizRepo.IncrementQuizPrivilegeUsage(ctx.Context(), quizID, privKey)
|
||||
if err != nil {
|
||||
return ctx.Status(fiber.StatusInternalServerError).SendString("failed to increment usage: " + err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user