summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/database/repos/questions.go4
-rw-r--r--internal/handlers/main.go37
2 files changed, 33 insertions, 8 deletions
diff --git a/internal/database/repos/questions.go b/internal/database/repos/questions.go
index 9d0396e..5a05945 100644
--- a/internal/database/repos/questions.go
+++ b/internal/database/repos/questions.go
@@ -9,7 +9,7 @@ type QuestionsRepo interface {
DBGetQuestion(id string) (*models.Question, error)
DBGetMixedUbung(id uint32) (*models.MixedUbung, error)
DBListMixed(limit uint32) ([]models.MixedUbung, error)
- DBGetQuestionsByMixedID(id string) ([]models.Question, error)
+ DBGetQuestionsByMixedID(id uint32) ([]models.Question, error)
}
func (p *Provider) DBGetMixedUbung(id uint32) (*models.MixedUbung, error) {
@@ -34,7 +34,7 @@ func (p *Provider) DBListMixed(limit uint32) ([]models.MixedUbung, error) {
return ubungs, nil
}
-func (p *Provider) DBGetQuestionsByMixedID(id string) ([]models.Question, error) {
+func (p *Provider) DBGetQuestionsByMixedID(id uint32) ([]models.Question, error) {
var questions []models.Question
err := p.db.Select(&questions, "SELECT * FROM questions WHERE mixed_id = ? ORDER BY id", id)
if err != nil {
diff --git a/internal/handlers/main.go b/internal/handlers/main.go
index 34f37d9..79d92f4 100644
--- a/internal/handlers/main.go
+++ b/internal/handlers/main.go
@@ -92,7 +92,7 @@ func (h *Handlers) HandleAnswer(w http.ResponseWriter, r *http.Request) {
// Execute template with question data including status
w.Header().Set("Content-Type", "text/html")
- err = tmpl.ExecuteTemplate(w, "main", question)
+ err = tmpl.ExecuteTemplate(w, "question", question)
if err != nil {
h.log.Error("failed to render feedback template", "error", err)
}
@@ -120,8 +120,13 @@ func (h *Handlers) HandleMixedUbung(w http.ResponseWriter, r *http.Request) {
abortWithError(w, "Missing exercise ID")
return
}
-
- questions, err := h.repo.DBGetQuestionsByMixedID(mixedID)
+ mid, err := strconv.ParseUint(mixedID, 10, 64)
+ if err != nil {
+ h.log.Error("failed to convert mixedid", "mixed_id", mixedID)
+ abortWithError(w, "failed to convert mixed_id")
+ return
+ }
+ questions, err := h.repo.DBGetQuestionsByMixedID(uint32(mid))
if err != nil {
h.log.Error("failed to get questions for mixed exercise", "error", err, "mixed_id", mixedID)
abortWithError(w, "Failed to load exercise")
@@ -140,22 +145,42 @@ func (h *Handlers) HandleMixedUbung(w http.ResponseWriter, r *http.Request) {
func (h *Handlers) HandleNextQuestion(w http.ResponseWriter, r *http.Request) {
currentID := r.URL.Query().Get("current_id")
+ mixedID := r.FormValue("mixed_id")
currID, err := strconv.Atoi(currentID)
if err != nil {
h.log.Error("invalid current question ID", "error", err, "current_id", currentID)
currID = 0 // Start from first question if invalid ID
}
nextID := currID + 1
-
question, err := h.repo.DBGetQuestion(strconv.Itoa(nextID))
if err != nil {
h.log.Error("failed to get next question", "error", err)
abortWithError(w, "No more questions")
return
}
-
+ if mixedID != "" {
+ mid, err := strconv.ParseUint(mixedID, 10, 64)
+ if err != nil {
+ h.log.Error("failed to convert mixedid", "mixed_id", mixedID)
+ abortWithError(w, "failed to convert mixed_id")
+ return
+ }
+ qList, err := h.repo.DBGetQuestionsByMixedID(uint32(mid))
+ if err != nil {
+ h.log.Error("failed to retrieve questions", "mixed_id", mid)
+ abortWithError(w, "failed to retrieve questions")
+ return
+ }
+ for i, q := range qList {
+ if q.ID > uint32(nextID) {
+ // load next question
+ question = &q
+ h.log.Error("returning question from mixed group", "#", i)
+ break
+ }
+ }
+ }
h.log.Debug("returning new question", "q", question)
-
h.renderQuestion(w, question)
}