common/repository/answer/worker_answer.go

59 lines
1.7 KiB
Go
Raw Normal View History

package answer
import (
"context"
"database/sql"
2024-09-17 07:23:10 +00:00
"encoding/base64"
"fmt"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
)
type WorkerAnswerRepository struct {
queries *sqlcgen.Queries
pool *sql.DB
answerMinio *StorerAnswer
}
func NewWorkerAnswerRepo(deps Deps) *WorkerAnswerRepository {
return &WorkerAnswerRepository{
queries: deps.Queries,
pool: deps.Pool,
answerMinio: deps.AnswerMinio,
}
}
func (r *WorkerAnswerRepository) GetAllAnswersByQuizID(ctx context.Context, session string) ([]model.ResultAnswer, error) {
var results []model.ResultAnswer
rows, err := r.queries.GetAllAnswersByQuizID(ctx, sql.NullString{String: session, Valid: true})
if err != nil {
return nil, err
}
for _, row := range rows {
if row.Questiontype == model.TypeFile && r.answerMinio != nil {
fmt.Println("GALL", row.Qid, row.QuestionID, row.Content)
fileURL, err := r.answerMinio.GetAnswerURL(ctx, row.Qid.UUID.String(), row.QuestionID, row.Content.String)
if err != nil {
fmt.Println("GetAnswerURL dal answer minio answer", err)
return nil, err
}
2024-09-17 07:23:10 +00:00
// такая штучка, ну а вдруг в контенте будет сепаратор наш | в base64 не будет
base64Content := base64.StdEncoding.EncodeToString([]byte(row.Content.String))
row.Content = sql.NullString{String: fmt.Sprintf("%s|%s", fileURL, base64Content), Valid: true}
}
resultAnswer := model.ResultAnswer{
Content: row.Content.String,
CreatedAt: row.CreatedAt.Time,
QuestionID: uint64(row.QuestionID),
AnswerID: uint64(row.ID),
}
results = append(results, resultAnswer)
}
return results, nil
}