Compare commits

...

61 Commits

Author SHA1 Message Date
jasder 7520fa03c2 Merge branch 'develop' into dev_educoder 2021-03-28 20:05:52 +08:00
jasder f282d971e3 FIX get branches api bug and project menu list bug 2021-03-28 19:56:11 +08:00
jasder 56f01801ae Merge branch 'dev_educoder' into educoder_server 2021-03-28 19:45:24 +08:00
jasder 45e70367d5 Merge branch 'develop' into dev_educoder 2021-03-28 19:45:07 +08:00
jasder a0b376e70a Merge branch 'dev_educoder' into educoder_server 2021-03-27 23:55:11 +08:00
jasder d62d757c42 Merge branch 'develop' into dev_educoder 2021-03-27 23:54:55 +08:00
jasder 033c2607e2 Merge branch 'dev_educoder' into educoder_server 2021-03-25 21:30:46 +08:00
vilet.yy 0d6abdf7d0 fix: setting common arr 2021-03-25 20:59:24 +08:00
jasder 22c68f4c70 FIX bug 2021-03-25 20:29:36 +08:00
jasder fcd86fb01b Merge branch 'dev_educoder' into educoder_server 2021-03-25 19:58:28 +08:00
jasder faecb99136 Merge branch 'develop' into dev_educoder 2021-03-25 19:58:03 +08:00
jasder 15a002f601 Update defalut laboratory setting url 2021-03-23 16:36:35 +08:00
jasder 206d7bc159 Merge branch 'trustie_server' into dev_educoder 2021-03-23 15:58:47 +08:00
jasder 0f67944911 FIX code bug 2021-03-23 15:58:12 +08:00
jasder 5e0006a830 Merge branch 'trustie_server' into dev_educoder 2021-03-23 15:47:13 +08:00
jasder 8b656fd409 FIX bug 2021-03-23 15:47:01 +08:00
jasder 3abf993463 Merge branch 'trustie_server' into dev_educoder 2021-03-23 15:43:08 +08:00
jasder 815b364428 ADD common url with setting api 2021-03-23 15:42:56 +08:00
jasder efbf6d627d FIX merge 2021-03-23 11:43:24 +08:00
jasder 18ae3853d7 FIX update setting api 2021-03-23 11:42:22 +08:00
jasder 6836907146 FIX code bug 2021-03-23 10:26:20 +08:00
jasder 6c4058cde5 Merge branch 'educoder_server' into dev_educoder 2021-03-23 10:22:12 +08:00
jasder 5a2e17abe2 FIX project and project_info aasion 2021-03-23 09:34:20 +08:00
jasder 9a8b89bcd8 FIX 解决实训作业关联项目的问题 2021-03-23 09:28:40 +08:00
jasder 4856da1607 Merge branch 'dev_educoder' into educoder_server 2021-03-22 21:02:56 +08:00
jasder 883a5f7e38 Merge branch 'develop' into dev_educoder 2021-03-22 21:02:35 +08:00
jasder ce18cc380a Merge branch 'develop' into trustie_server 2021-03-22 21:02:17 +08:00
jasder aa23762b2f FIX update setting api for nav bar url 2021-03-22 18:02:12 +08:00
jasder 1658c1b923 Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-22 17:58:29 +08:00
jasder 74f6a54d29 FIX update setting api for nav bar url 2021-03-22 17:58:15 +08:00
vilet.yy adb315521e fix 2021-03-22 14:20:03 +08:00
vilet.yy 01cad866b8 fix: laboratory 500
fix

fix
2021-03-22 14:17:03 +08:00
jasder 3447b17cdf FIX change password bug 2021-03-22 14:13:25 +08:00
jasder 0079255e98 Merge branch 'develop' into dev_educoder 2021-03-21 11:25:57 +08:00
vilet.yy 490bff5ded fix: form error 2021-03-19 16:18:09 +08:00
vilet.yy 008b8ac709 Merge branch 'develop' into dev_educoder 2021-03-19 15:07:34 +08:00
vilet.yy d0532a8f70 Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-19 11:54:10 +08:00
vilet.yy a8c4cde350 add: user info sync_pwd 2021-03-19 11:50:35 +08:00
jasder 5de5974102 FIX remove email for gitea_register api 2021-03-19 10:54:56 +08:00
jasder 3d3e778078 Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-19 10:31:12 +08:00
jasder f5ea8dc4a2 FIX change password api 2021-03-19 10:31:06 +08:00
vilet.yy c4b942a5f2 fix 2021-03-18 18:22:07 +08:00
jasder 13391b189a FIX conflict 2021-03-18 18:17:41 +08:00
jasder b116a72ce7 Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-18 18:15:22 +08:00
jasder f01aec94d6 FIX 2021-03-18 18:15:08 +08:00
jasder cc97f85a1e ADD has_ansenty 2021-03-18 18:11:06 +08:00
vilet.yy 133995080a add: user info email 2021-03-18 18:11:06 +08:00
vilet.yy 27304c35dc add: user info mark 2021-03-18 18:11:06 +08:00
vilet.yy d6bf85ef73 add: user gitea register 2021-03-18 18:11:06 +08:00
jasder be9c01bf1d ADD educoder api 2021-03-18 18:11:06 +08:00
jasder edeaaa5db7 FIX sync user for educoder 2021-03-18 18:11:06 +08:00
jasder 0e41b6cc9b FIX 整理表结构 2021-03-18 18:11:03 +08:00
jasder 5f3946f187 ADD has_ansenty 2021-03-18 18:07:56 +08:00
jasder b7be00f3ec Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-18 17:28:20 +08:00
jasder 9b21e29426 ADD educoder api 2021-03-18 17:27:18 +08:00
vilet.yy f37fccfdb3 add: user info email 2021-03-18 17:22:59 +08:00
vilet.yy 810d2dbac6 add: user info mark 2021-03-18 16:00:05 +08:00
vilet.yy 6af97d865f Merge branch 'dev_educoder' of https://git.trustie.net/jasder/forgeplus into dev_educoder 2021-03-18 15:28:09 +08:00
vilet.yy efba4b2b4f add: user gitea register 2021-03-18 15:28:03 +08:00
jasder aaf1f43cc2 FIX sync user for educoder 2021-03-18 13:46:19 +08:00
jasder 823c99bd71 FIX 整理表结构 2021-03-15 16:02:59 +08:00
72 changed files with 891 additions and 279 deletions

View File

@ -6,6 +6,27 @@ class AccountsController < ApplicationController
render json: session render json: session
end end
# 为了同步平台上未注册gitea的用户
def gitea_register
Users::SyncGiteaForm.new(sync_gitea_params).validate!
user = User.find_by(login: sync_gitea_params[:login])
return render_error("该用户已同步协作平台") if user.gitea_token.present? && user.gitea_uid.present?
interactor = Gitea::RegisterInteractor.call({username: sync_gitea_params[:login], email: sync_gitea_params[:email], password: sync_gitea_params[:password]})
if interactor.success?
gitea_user = interactor.result
result = Gitea::User::GenerateTokenService.call(sync_gitea_params[:login], sync_gitea_params[:password])
user.gitea_token = result['sha1']
user.gitea_uid = gitea_user[:body]['id']
user.save!
render_ok
else
render_error(interactor.error)
end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(-1, e.message)
end
# 其他平台同步注册的用户 # 其他平台同步注册的用户
def remote_register def remote_register
username = params[:username]&.gsub(/\s+/, "") username = params[:username]&.gsub(/\s+/, "")
@ -341,6 +362,10 @@ class AccountsController < ApplicationController
{ login: pre + code, email: email, phone: phone } { login: pre + code, email: email, phone: phone }
end end
def sync_gitea_params
params.permit(:login, :email, :password)
end
def user_params def user_params
params.require(:user).permit(:login, :email, :phone) params.require(:user).permit(:login, :email, :phone)
end end

