@@ -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