-
Notifications
You must be signed in to change notification settings - Fork 0
/
submission_ranking.go
104 lines (90 loc) · 4.24 KB
/
submission_ranking.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package models
import (
"errors"
"fmt"
"github.com/jinzhu/gorm"
"github.com/rank-a-thon/rank-a-thon/api/database"
)
type SubmissionRanking struct {
gorm.Model
SubmissionID uint `gorm:"column:submission_id;not null" json:"submission_id"`
// Rankings are position from 1 to num_submissions
MainRanking uint `gorm:"column:main_ranking;default:0" json:"main_ranking"`
AnnoyingRanking uint `gorm:"column:annoying_ranking;default:0" json:"annoying_ranking"`
EntertainRanking uint `gorm:"column:entertaining_ranking;default:0" json:"entertaining_ranking"`
BeautifulRanking uint `gorm:"column:beautiful_ranking;default:0" json:"beautiful_ranking"`
SociallyUsefulRanking uint `gorm:"column:socially_useful_ranking;default:0" json:"socially_useful_ranking"`
HardwareRanking uint `gorm:"column:hardware_ranking;default:0" json:"hardware_ranking"`
AwesomelyUselessRanking uint `gorm:"column:awesomely_useless_ranking;default:0" json:"awesomely_useless_ranking"`
MainScore float64 `gorm:"column:main_score;default:0" json:"main_score"`
AnnoyingScore float64 `gorm:"column:annoying_score;default:0" json:"annoying_score"`
EntertainScore float64 `gorm:"column:entertaining_score;default:0" json:"entertaining_score"`
BeautifulScore float64 `gorm:"column:beautiful_score;default:0" json:"beautiful_score"`
SociallyUsefulScore float64 `gorm:"column:socially_useful_score;default:0" json:"socially_useful_score"`
HardwareScore float64 `gorm:"column:hardware_score;default:0" json:"hardware_score"`
AwesomelyUselessScore float64 `gorm:"column:awesomely_useless_score;default:0" json:"awesomely_useless_score"`
}
type SubmissionRankingModel struct{}
// Create ...
// When this is created, the rankings are not assigned yet and are 0
func (m SubmissionRankingModel) Create(
submissionID uint, scoresArray []float64) (submissionRankingID uint, err error) {
if len(scoresArray) != NumberOfRatings {
return 0, errors.New("scores array length mismatch")
}
submissionRanking := SubmissionRanking{
SubmissionID: submissionID,
MainScore: scoresArray[0],
AnnoyingScore: scoresArray[1],
EntertainScore: scoresArray[2],
BeautifulScore: scoresArray[3],
SociallyUsefulScore: scoresArray[4],
HardwareScore: scoresArray[5],
AwesomelyUselessScore: scoresArray[6],
}
err = database.GetDB().Table("public.submission_rankings").Create(&submissionRanking).Error
return submissionRanking.ID, err
}
// Update ...
func (m SubmissionRankingModel) Update(submissionID uint, form map[string]uint) (err error) {
_, err = m.OneBySubmissionID(submissionID)
if err != nil {
return errors.New(fmt.Sprintf("submission %d not found", submissionID))
}
err = database.GetDB().Table("public.submission_rankings").Model(&Team{}).
Where("id = ?", submissionID).
Updates(form).Error
return err
}
// One ...
func (m SubmissionRankingModel) OneBySubmissionID(submissionID uint) (submissionRanking SubmissionRanking, err error) {
err = database.GetDB().Table("public.submission_rankings").
Where("submission_rankings.submission_id = ?", submissionID).
Take(&submissionRanking).Error
fmt.Println(submissionRanking)
return submissionRanking, err
}
// All ...
func (m SubmissionRankingModel) All() (submissionRankings []SubmissionRanking, err error) {
err = database.GetDB().Table("public.submission_rankings").
Order("submission_rankings.id desc").
Find(&submissionRankings).Error
return submissionRankings, err
}
// Sorted by category score descending order
func (m SubmissionRankingModel) AllByCategory(category string) (submissionRankings []SubmissionRanking, err error) {
err = database.GetDB().Table("public.submission_rankings").
Order(fmt.Sprintf("submission_rankings.%s_score desc", category)).
Find(&submissionRankings).Error
return submissionRankings, err
}
// Delete ...
func (m SubmissionRankingModel) DeleteBySubmissionID(submissionID uint) (err error) {
_, err = m.OneBySubmissionID(submissionID)
if err != nil {
return errors.New(fmt.Sprintf("error deleting: submission ranking %d not found", submissionID))
}
err = database.GetDB().Table("public.submission_rankings").
Where("submission_id = ?", submissionID).Delete(Evaluation{}).Error
return err
}