View File

@ -35,15 +35,15 @@ module LaboratoryHelper
# my_projects: "/users/#{current_user.try(:login)}/projects", # my_projects: "/users/#{current_user.try(:login)}/projects",
# my_projects: "https://www.trustie.net/users/#{current_user.try(:login)}/user_projectlist", # my_projects: "https://www.trustie.net/users/#{current_user.try(:login)}/user_projectlist",
{ {
new_syllabuses: "https://www.trustie.net/syllabuses/new", new_syllabuses: "https://forge.educoder.net/syllabuses/new",
new_course: "https://www.trustie.net/courses/new", new_course: "https://forge.educoder.net/courses/new",
edit_account: "https://www.trustie.net/my/account", edit_account: "https://forge.educoder.net/my/account",
my_courses: "https://www.trustie.net/users/#{current_user.try(:login)}/user_courselist", my_courses: "https://forge.educoder.net/users/#{current_user.try(:login)}/user_courselist",
my_projects: "/users/#{current_user.try(:login)}/projects", my_projects: "/users/#{current_user.try(:login)}/projects",
my_organ: "https://www.trustie.net/users/#{current_user.try(:login)}/user_organizations", my_organ: "https://forge.educoder.net/users/#{current_user.try(:login)}/user_organizations",
default_url: "https://www.trustie.net/", default_url: "https://www.educoder.net/",
tiding_url: "https://www.trustie.net/users/#{current_user.try(:login)}/user_messages", tiding_url: "https://www.educoder.net/users/#{current_user.try(:login)}/user_tidings",
register_url: "https://www.trustie.net/login?login=false" register_url: "https://www.educoder.net/user/register"
} }
end end
end end

View File

@ -5,6 +5,14 @@ class ForksController < ApplicationController
def create def create
@new_project = Projects::ForkService.new(current_user, @project, params[:organization]).call @new_project = Projects::ForkService.new(current_user, @project, params[:organization]).call
# TODO: fix Educoder shixun
if @new_project.persisted?
ProjectScore.create(:project_id => @new_project.id, :score => 0) if @new_project.project_score.nil?
project_info = ProjectInfo.new(:user_id => current_user.id, :project_id => @new_project.id)
@project.project_infos << project_info
end
end end
private private

View File

@ -44,6 +44,13 @@ class ProjectsController < ApplicationController
Projects::CreateForm.new(project_params).validate! Projects::CreateForm.new(project_params).validate!
@project = Projects::CreateService.new(current_user, project_params).call @project = Projects::CreateService.new(current_user, project_params).call
# TODO: fix Educoder shixun
if @project.persisted?
ProjectScore.create(:project_id => @project.id, :score => 0) if @project.project_score.nil?
project_info = ProjectInfo.new(:user_id => current_user.id, :project_id => @project.id)
@project.project_infos << project_info
end
end end
rescue Exception => e rescue Exception => e
uid_logger_error(e.message) uid_logger_error(e.message)

View File

@ -1,6 +1,28 @@
class SettingsController < ApplicationController class SettingsController < ApplicationController
def show def show
@old_projects_url = nil @old_projects_url = nil
@old_projects_url = "https://www.trustie.net/users/#{current_user.try(:login)}/projects" if User.current.logged? @old_projects_url = "https://www.trustie.net/users/#{current_user.try(:login)}/projects" if User.current.logged?
@add = Site.add.select(:id, :name, :url, :key)
@personal = []
if User.current.logged?
Site.personal.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site|
hash = {}
site.each {|k, v|
hash.merge!("#{k}": v.to_s.include?("current_user") ? v.split('current_user').join(current_user&.login) : v)
}
@personal << hash
end
end
@common = []
Site.common.select(:id, :name, :url, :key).to_a.map(&:serializable_hash).each do |site|
next if site["url"].to_s.include?("current_user") && !User.current.logged?
hash = {}
site.each {|k, v|
hash.merge!("#{k}": v.to_s.include?("current_user") ? v.split('current_user').join(current_user&.login) : v)
}
@common << hash
end
end end
end end

View File

@ -4,7 +4,7 @@ class UsersController < ApplicationController
before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users]
before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users]
before_action :require_login, only: %i[me list] before_action :require_login, only: %i[me list change_password change_email]
before_action :connect_to_ci_db, only: [:get_user_info] before_action :connect_to_ci_db, only: [:get_user_info]
skip_before_action :check_sign, only: [:attachment_show] skip_before_action :check_sign, only: [:attachment_show]
@ -233,6 +233,63 @@ class UsersController < ApplicationController
render_ok render_ok
end end
# TODO: For Educoder
def change_password
user = User.find_by_login params[:login]
return render_error("用户 #{params[:login]} 不存在.") unless user === current_user
form_params= {
login: params[:login],
email: user&.mail,
password: params[:password],
user: user
}
Gitea::User::ChangePasswordForm.new(form_params).validate!
sync_params = {
email: user&.mail,
password: params[:password]
}
if sync_params.present?
interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params)
if interactor.success?
user.update!(password: params[:password], is_sync_pwd: true)
render_ok
else
render_error(interactor.error)
end
end
end
# TODO: For Educoder
def change_email
user = User.find_by_login params[:login]
return render_error("用户 #{rq_params[:login]} 不存在.") unless user === current_user
form_params= {
login: params[:login],
email: user&.mail,
user: user
}
Gitea::User::ChangeEmailForm.new(form_params).validate!
sync_params = {
email: params[:email]
}
if sync_params.present?
interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params)
if interactor.success?
user.update!(mail: params[:email])
render_ok
else
render_error(interactor.error)
end
end
end
private private
def load_user def load_user
@user = User.find_by_login(params[:id]) || User.find_by(id: params[:id]) @user = User.find_by_login(params[:id]) || User.find_by(id: params[:id])

View File

@ -0,0 +1,9 @@
class Gitea::User::ChangeEmailForm
include ActiveModel::Model
attr_accessor :user
attr_accessor :email, :login
validates :email, presence: true, format: { with: CustomRegexp::EMAIL }
validates :login, presence: true
end

View File

@ -0,0 +1,22 @@
class Gitea::User::ChangePasswordForm
include ActiveModel::Model
attr_accessor :user
attr_accessor :email, :login, :password
validates :email, presence: true, format: { with: CustomRegexp::EMAIL }
validates :login, presence: true
validates :password, presence: true
# validate :check_old_password
def check_old_password
return if user.check_password?(old_password.to_s)
errors.add(:old_password, :password_error)
end
# def check_user!
# user === current_user
# end
end

View File

@ -0,0 +1,18 @@
class Users::SyncGiteaForm
include ActiveModel::Model
attr_accessor :login, :password, :email, :user
validates :login, :password, :email, presence: true
validate :check_user, :check_password
def check_user
@user = User.find_by(login: login)
raise '用户不存在.' unless user.present?
end
def check_password
raise '用户密码错误.' unless user.check_password?(password)
end
end

View File

@ -17,7 +17,7 @@
# disk_directory :string(255) # disk_directory :string(255)
# attachtype :integer default("1") # attachtype :integer default("1")
# is_public :integer default("1") # is_public :integer default("1")
# copy_from :integer # copy_from :string(255)
# quotes :integer default("0") # quotes :integer default("0")
# is_publish :integer default("1") # is_publish :integer default("1")
# publish_time :datetime # publish_time :datetime
@ -26,15 +26,15 @@
# cloud_url :string(255) default("") # cloud_url :string(255) default("")
# course_second_category_id :integer default("0") # course_second_category_id :integer default("0")
# delay_publish :boolean default("0") # delay_publish :boolean default("0")
# link :string(255)
# clone_id :integer
# #
# Indexes # Indexes
# #
# index_attachments_on_author_id (author_id) # index_attachments_on_author_id (author_id)
# index_attachments_on_clone_id (clone_id)
# index_attachments_on_container_id_and_container_type (container_id,container_type) # index_attachments_on_container_id_and_container_type (container_id,container_type)
# index_attachments_on_course_second_category_id (course_second_category_id)
# index_attachments_on_created_on (created_on) # index_attachments_on_created_on (created_on)
# index_attachments_on_is_public (is_public)
# index_attachments_on_quotes (quotes)
# #
class Attachment < ApplicationRecord class Attachment < ApplicationRecord

