2024-04-09 15:52:37 +00:00
package controllers
import (
2024-06-04 16:05:53 +00:00
"errors"
2024-05-02 15:30:12 +00:00
"fmt"
2024-04-09 15:52:37 +00:00
"github.com/gofiber/fiber/v2"
2024-05-02 15:30:12 +00:00
"github.com/lib/pq"
2025-02-07 13:42:57 +00:00
"gitea.pena/SQuiz/common/middleware"
"gitea.pena/SQuiz/common/model"
"gitea.pena/SQuiz/common/pj_errors"
2024-04-23 12:22:12 +00:00
"strconv"
2024-04-09 15:52:37 +00:00
)
func ( c * Controller ) ChangeQuizSettings ( ctx * fiber . Ctx ) error {
2024-05-04 18:41:04 +00:00
accountID , ok := middleware . GetAccountId ( ctx )
if ! ok {
return ctx . Status ( fiber . StatusUnauthorized ) . SendString ( "account id is required" )
}
2024-04-23 12:22:12 +00:00
2024-04-09 15:52:37 +00:00
quizID := ctx . Params ( "quizID" )
if quizID == "" {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "quizID is nil" )
}
2024-04-23 12:22:12 +00:00
quizIDInt , err := strconv . Atoi ( quizID )
if err != nil {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "failed convert quizID to int" )
}
2024-06-04 16:05:53 +00:00
//accountID := "64f2cd7a7047f28fdabf6d9e"
2024-05-02 15:30:12 +00:00
2024-04-17 12:21:06 +00:00
var request model . RulesReq
2024-04-09 15:52:37 +00:00
if err := ctx . BodyParser ( & request ) ; err != nil {
return ctx . Status ( fiber . StatusBadRequest ) . JSON ( fiber . Map { "error" : "Invalid request payload" } )
}
2024-05-02 15:30:12 +00:00
err = c . service . ChangeQuizSettings ( ctx . Context ( ) , & request , accountID , quizIDInt )
2024-04-09 15:52:37 +00:00
if err != nil {
2024-06-04 16:05:53 +00:00
switch {
2024-06-05 08:47:37 +00:00
case errors . Is ( err , pj_errors . ErrNotFound ) :
2024-06-04 16:05:53 +00:00
return ctx . Status ( fiber . StatusNotFound ) . SendString ( "rule not found" )
default :
return ctx . Status ( fiber . StatusInternalServerError ) . SendString ( "Internal Server Error" )
}
2024-04-09 15:52:37 +00:00
}
2024-05-02 15:30:12 +00:00
return ctx . SendStatus ( fiber . StatusOK )
2024-04-09 15:52:37 +00:00
}
func ( c * Controller ) SetQuizSettings ( ctx * fiber . Ctx ) error {
2024-04-23 12:22:12 +00:00
accountID , ok := middleware . GetAccountId ( ctx )
if ! ok {
return ctx . Status ( fiber . StatusUnauthorized ) . SendString ( "account id is required" )
}
2024-04-09 15:52:37 +00:00
quizID := ctx . Params ( "quizID" )
if quizID == "" {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "quizID is nil" )
}
2024-04-23 12:22:12 +00:00
quizIDInt , err := strconv . Atoi ( quizID )
if err != nil {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "failed convert quizID to int" )
}
2024-06-04 16:05:53 +00:00
//accountID := "64f2cd7a7047f28fdabf6d9e"
2024-04-29 22:36:49 +00:00
2024-04-17 12:21:06 +00:00
var request model . RulesReq
2024-04-09 15:52:37 +00:00
if err := ctx . BodyParser ( & request ) ; err != nil {
return ctx . Status ( fiber . StatusBadRequest ) . JSON ( fiber . Map { "error" : "Invalid request payload" } )
}
2024-05-02 15:30:12 +00:00
err = c . service . SetQuizSettings ( ctx . Context ( ) , & request , accountID , quizIDInt )
2024-04-09 15:52:37 +00:00
if err != nil {
2024-05-02 15:30:12 +00:00
pqErr , ok := err . ( * pq . Error )
if ok && pqErr . Code == "23505" {
return ctx . Status ( fiber . StatusInternalServerError ) . SendString ( fmt . Sprintf ( "quiz settings already exist for accountID %s and quizID %d" , accountID , quizIDInt ) )
}
2024-06-04 16:05:53 +00:00
switch {
2024-06-05 08:47:37 +00:00
case errors . Is ( err , pj_errors . ErrNotFound ) :
2024-06-04 16:07:46 +00:00
return ctx . Status ( fiber . StatusNotFound ) . SendString ( "not found user for this rule" )
2024-06-04 16:05:53 +00:00
default :
return ctx . Status ( fiber . StatusInternalServerError ) . SendString ( "Internal Server Error" )
}
2024-04-09 15:52:37 +00:00
}
2024-05-02 15:30:12 +00:00
return ctx . SendStatus ( fiber . StatusOK )
2024-04-09 15:52:37 +00:00
}
func ( c * Controller ) GettingQuizRules ( ctx * fiber . Ctx ) error {
quizID := ctx . Params ( "quizID" )
if quizID == "" {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "quizID is nil" )
}
2024-04-23 12:22:12 +00:00
quizIDInt , err := strconv . Atoi ( quizID )
if err != nil {
return ctx . Status ( fiber . StatusBadRequest ) . SendString ( "failed convert quizID to int" )
}
2024-11-28 22:31:35 +00:00
accountID , ok := middleware . GetAccountId ( ctx )
if ! ok {
return ctx . Status ( fiber . StatusUnauthorized ) . SendString ( "account id is required" )
}
2024-04-23 12:22:12 +00:00
2024-11-28 22:31:35 +00:00
response , err := c . service . GettingQuizRules ( ctx . Context ( ) , accountID , quizIDInt )
2024-04-09 15:52:37 +00:00
if err != nil {
2024-06-04 16:05:53 +00:00
switch {
2024-06-05 08:47:37 +00:00
case errors . Is ( err , pj_errors . ErrNotFound ) :
2024-06-04 16:05:53 +00:00
return ctx . Status ( fiber . StatusNotFound ) . SendString ( "rule not found" )
default :
return ctx . Status ( fiber . StatusInternalServerError ) . SendString ( "Internal Server Error" )
}
2024-04-09 15:52:37 +00:00
}
return ctx . Status ( fiber . StatusOK ) . JSON ( response )
}