Skip to content

Commit d369c6f

Browse files
committed
contest question submission leaderboard
1 parent 04669c2 commit d369c6f

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

pkg/types/models.go

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,54 @@ type Contest struct {
2626
Title string `bson:"title" json:"title" validate:"required"`
2727
StartTime time.Time `bson:"start_time" json:"start_time" validate:"required"`
2828
EndTime time.Time `bson:"end_time" json:"end_time" validate:"required"`
29-
Questions []string `bson:"questions" json:"questions" validate:"required"`
29+
Questions []Question `bson:"questions" json:"questions" validate:"required"`
30+
CreatedAt time.Time `bson:"created_at" json:"created_at"`
3031
}
32+
33+
type Question struct {
34+
ID string `bson:"_id,omitempty" json:"question_id" validate:"required"`
35+
Title string `bson:"title" json:"title" validate:"required"`
36+
Description string `bson:"description" json:"description" validate:"required"`
37+
Difficulty string `bson:"difficulty" json:"difficulty"`
38+
Tags []string `bson:"tags" json:"tags"`
39+
TestCases []TestCase `bson:"test_cases" json:"test_cases" validate:"required"`
40+
Points int `bson:"points" json:"points"`
41+
Cpu_time_limit int `bson:"cpu_time_limit" json:"cpu_time_limit"`
42+
Memory_limit int `bson:"memory_limit" json:"memory_limit"`
43+
CreatedBy primitive.ObjectID `bson:"created_by" json:"created_by"`
44+
CreatedAt time.Time `bson:"created_at" json:"created_at"`
45+
}
46+
47+
type Visibility string
48+
49+
const (
50+
VisibilityPublic Visibility = "public"
51+
VisibilityPrivate Visibility = "private"
52+
)
53+
54+
type TestCase struct {
55+
ID string `bson:"_id,omitempty" json:"test_case_id"`
56+
Input interface{} `bson:"input" json:"input"`
57+
ExpectedOutput interface{} `bson:"expected_output" json:"expected_output"`
58+
CreatedAt time.Time `bson:"created_at" json:"created_at"`
59+
Visibility Visibility `bson:"visibility" json:"visibility" validate:"required,oneof=public private"`
60+
}
61+
62+
type Submission struct {
63+
ID string `bson:"_id,omitempty" json:"submission_id"`
64+
UserID primitive.ObjectID `bson:"user_id" json:"user_id"`
65+
QuestionID primitive.ObjectID `bson:"question_id" json:"question_id"`
66+
ContestID primitive.ObjectID `bson:"contest_id" json:"contest_id"`
67+
Code string `bson:"code" json:"code"`
68+
LanguageId string `bson:"language_id" json:"language_id"`
69+
Status string `bson:"status" json:"status"`
70+
CreatedAt time.Time `bson:"created_at" json:"created_at"`
71+
}
72+
73+
type Leaderboard struct {
74+
ID string `bson:"_id,omitempty" json:"leaderboard_id"`
75+
UserID primitive.ObjectID `bson:"user_id" json:"user_id"`
76+
ContestID primitive.ObjectID `bson:"contest_id" json:"contest_id"`
77+
LeaderboardScore int `bson:"leaderboard_score" json:"leaderboard_score"`
78+
CreatedAt time.Time `bson:"created_at" json:"created_at"`
79+
}

0 commit comments

Comments
 (0)