View File

@ -1,3 +1,21 @@
# == Schema Information
#
# Table name: chart_rules
#
# id :integer not null, primary key
# rule_type :string(255)
# content :text(65535)
# created_at :datetime not null
# updated_at :datetime not null
# competition_id :integer
# competition_stage_id :integer
#
# Indexes
#
# index_chart_rules_on_competition_id (competition_id)
# index_chart_rules_on_competition_stage_id (competition_stage_id)
#
class ChartRule < ApplicationRecord class ChartRule < ApplicationRecord
validates :content, length: { maximum: 1000, too_long: "不能超过1000个字符" } validates :content, length: { maximum: 1000, too_long: "不能超过1000个字符" }

View File

@ -1,3 +1,22 @@
# == Schema Information
#
# Table name: stages
#
# id :integer not null
# subject_id :integer
# name :string(255)
# description :text(65535)
# user_id :integer
# position :integer
# created_at :datetime not null
# updated_at :datetime not null
# shixuns_count :integer default("0")
#
# Indexes
#
# index_stages_on_subject_id (subject_id)
#
class Ci::Stage < Ci::RemoteBase class Ci::Stage < Ci::RemoteBase
self.primary_key = 'stage_id' self.primary_key = 'stage_id'

View File

@ -39,13 +39,14 @@
# business :boolean default("0") # business :boolean default("0")
# profile_completed :boolean default("0") # profile_completed :boolean default("0")
# laboratory_id :integer # laboratory_id :integer
# platform :string(255) default("0")
# gitea_token :string(255)
# gitea_uid :integer
# is_shixun_marker :boolean default("0") # is_shixun_marker :boolean default("0")
# admin_visitable :boolean default("0")
# collaborator :boolean default("0")
# gitea_uid :integer
# is_sync_pwd :boolean default("1") # is_sync_pwd :boolean default("1")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# devops_step :integer default("0") # devops_step :integer default("0")
# gitea_token :string(255)
# #
# Indexes # Indexes
# #
@ -53,8 +54,9 @@
# index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_engineer (homepage_engineer)
# index_users_on_homepage_teacher (homepage_teacher) # index_users_on_homepage_teacher (homepage_teacher)
# index_users_on_laboratory_id (laboratory_id) # index_users_on_laboratory_id (laboratory_id)
# index_users_on_login (login) # index_users_on_login (login) UNIQUE
# index_users_on_mail (mail) # index_users_on_mail (mail) UNIQUE
# index_users_on_phone (phone) UNIQUE
# index_users_on_type (type) # index_users_on_type (type)
# #

View File

@ -1,3 +1,38 @@
# == Schema Information
#
# Table name: discusses
#
# id :integer not null, primary key
# user_id :integer
# dis_type :string(255)
# dis_id :integer
# content :text(65535)
# parent_id :integer
# root_id :integer
# praise_count :integer
# created_at :datetime not null
# updated_at :datetime not null
# challenge_id :integer
# reward :integer
# hidden :boolean default("0")
# last_reply_id :integer
# position :integer
# praises_count :integer default("0")
# sticky :boolean default("0")
# course_sticky :boolean default("0")
# course_hidden :boolean default("0")
# copy_message_id :integer
#
# Indexes
#
# index_discusses_on_challenge_id (challenge_id)
# index_discusses_on_copy_message_id (copy_message_id)
# index_discusses_on_course_hidden (course_hidden)
# index_discusses_on_course_sticky (course_sticky)
# index_discusses_on_dis_id_and_dis_type (dis_id,dis_type)
# index_discusses_on_user_id (user_id)
#
class Discuss < ApplicationRecord class Discuss < ApplicationRecord
default_scope { order(created_at: :desc) } default_scope { order(created_at: :desc) }

View File

@ -1,5 +1,24 @@
# == Schema Information
#
# Table name: forge_activities
#
# id :integer not null, primary key
# user_id :integer
# project_id :integer
# forge_act_id :integer
# forge_act_type :string(255)
# org_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# forge_act_index (project_id,forge_act_id,created_at,forge_act_type)
# index_forge_activities_on_forge_act_id (forge_act_id)
#
class ForgeActivity < ApplicationRecord class ForgeActivity < ApplicationRecord
belongs_to :user belongs_to :user
belongs_to :project belongs_to :project
belongs_to :forge_act, polymorphic: true belongs_to :forge_act, polymorphic: true
end end

View File

@ -1,3 +1,17 @@
# == Schema Information
#
# Table name: helps
#
# id :integer not null, primary key
# created_at :datetime not null
# updated_at :datetime not null
# about_us :text(65535)
# agreement :text(65535)
# status :text(65535)
# help_center :text(65535)
# join_us :text(65535)
#
class Help < ApplicationRecord class Help < ApplicationRecord
end end

View File

@ -10,6 +10,12 @@
# sync_course :boolean default("0") # sync_course :boolean default("0")
# sync_subject :boolean default("0") # sync_subject :boolean default("0")
# sync_shixun :boolean default("0") # sync_shixun :boolean default("0")
# is_local :boolean default("0")
#
# Indexes
#
# index_laboratories_on_identifier (identifier) UNIQUE
# index_laboratories_on_school_id (school_id)
# #
class Laboratory < ApplicationRecord class Laboratory < ApplicationRecord

View File

@ -6,6 +6,10 @@
# laboratory_id :integer # laboratory_id :integer
# config :text(65535) # config :text(65535)
# #
# Indexes
#
# index_laboratory_settings_on_laboratory_id (laboratory_id)
#
class LaboratorySetting < ApplicationRecord class LaboratorySetting < ApplicationRecord
belongs_to :laboratory belongs_to :laboratory

View File

@ -7,7 +7,6 @@
# content :text(65535) # content :text(65535)
# created_at :datetime not null # created_at :datetime not null
# updated_at :datetime not null # updated_at :datetime not null
# is_secret :boolean default("0")
# #
class License < ApplicationRecord class License < ApplicationRecord

View File

@ -1,3 +1,27 @@
# == Schema Information
#
# Table name: live_links
#
# id :integer not null, primary key
# course_id :integer
# user_id :integer
# url :string(255)
# description :text(65535)
# on_status :boolean default("0")
# created_at :datetime not null
# updated_at :datetime not null
# course_name :string(255)
# platform :string(255)
# live_time :datetime
# duration :integer
# position :integer
#
# Indexes
#
# index_live_links_on_course_id (course_id)
# index_live_links_on_user_id (user_id)
#
class LiveLink < ApplicationRecord class LiveLink < ApplicationRecord
# belongs_to :course # belongs_to :course
belongs_to :user belongs_to :user

View File

@ -11,7 +11,6 @@
# course_group_id :integer default("0") # course_group_id :integer default("0")
# is_collect :integer default("1") # is_collect :integer default("1")
# graduation_group_id :integer default("0") # graduation_group_id :integer default("0")
# is_apply_signature :boolean default("0")
# #
# Indexes # Indexes
# #

View File

