Description:
tags / problems
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r879:60919c3675f4 - - 13 files changed: 87 inserted, 104 deleted

@@ -194,6 +194,8
194 net-protocol
194 net-protocol
195 timeout
195 timeout
196 nio4r (2.5.8)
196 nio4r (2.5.8)
197 + nokogiri (1.13.8-x86_64-darwin)
198 + racc (~> 1.4)
197 nokogiri (1.13.8-x86_64-linux)
199 nokogiri (1.13.8-x86_64-linux)
198 racc (~> 1.4)
200 racc (~> 1.4)
199 popper_js (2.11.6)
201 popper_js (2.11.6)
@@ -267,6 +269,7
267 actionpack (>= 5.2)
269 actionpack (>= 5.2)
268 activesupport (>= 5.2)
270 activesupport (>= 5.2)
269 sprockets (>= 3.0.0)
271 sprockets (>= 3.0.0)
272 + sqlite3 (1.5.0-x86_64-darwin)
270 sqlite3 (1.5.0-x86_64-linux)
273 sqlite3 (1.5.0-x86_64-linux)
271 strscan (3.0.4)
274 strscan (3.0.4)
272 temple (0.8.2)
275 temple (0.8.2)
@@ -293,6 +296,7
293 zeitwerk (2.6.0)
296 zeitwerk (2.6.0)
294
297
295 PLATFORMS
298 PLATFORMS
299 + x86_64-darwin-20
296 x86_64-linux
300 x86_64-linux
297
301
298 DEPENDENCIES
302 DEPENDENCIES
@@ -15,9 +15,8
15 WHITELIST_IP_CONF_KEY = 'right.whitelist_ip'
15 WHITELIST_IP_CONF_KEY = 'right.whitelist_ip'
16
16
17 #report and redirect for unauthorized activities
17 #report and redirect for unauthorized activities
18 - def unauthorized_redirect(notice = 'You are not authorized to view the page you requested')
18 + def unauthorized_redirect(msg = 'You are not authorized to view the page you requested')
19 - flash[:notice] = notice
19 + redirect_to login_main_path, alert: msg
20 - redirect_to login_main_path
21 end
20 end
22
21
23 # Returns the current logged-in user (if any).
22 # Returns the current logged-in user (if any).
@@ -46,30 +45,18
46 return true
45 return true
47 end
46 end
48
47
49 - #admin always count as every roles
48 + def authorization_by_roles(allowed_roles)
50 - def role_authorization(roles)
51 return false unless check_valid_login
49 return false unless check_valid_login
52 - user = User.find(session[:user_id])
50 + return true if @current_user.admin?
53 - return true if user.admin?
54 roles.each do |r|
51 roles.each do |r|
55 - return true if user.has_role?(r)
52 + return true if @current_user.has_role?(r)
56 end
53 end
57 unauthorized_redirect
54 unauthorized_redirect
58 end
55 end
59
56
60 - def authorization_by_roles(allowed_roles)
61 - return false unless check_valid_login
62 - unless @current_user.roles.detect { |role| allowed_roles.member?(role.name) }
63 - unauthorized_redirect
64 - return false
65 - end
66 - end
67 -
68 def testcase_authorization
57 def testcase_authorization
69 #admin always has privileged
58 #admin always has privileged
70 - if @current_user.admin?
59 + return true if @current_user.admin?
71 - return true
72 - end
73
60
74 unauthorized_redirect unless GraderConfiguration["right.view_testcase"]
61 unauthorized_redirect unless GraderConfiguration["right.view_testcase"]
75 end
62 end
@@ -11,14 +11,12
11 def login
11 def login
12 user = get_authenticated_user(params[:login], params[:password])
12 user = get_authenticated_user(params[:login], params[:password])
13 unless user
13 unless user
14 - flash[:notice] = 'Wrong password'
14 + redirect_to login_main_path, alert: 'Wrong password'
15 - redirect_to :controller => 'main', :action => 'login'
16 return
15 return
17 end
16 end
18
17
19 if (!GraderConfiguration['right.bypass_agreement']) and (!params[:accept_agree]) and !user.admin?
18 if (!GraderConfiguration['right.bypass_agreement']) and (!params[:accept_agree]) and !user.admin?
20 - flash[:notice] = 'You must accept the agreement before logging in'
19 + redirect_to login_main_path, alert: 'You must accept the agreement before logging in'
21 - redirect_to :controller => 'main', :action => 'login'
22 return
20 return
23 end
21 end
24
22
@@ -60,14 +58,14
60 site = nil
58 site = nil
61 end
59 end
62 if site==nil
60 if site==nil
63 - flash[:notice] = 'Wrong site'
61 + flash[:alert] = 'Wrong site'
64 redirect_to :controller => 'main', :action => 'login' and return
62 redirect_to :controller => 'main', :action => 'login' and return
65 end
63 end
66 if (site.password) and (site.password == params[:login][:password])
64 if (site.password) and (site.password == params[:login][:password])
67 session[:site_id] = site.id
65 session[:site_id] = site.id
68 redirect_to :controller => 'site', :action => 'index'
66 redirect_to :controller => 'site', :action => 'index'
69 else
67 else
70 - flash[:notice] = 'Wrong site password'
68 + flash[:alert] = 'Wrong site password'
71 redirect_to :controller => 'site', :action => 'login'
69 redirect_to :controller => 'site', :action => 'login'
72 end
70 end
73 end
71 end
@@ -18,9 +18,8
18 #reset login, clear session
18 #reset login, clear session
19 #front page
19 #front page
20 def login
20 def login
21 - saved_notice = flash[:notice]
21 + #saved_notice = flash[:notice]
22 - reset_session
22 + #flash[:notice] = saved_notice
23 - flash.now[:notice] = saved_notice
24 @remote_ip = request.remote_ip
23 @remote_ip = request.remote_ip
25
24
26 # EXPERIMENT:
25 # EXPERIMENT:
@@ -2,7 +2,7
2 before_action :set_submission, only: [:show,:download,:compiler_msg,:rejudge,:set_tag, :edit]
2 before_action :set_submission, only: [:show,:download,:compiler_msg,:rejudge,:set_tag, :edit]
3 before_action :check_valid_login
3 before_action :check_valid_login
4 before_action :submission_authorization, only: [:show, :download, :edit]
4 before_action :submission_authorization, only: [:show, :download, :edit]
5 - before_action only: [:rejudge, :set_tag] do role_authorization([:ta]) end
5 + before_action only: [:rejudge, :set_tag] do authorization_by_roles([:ta]) end
6
6
7 # GET /submissions
7 # GET /submissions
8 # GET /submissions.json
8 # GET /submissions.json
@@ -25,7 +25,7
25 @tag = Tag.new(tag_params)
25 @tag = Tag.new(tag_params)
26
26
27 if @tag.save
27 if @tag.save
28 - redirect_to @tag, notice: 'Tag was successfully created.'
28 + redirect_to tags_path, notice: 'Tag was successfully created.'
29 else
29 else
30 render :new
30 render :new
31 end
31 end
@@ -16,7 +16,7
16 %td= group.description
16 %td= group.description
17 %td= toggle_button(group.enabled?, toggle_group_path(group), "group-enabled-#{group.id}", block: ' ')
17 %td= toggle_button(group.enabled?, toggle_group_path(group), "group-enabled-#{group.id}", block: ' ')
18 %td
18 %td
19 - = link_to 'Edit members and problems', group, class: 'btn btn-secondary btn-sm'
19 + = link_to 'Edit members and problems', group, class: 'btn btn-info btn-sm'
20 = link_to 'Destroy', group, :method => :delete, :data => { :confirm => 'Are you sure?' }, class: 'btn btn-danger btn-sm'
20 = link_to 'Destroy', group, :method => :delete, :data => { :confirm => 'Are you sure?' }, class: 'btn btn-danger btn-sm'
21
21
22 %br
22 %br
@@ -82,7 +82,7
82 %a.nav-link{href: profile_users_path}
82 %a.nav-link{href: profile_users_path}
83 %span.mi.mi-bs.md-18 settings
83 %span.mi.mi-bs.md-18 settings
84 %li.nav-item
84 %li.nav-item
85 - %a.nav-link{href: login_main_path}
85 + %a.nav-link{href: logout_main_path}
86 %span.mi.mi-bs.md-18 exit_to_app
86 %span.mi.mi-bs.md-18 exit_to_app
87 = @current_user.full_name
87 = @current_user.full_name
88 :javascript
88 :javascript
@@ -7,9 +7,8
7 .card-subtitle=t 'login.message'
7 .card-subtitle=t 'login.message'
8
8
9 - if flash[:notice]
9 - if flash[:notice]
10 - %hr/
10 + .alert.alert-danger
11 - %b= flash[:notice]
11 + = flash[:notice]
12 - %hr/
13
12
14 .card
13 .card
15 .card-body{ style: "background: #eeeeff;"}
14 .card-body{ style: "background: #eeeeff;"}
@@ -1,22 +1,7
1 - = form_for @tag do |f|
1 + = simple_form_for @tag do |f|
2 - - if @tag.errors.any?
3 - #error_explanation
4 - %h2= "#{pluralize(@tag.errors.count, "error")} prohibited this tag from being saved:"
5 - %ul
6 - - @tag.errors.full_messages.each do |msg|
7 - %li= msg
8 -
9 .row
2 .row
10 .col-md-6
3 .col-md-6
11 - .form-group.field
4 + = f.input :name
12 - = f.label :name
5 + = f.input :description
13 - = f.text_field :name, class: 'form-control'
6 + = f.input :public
14 - .form-group.field
15 - = f.label :description
16 - = f.text_area :description, class: 'form-control'
17 - .form-group.field
18 - = f.label :public
19 - = f.text_field :public, class: 'form-control'
20 - .actions
21 = f.submit 'Save', class: 'btn btn-primary'
7 = f.submit 'Save', class: 'btn btn-primary'
22 - .col-md-6
@@ -18,9 +18,9
18 %td= tag.name
18 %td= tag.name
19 %td= tag.description
19 %td= tag.description
20 %td= tag.public
20 %td= tag.public
21 - %td= link_to 'Show', tag
21 + %td= link_to 'Show', tag, class: 'btn btn-info'
22 - %td= link_to 'Edit', edit_tag_path(tag)
22 + %td= link_to 'Edit', edit_tag_path(tag), class: 'btn btn-info'
23 - %td= link_to 'Destroy', tag, :method => :delete, :data => { :confirm => 'Are you sure?' }
23 + %td= button_to 'Destroy', tag, :method => :delete, :data => { :confirm => 'Are you sure?' }, class: 'btn btn-danger'
24
24
25 %br
25 %br
26
26
@@ -76,8 +76,8
76 %td= toggle_button(user.enabled?, toggle_enable_user_path(user),"toggle_enable_user_#{user.id}")
76 %td= toggle_button(user.enabled?, toggle_enable_user_path(user),"toggle_enable_user_#{user.id}")
77 %td= user.last_ip
77 %td= user.last_ip
78 %td= link_to 'Clear IP', {:action => 'clear_last_ip', :id => user, :page=>params[:page]}, :confirm => 'This will reset last logging in ip of the user, are you sure?', class: 'btn btn-secondary btn-sm btn-block'
78 %td= link_to 'Clear IP', {:action => 'clear_last_ip', :id => user, :page=>params[:page]}, :confirm => 'This will reset last logging in ip of the user, are you sure?', class: 'btn btn-secondary btn-sm btn-block'
79 - %td= link_to 'Show', {:action => 'show', :id => user}, class: 'btn btn-secondary btn-sm btn-block'
79 + %td= link_to 'Show', {:action => 'show', :id => user}, class: 'btn btn-info btn-sm btn-block'
80 - %td= link_to 'Edit', {:action => 'edit', :id => user}, class: 'btn btn-secondary btn-sm btn-block'
80 + %td= link_to 'Edit', {:action => 'edit', :id => user}, class: 'btn btn-info btn-sm btn-block'
81 %td= link_to 'Destroy', {action: :destroy, id: user}, data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-danger btn-sm btn-block'
81 %td= link_to 'Destroy', {action: :destroy, id: user}, data: {confirm: 'Are you sure?'}, method: :delete, class: 'btn btn-danger btn-sm btn-block'
82 %br/
82 %br/
83 = link_to '+ New user', { :action => 'new' }, { class: 'btn btn-success '}
83 = link_to '+ New user', { :action => 'new' }, { class: 'btn btn-success '}
@@ -11,7 +11,7
11 # It's strongly recommended that you check this file into your version control system.
11 # It's strongly recommended that you check this file into your version control system.
12
12
13 ActiveRecord::Schema[7.0].define(version: 2022_09_27_074644) do
13 ActiveRecord::Schema[7.0].define(version: 2022_09_27_074644) do
14 - create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
14 + create_table "active_storage_attachments", charset: "latin1", force: :cascade do |t|
15 t.string "name", null: false
15 t.string "name", null: false
16 t.string "record_type", null: false
16 t.string "record_type", null: false
17 t.bigint "record_id", null: false
17 t.bigint "record_id", null: false
@@ -21,7 +21,7
21 t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
21 t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
22 end
22 end
23
23
24 - create_table "active_storage_blobs", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
24 + create_table "active_storage_blobs", charset: "latin1", force: :cascade do |t|
25 t.string "key", null: false
25 t.string "key", null: false
26 t.string "filename", null: false
26 t.string "filename", null: false
27 t.string "content_type"
27 t.string "content_type"
@@ -33,15 +33,15
33 t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
33 t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
34 end
34 end
35
35
36 - create_table "active_storage_variant_records", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
36 + create_table "active_storage_variant_records", charset: "latin1", force: :cascade do |t|
37 t.bigint "blob_id", null: false
37 t.bigint "blob_id", null: false
38 t.string "variation_digest", null: false
38 t.string "variation_digest", null: false
39 t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
39 t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
40 end
40 end
41
41
42 - create_table "announcements", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
42 + create_table "announcements", id: :integer, charset: "utf8", force: :cascade do |t|
43 t.string "author"
43 t.string "author"
44 - t.text "body"
44 + t.text "body", size: :medium
45 t.boolean "published"
45 t.boolean "published"
46 t.datetime "created_at", precision: nil, null: false
46 t.datetime "created_at", precision: nil, null: false
47 t.datetime "updated_at", precision: nil, null: false
47 t.datetime "updated_at", precision: nil, null: false
@@ -52,7 +52,7
52 t.boolean "on_nav_bar", default: false
52 t.boolean "on_nav_bar", default: false
53 end
53 end
54
54
55 - create_table "contests", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
55 + create_table "contests", id: :integer, charset: "utf8", force: :cascade do |t|
56 t.string "title"
56 t.string "title"
57 t.boolean "enabled"
57 t.boolean "enabled"
58 t.datetime "created_at", precision: nil, null: false
58 t.datetime "created_at", precision: nil, null: false
@@ -60,39 +60,39
60 t.string "name"
60 t.string "name"
61 end
61 end
62
62
63 - create_table "contests_problems", id: false, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
63 + create_table "contests_problems", id: false, charset: "utf8", force: :cascade do |t|
64 t.integer "contest_id"
64 t.integer "contest_id"
65 t.integer "problem_id"
65 t.integer "problem_id"
66 end
66 end
67
67
68 - create_table "contests_users", id: false, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
68 + create_table "contests_users", id: false, charset: "utf8", force: :cascade do |t|
69 t.integer "contest_id"
69 t.integer "contest_id"
70 t.integer "user_id"
70 t.integer "user_id"
71 end
71 end
72
72
73 - create_table "countries", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
73 + create_table "countries", id: :integer, charset: "utf8", force: :cascade do |t|
74 t.string "name"
74 t.string "name"
75 t.datetime "created_at", precision: nil, null: false
75 t.datetime "created_at", precision: nil, null: false
76 t.datetime "updated_at", precision: nil, null: false
76 t.datetime "updated_at", precision: nil, null: false
77 end
77 end
78
78
79 - create_table "descriptions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
79 + create_table "descriptions", id: :integer, charset: "utf8", force: :cascade do |t|
80 - t.text "body"
80 + t.text "body", size: :medium
81 t.boolean "markdowned"
81 t.boolean "markdowned"
82 t.datetime "created_at", precision: nil, null: false
82 t.datetime "created_at", precision: nil, null: false
83 t.datetime "updated_at", precision: nil, null: false
83 t.datetime "updated_at", precision: nil, null: false
84 end
84 end
85
85
86 - create_table "grader_configurations", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
86 + create_table "grader_configurations", id: :integer, charset: "utf8", force: :cascade do |t|
87 t.string "key"
87 t.string "key"
88 t.string "value_type"
88 t.string "value_type"
89 t.string "value"
89 t.string "value"
90 t.datetime "created_at", precision: nil, null: false
90 t.datetime "created_at", precision: nil, null: false
91 t.datetime "updated_at", precision: nil, null: false
91 t.datetime "updated_at", precision: nil, null: false
92 - t.text "description"
92 + t.text "description", size: :medium
93 end
93 end
94
94
95 - create_table "grader_processes", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
95 + create_table "grader_processes", id: :integer, charset: "utf8", force: :cascade do |t|
96 t.string "host"
96 t.string "host"
97 t.integer "pid"
97 t.integer "pid"
98 t.string "mode"
98 t.string "mode"
@@ -123,7 +123,7
123 t.index ["user_id", "group_id"], name: "index_groups_users_on_user_id_and_group_id"
123 t.index ["user_id", "group_id"], name: "index_groups_users_on_user_id_and_group_id"
124 end
124 end
125
125
126 - create_table "heart_beats", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
126 + create_table "heart_beats", id: :integer, charset: "latin1", force: :cascade do |t|
127 t.integer "user_id"
127 t.integer "user_id"
128 t.string "ip_address"
128 t.string "ip_address"
129 t.datetime "created_at", precision: nil, null: false
129 t.datetime "created_at", precision: nil, null: false
@@ -132,14 +132,14
132 t.index ["updated_at"], name: "index_heart_beats_on_updated_at"
132 t.index ["updated_at"], name: "index_heart_beats_on_updated_at"
133 end
133 end
134
134
135 - create_table "languages", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
135 + create_table "languages", id: :integer, charset: "utf8", force: :cascade do |t|
136 t.string "name", limit: 10
136 t.string "name", limit: 10
137 t.string "pretty_name"
137 t.string "pretty_name"
138 t.string "ext", limit: 10
138 t.string "ext", limit: 10
139 t.string "common_ext"
139 t.string "common_ext"
140 end
140 end
141
141
142 - create_table "logins", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
142 + create_table "logins", id: :integer, charset: "latin1", force: :cascade do |t|
143 t.integer "user_id"
143 t.integer "user_id"
144 t.string "ip_address"
144 t.string "ip_address"
145 t.datetime "created_at", precision: nil, null: false
145 t.datetime "created_at", precision: nil, null: false
@@ -147,18 +147,18
147 t.index ["user_id"], name: "index_logins_on_user_id"
147 t.index ["user_id"], name: "index_logins_on_user_id"
148 end
148 end
149
149
150 - create_table "messages", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
150 + create_table "messages", id: :integer, charset: "utf8", force: :cascade do |t|
151 t.integer "sender_id"
151 t.integer "sender_id"
152 t.integer "receiver_id"
152 t.integer "receiver_id"
153 t.integer "replying_message_id"
153 t.integer "replying_message_id"
154 - t.text "body"
154 + t.text "body", size: :medium
155 t.boolean "replied"
155 t.boolean "replied"
156 t.datetime "created_at", precision: nil, null: false
156 t.datetime "created_at", precision: nil, null: false
157 t.datetime "updated_at", precision: nil, null: false
157 t.datetime "updated_at", precision: nil, null: false
158 end
158 end
159
159
160 - create_table "problems", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
160 + create_table "problems", id: :bigint, default: nil, charset: "utf8", force: :cascade do |t|
161 - t.string "name", limit: 30
161 + t.string "name", limit: 100
162 t.string "full_name"
162 t.string "full_name"
163 t.integer "full_score"
163 t.integer "full_score"
164 t.date "date_added"
164 t.date "date_added"
@@ -174,45 +174,45
174 t.boolean "markdown"
174 t.boolean "markdown"
175 end
175 end
176
176
177 - create_table "problems_tags", id: :integer, charset: "latin1", force: :cascade do |t|
177 + create_table "problems_tags", id: :bigint, default: nil, charset: "latin1", force: :cascade do |t|
178 - t.integer "problem_id"
178 + t.bigint "problem_id"
179 t.integer "tag_id"
179 t.integer "tag_id"
180 t.index ["problem_id", "tag_id"], name: "index_problems_tags_on_problem_id_and_tag_id", unique: true
180 t.index ["problem_id", "tag_id"], name: "index_problems_tags_on_problem_id_and_tag_id", unique: true
181 t.index ["problem_id"], name: "index_problems_tags_on_problem_id"
181 t.index ["problem_id"], name: "index_problems_tags_on_problem_id"
182 t.index ["tag_id"], name: "index_problems_tags_on_tag_id"
182 t.index ["tag_id"], name: "index_problems_tags_on_tag_id"
183 end
183 end
184
184
185 - create_table "rights", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
185 + create_table "rights", id: :integer, charset: "utf8", force: :cascade do |t|
186 t.string "name"
186 t.string "name"
187 t.string "controller"
187 t.string "controller"
188 t.string "action"
188 t.string "action"
189 end
189 end
190
190
191 - create_table "rights_roles", id: false, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
191 + create_table "rights_roles", id: false, charset: "utf8", force: :cascade do |t|
192 t.integer "right_id"
192 t.integer "right_id"
193 t.integer "role_id"
193 t.integer "role_id"
194 t.index ["role_id"], name: "index_rights_roles_on_role_id"
194 t.index ["role_id"], name: "index_rights_roles_on_role_id"
195 end
195 end
196
196
197 - create_table "roles", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
197 + create_table "roles", id: :integer, charset: "utf8", force: :cascade do |t|
198 t.string "name"
198 t.string "name"
199 end
199 end
200
200
201 - create_table "roles_users", id: false, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
201 + create_table "roles_users", id: false, charset: "utf8", force: :cascade do |t|
202 t.integer "role_id"
202 t.integer "role_id"
203 t.integer "user_id"
203 t.integer "user_id"
204 t.index ["user_id"], name: "index_roles_users_on_user_id"
204 t.index ["user_id"], name: "index_roles_users_on_user_id"
205 end
205 end
206
206
207 - create_table "sessions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
207 + create_table "sessions", id: :integer, charset: "utf8", force: :cascade do |t|
208 t.string "session_id"
208 t.string "session_id"
209 - t.text "data"
209 + t.text "data", size: :medium
210 t.datetime "updated_at", precision: nil
210 t.datetime "updated_at", precision: nil
211 t.index ["session_id"], name: "index_sessions_on_session_id"
211 t.index ["session_id"], name: "index_sessions_on_session_id"
212 t.index ["updated_at"], name: "index_sessions_on_updated_at"
212 t.index ["updated_at"], name: "index_sessions_on_updated_at"
213 end
213 end
214
214
215 - create_table "sites", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
215 + create_table "sites", id: :integer, charset: "utf8", force: :cascade do |t|
216 t.string "name"
216 t.string "name"
217 t.boolean "started"
217 t.boolean "started"
218 t.datetime "start_time", precision: nil
218 t.datetime "start_time", precision: nil
@@ -222,14 +222,23
222 t.string "password"
222 t.string "password"
223 end
223 end
224
224
225 - create_table "submission_view_logs", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
225 + create_table "solutions", charset: "latin1", force: :cascade do |t|
226 + t.string "solution"
227 + t.bigint "problem_id"
228 + t.bigint "submission_id"
229 + t.integer "type"
230 + t.index ["problem_id"], name: "index_solutions_on_problem_id"
231 + t.index ["submission_id"], name: "index_solutions_on_submission_id"
232 + end
233 +
234 + create_table "submission_view_logs", id: :integer, charset: "latin1", force: :cascade do |t|
226 t.integer "user_id"
235 t.integer "user_id"
227 t.integer "submission_id"
236 t.integer "submission_id"
228 t.datetime "created_at", precision: nil, null: false
237 t.datetime "created_at", precision: nil, null: false
229 t.datetime "updated_at", precision: nil, null: false
238 t.datetime "updated_at", precision: nil, null: false
230 end
239 end
231
240
232 - create_table "submissions", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
241 + create_table "submissions", id: :bigint, default: nil, charset: "utf8", force: :cascade do |t|
233 t.integer "user_id"
242 t.integer "user_id"
234 t.integer "problem_id"
243 t.integer "problem_id"
235 t.integer "language_id"
244 t.integer "language_id"
@@ -237,10 +246,10
237 t.binary "binary"
246 t.binary "binary"
238 t.datetime "submitted_at", precision: nil
247 t.datetime "submitted_at", precision: nil
239 t.datetime "compiled_at", precision: nil
248 t.datetime "compiled_at", precision: nil
240 - t.text "compiler_message"
249 + t.text "compiler_message", size: :medium
241 t.datetime "graded_at", precision: nil
250 t.datetime "graded_at", precision: nil
242 t.integer "points"
251 t.integer "points"
243 - t.text "grader_comment"
252 + t.text "grader_comment", size: :medium
244 t.integer "number"
253 t.integer "number"
245 t.string "source_filename"
254 t.string "source_filename"
246 t.float "max_runtime"
255 t.float "max_runtime"
@@ -261,7 +270,7
261 t.datetime "updated_at", precision: nil, null: false
270 t.datetime "updated_at", precision: nil, null: false
262 end
271 end
263
272
264 - create_table "tasks", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
273 + create_table "tasks", id: :integer, charset: "utf8", force: :cascade do |t|
265 t.integer "submission_id"
274 t.integer "submission_id"
266 t.datetime "created_at", precision: nil
275 t.datetime "created_at", precision: nil
267 t.integer "status"
276 t.integer "status"
@@ -270,15 +279,15
270 t.index ["submission_id"], name: "index_tasks_on_submission_id"
279 t.index ["submission_id"], name: "index_tasks_on_submission_id"
271 end
280 end
272
281
273 - create_table "test_pairs", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
282 + create_table "test_pairs", id: :integer, charset: "utf8", force: :cascade do |t|
274 t.integer "problem_id"
283 t.integer "problem_id"
275 - t.text "input", size: :medium
284 + t.text "input", size: :long
276 - t.text "solution", size: :medium
285 + t.text "solution", size: :long
277 t.datetime "created_at", precision: nil, null: false
286 t.datetime "created_at", precision: nil, null: false
278 t.datetime "updated_at", precision: nil, null: false
287 t.datetime "updated_at", precision: nil, null: false
279 end
288 end
280
289
281 - create_table "test_requests", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
290 + create_table "test_requests", id: :integer, charset: "utf8", force: :cascade do |t|
282 t.integer "user_id"
291 t.integer "user_id"
283 t.integer "problem_id"
292 t.integer "problem_id"
284 t.integer "submission_id"
293 t.integer "submission_id"
@@ -289,7 +298,7
289 t.datetime "updated_at", precision: nil, null: false
298 t.datetime "updated_at", precision: nil, null: false
290 t.datetime "submitted_at", precision: nil
299 t.datetime "submitted_at", precision: nil
291 t.datetime "compiled_at", precision: nil
300 t.datetime "compiled_at", precision: nil
292 - t.text "compiler_message"
301 + t.text "compiler_message", size: :medium
293 t.datetime "graded_at", precision: nil
302 t.datetime "graded_at", precision: nil
294 t.string "grader_comment"
303 t.string "grader_comment"
295 t.datetime "created_at", precision: nil, null: false
304 t.datetime "created_at", precision: nil, null: false
@@ -306,12 +315,12
306 t.integer "score"
315 t.integer "score"
307 t.text "input", size: :long
316 t.text "input", size: :long
308 t.text "sol", size: :long
317 t.text "sol", size: :long
309 - t.datetime "created_at", precision: nil
318 + t.datetime "created_at", precision: nil, null: false
310 - t.datetime "updated_at", precision: nil
319 + t.datetime "updated_at", precision: nil, null: false
311 t.index ["problem_id"], name: "index_testcases_on_problem_id"
320 t.index ["problem_id"], name: "index_testcases_on_problem_id"
312 end
321 end
313
322
314 - create_table "user_contest_stats", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
323 + create_table "user_contest_stats", id: :integer, charset: "utf8", force: :cascade do |t|
315 t.integer "user_id"
324 t.integer "user_id"
316 t.datetime "started_at", precision: nil
325 t.datetime "started_at", precision: nil
317 t.datetime "created_at", precision: nil, null: false
326 t.datetime "created_at", precision: nil, null: false
@@ -319,7 +328,7
319 t.boolean "forced_logout"
328 t.boolean "forced_logout"
320 end
329 end
321
330
322 - create_table "users", id: :integer, charset: "utf8mb3", collation: "utf8mb3_unicode_ci", force: :cascade do |t|
331 + create_table "users", id: :integer, charset: "utf8", force: :cascade do |t|
323 t.string "login", limit: 50
332 t.string "login", limit: 50
324 t.string "full_name"
333 t.string "full_name"
325 t.string "hashed_password"
334 t.string "hashed_password"
@@ -331,10 +340,10
331 t.boolean "activated", default: false
340 t.boolean "activated", default: false
332 t.datetime "created_at", precision: nil
341 t.datetime "created_at", precision: nil
333 t.datetime "updated_at", precision: nil
342 t.datetime "updated_at", precision: nil
343 + t.string "section"
334 t.boolean "enabled", default: true
344 t.boolean "enabled", default: true
335 t.string "remark"
345 t.string "remark"
336 t.string "last_ip"
346 t.string "last_ip"
337 - t.string "section"
338 t.integer "default_language"
347 t.integer "default_language"
339 t.index ["login"], name: "index_users_on_login", unique: true
348 t.index ["login"], name: "index_users_on_login", unique: true
340 end
349 end
@@ -343,4 +352,6
343 add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
352 add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
344 add_foreign_key "problems_tags", "problems"
353 add_foreign_key "problems_tags", "problems"
345 add_foreign_key "problems_tags", "tags"
354 add_foreign_key "problems_tags", "tags"
355 + add_foreign_key "solutions", "problems"
356 + add_foreign_key "solutions", "submissions"
346 end
357 end
You need to be logged in to leave comments. Login now