diff --git a/repository/statistics/statistics.go b/repository/statistics/statistics.go index 69eee0e..8b02fd7 100644 --- a/repository/statistics/statistics.go +++ b/repository/statistics/statistics.go @@ -3,6 +3,7 @@ package statistics import ( "context" "database/sql" + "fmt" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" "time" ) @@ -98,6 +99,7 @@ func (r *StatisticsRepository) GetGeneralStatistics(ctx context.Context, req Dev } type QuestionsStatsResp struct { + // PS это / не или а делить а то я спустя пару часов только догнал //Funnel 3 отдельных метрики // 0 - количество сессий с любым ответом кроме start == true / количество сессий с ответом start == true // 1 - количество сессий с result == false, но тип вопроса, на который ответ == result / количество сессий с ответом start == true @@ -112,5 +114,34 @@ type QuestionsStatsResp struct { } func (r *StatisticsRepository) GetQuestionsStatistics(ctx context.Context, req DeviceStatReq) (QuestionsStatsResp, error) { + resp := QuestionsStatsResp{ + Funnel: [3]float64{}, + Results: make(map[string]float64), + Questions: make(map[string]map[string]float64), + } + queStatistics, err := r.queries.QuestionsStatistics(ctx, sqlcgen.QuestionsStatisticsParams{ + QuizID: req.QuizId, + ToTimestamp: float64(req.From), + ToTimestamp_2: float64(req.To), + }) + if err != nil { + return resp, err + } + + for _, row := range queStatistics { + resp.Funnel[0] = float64(row.CountStartFalse) / float64(row.CountStartTrue) + resp.Funnel[1] = float64(row.CountFResultWithTQuestion) / float64(row.CountStartTrue) + resp.Funnel[2] = float64(row.CountTResult) / float64(row.CountStartTrue) + + fmt.Println(resp.Funnel) + resp.Results[row.ResultsTitle] = float64(row.ResultsPercentage) + + if resp.Questions[row.QuestionsTitle] == nil { + resp.Questions[row.QuestionsTitle] = make(map[string]float64) + } + resp.Questions[row.QuestionsTitle][row.AnswerContent.String] = float64(row.QuestionsPercentage) + } + + return resp, nil }