@ -1,3 +1,18 @@
# == Schema Information
#
# Table name: message_details
#
# id :integer not null, primary key
# content :text(4294967295)
# message_id :integer
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_message_details_on_message_id (message_id)
#
class MessageDetail < ApplicationRecord class MessageDetail < ApplicationRecord
# belongs_to :message, :touch => true # belongs_to :message, :touch => true
validates :content, length: { maximum: 10000, too_long: "内容不能超过10000个字符" } validates :content, length: { maximum: 10000, too_long: "内容不能超过10000个字符" }

View File

@ -39,13 +39,14 @@
# business :boolean default("0") # business :boolean default("0")
# profile_completed :boolean default("0") # profile_completed :boolean default("0")
# laboratory_id :integer # laboratory_id :integer
# platform :string(255) default("0")
# gitea_token :string(255)
# gitea_uid :integer
# is_shixun_marker :boolean default("0") # is_shixun_marker :boolean default("0")
# admin_visitable :boolean default("0")
# collaborator :boolean default("0")
# gitea_uid :integer
# is_sync_pwd :boolean default("1") # is_sync_pwd :boolean default("1")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# devops_step :integer default("0") # devops_step :integer default("0")
# gitea_token :string(255)
# #
# Indexes # Indexes
# #
@ -53,8 +54,9 @@
# index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_engineer (homepage_engineer)
# index_users_on_homepage_teacher (homepage_teacher) # index_users_on_homepage_teacher (homepage_teacher)
# index_users_on_laboratory_id (laboratory_id) # index_users_on_laboratory_id (laboratory_id)
# index_users_on_login (login) # index_users_on_login (login) UNIQUE
# index_users_on_mail (mail) # index_users_on_mail (mail) UNIQUE
# index_users_on_phone (phone) UNIQUE
# index_users_on_type (type) # index_users_on_type (type)
# #

View File

@ -1,77 +1,75 @@
# == Schema Information # == Schema Information
# #
# Table name: projects # Table name: projects
# #
# id :integer not null, primary key # id :integer not null, primary key
# name :string(255) default(""), not null # name :string(255) default(""), not null
# description :text(4294967295) # description :text(4294967295)
# homepage :string(255) default("") # homepage :string(255) default("")
# is_public :boolean default("1"), not null # is_public :boolean default("1"), not null
# parent_id :integer # parent_id :integer
# created_on :datetime # created_on :datetime
# updated_on :datetime # updated_on :datetime
# identifier :string(255) # identifier :string(255)
# status :integer default("1"), not null # status :integer default("1"), not null
# lft :integer # lft :integer
# rgt :integer # rgt :integer
# inherit_members :boolean default("0"), not null # inherit_members :boolean default("0"), not null
# project_type :integer default("0") # project_type :integer default("0")
# hidden_repo :boolean default("0"), not null # hidden_repo :boolean default("0"), not null
# attachmenttype :integer default("1") # attachmenttype :integer default("1")
# user_id :integer # user_id :integer
# dts_test :integer default("0") # dts_test :integer default("0")
# enterprise_name :string(255) # enterprise_name :string(255)
# organization_id :integer # organization_id :integer
# project_new_type :integer # project_new_type :integer
# gpid :integer # gpid :integer
# forked_from_project_id :integer # forked_from_project_id :integer
# forked_count :integer default("0") # forked_count :integer default("0")
# publish_resource :integer default("0") # publish_resource :integer default("0")
# visits :integer default("0") # visits :integer default("0")
# hot :integer default("0") # hot :integer default("0")
# invite_code :string(255) # invite_code :string(255)
# qrcode :string(255) # qrcode :string(255)
# qrcode_expiretime :integer default("0") # qrcode_expiretime :integer default("0")
# script :text(65535) # script :text(65535)
# training_status :integer default("0") # training_status :integer default("0")
# rep_identifier :string(255) # rep_identifier :string(255)
# project_category_id :integer # project_category_id :integer
# project_language_id :integer # project_language_id :integer
# license_id :integer # praises_count :integer default("0")
# ignore_id :integer # watchers_count :integer default("0")
# praises_count :integer default("0") # issues_count :integer default("0")
# watchers_count :integer default("0") # pull_requests_count :integer default("0")
# issues_count :integer default("0") # language :string(255)
# pull_requests_count :integer default("0") # versions_count :integer default("0")
# language :string(255) # issue_tags_count :integer default("0")
# versions_count :integer default("0") # closed_issues_count :integer default("0")
# issue_tags_count :integer default("0") # open_devops :boolean default("0")
# closed_issues_count :integer default("0") # gitea_webhook_id :integer
# open_devops :boolean default("0") # open_devops_count :integer default("0")
# gitea_webhook_id :integer # recommend :boolean default("0")
# open_devops_count :integer default("0") # platform :integer default("0")
# recommend :boolean default("0") # license_id :integer
# platform :integer default("0") # ignore_id :integer
# default_branch :string(255) default("master") # default_branch :string(255) default("master")
# website :string(255) # website :string(255)
# #
# Indexes # Indexes
# #
# index_projects_on_forked_from_project_id (forked_from_project_id) # index_projects_on_forked_from_project_id (forked_from_project_id)
# index_projects_on_identifier (identifier) # index_projects_on_identifier (identifier)
# index_projects_on_is_public (is_public) # index_projects_on_is_public (is_public)
# index_projects_on_lft (lft) # index_projects_on_lft (lft)
# index_projects_on_name (name) # index_projects_on_name (name)
# index_projects_on_platform (platform) # index_projects_on_platform (platform)
# index_projects_on_project_type (project_type) # index_projects_on_project_type (project_type)
# index_projects_on_recommend (recommend) # index_projects_on_recommend (recommend)
# index_projects_on_rgt (rgt) # index_projects_on_rgt (rgt)
# index_projects_on_status (status) # index_projects_on_status (status)
# index_projects_on_updated_on (updated_on) # index_projects_on_updated_on (updated_on)
# #
class Project < ApplicationRecord class Project < ApplicationRecord
include Matchable include Matchable
@ -101,6 +99,7 @@ class Project < ApplicationRecord
has_one :project_educoder, dependent: :destroy has_one :project_educoder, dependent: :destroy
has_one :project_score, dependent: :destroy has_one :project_score, dependent: :destroy
has_many :project_infos, :dependent => :destroy
has_one :repository, dependent: :destroy has_one :repository, dependent: :destroy
has_many :pull_requests, dependent: :destroy has_many :pull_requests, dependent: :destroy
has_many :issue_tags, -> { order("issue_tags.created_at DESC") }, dependent: :destroy has_many :issue_tags, -> { order("issue_tags.created_at DESC") }, dependent: :destroy

View File

@ -8,11 +8,6 @@
# projects_count :integer default("0") # projects_count :integer default("0")
# created_at :datetime not null # created_at :datetime not null
# updated_at :datetime not null # updated_at :datetime not null
# ancestry :string(255)
#
# Indexes
#
# index_project_categories_on_ancestry (ancestry)
# #
class ProjectCategory < ApplicationRecord class ProjectCategory < ApplicationRecord

View File

@ -0,0 +1,8 @@
class ProjectInfo < ActiveRecord::Base
belongs_to :project
belongs_to :user
validates_presence_of :project_id, :user_id
validates_uniqueness_of :project_id, :scope => :user_id
end

View File

@ -25,7 +25,6 @@
# #
# Indexes # Indexes
# #
# index_repositories_on_identifier (identifier)
# index_repositories_on_project_id (project_id) # index_repositories_on_project_id (project_id)
# index_repositories_on_user_id (user_id) # index_repositories_on_user_id (user_id)
# #

View File

