diff --git a/handler/quiz/get.go b/handler/quiz/get.go index b88bde2955671872d7ad047c2be17541e450b491..acf7d55d71bdb786e37bca24af5a480fb62ecc12 100644 --- a/handler/quiz/get.go +++ b/handler/quiz/get.go @@ -113,7 +113,7 @@ func (m QuizHandlerImpl) GetQuizLink(w http.ResponseWriter, r *http.Request) { payload.UpdateQuizToken = token[1] payload.ID = id - response, err := m.QuizService.GetQuiz(payload) + response, err := m.QuizService.UpdateQuiz(payload) if err != nil { respErr, ok := err.(web.ResponseError) diff --git a/repository/quiz/impl.go b/repository/quiz/impl.go index 2b7bc2eb550416215d3a1dc43a777ba47c4e204c..8f593bc3868faa63cbce6c30d03c609757e4f301 100644 --- a/repository/quiz/impl.go +++ b/repository/quiz/impl.go @@ -80,15 +80,8 @@ func(q *QuizRepositoryImpl) NewQuiz(quiz quiz.Quiz) error { return q.db.Create(&quiz).Error } -func(q *QuizRepositoryImpl) GetQuizPath(quizId uuid.UUID) (string, error) { - result := quiz.Quiz{} - err := q.db.Where("id = ?", quizId).Find(&result).Error - - if err != nil { - return "", err - } - - return result.QuizPath, nil +func(q *QuizRepositoryImpl) UpdateQuiz(quiz quiz.Quiz) error { + return q.db.Save(quiz).Error } func(q *QuizRepositoryImpl) Delete(quizId uuid.UUID) error { diff --git a/repository/quiz/type.go b/repository/quiz/type.go index c558fc0554b39c81c890d36150cd8d8ee80daf6a..72d7e0f981bdf17a73f227f14fa7442c61dd778a 100644 --- a/repository/quiz/type.go +++ b/repository/quiz/type.go @@ -12,7 +12,7 @@ type QuizRepository interface { NewTake(quizId uuid.UUID, userEmail string) (uuid.UUID, error) IsUserContributor(id string, email string) (bool, error) NewQuiz(quiz quiz.Quiz) error - GetQuizPath(quizId uuid.UUID) (string, error) + UpdateQuiz(quiz quiz.Quiz) error Delete(quizId uuid.UUID) error IsActiveTake(quizId uuid.UUID, userEmail string) (bool, error) GetAllTake(quizId uuid.UUID, userEmail string) ([]quiz.QuizTake, error) diff --git a/service/quiz/impl.go b/service/quiz/impl.go index fb53a798c013f1fff684bb3eb6f6a999c9cc58b2..52befa22e6242479b64161e41ffe4867f0210b59 100644 --- a/service/quiz/impl.go +++ b/service/quiz/impl.go @@ -231,12 +231,12 @@ func (q QuizServiceImpl) NewQuiz(payload model.AddQuizRequestPayload) (*model.Li return &model.LinkResponse{}, err } - q.QuizRepository.NewQuiz(quiz.Quiz{ + err = q.QuizRepository.NewQuiz(quiz.Quiz{ Id: uuid.New(), Name: payload.Name, CourseId: payload.CourseID, CreatorEmail: claim.Email, - QuizPath: uploadLink, + QuizPath: path, }) if err != nil { @@ -248,7 +248,7 @@ func (q QuizServiceImpl) NewQuiz(payload model.AddQuizRequestPayload) (*model.Li return &model.LinkResponse{UploadLink: uploadLink}, nil } -func (q QuizServiceImpl) GetQuiz(payload model.UpdateQuizRequestPayload) (*model.LinkResponse, error) { +func (q QuizServiceImpl) UpdateQuiz(payload model.UpdateQuizRequestPayload) (*model.LinkResponse, error) { // Validate Role claim, err := q.TokenUtil.Validate(payload.UpdateQuizToken, token.Access) @@ -263,21 +263,36 @@ func (q QuizServiceImpl) GetQuiz(payload model.UpdateQuizRequestPayload) (*model } // Get Quiz Detail - quiz, err := q.QuizRepository.GetQuizDetail(payload.ID) + prev, err := q.QuizRepository.GetQuizDetail(payload.ID) if err != nil { return &model.LinkResponse{}, err } // Validate Ownership - if err := q.isQuizContributor(quiz.CourseId, claim.Email); err != nil { + if err := q.isQuizContributor(prev.CourseId, claim.Email); err != nil { + return &model.LinkResponse{}, err + } + + path := fmt.Sprintf("%s/%s.json", q.BucketQuizBasePath, strings.ReplaceAll(uuid.New().String(), "-", "")) + uploadLink, err := q.Storage.CreatePutSignedLink(context.Background(), path) + + if err != nil { + q.Logger.Error("Some error happened when generate link") + q.Logger.Error(err.Error()) return &model.LinkResponse{}, err } - uploadLink, err := q.QuizRepository.GetQuizPath(payload.ID) + err = q.QuizRepository.UpdateQuiz(quiz.Quiz{ + Id: prev.Id, + Name: prev.Name, + CourseId: prev.CourseId, + CreatorEmail: prev.CreatorEmail, + QuizPath: path, + }) if err != nil { - q.Logger.Error("Some error happened when retrieving link") + q.Logger.Error("Some error happened when inserting new link") q.Logger.Error(err.Error()) return &model.LinkResponse{}, err } diff --git a/service/quiz/type.go b/service/quiz/type.go index 3f7d2a7f775b68713e3317d2d074aef624bc6129..229d724c96deee5750f3d16aca9c52fe7b5ec940 100644 --- a/service/quiz/type.go +++ b/service/quiz/type.go @@ -18,6 +18,6 @@ type QuizService interface { GetSolutionQuiz(ctx context.Context, quizId uuid.UUID, user token.UserClaim) (*quiz.QuizDetail, error) isQuizContributor(courseId string, email string) error NewQuiz(payload model.AddQuizRequestPayload) (*model.LinkResponse, error) - GetQuiz(payload model.UpdateQuizRequestPayload) (*model.LinkResponse, error) + UpdateQuiz(payload model.UpdateQuizRequestPayload) (*model.LinkResponse, error) DeleteQuiz(payload model.DeleteRequestPayload) error }