Example #1
0
//Answer will try the potential answer and advance the progress if correct
func Answer(clueId, teamId int64, potential string) error {
	clue, err := table.FindClue(clueId)
	if err != nil {
		return err
	}

	if !clue.TryAnswer(potential) {
		return WrongAnswer
	}

	return progress.Advance(clueId, teamId)
}
Example #2
0
//CurrentClueForTeam gets the current clue for the team
//It should start the team if they are not on a track
//It should advance the team if the clue is disabled
//It should advance the team if the clue has been answered
func CurrentForTeam(teamId, expectedClueId int64) (*Current, error) {

	p, err := table.FindClueWithProgressForTeam(teamId)

	if err == table.NoProgress {
		if err = tracks.Begin(teamId); err != nil {
			return nil, err
		}
		//RECURSION
		return CurrentForTeam(teamId, NoExpectedId)
	} else if err != nil {
		return nil, err
	}

	if !p.Clue.IsEnabled {

		err = progress.Advance(p.Clue.ClueId, teamId)
		if err != nil {
			return nil, err
		}
		//RECURSION
		current, err := CurrentForTeam(teamId, NoExpectedId)
		if err != nil {
			return nil, err
		}

		if current.AdvancementReason == "" {
			current.AdvancementReason = DisabledAdvancement
		}

		return current, nil
	}

	current := newCurrent(p)

	if expectedClueId > 0 && expectedClueId != p.Clue.ClueId {
		current.AdvancementReason = AnsweredAdvancement
	}

	return current, nil
}