@ -1,3 +1,39 @@
# == Schema Information
#
# Table name: schools
#
# id :integer not null, primary key
# name :string(255)
# province :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# logo_link :string(255)
# pinyin :string(255)
# school_type :integer default("0")
# city :string(255)
# address :string(255)
# auto_users_trial :boolean default("0")
# shool_code :string(255)
# authorization_time :datetime
# ec_auth :integer default("0")
# identifier :string(255)
# is_online :boolean default("0")
# video_name :string(255)
# video_desc :string(255)
# course_link :string(255)
# course_name :string(255)
# partner_id :integer
# customer_id :integer
# school_property_id :integer
#
# Indexes
#
# index_schools_on_customer_id (customer_id)
# index_schools_on_identifier (identifier)
# index_schools_on_partner_id (partner_id)
# index_schools_on_school_property_id (school_property_id)
#
class School < ApplicationRecord class School < ApplicationRecord
has_many :departments, dependent: :destroy has_many :departments, dependent: :destroy

23
app/models/site.rb Normal file
View File

@ -0,0 +1,23 @@
# == Schema Information
#
# Table name: sites
#
# id :integer not null, primary key
# name :string(255)
# url :string(255)
# key :string(255)
# site_type :integer
# created_at :datetime not null
# updated_at :datetime not null
#
class Site < ApplicationRecord
# add: 添加类链接
# personal: 个人名下类链接,
# common: 普通链接
enum site_type: { add: 0, personal: 1, common: 2 }
def self.set_default
end
end

View File

@ -1,4 +1,87 @@
# == Schema Information
#
# Table name: courses
#
# id :integer not null, primary key
# tea_id :integer
# name :string(255)
# state :integer
# code :string(255)
# time :integer
# extra :string(255)
# created_at :datetime not null
# updated_at :datetime not null
# location :string(255)
# term :string(255)
# string :string(255)
# password :string(255)
# setup_time :string(255)
# endup_time :string(255)
# class_period :integer default("0")
# school_id :integer
# description :text(65535)
# status :integer default("1")
# attachmenttype :integer default("2")
# lft :integer
# rgt :integer
# is_public :integer default("1")
# inherit_members :integer default("1")
# open_student :integer default("0")
# outline :integer default("0")
# publish_resource :integer default("0")
# is_delete :integer default("0")
# end_time :integer
# end_term :string(255)
# is_excellent :integer default("0")
# excellent_option :integer default("0")
# is_copy :integer default("0")
# visits :integer default("0")
# syllabus_id :integer
# invite_code :string(255)
# qrcode :string(255)
# qrcode_expiretime :integer default("0")
# invite_code_halt :integer default("0")
# os_allow :integer default("0")
# credit :float(24)
# is_end :boolean default("0")
# end_date :date
# choose_group_allow :boolean default("0")
# homepage_show :boolean default("0")
# course_list_id :integer
# members_count :integer default("0")
# homework_commons_count :integer default("0")
# show_unit :boolean default("0")
# teacher_list :string(255) default("老师")
# student_list :string(255) default("学生")
# is_hidden :boolean default("0")
# course_members_count :integer default("0")
# course_groups_count :integer default("0")
# authentication :boolean default("0")
# professional_certification :boolean default("0")
# graduation_topics_count :integer default("0")
# graduation_tasks_count :integer default("0")
# polls_count :integer default("0")
# exercises_count :integer default("0")
# start_date :date
# subject_id :integer default("0")
# excellent :boolean default("0")
# email_notify :boolean default("0")
# sticky :boolean default("0")
# sticky_time :datetime
# laboratory_id :integer
# mooc_course_id :integer
#
# Indexes
#
# index_courses_on_invite_code (invite_code) UNIQUE
# index_courses_on_laboratory_id (laboratory_id)
# index_courses_on_mooc_course_id (mooc_course_id)
# index_courses_on_school_id_and_is_delete (school_id,is_delete)
# index_courses_on_subject_id (subject_id)
# index_courses_on_tea_id (tea_id)
#
class Trustie::Course < Trustie::Database class Trustie::Course < Trustie::Database
has_many :course_groups, class_name: "Trustie::CourseGroup" has_many :course_groups, class_name: "Trustie::CourseGroup"
has_many :homework_commons, class_name: "Trustie::HomeworkCommon" has_many :homework_commons, class_name: "Trustie::HomeworkCommon"
end end

View File

@ -1,3 +1,25 @@
# == Schema Information
#
# Table name: course_groups
#
# id :integer not null, primary key
# name :string(255)
# course_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# members_count :integer
# invite_code :string(255)
# position :integer default("0")
# course_members_count :integer default("0")
# invite_code_halt :boolean default("0")
# invite_code_set :integer default("0")
#
# Indexes
#
# index_course_groups_on_course_id (course_id)
# index_course_groups_on_invite_code (invite_code) UNIQUE
#
class Trustie::CourseGroup < Trustie::Database class Trustie::CourseGroup < Trustie::Database
belongs_to :course, class_name: "Trustie::Course" belongs_to :course, class_name: "Trustie::Course"
end end

View File

@ -1,3 +1,54 @@
# == Schema Information
#
# Table name: homework_commons
#
# id :integer not null, primary key
# name :string(255)
# user_id :integer
# description :text(65535)
# publish_time :datetime
# end_time :datetime
# homework_type :integer default("1")
# late_penalty :string(255) default("0")
# course_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# teacher_priority :integer default("1")
# anonymous_comment :boolean default("0")
# quotes :integer default("0")
# is_open :integer default("0")
# simi_time :datetime
# score_open :boolean default("0")
# anonymous_appeal :boolean default("0")
# homework_bank_id :integer
# is_update :boolean default("0")
# is_public :boolean default("0")
# reference_answer :text(65535)
# answer_public :boolean default("0")
# archive_time :datetime
# allow_late :boolean default("0")
# late_time :datetime
# work_public :boolean default("0")
# explanation :text(65535)
# unified_setting :boolean default("1")
# comment_public :boolean default("1")
# course_homework_category_id :integer
# work_efficiency :boolean default("0")
# eff_score :float(24) default("0")
# max_efficiency :float(24) default("0")
# course_second_category_id :integer default("0")
# calculation_time :datetime
# position :integer default("0")
# total_score :float(24) default("100")
# category_position :integer default("0")
#
# Indexes
#
# index_homework_commons_on_course_id_and_id (course_id,id)
# index_homework_commons_on_course_second_category_id (course_second_category_id)
# index_homework_commons_on_homework_bank_id (homework_bank_id)
#
class Trustie::HomeworkCommon < Trustie::Database class Trustie::HomeworkCommon < Trustie::Database
belongs_to :course, class_name: "Trustie::Course" belongs_to :course, class_name: "Trustie::Course"
end end

View File

@ -39,13 +39,14 @@
# business :boolean default("0") # business :boolean default("0")
# profile_completed :boolean default("0") # profile_completed :boolean default("0")
# laboratory_id :integer # laboratory_id :integer
# platform :string(255) default("0")
# gitea_token :string(255)
# gitea_uid :integer
# is_shixun_marker :boolean default("0") # is_shixun_marker :boolean default("0")
# admin_visitable :boolean default("0")
# collaborator :boolean default("0")
# gitea_uid :integer
# is_sync_pwd :boolean default("1") # is_sync_pwd :boolean default("1")
# watchers_count :integer default("0") # watchers_count :integer default("0")
# devops_step :integer default("0") # devops_step :integer default("0")
# gitea_token :string(255)
# #
# Indexes # Indexes
# #
@ -53,8 +54,9 @@
# index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_engineer (homepage_engineer)
# index_users_on_homepage_teacher (homepage_teacher) # index_users_on_homepage_teacher (homepage_teacher)
# index_users_on_laboratory_id (laboratory_id) # index_users_on_laboratory_id (laboratory_id)
# index_users_on_login (login) # index_users_on_login (login) UNIQUE
# index_users_on_mail (mail) # index_users_on_mail (mail) UNIQUE
# index_users_on_phone (phone) UNIQUE
# index_users_on_type (type) # index_users_on_type (type)
# #

