@@ -26,5 +26,54 @@ type Contest struct {
26
26
Title string `bson:"title" json:"title" validate:"required"`
27
27
StartTime time.Time `bson:"start_time" json:"start_time" validate:"required"`
28
28
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"`
30
31
}
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