Description:
- change testcase data to longtext by limit size - fix bug in new submission
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r631:79a5d1c218ba - - 4 files changed: 30 inserted, 24 deleted

@@ -0,0 +1,6
1 + class ChangeTestcaseSize < ActiveRecord::Migration
2 + def change
3 + change_column :testcases, :input, :text, :limit => 4294967295
4 + change_column :testcases, :sol, :text, :limit => 4294967295
5 + end
6 + end
@@ -1,31 +1,31
1 class HeartbeatController < ApplicationController
1 class HeartbeatController < ApplicationController
2 before_filter :admin_authorization, :only => ['index']
2 before_filter :admin_authorization, :only => ['index']
3
3
4 def edit
4 def edit
5 - @user = User.find_by_login(params[:id])
5 + #@user = User.find_by_login(params[:id])
6 - unless @user
6 + #unless @user
7 - render text: "LOGIN_NOT_FOUND"
7 + # render text: "LOGIN_NOT_FOUND"
8 - return
8 + # return
9 - end
9 + #end
10
10
11 #hb = HeartBeat.where(user_id: @user.id, ip_address: request.remote_ip).first
11 #hb = HeartBeat.where(user_id: @user.id, ip_address: request.remote_ip).first
12 #puts "status = #{params[:status]}"
12 #puts "status = #{params[:status]}"
13 #if hb
13 #if hb
14 # if params[:status]
14 # if params[:status]
15 # hb.status = params[:status]
15 # hb.status = params[:status]
16 # hb.save
16 # hb.save
17 # end
17 # end
18 # hb.touch
18 # hb.touch
19 #else
19 #else
20 # HeartBeat.creae(user_id: @user.id, ip_address: request.remote_ip)
20 # HeartBeat.creae(user_id: @user.id, ip_address: request.remote_ip)
21 #end
21 #end
22 - HeartBeat.create(user_id: @user.id, ip_address: request.remote_ip, status: params[:status])
22 + #HeartBeat.create(user_id: @user.id, ip_address: request.remote_ip, status: params[:status])
23
23
24 render text: (GraderConfiguration['right.heartbeat_response'] || 'OK')
24 render text: (GraderConfiguration['right.heartbeat_response'] || 'OK')
25 end
25 end
26
26
27 def index
27 def index
28 @hb = HeartBeat.where("updated_at >= ?",Time.zone.now-2.hours).includes(:user).order(:user_id).all
28 @hb = HeartBeat.where("updated_at >= ?",Time.zone.now-2.hours).includes(:user).order(:user_id).all
29 @num = HeartBeat.where("updated_at >= ?",Time.zone.now-5.minutes).count(:user_id,distinct: true)
29 @num = HeartBeat.where("updated_at >= ?",Time.zone.now-5.minutes).count(:user_id,distinct: true)
30 end
30 end
31 end
31 end
@@ -7,49 +7,49
7 .col-md-12
7 .col-md-12
8 .alert.alert-info
8 .alert.alert-info
9 Write your code in the following box, choose language, and click submit button when finished
9 Write your code in the following box, choose language, and click submit button when finished
10 .row
10 .row
11 .col-md-8
11 .col-md-8
12 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
12 %div#editor{style: 'height: 500px; border-radius: 7px; font-size: 14px;'}
13 .col-md-4
13 .col-md-4
14 = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do
14 = form_tag({controller: :main, :action => 'submit'}, :multipart => true, class: 'form') do
15
15
16 = hidden_field_tag 'editor_text', @source
16 = hidden_field_tag 'editor_text', @source
17 = hidden_field_tag 'submission[problem_id]', @problem.id
17 = hidden_field_tag 'submission[problem_id]', @problem.id
18 .form-group
18 .form-group
19 = label_tag "Task:"
19 = label_tag "Task:"
20 = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
20 = text_field_tag 'asdf', "#{@problem.long_name}", class: 'form-control', disabled: true
21
21
22 .form-group
22 .form-group
23 = label_tag 'Language'
23 = label_tag 'Language'
24 = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
24 = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
25 .form-group
25 .form-group
26 = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit',
26 = submit_tag 'Submit', class: 'btn btn-success', id: 'live_submit',
27 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
27 data: {confirm: "Submitting this source code for task #{@problem.long_name}?"}
28 .panel.panel-info
28 .panel.panel-info
29 .panel-heading
29 .panel-heading
30 Latest Submission Status
30 Latest Submission Status
31 - = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true
31 + = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true if @submission
32 .panel-body
32 .panel-body
33 - if @submission
33 - if @submission
34 = render :partial => 'submission_short',
34 = render :partial => 'submission_short',
35 :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
35 :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
36 .row
36 .row
37 .col-md-12
37 .col-md-12
38 %h2 Console
38 %h2 Console
39 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
39 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
40
40
41 :javascript
41 :javascript
42 $(document).ready(function() {
42 $(document).ready(function() {
43 e = ace.edit("editor")
43 e = ace.edit("editor")
44 e.setValue($("#text_haha").val());
44 e.setValue($("#text_haha").val());
45 e.gotoLine(1);
45 e.gotoLine(1);
46 $("#language_id").trigger('change');
46 $("#language_id").trigger('change');
47 brython();
47 brython();
48 });
48 });
49
49
50
50
51 %script#__main__{type:'text/python3'}
51 %script#__main__{type:'text/python3'}
52 :plain
52 :plain
53 import sys
53 import sys
54 import traceback
54 import traceback
55
55
@@ -1,280 +1,280
1 # encoding: UTF-8
1 # encoding: UTF-8
2 # This file is auto-generated from the current state of the database. Instead
2 # This file is auto-generated from the current state of the database. Instead
3 # of editing this file, please use the migrations feature of Active Record to
3 # of editing this file, please use the migrations feature of Active Record to
4 # incrementally modify your database, and then regenerate this schema definition.
4 # incrementally modify your database, and then regenerate this schema definition.
5 #
5 #
6 # Note that this schema.rb definition is the authoritative source for your
6 # Note that this schema.rb definition is the authoritative source for your
7 # database schema. If you need to create the application database on another
7 # database schema. If you need to create the application database on another
8 # system, you should be using db:schema:load, not running all the migrations
8 # system, you should be using db:schema:load, not running all the migrations
9 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9 # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10 # you'll amass, the slower it'll run and the greater likelihood for issues).
10 # you'll amass, the slower it'll run and the greater likelihood for issues).
11 #
11 #
12 # It's strongly recommended that you check this file into your version control system.
12 # It's strongly recommended that you check this file into your version control system.
13
13
14 - ActiveRecord::Schema.define(version: 20161031063337) do
14 + ActiveRecord::Schema.define(version: 20170123162543) do
15
15
16 create_table "announcements", force: :cascade do |t|
16 create_table "announcements", force: :cascade do |t|
17 t.string "author", limit: 255
17 t.string "author", limit: 255
18 - t.text "body", limit: 65535
18 + t.text "body", limit: 16777215
19 t.boolean "published"
19 t.boolean "published"
20 t.datetime "created_at", null: false
20 t.datetime "created_at", null: false
21 t.datetime "updated_at", null: false
21 t.datetime "updated_at", null: false
22 t.boolean "frontpage", default: false
22 t.boolean "frontpage", default: false
23 t.boolean "contest_only", default: false
23 t.boolean "contest_only", default: false
24 t.string "title", limit: 255
24 t.string "title", limit: 255
25 t.string "notes", limit: 255
25 t.string "notes", limit: 255
26 end
26 end
27
27
28 create_table "contests", force: :cascade do |t|
28 create_table "contests", force: :cascade do |t|
29 t.string "title", limit: 255
29 t.string "title", limit: 255
30 t.boolean "enabled"
30 t.boolean "enabled"
31 t.datetime "created_at", null: false
31 t.datetime "created_at", null: false
32 t.datetime "updated_at", null: false
32 t.datetime "updated_at", null: false
33 t.string "name", limit: 255
33 t.string "name", limit: 255
34 end
34 end
35
35
36 create_table "contests_problems", id: false, force: :cascade do |t|
36 create_table "contests_problems", id: false, force: :cascade do |t|
37 t.integer "contest_id", limit: 4
37 t.integer "contest_id", limit: 4
38 t.integer "problem_id", limit: 4
38 t.integer "problem_id", limit: 4
39 end
39 end
40
40
41 create_table "contests_users", id: false, force: :cascade do |t|
41 create_table "contests_users", id: false, force: :cascade do |t|
42 t.integer "contest_id", limit: 4
42 t.integer "contest_id", limit: 4
43 t.integer "user_id", limit: 4
43 t.integer "user_id", limit: 4
44 end
44 end
45
45
46 create_table "countries", force: :cascade do |t|
46 create_table "countries", force: :cascade do |t|
47 t.string "name", limit: 255
47 t.string "name", limit: 255
48 t.datetime "created_at", null: false
48 t.datetime "created_at", null: false
49 t.datetime "updated_at", null: false
49 t.datetime "updated_at", null: false
50 end
50 end
51
51
52 create_table "descriptions", force: :cascade do |t|
52 create_table "descriptions", force: :cascade do |t|
53 - t.text "body", limit: 65535
53 + t.text "body", limit: 16777215
54 t.boolean "markdowned"
54 t.boolean "markdowned"
55 t.datetime "created_at", null: false
55 t.datetime "created_at", null: false
56 t.datetime "updated_at", null: false
56 t.datetime "updated_at", null: false
57 end
57 end
58
58
59 create_table "grader_configurations", force: :cascade do |t|
59 create_table "grader_configurations", force: :cascade do |t|
60 t.string "key", limit: 255
60 t.string "key", limit: 255
61 t.string "value_type", limit: 255
61 t.string "value_type", limit: 255
62 t.string "value", limit: 255
62 t.string "value", limit: 255
63 t.datetime "created_at", null: false
63 t.datetime "created_at", null: false
64 t.datetime "updated_at", null: false
64 t.datetime "updated_at", null: false
65 - t.text "description", limit: 65535
65 + t.text "description", limit: 16777215
66 end
66 end
67
67
68 create_table "grader_processes", force: :cascade do |t|
68 create_table "grader_processes", force: :cascade do |t|
69 t.string "host", limit: 255
69 t.string "host", limit: 255
70 t.integer "pid", limit: 4
70 t.integer "pid", limit: 4
71 t.string "mode", limit: 255
71 t.string "mode", limit: 255
72 t.boolean "active"
72 t.boolean "active"
73 t.datetime "created_at", null: false
73 t.datetime "created_at", null: false
74 t.datetime "updated_at", null: false
74 t.datetime "updated_at", null: false
75 t.integer "task_id", limit: 4
75 t.integer "task_id", limit: 4
76 t.string "task_type", limit: 255
76 t.string "task_type", limit: 255
77 t.boolean "terminated"
77 t.boolean "terminated"
78 end
78 end
79
79
80 add_index "grader_processes", ["host", "pid"], name: "index_grader_processes_on_ip_and_pid", using: :btree
80 add_index "grader_processes", ["host", "pid"], name: "index_grader_processes_on_ip_and_pid", using: :btree
81
81
82 create_table "heart_beats", force: :cascade do |t|
82 create_table "heart_beats", force: :cascade do |t|
83 t.integer "user_id", limit: 4
83 t.integer "user_id", limit: 4
84 t.string "ip_address", limit: 255
84 t.string "ip_address", limit: 255
85 t.datetime "created_at", null: false
85 t.datetime "created_at", null: false
86 t.datetime "updated_at", null: false
86 t.datetime "updated_at", null: false
87 t.string "status", limit: 255
87 t.string "status", limit: 255
88 end
88 end
89
89
90 add_index "heart_beats", ["updated_at"], name: "index_heart_beats_on_updated_at", using: :btree
90 add_index "heart_beats", ["updated_at"], name: "index_heart_beats_on_updated_at", using: :btree
91
91
92 create_table "languages", force: :cascade do |t|
92 create_table "languages", force: :cascade do |t|
93 t.string "name", limit: 10
93 t.string "name", limit: 10
94 t.string "pretty_name", limit: 255
94 t.string "pretty_name", limit: 255
95 t.string "ext", limit: 10
95 t.string "ext", limit: 10
96 t.string "common_ext", limit: 255
96 t.string "common_ext", limit: 255
97 end
97 end
98
98
99 create_table "logins", force: :cascade do |t|
99 create_table "logins", force: :cascade do |t|
100 t.integer "user_id", limit: 4
100 t.integer "user_id", limit: 4
101 t.string "ip_address", limit: 255
101 t.string "ip_address", limit: 255
102 t.datetime "created_at", null: false
102 t.datetime "created_at", null: false
103 t.datetime "updated_at", null: false
103 t.datetime "updated_at", null: false
104 end
104 end
105
105
106 create_table "messages", force: :cascade do |t|
106 create_table "messages", force: :cascade do |t|
107 t.integer "sender_id", limit: 4
107 t.integer "sender_id", limit: 4
108 t.integer "receiver_id", limit: 4
108 t.integer "receiver_id", limit: 4
109 t.integer "replying_message_id", limit: 4
109 t.integer "replying_message_id", limit: 4
110 - t.text "body", limit: 65535
110 + t.text "body", limit: 16777215
111 t.boolean "replied"
111 t.boolean "replied"
112 t.datetime "created_at", null: false
112 t.datetime "created_at", null: false
113 t.datetime "updated_at", null: false
113 t.datetime "updated_at", null: false
114 end
114 end
115
115
116 create_table "problems", force: :cascade do |t|
116 create_table "problems", force: :cascade do |t|
117 t.string "name", limit: 30
117 t.string "name", limit: 30
118 t.string "full_name", limit: 255
118 t.string "full_name", limit: 255
119 t.integer "full_score", limit: 4
119 t.integer "full_score", limit: 4
120 t.date "date_added"
120 t.date "date_added"
121 t.boolean "available"
121 t.boolean "available"
122 t.string "url", limit: 255
122 t.string "url", limit: 255
123 t.integer "description_id", limit: 4
123 t.integer "description_id", limit: 4
124 t.boolean "test_allowed"
124 t.boolean "test_allowed"
125 t.boolean "output_only"
125 t.boolean "output_only"
126 t.string "description_filename", limit: 255
126 t.string "description_filename", limit: 255
127 end
127 end
128
128
129 create_table "rights", force: :cascade do |t|
129 create_table "rights", force: :cascade do |t|
130 t.string "name", limit: 255
130 t.string "name", limit: 255
131 t.string "controller", limit: 255
131 t.string "controller", limit: 255
132 t.string "action", limit: 255
132 t.string "action", limit: 255
133 end
133 end
134
134
135 create_table "rights_roles", id: false, force: :cascade do |t|
135 create_table "rights_roles", id: false, force: :cascade do |t|
136 t.integer "right_id", limit: 4
136 t.integer "right_id", limit: 4
137 t.integer "role_id", limit: 4
137 t.integer "role_id", limit: 4
138 end
138 end
139
139
140 add_index "rights_roles", ["role_id"], name: "index_rights_roles_on_role_id", using: :btree
140 add_index "rights_roles", ["role_id"], name: "index_rights_roles_on_role_id", using: :btree
141
141
142 create_table "roles", force: :cascade do |t|
142 create_table "roles", force: :cascade do |t|
143 t.string "name", limit: 255
143 t.string "name", limit: 255
144 end
144 end
145
145
146 create_table "roles_users", id: false, force: :cascade do |t|
146 create_table "roles_users", id: false, force: :cascade do |t|
147 t.integer "role_id", limit: 4
147 t.integer "role_id", limit: 4
148 t.integer "user_id", limit: 4
148 t.integer "user_id", limit: 4
149 end
149 end
150
150
151 add_index "roles_users", ["user_id"], name: "index_roles_users_on_user_id", using: :btree
151 add_index "roles_users", ["user_id"], name: "index_roles_users_on_user_id", using: :btree
152
152
153 create_table "sessions", force: :cascade do |t|
153 create_table "sessions", force: :cascade do |t|
154 t.string "session_id", limit: 255
154 t.string "session_id", limit: 255
155 - t.text "data", limit: 65535
155 + t.text "data", limit: 16777215
156 t.datetime "updated_at"
156 t.datetime "updated_at"
157 end
157 end
158
158
159 add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", using: :btree
159 add_index "sessions", ["session_id"], name: "index_sessions_on_session_id", using: :btree
160 add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
160 add_index "sessions", ["updated_at"], name: "index_sessions_on_updated_at", using: :btree
161
161
162 create_table "sites", force: :cascade do |t|
162 create_table "sites", force: :cascade do |t|
163 t.string "name", limit: 255
163 t.string "name", limit: 255
164 t.boolean "started"
164 t.boolean "started"
165 t.datetime "start_time"
165 t.datetime "start_time"
166 t.datetime "created_at", null: false
166 t.datetime "created_at", null: false
167 t.datetime "updated_at", null: false
167 t.datetime "updated_at", null: false
168 t.integer "country_id", limit: 4
168 t.integer "country_id", limit: 4
169 t.string "password", limit: 255
169 t.string "password", limit: 255
170 end
170 end
171
171
172 create_table "submission_view_logs", force: :cascade do |t|
172 create_table "submission_view_logs", force: :cascade do |t|
173 t.integer "user_id", limit: 4
173 t.integer "user_id", limit: 4
174 t.integer "submission_id", limit: 4
174 t.integer "submission_id", limit: 4
175 t.datetime "created_at", null: false
175 t.datetime "created_at", null: false
176 t.datetime "updated_at", null: false
176 t.datetime "updated_at", null: false
177 end
177 end
178
178
179 create_table "submissions", force: :cascade do |t|
179 create_table "submissions", force: :cascade do |t|
180 t.integer "user_id", limit: 4
180 t.integer "user_id", limit: 4
181 t.integer "problem_id", limit: 4
181 t.integer "problem_id", limit: 4
182 t.integer "language_id", limit: 4
182 t.integer "language_id", limit: 4
183 - t.text "source", limit: 65535
183 + t.text "source", limit: 16777215
184 t.binary "binary", limit: 65535
184 t.binary "binary", limit: 65535
185 t.datetime "submitted_at"
185 t.datetime "submitted_at"
186 t.datetime "compiled_at"
186 t.datetime "compiled_at"
187 - t.text "compiler_message", limit: 65535
187 + t.text "compiler_message", limit: 16777215
188 t.datetime "graded_at"
188 t.datetime "graded_at"
189 t.integer "points", limit: 4
189 t.integer "points", limit: 4
190 - t.text "grader_comment", limit: 65535
190 + t.text "grader_comment", limit: 16777215
191 t.integer "number", limit: 4
191 t.integer "number", limit: 4
192 t.string "source_filename", limit: 255
192 t.string "source_filename", limit: 255
193 t.float "max_runtime", limit: 24
193 t.float "max_runtime", limit: 24
194 t.integer "peak_memory", limit: 4
194 t.integer "peak_memory", limit: 4
195 t.integer "effective_code_length", limit: 4
195 t.integer "effective_code_length", limit: 4
196 t.string "ip_address", limit: 255
196 t.string "ip_address", limit: 255
197 end
197 end
198
198
199 add_index "submissions", ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true, using: :btree
199 add_index "submissions", ["user_id", "problem_id", "number"], name: "index_submissions_on_user_id_and_problem_id_and_number", unique: true, using: :btree
200 add_index "submissions", ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id", using: :btree
200 add_index "submissions", ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id", using: :btree
201
201
202 create_table "tasks", force: :cascade do |t|
202 create_table "tasks", force: :cascade do |t|
203 t.integer "submission_id", limit: 4
203 t.integer "submission_id", limit: 4
204 t.datetime "created_at"
204 t.datetime "created_at"
205 t.integer "status", limit: 4
205 t.integer "status", limit: 4
206 t.datetime "updated_at"
206 t.datetime "updated_at"
207 end
207 end
208
208
209 create_table "test_pairs", force: :cascade do |t|
209 create_table "test_pairs", force: :cascade do |t|
210 t.integer "problem_id", limit: 4
210 t.integer "problem_id", limit: 4
211 - t.text "input", limit: 16777215
211 + t.text "input", limit: 4294967295
212 - t.text "solution", limit: 16777215
212 + t.text "solution", limit: 4294967295
213 t.datetime "created_at", null: false
213 t.datetime "created_at", null: false
214 t.datetime "updated_at", null: false
214 t.datetime "updated_at", null: false
215 end
215 end
216
216
217 create_table "test_requests", force: :cascade do |t|
217 create_table "test_requests", force: :cascade do |t|
218 t.integer "user_id", limit: 4
218 t.integer "user_id", limit: 4
219 t.integer "problem_id", limit: 4
219 t.integer "problem_id", limit: 4
220 t.integer "submission_id", limit: 4
220 t.integer "submission_id", limit: 4
221 t.string "input_file_name", limit: 255
221 t.string "input_file_name", limit: 255
222 t.string "output_file_name", limit: 255
222 t.string "output_file_name", limit: 255
223 t.string "running_stat", limit: 255
223 t.string "running_stat", limit: 255
224 t.integer "status", limit: 4
224 t.integer "status", limit: 4
225 t.datetime "updated_at", null: false
225 t.datetime "updated_at", null: false
226 t.datetime "submitted_at"
226 t.datetime "submitted_at"
227 t.datetime "compiled_at"
227 t.datetime "compiled_at"
228 - t.text "compiler_message", limit: 65535
228 + t.text "compiler_message", limit: 16777215
229 t.datetime "graded_at"
229 t.datetime "graded_at"
230 t.string "grader_comment", limit: 255
230 t.string "grader_comment", limit: 255
231 t.datetime "created_at", null: false
231 t.datetime "created_at", null: false
232 t.float "running_time", limit: 24
232 t.float "running_time", limit: 24
233 t.string "exit_status", limit: 255
233 t.string "exit_status", limit: 255
234 t.integer "memory_usage", limit: 4
234 t.integer "memory_usage", limit: 4
235 end
235 end
236
236
237 add_index "test_requests", ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id", using: :btree
237 add_index "test_requests", ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id", using: :btree
238
238
239 create_table "testcases", force: :cascade do |t|
239 create_table "testcases", force: :cascade do |t|
240 t.integer "problem_id", limit: 4
240 t.integer "problem_id", limit: 4
241 t.integer "num", limit: 4
241 t.integer "num", limit: 4
242 t.integer "group", limit: 4
242 t.integer "group", limit: 4
243 t.integer "score", limit: 4
243 t.integer "score", limit: 4
244 - t.text "input", limit: 65535
244 + t.text "input", limit: 4294967295
245 - t.text "sol", limit: 65535
245 + t.text "sol", limit: 4294967295
246 - t.datetime "created_at"
246 + t.datetime "created_at", null: false
247 - t.datetime "updated_at"
247 + t.datetime "updated_at", null: false
248 end
248 end
249
249
250 add_index "testcases", ["problem_id"], name: "index_testcases_on_problem_id", using: :btree
250 add_index "testcases", ["problem_id"], name: "index_testcases_on_problem_id", using: :btree
251
251
252 create_table "user_contest_stats", force: :cascade do |t|
252 create_table "user_contest_stats", force: :cascade do |t|
253 t.integer "user_id", limit: 4
253 t.integer "user_id", limit: 4
254 t.datetime "started_at"
254 t.datetime "started_at"
255 t.datetime "created_at", null: false
255 t.datetime "created_at", null: false
256 t.datetime "updated_at", null: false
256 t.datetime "updated_at", null: false
257 t.boolean "forced_logout"
257 t.boolean "forced_logout"
258 end
258 end
259
259
260 create_table "users", force: :cascade do |t|
260 create_table "users", force: :cascade do |t|
261 t.string "login", limit: 50
261 t.string "login", limit: 50
262 t.string "full_name", limit: 255
262 t.string "full_name", limit: 255
263 t.string "hashed_password", limit: 255
263 t.string "hashed_password", limit: 255
264 t.string "salt", limit: 5
264 t.string "salt", limit: 5
265 t.string "alias", limit: 255
265 t.string "alias", limit: 255
266 t.string "email", limit: 255
266 t.string "email", limit: 255
267 t.integer "site_id", limit: 4
267 t.integer "site_id", limit: 4
268 t.integer "country_id", limit: 4
268 t.integer "country_id", limit: 4
269 t.boolean "activated", default: false
269 t.boolean "activated", default: false
270 t.datetime "created_at"
270 t.datetime "created_at"
271 t.datetime "updated_at"
271 t.datetime "updated_at"
272 + t.string "section", limit: 255
272 t.boolean "enabled", default: true
273 t.boolean "enabled", default: true
273 t.string "remark", limit: 255
274 t.string "remark", limit: 255
274 t.string "last_ip", limit: 255
275 t.string "last_ip", limit: 255
275 - t.string "section", limit: 255
276 end
276 end
277
277
278 add_index "users", ["login"], name: "index_users_on_login", unique: true, using: :btree
278 add_index "users", ["login"], name: "index_users_on_login", unique: true, using: :btree
279
279
280 end
280 end
You need to be logged in to leave comments. Login now