View File

@ -12,7 +12,9 @@
# #
# Indexes # Indexes
# #
# index_user_actions_on_ip (ip) # index_user_actions_on_ip (ip)
# index_user_actions_on_user_id (user_id)
# index_user_actions_on_user_id_and_action_type (user_id,action_type)
# #
class UserAction < ApplicationRecord class UserAction < ApplicationRecord

View File

@ -10,10 +10,13 @@
# updated_at :datetime not null # updated_at :datetime not null
# register_status :integer default("0") # register_status :integer default("0")
# action_status :integer default("0") # action_status :integer default("0")
# is_delete :boolean default("0")
# user_id :integer
# #
# Indexes # Indexes
# #
# index_user_agents_on_ip (ip) UNIQUE # index_user_agents_on_ip (ip)
# index_user_agents_on_user_id (user_id)
# #
class UserAgent < ApplicationRecord class UserAgent < ApplicationRecord

View File

@ -22,6 +22,9 @@
# school_id :integer # school_id :integer
# description :string(255) default("") # description :string(255) default("")
# department_id :integer # department_id :integer
# honor :text(65535)
# edu_background :integer
# edu_entry_year :integer
# #
# Indexes # Indexes
# #

View File

@ -24,7 +24,7 @@
# #
class Version < ApplicationRecord class Version < ApplicationRecord
belongs_to :project, counter_cache: true belongs_to :project, counter_cache: true, optional: true
has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id" has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id"
belongs_to :user, optional: true belongs_to :user, optional: true

View File

@ -9,11 +9,11 @@
<% end %> <% end %>
</td> </td>
<td> <td>
<% if school && school.identifier.present? %> <%# if school && school.identifier.present? %>
<%= link_to school.identifier.to_s, statistics_college_path(school.identifier), target: '_blank' %> <%#= link_to school.identifier.to_s, statistics_college_path(school.identifier), target: '_blank' %>
<% else %> <%# else %>
-- --
<% end %> <%# end %>
</td> </td>
<td class="member-container"> <td class="member-container">
<div class="laboratory-user"> <div class="laboratory-user">

View File

@ -48,4 +48,15 @@ json.setting do
json.old_projects_url @old_projects_url json.old_projects_url @old_projects_url
json.add do
json.array! @add, :name, :url, :key
end
json.personal do
json.array! @personal
end
json.common do
json.array! @common
end
end end

View File

@ -5,11 +5,13 @@ json.user_id @user.id
json.image_url url_to_avatar(@user) json.image_url url_to_avatar(@user)
json.admin @user.admin? json.admin @user.admin?
json.is_teacher @user.user_extension&.teacher? json.is_teacher @user.user_extension&.teacher?
json.has_gitea_user @user.gitea_token.present? && @user.gitea_uid.present?
json.is_sync_pwd @user.is_sync_pwd
json.user_identity @user.identity json.user_identity @user.identity
json.tidding_count 0 json.tidding_count 0
json.user_phone_binded @user.phone.present? json.user_phone_binded @user.phone.present?
# json.phone @user.phone # json.phone @user.phone
# json.email @user.mail json.email @user.mail
json.profile_completed @user.profile_completed? json.profile_completed @user.profile_completed?
json.professional_certification @user.professional_certification json.professional_certification @user.professional_certification
json.devops_step @user.devops_step json.devops_step @user.devops_step

View File

@ -0,0 +1,17 @@
'zh-CN':
activemodel:
attributes:
gitea/user/change_password_form:
user: ''
email: 邮箱
login: 用户名
old_password: 旧密码
password: 新密码
errors:
models:
gitea/user/change_password_form:
attributes:
old_password:
password_error: 错误
user:
not_exist: 不存在

View File

@ -23,7 +23,6 @@ Rails.application.routes.draw do
resources :edu_settings resources :edu_settings
resources :edu_settings
scope '/api' do scope '/api' do
namespace :ci do namespace :ci do
resources :languages, only: [:index, :show] do resources :languages, only: [:index, :show] do
@ -73,12 +72,12 @@ Rails.application.routes.draw do
end end
resources :statistic, only: [:index] do resources :statistic, only: [:index] do
collection do collection do
get :platform_profile get :platform_profile
get :platform_code get :platform_code
get :active_project_rank get :active_project_rank
get :active_developer_rank get :active_developer_rank
end end
end end
resources :sync_forge, only: [:create] do resources :sync_forge, only: [:create] do
collection do collection do
@ -186,6 +185,7 @@ Rails.application.routes.draw do
get :logout get :logout
get :get_verification_code get :get_verification_code
get :valid_email_and_phone get :valid_email_and_phone
post :gitea_register
post :remote_register post :remote_register
post :remote_update post :remote_update
post :remote_login post :remote_login
@ -219,6 +219,8 @@ Rails.application.routes.draw do
post :sync_salt post :sync_salt
get :trustie_projects get :trustie_projects
get :trustie_related_projects get :trustie_related_projects
post :change_password
post :change_email
scope '/ci', module: :ci do scope '/ci', module: :ci do
scope do scope do
@ -379,7 +381,7 @@ Rails.application.routes.draw do
end end
end end
resource :repositories, path: '/', only: [:show, :create, :edit] do resource :repositories, path: '/', only: [:show, :create, :edit] do
member do member do
get :files get :files
get :detail get :detail

View File

@ -1,5 +1,5 @@
class AddPlatformToUsers < ActiveRecord::Migration[5.2] class AddPlatformToUsers < ActiveRecord::Migration[5.2]
def change def change
# add_column :users, :platform, :string, default: 0 add_column :users, :platform, :string, default: 0
end end
end end

View File

@ -1,5 +1,5 @@
class AddGiteaTokenToUsers < ActiveRecord::Migration[5.2] class AddGiteaTokenToUsers < ActiveRecord::Migration[5.2]
def change def change
# add_column :users, :gitea_token, :string add_column :users, :gitea_token, :string
end end
end end

View File

@ -1,6 +1,6 @@
class AddProjectCategoryIdAndProjectLanguageIdToProjects < ActiveRecord::Migration[5.2] class AddProjectCategoryIdAndProjectLanguageIdToProjects < ActiveRecord::Migration[5.2]
def change def change
# add_column :projects, :project_category_id, :integer add_column :projects, :project_category_id, :integer
# add_column :projects, :project_language_id, :integer add_column :projects, :project_language_id, :integer
end end
end end

View File

@ -1,7 +1,7 @@
class AddUserRefToRepository < ActiveRecord::Migration[5.2] class AddUserRefToRepository < ActiveRecord::Migration[5.2]
def change def change
# add_column :repositories, :user_id, :integer add_column :repositories, :user_id, :integer
# add_index :repositories, :user_id add_index :repositories, :user_id
Project.joins(:repository).find_each do |project| Project.joins(:repository).find_each do |project|
project&.repository&.update_column(:user_id, project&.user_id) unless project&.repository.blank? project&.repository&.update_column(:user_id, project&.user_id) unless project&.repository.blank?

View File

@ -1,5 +1,5 @@
class AddGiteaUidToUsers < ActiveRecord::Migration[5.2] class AddGiteaUidToUsers < ActiveRecord::Migration[5.2]
def change def change
# add_column :users, :gitea_uid, :integer add_column :users, :gitea_uid, :integer
end end
end end

View File

@ -1,5 +1,5 @@
class AddMirrorUrlToRepositories < ActiveRecord::Migration[5.2] class AddMirrorUrlToRepositories < ActiveRecord::Migration[5.2]
def change def change
# add_column :repositories, :mirror_url, :string add_column :repositories, :mirror_url, :string
end end
end end

View File

