59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package answer
|
||
|
||
import (
|
||
"context"
|
||
"database/sql"
|
||
"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
|
||
}
|
||
// такая штучка, ну а вдруг в контенте будет сепаратор наш | в 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
|
||
}
|