diff --git a/dal/dal.go b/dal/dal.go
index 4d0c38d..d7ded03 100644
--- a/dal/dal.go
+++ b/dal/dal.go
@@ -31,6 +31,7 @@ type DAL struct {
ResultRepo *result.ResultRepository
WorkerRepo *workers.WorkerRepository
StatisticsRepo *statistics.StatisticsRepository
+ WorkerAnsRepo *answer.WorkerAnswerRepository
}
func New(ctx context.Context, cred string, minioClient *minio.Client) (*DAL, error) {
@@ -62,12 +63,17 @@ func New(ctx context.Context, cred string, minioClient *minio.Client) (*DAL, err
}
}
- answerRepo := answer.NewAnswerRepository(answer.Deps{
+ workerAnsRepo := answer.NewWorkerAnswerRepo(answer.Deps{
Queries: queries,
Pool: pool,
AnswerMinio: storerAnswer,
})
+ answerRepo := answer.NewAnswerRepository(answer.Deps{
+ Queries: queries,
+ Pool: pool,
+ })
+
questionRepo := question.NewQuestionRepository(question.Deps{
Queries: queries,
Pool: pool,
@@ -102,6 +108,7 @@ func New(ctx context.Context, cred string, minioClient *minio.Client) (*DAL, err
ResultRepo: resultRepo,
WorkerRepo: workerRepo,
StatisticsRepo: statisticsRepo,
+ WorkerAnsRepo: workerAnsRepo,
}, nil
}
diff --git a/dal/schema/000015_init.down.sql b/dal/schema/000015_init.down.sql
new file mode 100644
index 0000000..e69de29
diff --git a/dal/schema/000015_init.up.sql b/dal/schema/000015_init.up.sql
new file mode 100644
index 0000000..3985517
--- /dev/null
+++ b/dal/schema/000015_init.up.sql
@@ -0,0 +1,19 @@
+UPDATE answer
+SET content =
+ CASE
+ WHEN content ~ '
|' THEN
+ regexp_replace(content, '<\/?tr[^>]*>|<\/?td[^>]*>', '', 'g')
+ WHEN content ~ '[^<]+' THEN
+ regexp_replace(content, '([^<]+)', '\1', 'g')
+ WHEN content ~ ' ]*src="([^"]*)"[^>]*' THEN
+ regexp_replace(content, ' ]*src="\s*"[^>]*', '', 'g')
+ ELSE content
+ END;
+
+UPDATE answer
+SET content =
+ CASE
+ WHEN content ~ ' ]*src=["'']?([^"''>]+)["'']?[^>]*>)', '\1\3', 'g')
+ ELSE content
+ END;
diff --git a/repository/answer/answer.go b/repository/answer/answer.go
index c473ce0..893dbb9 100644
--- a/repository/answer/answer.go
+++ b/repository/answer/answer.go
@@ -15,16 +15,14 @@ type Deps struct {
}
type AnswerRepository struct {
- queries *sqlcgen.Queries
- pool *sql.DB
- answerMinio *StorerAnswer
+ queries *sqlcgen.Queries
+ pool *sql.DB
}
func NewAnswerRepository(deps Deps) *AnswerRepository {
return &AnswerRepository{
- queries: deps.Queries,
- pool: deps.Pool,
- answerMinio: deps.AnswerMinio,
+ queries: deps.Queries,
+ pool: deps.Pool,
}
}
@@ -111,17 +109,6 @@ func (r *AnswerRepository) GetAllAnswersByQuizID(ctx context.Context, session st
}
for _, row := range rows {
- //todo тут забыл добавить проверку на то что minio !=nil
- /*if row.Questiontype == model.TypeFile {
- 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
- }
- row.Content = sql.NullString{String: fmt.Sprintf("%s|%s", fileURL, row.Content.String), Valid: true}
- }*/
-
resultAnswer := model.ResultAnswer{
Content: row.Content.String,
CreatedAt: row.CreatedAt.Time,
diff --git a/repository/answer/worker_answer.go b/repository/answer/worker_answer.go
new file mode 100644
index 0000000..3bd1995
--- /dev/null
+++ b/repository/answer/worker_answer.go
@@ -0,0 +1,55 @@
+package answer
+
+import (
+ "context"
+ "database/sql"
+ "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
+ }
+ row.Content = sql.NullString{String: fmt.Sprintf("%s|%s", fileURL, row.Content.String), 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
+}
|