Skip to content
Snippets Groups Projects
Verified Commit 219b33de authored by Bayu Samudra's avatar Bayu Samudra
Browse files

fix: logic error on solution

parent 693aa446
Branches
Tags
2 merge requests!47Final Updates,!42[Feat] [Release!] [#1] Project Release Commit
......@@ -104,7 +104,7 @@ func (m QuizHandlerImpl) GetQuizSolution(w http.ResponseWriter, r *http.Request)
return
}
detail, err := m.GetSolutionQuiz(r.Context(), quizId, user.Email)
detail, err := m.GetSolutionQuiz(r.Context(), quizId, user)
if err != nil {
respErr, ok := err.(web.ResponseError)
......
......@@ -95,5 +95,9 @@ func (q *QuizRepositoryImpl) GetLastTake(quizId uuid.UUID, userEmail string) (*q
Where("quiz_id = ? AND email = ?", quizId, userEmail).
Last(result).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, nil
}
return result, err
}
......@@ -7,7 +7,9 @@ import (
"github.com/google/uuid"
"gitlab.informatika.org/ocw/ocw-backend/model/domain/quiz"
userDomain "gitlab.informatika.org/ocw/ocw-backend/model/domain/user"
"gitlab.informatika.org/ocw/ocw-backend/model/web"
"gitlab.informatika.org/ocw/ocw-backend/model/web/auth/token"
"gitlab.informatika.org/ocw/ocw-backend/provider/storage"
quizRepo "gitlab.informatika.org/ocw/ocw-backend/repository/quiz"
)
......@@ -76,26 +78,30 @@ func (q QuizServiceImpl) DoTakeQuiz(ctx context.Context, quizId uuid.UUID, email
return result, nil
}
func (q QuizServiceImpl) GetSolutionQuiz(ctx context.Context, quizId uuid.UUID, email string) (*quiz.QuizDetail, error) {
func (q QuizServiceImpl) GetSolutionQuiz(ctx context.Context, quizId uuid.UUID, user token.UserClaim) (*quiz.QuizDetail, error) {
result, err := q.getQuizDetail(ctx, quizId)
if err != nil {
return nil, err
}
_, err = q.GetLastTake(quizId, email)
last, err := q.GetLastTake(quizId, user.Email)
if err != nil {
return nil, err
}
taken, err := q.IsActiveTake(quizId, email)
if last == nil && user.Role == userDomain.Student {
return nil, web.NewResponseError("user is not allow to access this data", "ERR_NOT_ALLOWED")
}
taken, err := q.IsActiveTake(quizId, user.Email)
if err != nil {
return nil, err
}
if taken {
if taken && user.Role == userDomain.Student {
return nil, web.NewResponseError("user is not allow to access this data", "ERR_NOT_ALLOWED")
}
......
......@@ -5,6 +5,7 @@ import (
"github.com/google/uuid"
"gitlab.informatika.org/ocw/ocw-backend/model/domain/quiz"
"gitlab.informatika.org/ocw/ocw-backend/model/web/auth/token"
)
type QuizService interface {
......@@ -13,5 +14,5 @@ type QuizService interface {
DoTakeQuiz(ctx context.Context, quizId uuid.UUID, email string) (*quiz.QuizDetail, error)
DoFinishQuiz(ctx context.Context, quizId uuid.UUID, email string, studentAnswer []quiz.Response) (*quiz.QuizTake, error)
GetSolutionQuiz(ctx context.Context, quizId uuid.UUID, email string) (*quiz.QuizDetail, error)
GetSolutionQuiz(ctx context.Context, quizId uuid.UUID, user token.UserClaim) (*quiz.QuizDetail, error)
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment