Improve ranking
This commit is contained in:
parent
5a7e8e433b
commit
c97792e762
3 changed files with 13 additions and 7 deletions
|
@ -110,13 +110,13 @@ func (c *Contest) Read(db *Database, args map[string]string, w http.ResponseWrit
|
|||
}
|
||||
|
||||
for _, r := range contest.Rank {
|
||||
if err := calcScore(db, r); err != nil {
|
||||
if err := calcScoreAndDuration(db, r); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
sort.SliceStable(contest.Rank, func(i, j int) bool {
|
||||
return contest.Rank[i].Score < contest.Rank[j].Score
|
||||
return (contest.Rank[i].Score >= contest.Rank[j].Score) && (contest.Rank[i].Duration < contest.Rank[j].Duration)
|
||||
})
|
||||
|
||||
return &contest, nil
|
||||
|
|
|
@ -38,8 +38,9 @@ type Response struct {
|
|||
EndTime time.Time
|
||||
TimeLeft time.Duration
|
||||
|
||||
Score int `gorm:"-"`
|
||||
ScoreString string `gorm:"-"`
|
||||
Score int `gorm:"-"`
|
||||
ScoreString string `gorm:"-"`
|
||||
Duration time.Duration `gorm:"-"`
|
||||
|
||||
Questions []*Question
|
||||
SingleResponses []*SingleResponse `gorm:"-"`
|
||||
|
@ -104,7 +105,7 @@ func (model *Response) BeforeSave(tx *gorm.DB) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func calcScore(db *Database, response *Response) error {
|
||||
func calcScoreAndDuration(db *Database, response *Response) error {
|
||||
response.Score = 0
|
||||
if response.AnswersIDs != "" {
|
||||
srIDs := strings.Split(response.AnswersIDs, " ")
|
||||
|
@ -130,7 +131,12 @@ func calcScore(db *Database, response *Response) error {
|
|||
|
||||
}
|
||||
|
||||
response.ScoreString = fmt.Sprintf("%s punti %v", strconv.Itoa(response.Score), response.EndTime.Sub(response.StartTime))
|
||||
if response.StartTime.IsZero() {
|
||||
response.ScoreString = "non ancora visualizzata"
|
||||
} else {
|
||||
response.Duration = response.UpdatedAt.Sub(response.StartTime)
|
||||
response.ScoreString = fmt.Sprintf("%s punti %v", strconv.Itoa(response.Score), response.Duration)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
<dt class="col-sm-3">Durata della gara</dt>
|
||||
<dd class="col-sm-9">
|
||||
{{if not .Data.Contest.IsAlwaysActive}}
|
||||
{{.Data.Contest.Duration}} min (la prova dovrà comunque essere consegnata <strong>al massimo</strong> entro le ore {{.Data.Contest.EndTime|convertTime}})
|
||||
{{.Data.Contest.Duration}} min {{if .Data.StartTime|zeroTime}}(la prova dovrà comunque essere consegnata al massimo entro le ore {{.Data.Contest.EndTime|convertTime}}){{end}}
|
||||
{{else}}
|
||||
La gara ha una durata illimitata.
|
||||
{{end}}
|
||||
|
|
Loading…
Reference in a new issue