@ -1,14 +1,14 @@
class CreateIssueTags < ActiveRecord::Migration[5.2] class CreateIssueTags < ActiveRecord::Migration[5.2]
def change def change
# create_table :issue_tags do |t| create_table :issue_tags do |t|
# t.string :title t.string :title
# t.string :description t.string :description
# t.string :color t.string :color
# t.integer :user_id t.integer :user_id
# t.integer :project_id t.integer :project_id
# t.integer :issues_count,default: 0 t.integer :issues_count,default: 0
# t.timestamps t.timestamps
# end end
# add_index :issue_tags, [:user_id, :title,:project_id] add_index :issue_tags, [:user_id, :title,:project_id]
end end
end end

View File

@ -1,5 +1,5 @@
class AddPraisesCountToProjects < ActiveRecord::Migration[5.2] class AddPraisesCountToProjects < ActiveRecord::Migration[5.2]
def change def change
# add_column :projects, :praises_count, :integer, :default => 0 add_column :projects, :praises_count, :integer, :default => 0
end end
end end

View File

@ -1,8 +1,8 @@
class AddIssuesTypeAndToken < ActiveRecord::Migration[5.2] class AddIssuesTypeAndToken < ActiveRecord::Migration[5.2]
def change def change
# add_column :issues, :issue_type, :string add_column :issues, :issue_type, :string
# add_column :issues, :token, :string add_column :issues, :token, :string
# add_column :issues, :issue_tag_ids, :string add_column :issues, :issue_tag_ids, :string
end end
end end

View File

@ -1,5 +1,5 @@
class RenameIssueTagTitle < ActiveRecord::Migration[5.2] class RenameIssueTagTitle < ActiveRecord::Migration[5.2]
def change def change
# rename_column :issue_tags, :title, :name rename_column :issue_tags, :title, :name
end end
end end

View File

@ -1,10 +1,10 @@
class CreateIssueTagsRelates < ActiveRecord::Migration[5.2] class CreateIssueTagsRelates < ActiveRecord::Migration[5.2]
def change def change
# create_table :issue_tags_relates do |t| create_table :issue_tags_relates do |t|
# t.integer :issue_id t.integer :issue_id
# t.integer :issue_tag_id t.integer :issue_tag_id
# t.timestamps t.timestamps
# end end
# add_index :issue_tags_relates, [:issue_id, :issue_tag_id] add_index :issue_tags_relates, [:issue_id, :issue_tag_id]
end end
end end

View File

@ -1,5 +1,5 @@
class RenameIssuesIssueTagIds < ActiveRecord::Migration[5.2] class RenameIssuesIssueTagIds < ActiveRecord::Migration[5.2]
def change def change
# rename_column :issues, :issue_tag_ids, :issue_tags_value rename_column :issues, :issue_tag_ids, :issue_tags_value
end end
end end

View File

@ -1,13 +1,13 @@
class CreateIssueTimes < ActiveRecord::Migration[5.2] class CreateIssueTimes < ActiveRecord::Migration[5.2]
def change def change
# create_table :issue_times do |t| create_table :issue_times do |t|
# t.integer :issue_id t.integer :issue_id
# t.integer :user_id t.integer :user_id
# t.datetime :start_time t.datetime :start_time
# t.datetime :end_time t.datetime :end_time
# t.string :cost_time t.string :cost_time
# t.timestamps t.timestamps
# end end
# add_index :issue_times, [:issue_id, :user_id] add_index :issue_times, [:issue_id, :user_id]
end end
end end

View File

@ -1,5 +1,5 @@
class AddIsLockToIssue < ActiveRecord::Migration[5.2] class AddIsLockToIssue < ActiveRecord::Migration[5.2]
def change def change
# add_column :issues, :is_lock, :boolean, default: false add_column :issues, :is_lock, :boolean, default: false
end end
end end

View File

@ -1,5 +1,5 @@
class AddWatchersCountToProjects < ActiveRecord::Migration[5.2] class AddWatchersCountToProjects < ActiveRecord::Migration[5.2]
def change def change
# add_column :projects, :watchers_count, :integer, :default => 0 add_column :projects, :watchers_count, :integer, :default => 0
end end
end end

View File

@ -1,18 +1,18 @@
class CreateVersionReleases < ActiveRecord::Migration[5.2] class CreateVersionReleases < ActiveRecord::Migration[5.2]
def change def change
# create_table :version_releases do |t| create_table :version_releases do |t|
# t.integer :user_id t.integer :user_id
# t.string :name t.string :name
# t.text :body t.text :body
# t.string :tag_name t.string :tag_name
# t.string :target_commitish t.string :target_commitish
# t.boolean :draft, default: false t.boolean :draft, default: false
# t.boolean :prerelease, default: false t.boolean :prerelease, default: false
# t.string :tarball_url t.string :tarball_url
# t.string :zipball_url t.string :zipball_url
# t.string :url t.string :url
# t.string :version_gid t.string :version_gid
# t.timestamps t.timestamps
# end end
end end
end end

View File

@ -1,6 +1,6 @@
class AddProjectIdToVersionRelease < ActiveRecord::Migration[5.2] class AddProjectIdToVersionRelease < ActiveRecord::Migration[5.2]
def change def change
# add_column :version_releases, :repository_id, :integer add_column :version_releases, :repository_id, :integer
# add_index :version_releases, [:repository_id] add_index :version_releases, [:repository_id]
end end
end end

View File

@ -1,6 +1,6 @@
class AddColumnToIssueTags < ActiveRecord::Migration[5.2] class AddColumnToIssueTags < ActiveRecord::Migration[5.2]
def change def change
# add_column :issue_tags, :gid, :integer add_column :issue_tags, :gid, :integer
# add_column :issue_tags, :gitea_url, :string add_column :issue_tags, :gitea_url, :string
end end
end end

View File

@ -1,8 +1,8 @@
class AddColumnToPullRequests < ActiveRecord::Migration[5.2] class AddColumnToPullRequests < ActiveRecord::Migration[5.2]
def change def change
# add_column :pull_requests, :version_id, :integer add_column :pull_requests, :version_id, :integer
# add_column :pull_requests, :body, :text add_column :pull_requests, :body, :text
# add_column :pull_requests, :from_ref, :string add_column :pull_requests, :from_ref, :string
# add_column :pull_requests, :to_ref, :string add_column :pull_requests, :to_ref, :string
end end
end end

View File

@ -4,10 +4,10 @@ class ChangePullRequestsColumns < ActiveRecord::Migration[5.2]
# add_column :pull_request_assigns, :user_login, :string # add_column :pull_request_assigns, :user_login, :string
# #
# add_index :pull_request_assigns, [:user_login] # add_index :pull_request_assigns, [:user_login]
#
# rename_column :pull_requests, :version_id, :milestone rename_column :pull_requests, :version_id, :milestone
# rename_column :pull_requests, :from_ref, :head rename_column :pull_requests, :from_ref, :head
# rename_column :pull_requests, :to_ref, :base rename_column :pull_requests, :to_ref, :base
end end

View File

@ -1,6 +1,6 @@
class AddColumnsToPullRequests < ActiveRecord::Migration[5.2] class AddColumnsToPullRequests < ActiveRecord::Migration[5.2]
def change def change
# add_column :pull_requests, :issue_id, :integer add_column :pull_requests, :issue_id, :integer
# add_column :issues, :issue_classify, :string add_column :issues, :issue_classify, :string
end end
end end

View File

@ -1,6 +1,6 @@
class AddIssuesRefNameAndBranchName < ActiveRecord::Migration[5.2] class AddIssuesRefNameAndBranchName < ActiveRecord::Migration[5.2]
def change def change
# add_column :issues, :ref_name, :string add_column :issues, :ref_name, :string
# add_column :issues, :branch_name, :string add_column :issues, :branch_name, :string
end end
end end

