generated from VLADIMIR/template
fix
This commit is contained in:
@@ -418,8 +418,10 @@ func (s *GameService) SubmitTeamAnswers(ctx context.Context, teamId int, passwor
|
||||
|
||||
// GetGameAnswers возвращает полную картину для оценки организатором:
|
||||
// вопросы сценария с правильными ответами и ответы всех команд с баллами.
|
||||
// Ответы на удалённые из сценария вопросы не возвращаются (как в
|
||||
// GetTeamAnswers).
|
||||
// Команда может не дать ответ на вопрос — такой вопрос попадает в список
|
||||
// ответов команды с пустым текстом и без балла (организатор видит его и
|
||||
// может выставить балл, в т.ч. штрафной). Ответы на удалённые из сценария
|
||||
// вопросы не возвращаются (как в GetTeamAnswers).
|
||||
func (s *GameService) GetGameAnswers(ctx context.Context, gameId int) (*GameAnswers, error) {
|
||||
game, err := s.gamesRepo.GetGameByID(ctx, gameId)
|
||||
if err != nil {
|
||||
@@ -437,23 +439,37 @@ func (s *GameService) GetGameAnswers(ctx context.Context, gameId int) (*GameAnsw
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
answersByTeam := make(map[int][]AnswerScore, len(teams))
|
||||
answerByTeamAndCode := make(map[int]map[string]AnswerScore, len(teams))
|
||||
for _, row := range rows {
|
||||
if _, ok := byCode[row.QuestionCode]; !ok {
|
||||
continue
|
||||
}
|
||||
score := row.Score
|
||||
answersByTeam[row.TeamId] = append(answersByTeam[row.TeamId], AnswerScore{
|
||||
if answerByTeamAndCode[row.TeamId] == nil {
|
||||
answerByTeamAndCode[row.TeamId] = make(map[string]AnswerScore, len(questions))
|
||||
}
|
||||
answerByTeamAndCode[row.TeamId][row.QuestionCode] = AnswerScore{
|
||||
QuestionCode: row.QuestionCode,
|
||||
Text: row.Text,
|
||||
Score: score,
|
||||
})
|
||||
}
|
||||
}
|
||||
teamAnswers := make([]TeamAnswers, 0, len(teams))
|
||||
for _, team := range teams {
|
||||
byCode := answerByTeamAndCode[team.ID]
|
||||
// Все вопросы сценария в порядке сценария; неотвеченные — с пустым
|
||||
// текстом и без балла, чтобы организатор видел пропуски.
|
||||
answers := make([]AnswerScore, 0, len(questions))
|
||||
for _, question := range questions {
|
||||
if answer, ok := byCode[question.Code]; ok {
|
||||
answers = append(answers, answer)
|
||||
continue
|
||||
}
|
||||
answers = append(answers, AnswerScore{QuestionCode: question.Code})
|
||||
}
|
||||
teamAnswers = append(teamAnswers, TeamAnswers{
|
||||
Team: mapTeam(team),
|
||||
Answers: answersByTeam[team.ID],
|
||||
Answers: answers,
|
||||
})
|
||||
}
|
||||
return &GameAnswers{
|
||||
|
||||
Reference in New Issue
Block a user