Skip to content
Snippets Groups Projects
Commit c3cc942d authored by Nathanael Santoso's avatar Nathanael Santoso
Browse files

Merge branch 'fix/s4-SB-54-Backend-Manajemen-Soal-Latihan' into 'staging'

fix(quiz): fixed quiz implementation

See merge request !45
parents ae2a1ed0 a905a4a5
3 merge requests!47Final Updates,!45fix(quiz): fixed quiz implementation,!42[Feat] [Release!] [#1] Project Release Commit
Pipeline #58034 passed with stage
in 1 minute and 38 seconds
......@@ -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)
......
......@@ -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 {
......
......@@ -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)
......
......@@ -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
}
......
......@@ -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
}
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