From 6854c4b9cae1d0498d5d7d45fbee3ddee41645c7 Mon Sep 17 00:00:00 2001
From: bayusamudra5502 <bayusamudra.55.02.com@gmail.com>
Date: Fri, 28 Apr 2023 14:08:46 +0700
Subject: [PATCH] fix: fixing take quiz

---
 handler/quiz/take.go        |  2 +-
 provider/storage/manager.go | 13 ++++++++++++-
 repository/quiz/impl.go     | 16 +++++++++-------
 3 files changed, 22 insertions(+), 9 deletions(-)

diff --git a/handler/quiz/take.go b/handler/quiz/take.go
index 530f4f7..06499ed 100644
--- a/handler/quiz/take.go
+++ b/handler/quiz/take.go
@@ -138,7 +138,7 @@ func (m QuizHandlerImpl) GetQuizSolution(w http.ResponseWriter, r *http.Request)
 //	@Param			  data	body		quiz.FinishQuizPayload							true	"Quiz Finish payload"
 //	@Param				id path string true "Quiz id" Format(uuid)
 //	@Success			200	{object}	web.BaseResponse{data=quiz.QuizDetail}
-//	@Router				/quiz/{id}/take [post]
+//	@Router				/quiz/{id}/finish [post]
 func (m QuizHandlerImpl) FinishQuiz(w http.ResponseWriter, r *http.Request) {
 	payload := quiz.FinishQuizPayload{}
 
diff --git a/provider/storage/manager.go b/provider/storage/manager.go
index cfeae57..6cf93f7 100644
--- a/provider/storage/manager.go
+++ b/provider/storage/manager.go
@@ -1,7 +1,10 @@
 package storage
 
 import (
+	"bufio"
+	"bytes"
 	"context"
+	"io"
 
 	"github.com/minio/minio-go/v7"
 )
@@ -18,7 +21,15 @@ func (s S3Storage) Get(ctx context.Context, path string) ([]byte, error) {
 		return result, err
 	}
 
-	_, err = obj.Read(result)
+	var buffer bytes.Buffer
+	writter := bufio.NewWriter(&buffer)
+
+	_, err = io.Copy(writter, obj)
+	if err != nil {
+		return result, err
+	}
+
+	result = buffer.Bytes()
 
 	return result, err
 }
diff --git a/repository/quiz/impl.go b/repository/quiz/impl.go
index e514954..72ff380 100644
--- a/repository/quiz/impl.go
+++ b/repository/quiz/impl.go
@@ -42,9 +42,11 @@ func (q *QuizRepositoryImpl) GetQuizDetail(quizId uuid.UUID) (*quiz.Quiz, error)
 func (q *QuizRepositoryImpl) UpdateScore(takeId uuid.UUID, score int) error {
 	return q.db.
 		Model(&quiz.QuizTake{}).
-		Update("score", score).
-		Update("is_finished", true).
-		Where("id = ?", takeId).Error
+		Where("id = ?", takeId).
+		Updates(quiz.QuizTake{
+			Score:      score,
+			IsFinished: true,
+		}).Error
 }
 
 func (q *QuizRepositoryImpl) NewTake(quizId uuid.UUID, userEmail string) (uuid.UUID, error) {
@@ -64,18 +66,18 @@ func (q *QuizRepositoryImpl) NewTake(quizId uuid.UUID, userEmail string) (uuid.U
 }
 
 func (q *QuizRepositoryImpl) IsActiveTake(quizId uuid.UUID, userEmail string) (bool, error) {
-	result := struct{ cnt int }{}
+	var result int64 = 0
 	err := q.db.
-		Select("COUNT(*) as cnt").
+		Model(&quiz.QuizTake{}).
 		Where("quiz_id = ? AND email = ? AND is_finished = false", quizId, userEmail).
-		Find(result).
+		Count(&result).
 		Error
 
 	if err != nil {
 		return false, nil
 	}
 
-	return result.cnt > 0, nil
+	return result > 0, nil
 }
 
 func (q *QuizRepositoryImpl) GetAllTake(quizId uuid.UUID, userEmail string) ([]quiz.QuizTake, error) {
-- 
GitLab