View File

@ -1,9 +1,9 @@
class MigrateTidingStatus < ActiveRecord::Migration[5.2] class MigrateTidingStatus < ActiveRecord::Migration[5.2]
def change def change
Tiding.where(container_type: "JoinCourse", status: 0).each do |tiding| # Tiding.where(container_type: "JoinCourse", status: 0).each do |tiding|
unless CourseMessage.where(course_message_id: tiding.trigger_user_id, course_id: tiding.container_id, course_message_type: "JoinCourseRequest", status: 0).exists? # unless CourseMessage.where(course_message_id: tiding.trigger_user_id, course_id: tiding.container_id, course_message_type: "JoinCourseRequest", status: 0).exists?
tiding.update!(status: 1) # tiding.update!(status: 1)
end # end
end # end
end end
end end

View File

@ -1,6 +1,6 @@
class AddIssuesCountAndPullRequestsCountToProjects < ActiveRecord::Migration[5.2] class AddIssuesCountAndPullRequestsCountToProjects < ActiveRecord::Migration[5.2]
def change def change
# add_column :projects, :issues_count, :integer, :default => 0 add_column :projects, :issues_count, :integer, :default => 0
# add_column :projects, :pull_requests_count, :integer, :default => 0 add_column :projects, :pull_requests_count, :integer, :default => 0
end end
end end

View File

@ -1,11 +1,11 @@
class MigrateUserLocation < ActiveRecord::Migration[5.2] class MigrateUserLocation < ActiveRecord::Migration[5.2]
def change def change
UserExtension.where("location like '%省'").each do |ue| # UserExtension.where("location like '%省'").each do |ue|
ue.update_column("location", ue.location.chop) # ue.update_column("location", ue.location.chop)
end # end
#
UserExtension.where("location_city like '%市'").each do |ue| # UserExtension.where("location_city like '%市'").each do |ue|
ue.update_column("location_city", ue.location_city.chop) # ue.update_column("location_city", ue.location_city.chop)
end # end
end end
end end

View File

@ -1,7 +1,7 @@
class AddIssuesCountToVersions < ActiveRecord::Migration[5.2] class AddIssuesCountToVersions < ActiveRecord::Migration[5.2]
def change def change
# add_column :versions, :issues_count, :integer, :default => 0 add_column :versions, :issues_count, :integer, :default => 0
# add_column :versions, :closed_issues_count, :integer, :default => 0 add_column :versions, :closed_issues_count, :integer, :default => 0
# add_column :versions, :percent, :float, default: 0.0 add_column :versions, :percent, :float, default: 0.0
end end
end end

View File

@ -1,69 +1,69 @@
class ChangeQuillToMd < ActiveRecord::Migration[5.2] class ChangeQuillToMd < ActiveRecord::Migration[5.2]
#迁移quill编辑器的内容为md #迁移quill编辑器的内容为md
def change def change
migrate_time = Time.current - 20.days migrate_time = Time.current - 20.days
all_issues = Issue.where("updated_on > ?", migrate_time) all_issues = Issue.where("updated_on > ?", migrate_time)
pros = PullRequest.where("updated_at > ?", migrate_time) pros = PullRequest.where("updated_at > ?", migrate_time)
journals = Journal.where("created_on > ?", migrate_time) journals = Journal.where("created_on > ?", migrate_time)
Issue.transaction do # Issue.transaction do
if all_issues.size > 0 # if all_issues.size > 0
all_issues.each do |i| # all_issues.each do |i|
description = i.description # description = i.description
if description.present? && description.include?("insert") # if description.present? && description.include?("insert")
new_content = change_content(description) # new_content = change_content(description)
i.update_attribute(:description, new_content) # i.update_attribute(:description, new_content)
end # end
puts "__update_issue_content_____id:#{i.id}__" # puts "__update_issue_content_____id:#{i.id}__"
end # end
end # end
end # end
Journal.transaction do # Journal.transaction do
if journals.size > 0 # if journals.size > 0
journals.each do |j| # journals.each do |j|
description = j.notes # description = j.notes
if description.present? && description.include?("insert") # if description.present? && description.include?("insert")
new_content = change_content(description) # new_content = change_content(description)
j.update_attribute(:notes, new_content) # j.update_attribute(:notes, new_content)
end # end
puts "__update_journal_content_____id:#{j.id}__" # puts "__update_journal_content_____id:#{j.id}__"
end # end
end # end
#
end # end
PullRequest.transaction do # PullRequest.transaction do
if pros.size > 0 # if pros.size > 0
pros.each do |p| # pros.each do |p|
description = p.body # description = p.body
if description.present? && description.include?("insert") # if description.present? && description.include?("insert")
new_content = change_content(description) # new_content = change_content(description)
p.update_attribute(:body, new_content) # p.update_attribute(:body, new_content)
end # end
puts "__update_pull_request_content_____id:#{p.id}__" # puts "__update_pull_request_content_____id:#{p.id}__"
end # end
end # end
end # end
end end
def change_content(content) # def change_content(content)
puts "####________content_____######{content}" # puts "####________content_____######{content}"
new_content = "" # new_content = ""
return "" if content.blank? # return "" if content.blank?
desc = JSON.parse(content)["ops"] # desc = JSON.parse(content)["ops"]
if desc.length > 0 # if desc.length > 0
desc.each do |d| # desc.each do |d|
image = d["insert"]["image"] # image = d["insert"]["image"]
if image.present? # if image.present?
new_content += "![#{image['alt']}](#{image['url']})" # new_content += "![#{image['alt']}](#{image['url']})"
else # else
new_content += d["insert"].gsub("\n", "") # new_content += d["insert"].gsub("\n", "")
end # end
end # end
end # end
new_content # new_content
end # end
end end

View File

@ -0,0 +1,6 @@
class AddColumnsToProjects < ActiveRecord::Migration[5.2]
def change
add_column :projects, :license_id, :integer
add_column :projects, :ignore_id, :integer
end
end

View File

@ -0,0 +1,12 @@
class CreateSites < ActiveRecord::Migration[5.2]
def change
create_table :sites do |t|
t.string :name, comment: "中文名称"
t.string :url, comment: "具体链接"
t.string :key, comment: "标识"
t.integer :site_type, comment: "分类,按照分类编排链接"
t.timestamps
end
end
end

View File

@ -15,15 +15,27 @@ namespace :sync_data_to_gitea do
next unless regx.match user.mail next unless regx.match user.mail
tmp_password = set_password tmp_password = set_password
user_params = {
username: user.login,
email: user.mail,
password: tmp_password
}
gitea_user = Gitea::User::RegisterService.new(user_params).call # TODO: Educoder sync
result = Gitea::User::GenerateTokenService.new(user.login, tmp_password).call interactor = Gitea::RegisterInteractor.call({username: user.login, email: user.mail, password: tmp_password})
user.update_columns(gitea_token: result['sha1'], gitea_uid: gitea_user['id']) if interactor.success?
gitea_user = interactor.result
result = Gitea::User::GenerateTokenService.call(user.login, tmp_password)
user.update_columns(gitea_token: result['sha1'], gitea_uid: gitea_user[:body]['id'])
else
puts "#################【Gitea: 用户同步失败: #{interactor.error} #################"
end
# TODO: Trustie sync
# user_params = {
# username: user.login,
# email: user.mail,
# password: tmp_password
# }
#
# gitea_user = Gitea::User::RegisterService.new(user_params).call
# result = Gitea::User::GenerateTokenService.new(user.login, tmp_password).call
# user.update_columns(gitea_token: result['sha1'], gitea_uid: gitea_user['id'])
rescue Exception => e rescue Exception => e
Rails.logger.error e Rails.logger.error e
next next