From 1fe9ea126a408a61999ae2b8ca78e791a269ef88 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Tue, 13 Apr 2021 11:53:06 +0800 Subject: [PATCH 01/32] fix: permission with organization --- app/controllers/members_controller.rb | 4 ++-- app/controllers/pull_requests_controller.rb | 2 +- app/models/user.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 2964eb1af..bea4a0d29 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -47,7 +47,7 @@ class MembersController < ApplicationController end def member_exists? - @project.member?(params[:user_id]) + @project.members.exists?(params[:user_id]) end def operate! @@ -59,6 +59,6 @@ class MembersController < ApplicationController end def check_member_not_exists! - return render_result(1, "user_id为#{params[:user_id]}的用户还不是项目成员") unless member_exists? + return render_result(1, "user_id为#{params[:user_id]}的用户还不是项目成员") unless @project.member?(params[:user_id]) end end diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 126639015..c59a196b5 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -140,7 +140,7 @@ class PullRequestsController < ApplicationController end def pr_merge - return render_forbidden("你没有权限操作.") if @project.reporter?(current_user) + return render_forbidden("你没有权限操作.") unless current_user.project_manager?(@project) if params[:do].blank? normal_status(-1, "请选择合并方式") diff --git a/app/models/user.rb b/app/models/user.rb index 5bfe3b6e6..bf4ec1048 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -203,7 +203,7 @@ class User < Owner end def project_manager?(project) - project.managers.exists?(user: self) || self.admin? + project.manager?(self) || self.admin? end # 学号 From 506ab1722da95d58b7a5326d2a8908292bd1e82f Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 10:54:36 +0800 Subject: [PATCH 02/32] add: team nickname --- app/controllers/organizations/teams_controller.rb | 2 +- app/models/team.rb | 1 + app/views/organizations/teams/_detail.json.jbuilder | 1 + db/migrate/20210419023310_add_nickname_to_teams.rb | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210419023310_add_nickname_to_teams.rb diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 5bc01fe39..04b748c8a 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -60,7 +60,7 @@ class Organizations::TeamsController < Organizations::BaseController private def team_params - params.permit(:name, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types => []) + params.permit(:name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types => []) end def load_organization diff --git a/app/models/team.rb b/app/models/team.rb index 82a3e88c1..d17827da8 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -14,6 +14,7 @@ # gtid :integer # created_at :datetime not null # updated_at :datetime not null +# nickname :string(255) # # Indexes # diff --git a/app/views/organizations/teams/_detail.json.jbuilder b/app/views/organizations/teams/_detail.json.jbuilder index 4f3588cb9..cb0507b5a 100644 --- a/app/views/organizations/teams/_detail.json.jbuilder +++ b/app/views/organizations/teams/_detail.json.jbuilder @@ -1,5 +1,6 @@ json.id team.id json.name team.name +json.nickname team.nickname json.description team.description json.authorize team.authorize json.includes_all_project team.includes_all_project diff --git a/db/migrate/20210419023310_add_nickname_to_teams.rb b/db/migrate/20210419023310_add_nickname_to_teams.rb new file mode 100644 index 000000000..ed80f1935 --- /dev/null +++ b/db/migrate/20210419023310_add_nickname_to_teams.rb @@ -0,0 +1,5 @@ +class AddNicknameToTeams < ActiveRecord::Migration[5.2] + def change + add_column :teams, :nickname, :string + end +end From 5a20842edb947cd1c2b8a02c0d6c3ad87628aec2 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:26:30 +0800 Subject: [PATCH 03/32] fix: org not need create member --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index 9aa6283f6..ecaf588cd 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -161,7 +161,7 @@ class Project < ApplicationRecord #创建项目管理员 def check_project_members - unless members.present? && members.exists?(user_id: self.user_id) + unless members.present? && member?(user_id) member_params = { user_id: self.user_id, project_id: self.id From 1920cb5ce3135a991feaac3d34ed6398dc466ecc Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:35:12 +0800 Subject: [PATCH 04/32] fix: org not need create member --- app/models/project.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index ecaf588cd..4b96ab2b2 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -161,7 +161,8 @@ class Project < ApplicationRecord #创建项目管理员 def check_project_members - unless members.present? && member?(user_id) + return if owner.is_a?(Organization) + unless members.present? && members.exists?(user_id: self.user_id) member_params = { user_id: self.user_id, project_id: self.id From 9300483c1a0a8bcdd8ccb850d482c95363b35f46 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:40:38 +0800 Subject: [PATCH 05/32] fix --- app/views/organizations/teams/_detail.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/organizations/teams/_detail.json.jbuilder b/app/views/organizations/teams/_detail.json.jbuilder index cb0507b5a..68572814f 100644 --- a/app/views/organizations/teams/_detail.json.jbuilder +++ b/app/views/organizations/teams/_detail.json.jbuilder @@ -1,6 +1,6 @@ json.id team.id json.name team.name -json.nickname team.nickname +json.nickname team.nickname.blank? ? team.name : team.nickname json.description team.description json.authorize team.authorize json.includes_all_project team.includes_all_project From 1c6982d15b10d250378d3e8e688dee7616e7677a Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:07:12 +0800 Subject: [PATCH 06/32] add: org valid --- app/controllers/organizations/organizations_controller.rb | 1 + app/controllers/organizations/teams_controller.rb | 5 ++++- app/forms/organizations/create_form.rb | 8 ++++++++ app/forms/organizations/create_team_form.rb | 8 ++++++++ .../organizations/organizations/_detail.json.jbuilder | 2 +- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 app/forms/organizations/create_form.rb create mode 100644 app/forms/organizations/create_team_form.rb diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 73335cf11..09c12fd5a 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -25,6 +25,7 @@ class Organizations::OrganizationsController < Organizations::BaseController def create ActiveRecord::Base.transaction do + Organizations::CreateForm.new(organization_params).validate! @organization = Organizations::CreateService.call(current_user, organization_params) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? end diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 04b748c8a..a8d06ce46 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -33,7 +33,10 @@ class Organizations::TeamsController < Organizations::BaseController end def create - @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + ActiveRecord::Base.transaction do + Organizations::CreateTeamForm.new(team_params).validate! + @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/forms/organizations/create_form.rb b/app/forms/organizations/create_form.rb new file mode 100644 index 000000000..00c1dd15e --- /dev/null +++ b/app/forms/organizations/create_form.rb @@ -0,0 +1,8 @@ +class Organizations::CreateForm < BaseForm + NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 + attr_accessor :name, :description, :website, :location, :repo_admin_change_team_access, :visibility, :max_repo_creation, :nickname + + validates :name, :nickname, :visibility, presence: true + validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } + +end diff --git a/app/forms/organizations/create_team_form.rb b/app/forms/organizations/create_team_form.rb new file mode 100644 index 000000000..67b81c5f2 --- /dev/null +++ b/app/forms/organizations/create_team_form.rb @@ -0,0 +1,8 @@ +class Organizations::CreateTeamForm < BaseForm + NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 + attr_accessor :name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types + + validates :name, :nickname, :authorize, :includes_all_project, presence: true + validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } + +end diff --git a/app/views/organizations/organizations/_detail.json.jbuilder b/app/views/organizations/organizations/_detail.json.jbuilder index 64feadca1..4a8b512b9 100644 --- a/app/views/organizations/organizations/_detail.json.jbuilder +++ b/app/views/organizations/organizations/_detail.json.jbuilder @@ -1,6 +1,6 @@ json.id organization.id json.name organization.login -json.nickname organization.nickname +json.nickname organization.nickname.blank? ? organization.name : organization.nickname json.description organization.description json.website organization.website json.location organization.location From 01f32ae2d7d04b99c3b30e16d72dd64d3810680a Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:09:38 +0800 Subject: [PATCH 07/32] fix --- app/forms/organizations/create_team_form.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/forms/organizations/create_team_form.rb b/app/forms/organizations/create_team_form.rb index 67b81c5f2..898d69a1d 100644 --- a/app/forms/organizations/create_team_form.rb +++ b/app/forms/organizations/create_team_form.rb @@ -2,7 +2,7 @@ class Organizations::CreateTeamForm < BaseForm NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 attr_accessor :name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types - validates :name, :nickname, :authorize, :includes_all_project, presence: true + validates :name, :nickname, :authorize, presence: true validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } end From 8055ae2c07e9310313e5cebc9d3183c523ff78bb Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:14:11 +0800 Subject: [PATCH 08/32] fix: org team nickname change error --- app/services/organizations/teams/update_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/organizations/teams/update_service.rb b/app/services/organizations/teams/update_service.rb index 71c82c40b..b5b273d8a 100644 --- a/app/services/organizations/teams/update_service.rb +++ b/app/services/organizations/teams/update_service.rb @@ -27,7 +27,7 @@ class Organizations::Teams::UpdateService < ApplicationService if team.authorize == "owner" update_params = params.slice(:description) else - update_params = params.slice(:name, :description, :authorize, :includes_all_project, :can_create_org_project) + update_params = params.slice(:name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project) end update_params end From 002ae9f32728279a1aae33a7bf0a8cf9971916e2 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 15:06:56 +0800 Subject: [PATCH 09/32] ADD auto generate user avatar --- .gitignore | 4 +++- Gemfile | 2 ++ Gemfile.lock | 2 ++ app/helpers/application_helper.rb | 7 +----- app/models/concerns/.keep | 0 app/models/user.rb | 1 + app/models/user/avatar.rb | 32 ++++++++++++++++++++++++++++ config/initializers/letter_avatar.rb | 7 ++++++ 8 files changed, 48 insertions(+), 7 deletions(-) delete mode 100644 app/models/concerns/.keep create mode 100644 app/models/user/avatar.rb create mode 100644 config/initializers/letter_avatar.rb diff --git a/.gitignore b/.gitignore index 77104d20a..6b4fd25c1 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ public/react/yarn.lock /.idea/* # Ignore react node_modules +public/system/* public/react/* /public/react/.cache /public/react/node_modules/ @@ -82,4 +83,5 @@ docker/ educoder.sql redis_data/ Dockerfile -dump.rdb \ No newline at end of file +dump.rdb +.tags* diff --git a/Gemfile b/Gemfile index 281dd705a..713eb860f 100644 --- a/Gemfile +++ b/Gemfile @@ -126,3 +126,5 @@ gem 'request_store' gem 'harmonious_dictionary', '~> 0.0.1' gem 'parallel', '~> 1.19', '>= 1.19.1' + +gem 'letter_avatar' diff --git a/Gemfile.lock b/Gemfile.lock index cbd598f59..015c0a515 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -162,6 +162,7 @@ GEM activerecord kaminari-core (= 1.2.0) kaminari-core (1.2.0) + letter_avatar (0.3.8) listen (3.1.5) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) @@ -456,6 +457,7 @@ DEPENDENCIES jbuilder (~> 2.5) jquery-rails kaminari (~> 1.1, >= 1.1.1) + letter_avatar listen (>= 3.0.5, < 3.2) mysql2 (>= 0.4.4, < 0.6.0) oauth2 diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 30953bf57..18523d700 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -149,12 +149,7 @@ module ApplicationHelper File.join("images/avatars", ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}" end elsif source.class.to_s == 'User' - str = source.user_extension.try(:gender).to_i == 0 ? "b" : "g" - File.join(relative_path, "#{source.class}", str) - elsif source.class.to_s == 'Subject' - File.join("images","educoder", "index", "subject", "subject#{rand(17)}.jpg") - elsif source.class.to_s == 'Shixun' - File.join("images","educoder", "index", "shixun", "shixun#{rand(23)}.jpg") + source.letter_avatar_url end end diff --git a/app/models/concerns/.keep b/app/models/concerns/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/models/user.rb b/app/models/user.rb index bf4ec1048..20b3a8543 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -66,6 +66,7 @@ class User < Owner include Likeable include BaseModel include Droneable + include User::Avatar # include Searchable::Dependents::User # devops step diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb new file mode 100644 index 000000000..4b62c28fb --- /dev/null +++ b/app/models/user/avatar.rb @@ -0,0 +1,32 @@ +require 'letter_avatar/has_avatar' + +class User + module Avatar + extend ActiveSupport::Concern + include LetterAvatar::HasAvatar + + def name + lastname.blank? ? login : Pinyin.t(lastname) + end + + def letter_avatar_url(size = :lg) + avatar_url(avatar_size(size)) + end + + # 返回头像尺寸 + # xs: 22px + # sm: 32px + # md: 48px + # lg: 120px + def avatar_size(size) + case size + when :xs then 22 + when :sm then 32 + when :md then 48 + when :lg then 120 + else size + end + end + + end +end diff --git a/config/initializers/letter_avatar.rb b/config/initializers/letter_avatar.rb new file mode 100644 index 000000000..88f3851e9 --- /dev/null +++ b/config/initializers/letter_avatar.rb @@ -0,0 +1,7 @@ +LetterAvatar.setup do |config| + config.fill_color = 'rgba(255, 255, 255, 1)' # default is 'rgba(255, 255, 255, 0.65)' + config.cache_base_path = 'public/system/lets' # default is 'public/system' + config.colors_palette = :iwanthue # default is :google + config.annotate_position = '-0+10' # default is -0+5 + config.letters_count = 2 # default is 1 +end From 9cddda7fd48bd969e54b8f7e412d3a37e2fc2de8 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 15:38:51 +0800 Subject: [PATCH 10/32] Update render user avatar url in projects api --- app/views/projects/_project_detail.json.jbuilder | 2 +- app/views/projects/index.json.jbuilder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/_project_detail.json.jbuilder b/app/views/projects/_project_detail.json.jbuilder index 94aee427e..d0b62aaa3 100644 --- a/app/views/projects/_project_detail.json.jbuilder +++ b/app/views/projects/_project_detail.json.jbuilder @@ -26,7 +26,7 @@ json.author do json.name user.try(:show_real_name) json.type user&.type json.login user.login - json.image_url render_avatar_url(user) + json.image_url url_to_avatar(user) end end diff --git a/app/views/projects/index.json.jbuilder b/app/views/projects/index.json.jbuilder index 0e23ac03d..96ab89c00 100644 --- a/app/views/projects/index.json.jbuilder +++ b/app/views/projects/index.json.jbuilder @@ -28,7 +28,7 @@ json.projects @projects do |project| json.type user.type json.name user.try(:show_real_name) json.login user.login - json.image_url render_avatar_url(user) + json.image_url url_to_avatar(user) end end From b6e8a135f0afbaf0288875dfa25f5c8fc3f57a11 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 15:42:54 +0800 Subject: [PATCH 11/32] FIX url_to_avatar bug --- app/helpers/application_helper.rb | 2 +- app/helpers/projects_helper.rb | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 18523d700..3af7a5296 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -144,7 +144,7 @@ module ApplicationHelper if File.exist?(disk_filename(source&.class, source&.id)) ctime = File.ctime(disk_filename(source.class, source.id)).to_i if %w(User Organization).include?(source.class.to_s) - File.join(relative_path, ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}" + File.join("images", relative_path, ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}" else File.join("images/avatars", ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}" end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index b212b50e4..aec4b38d7 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -90,8 +90,4 @@ module ProjectsHelper def render_educoder_avatar_url(project_educoder) [Rails.application.config_for(:configuration)['educoder']['cdn_url'], project_educoder&.image_url].join('/') end - - def render_avatar_url(owner) - ['images', url_to_avatar(owner)].join('/') - end end From 21befb64864e30de72ec81ebb89f4c1a0d46fb40 Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 17:28:57 +0800 Subject: [PATCH 12/32] FIX auto generate avatar bug --- app/helpers/application_helper.rb | 2 +- app/models/user/avatar.rb | 13 +++++++++---- config/initializers/letter_avatar.rb | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 3af7a5296..b22954bb1 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -149,7 +149,7 @@ module ApplicationHelper File.join("images/avatars", ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}" end elsif source.class.to_s == 'User' - source.letter_avatar_url + source.get_letter_avatar_url end end diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb index 4b62c28fb..7a1a174c3 100644 --- a/app/models/user/avatar.rb +++ b/app/models/user/avatar.rb @@ -1,18 +1,23 @@ require 'letter_avatar/has_avatar' +require 'chinese_pinyin' class User module Avatar extend ActiveSupport::Concern include LetterAvatar::HasAvatar - def name - lastname.blank? ? login : Pinyin.t(lastname) + def username + self.lastname.blank? ? self.login : Pinyin.t(self.lastname) end - def letter_avatar_url(size = :lg) - avatar_url(avatar_size(size)) + def get_letter_avatar_url(size = :lg) + avatar_path(size).split('public/')&.last end + def avatar_path(size) + LetterAvatar.generate self.username, avatar_size(size) + end + # 返回头像尺寸 # xs: 22px # sm: 32px diff --git a/config/initializers/letter_avatar.rb b/config/initializers/letter_avatar.rb index 88f3851e9..3276e2a61 100644 --- a/config/initializers/letter_avatar.rb +++ b/config/initializers/letter_avatar.rb @@ -3,5 +3,5 @@ LetterAvatar.setup do |config| config.cache_base_path = 'public/system/lets' # default is 'public/system' config.colors_palette = :iwanthue # default is :google config.annotate_position = '-0+10' # default is -0+5 - config.letters_count = 2 # default is 1 + # config.letters_count = 2 # default is 1 end From 8a55e84372843682ed14a40d7de40ef347db748c Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 18:34:18 +0800 Subject: [PATCH 13/32] =?UTF-8?q?FIX=20=E8=B0=83=E6=95=B4=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E7=94=9F=E6=88=90=E5=A4=B4=E5=83=8F=E4=B8=AD=E5=AD=97?= =?UTF-8?q?=E6=AF=8D=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/initializers/letter_avatar.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/initializers/letter_avatar.rb b/config/initializers/letter_avatar.rb index 3276e2a61..d3b0ec098 100644 --- a/config/initializers/letter_avatar.rb +++ b/config/initializers/letter_avatar.rb @@ -2,6 +2,8 @@ LetterAvatar.setup do |config| config.fill_color = 'rgba(255, 255, 255, 1)' # default is 'rgba(255, 255, 255, 0.65)' config.cache_base_path = 'public/system/lets' # default is 'public/system' config.colors_palette = :iwanthue # default is :google + # config.weight = 500 # default is 300 config.annotate_position = '-0+10' # default is -0+5 # config.letters_count = 2 # default is 1 + config.pointsize = 300 end From de6ae5b7205d8d2afdb5d6e28c11502759ec4c6b Mon Sep 17 00:00:00 2001 From: jasder Date: Mon, 19 Apr 2021 18:36:02 +0800 Subject: [PATCH 14/32] Upate models Schema Information --- app/models/attachment.rb | 8 +-- app/models/chart_rule.rb | 18 ++++++ app/models/ci/stage.rb | 19 ++++++ app/models/ci/user.rb | 12 ++-- app/models/discuss.rb | 35 +++++++++++ app/models/forge_activity.rb | 21 ++++++- app/models/help.rb | 16 ++++- app/models/laboratory.rb | 6 ++ app/models/laboratory_setting.rb | 4 ++ app/models/license.rb | 1 - app/models/live_link.rb | 24 ++++++++ app/models/member.rb | 1 - app/models/message_detail.rb | 15 +++++ app/models/organization.rb | 12 ++-- app/models/project.rb | 9 +-- app/models/project_category.rb | 5 -- app/models/repository.rb | 1 - app/models/school.rb | 36 ++++++++++++ app/models/trustie/course.rb | 85 ++++++++++++++++++++++++++- app/models/trustie/course_group.rb | 24 +++++++- app/models/trustie/homework_common.rb | 53 ++++++++++++++++- app/models/user.rb | 16 +++-- app/models/user_action.rb | 4 +- app/models/user_agent.rb | 5 +- app/models/user_extension.rb | 3 + 25 files changed, 393 insertions(+), 40 deletions(-) diff --git a/app/models/attachment.rb b/app/models/attachment.rb index 461c835fe..1ca173458 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -17,7 +17,7 @@ # disk_directory :string(255) # attachtype :integer default("1") # is_public :integer default("1") -# copy_from :integer +# copy_from :string(255) # quotes :integer default("0") # is_publish :integer default("1") # publish_time :datetime @@ -26,15 +26,15 @@ # cloud_url :string(255) default("") # course_second_category_id :integer default("0") # delay_publish :boolean default("0") +# link :string(255) +# clone_id :integer # # Indexes # # 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_course_second_category_id (course_second_category_id) # index_attachments_on_created_on (created_on) -# index_attachments_on_is_public (is_public) -# index_attachments_on_quotes (quotes) # class Attachment < ApplicationRecord diff --git a/app/models/chart_rule.rb b/app/models/chart_rule.rb index a0b344e07..26c7f8084 100644 --- a/app/models/chart_rule.rb +++ b/app/models/chart_rule.rb @@ -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 validates :content, length: { maximum: 1000, too_long: "不能超过1000个字符" } diff --git a/app/models/ci/stage.rb b/app/models/ci/stage.rb index 2309f05d4..536e51cf6 100644 --- a/app/models/ci/stage.rb +++ b/app/models/ci/stage.rb @@ -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 self.primary_key = 'stage_id' diff --git a/app/models/ci/user.rb b/app/models/ci/user.rb index cd6246753..fc82596c4 100644 --- a/app/models/ci/user.rb +++ b/app/models/ci/user.rb @@ -39,13 +39,14 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# platform :string(255) default("0") -# gitea_token :string(255) -# gitea_uid :integer # is_shixun_marker :boolean default("0") +# admin_visitable :boolean default("0") +# collaborator :boolean default("0") +# gitea_uid :integer # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") +# gitea_token :string(255) # # Indexes # @@ -53,8 +54,9 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) -# index_users_on_mail (mail) +# index_users_on_login (login) UNIQUE +# index_users_on_mail (mail) UNIQUE +# index_users_on_phone (phone) UNIQUE # index_users_on_type (type) # diff --git a/app/models/discuss.rb b/app/models/discuss.rb index a4c833b55..1a2efc606 100644 --- a/app/models/discuss.rb +++ b/app/models/discuss.rb @@ -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 default_scope { order(created_at: :desc) } diff --git a/app/models/forge_activity.rb b/app/models/forge_activity.rb index 77103d0ff..b9f11c5a8 100644 --- a/app/models/forge_activity.rb +++ b/app/models/forge_activity.rb @@ -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 belongs_to :user belongs_to :project belongs_to :forge_act, polymorphic: true -end \ No newline at end of file +end diff --git a/app/models/help.rb b/app/models/help.rb index 2b8bf5813..5a4c480b4 100644 --- a/app/models/help.rb +++ b/app/models/help.rb @@ -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 -end \ No newline at end of file +end diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 73002a841..9d3ca07dd 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -10,6 +10,12 @@ # sync_course :boolean default("0") # sync_subject :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 diff --git a/app/models/laboratory_setting.rb b/app/models/laboratory_setting.rb index 5013dd547..61c677def 100644 --- a/app/models/laboratory_setting.rb +++ b/app/models/laboratory_setting.rb @@ -6,6 +6,10 @@ # laboratory_id :integer # config :text(65535) # +# Indexes +# +# index_laboratory_settings_on_laboratory_id (laboratory_id) +# class LaboratorySetting < ApplicationRecord belongs_to :laboratory diff --git a/app/models/license.rb b/app/models/license.rb index dcd5528fb..0a14fb85e 100644 --- a/app/models/license.rb +++ b/app/models/license.rb @@ -7,7 +7,6 @@ # content :text(65535) # created_at :datetime not null # updated_at :datetime not null -# is_secret :boolean default("0") # class License < ApplicationRecord diff --git a/app/models/live_link.rb b/app/models/live_link.rb index 9c6531f87..c1c0bf750 100644 --- a/app/models/live_link.rb +++ b/app/models/live_link.rb @@ -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 # belongs_to :course belongs_to :user diff --git a/app/models/member.rb b/app/models/member.rb index 408710a03..e72ae7c6b 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -11,7 +11,6 @@ # course_group_id :integer default("0") # is_collect :integer default("1") # graduation_group_id :integer default("0") -# is_apply_signature :boolean default("0") # # Indexes # diff --git a/app/models/message_detail.rb b/app/models/message_detail.rb index 51f4b17a9..c009b4744 100644 --- a/app/models/message_detail.rb +++ b/app/models/message_detail.rb @@ -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 # belongs_to :message, :touch => true validates :content, length: { maximum: 10000, too_long: "内容不能超过10000个字符" } diff --git a/app/models/organization.rb b/app/models/organization.rb index 48dab55a2..fbf3def79 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -39,13 +39,14 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# platform :string(255) default("0") -# gitea_token :string(255) -# gitea_uid :integer # is_shixun_marker :boolean default("0") +# admin_visitable :boolean default("0") +# collaborator :boolean default("0") +# gitea_uid :integer # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") +# gitea_token :string(255) # # Indexes # @@ -53,8 +54,9 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) -# index_users_on_mail (mail) +# index_users_on_login (login) UNIQUE +# index_users_on_mail (mail) UNIQUE +# index_users_on_phone (phone) UNIQUE # index_users_on_type (type) # diff --git a/app/models/project.rb b/app/models/project.rb index 9aa6283f6..a25d540cc 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -37,8 +37,6 @@ # rep_identifier :string(255) # project_category_id :integer # project_language_id :integer -# license_id :integer -# ignore_id :integer # praises_count :integer default("0") # watchers_count :integer default("0") # issues_count :integer default("0") @@ -52,8 +50,11 @@ # open_devops_count :integer default("0") # recommend :boolean default("0") # platform :integer default("0") +# license_id :integer +# ignore_id :integer # default_branch :string(255) default("master") # website :string(255) +# lesson_url :string(255) # # Indexes # @@ -70,10 +71,6 @@ # index_projects_on_updated_on (updated_on) # - - - - class Project < ApplicationRecord include Matchable include Publicable diff --git a/app/models/project_category.rb b/app/models/project_category.rb index 3a9819816..67b802998 100644 --- a/app/models/project_category.rb +++ b/app/models/project_category.rb @@ -8,11 +8,6 @@ # projects_count :integer default("0") # created_at :datetime not null # updated_at :datetime not null -# ancestry :string(255) -# -# Indexes -# -# index_project_categories_on_ancestry (ancestry) # class ProjectCategory < ApplicationRecord diff --git a/app/models/repository.rb b/app/models/repository.rb index b6d2321fc..978bc3c57 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -25,7 +25,6 @@ # # Indexes # -# index_repositories_on_identifier (identifier) # index_repositories_on_project_id (project_id) # index_repositories_on_user_id (user_id) # diff --git a/app/models/school.rb b/app/models/school.rb index f3b7ac0ab..5b30be9a5 100644 --- a/app/models/school.rb +++ b/app/models/school.rb @@ -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 has_many :departments, dependent: :destroy diff --git a/app/models/trustie/course.rb b/app/models/trustie/course.rb index 6cf6411e1..1c951ad68 100644 --- a/app/models/trustie/course.rb +++ b/app/models/trustie/course.rb @@ -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 has_many :course_groups, class_name: "Trustie::CourseGroup" has_many :homework_commons, class_name: "Trustie::HomeworkCommon" -end \ No newline at end of file +end diff --git a/app/models/trustie/course_group.rb b/app/models/trustie/course_group.rb index d9fee73b3..539ddaa11 100644 --- a/app/models/trustie/course_group.rb +++ b/app/models/trustie/course_group.rb @@ -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 belongs_to :course, class_name: "Trustie::Course" -end \ No newline at end of file +end diff --git a/app/models/trustie/homework_common.rb b/app/models/trustie/homework_common.rb index 70dd31e6a..32af834ef 100644 --- a/app/models/trustie/homework_common.rb +++ b/app/models/trustie/homework_common.rb @@ -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 belongs_to :course, class_name: "Trustie::Course" -end \ No newline at end of file +end diff --git a/app/models/user.rb b/app/models/user.rb index 20b3a8543..2bc2dc2c9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,13 +39,14 @@ # business :boolean default("0") # profile_completed :boolean default("0") # laboratory_id :integer -# platform :string(255) default("0") -# gitea_token :string(255) -# gitea_uid :integer # is_shixun_marker :boolean default("0") +# admin_visitable :boolean default("0") +# collaborator :boolean default("0") +# gitea_uid :integer # is_sync_pwd :boolean default("1") # watchers_count :integer default("0") # devops_step :integer default("0") +# gitea_token :string(255) # # Indexes # @@ -53,8 +54,9 @@ # index_users_on_homepage_engineer (homepage_engineer) # index_users_on_homepage_teacher (homepage_teacher) # index_users_on_laboratory_id (laboratory_id) -# index_users_on_login (login) -# index_users_on_mail (mail) +# index_users_on_login (login) UNIQUE +# index_users_on_mail (mail) UNIQUE +# index_users_on_phone (phone) UNIQUE # index_users_on_type (type) # @@ -190,6 +192,10 @@ class User < Owner validate :validate_sensitive_string validate :validate_password_length + def name + login + end + # 删除自动登录的token,一旦退出下次会提示需要登录 def delete_autologin_token(value) Token.where(:user_id => id, :action => 'autologin', :value => value).delete_all diff --git a/app/models/user_action.rb b/app/models/user_action.rb index 3ad8010ea..179359695 100644 --- a/app/models/user_action.rb +++ b/app/models/user_action.rb @@ -12,7 +12,9 @@ # # 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 diff --git a/app/models/user_agent.rb b/app/models/user_agent.rb index 49d7b35a1..ba519d6fb 100644 --- a/app/models/user_agent.rb +++ b/app/models/user_agent.rb @@ -10,10 +10,13 @@ # updated_at :datetime not null # register_status :integer default("0") # action_status :integer default("0") +# is_delete :boolean default("0") +# user_id :integer # # 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 diff --git a/app/models/user_extension.rb b/app/models/user_extension.rb index 20e2b5c4f..4afd89bd5 100644 --- a/app/models/user_extension.rb +++ b/app/models/user_extension.rb @@ -22,6 +22,9 @@ # school_id :integer # description :string(255) default("") # department_id :integer +# honor :text(65535) +# edu_background :integer +# edu_entry_year :integer # # Indexes # From 3a47c61010c99fa0a43d3775321c0c9df6f713f0 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 10:54:36 +0800 Subject: [PATCH 15/32] add: team nickname --- app/controllers/organizations/teams_controller.rb | 2 +- app/models/team.rb | 1 + app/views/organizations/teams/_detail.json.jbuilder | 1 + db/migrate/20210419023310_add_nickname_to_teams.rb | 5 +++++ 4 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20210419023310_add_nickname_to_teams.rb diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 5bc01fe39..04b748c8a 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -60,7 +60,7 @@ class Organizations::TeamsController < Organizations::BaseController private def team_params - params.permit(:name, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types => []) + params.permit(:name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types => []) end def load_organization diff --git a/app/models/team.rb b/app/models/team.rb index 82a3e88c1..d17827da8 100644 --- a/app/models/team.rb +++ b/app/models/team.rb @@ -14,6 +14,7 @@ # gtid :integer # created_at :datetime not null # updated_at :datetime not null +# nickname :string(255) # # Indexes # diff --git a/app/views/organizations/teams/_detail.json.jbuilder b/app/views/organizations/teams/_detail.json.jbuilder index 4f3588cb9..cb0507b5a 100644 --- a/app/views/organizations/teams/_detail.json.jbuilder +++ b/app/views/organizations/teams/_detail.json.jbuilder @@ -1,5 +1,6 @@ json.id team.id json.name team.name +json.nickname team.nickname json.description team.description json.authorize team.authorize json.includes_all_project team.includes_all_project diff --git a/db/migrate/20210419023310_add_nickname_to_teams.rb b/db/migrate/20210419023310_add_nickname_to_teams.rb new file mode 100644 index 000000000..ed80f1935 --- /dev/null +++ b/db/migrate/20210419023310_add_nickname_to_teams.rb @@ -0,0 +1,5 @@ +class AddNicknameToTeams < ActiveRecord::Migration[5.2] + def change + add_column :teams, :nickname, :string + end +end From f0c4d1226b7666f621545405dcd18ad7eba7b02f Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:26:30 +0800 Subject: [PATCH 16/32] fix: org not need create member --- app/models/project.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index a25d540cc..b4fd7da32 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -158,7 +158,7 @@ class Project < ApplicationRecord #创建项目管理员 def check_project_members - unless members.present? && members.exists?(user_id: self.user_id) + unless members.present? && member?(user_id) member_params = { user_id: self.user_id, project_id: self.id From f75827bcf01f1311a5c955e73f5b44f7eef7d3d1 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:35:12 +0800 Subject: [PATCH 17/32] fix: org not need create member --- app/models/project.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/project.rb b/app/models/project.rb index b4fd7da32..da1a8615b 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -158,7 +158,8 @@ class Project < ApplicationRecord #创建项目管理员 def check_project_members - unless members.present? && member?(user_id) + return if owner.is_a?(Organization) + unless members.present? && members.exists?(user_id: self.user_id) member_params = { user_id: self.user_id, project_id: self.id From 5a9f29c25f42c7e2e6ec4b5ba7d81f0cefe9dba5 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 11:40:38 +0800 Subject: [PATCH 18/32] fix --- app/views/organizations/teams/_detail.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/organizations/teams/_detail.json.jbuilder b/app/views/organizations/teams/_detail.json.jbuilder index cb0507b5a..68572814f 100644 --- a/app/views/organizations/teams/_detail.json.jbuilder +++ b/app/views/organizations/teams/_detail.json.jbuilder @@ -1,6 +1,6 @@ json.id team.id json.name team.name -json.nickname team.nickname +json.nickname team.nickname.blank? ? team.name : team.nickname json.description team.description json.authorize team.authorize json.includes_all_project team.includes_all_project From a3c49b3d5f3ad46e2346b6520503ddefb7dfb759 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:07:12 +0800 Subject: [PATCH 19/32] add: org valid --- app/controllers/organizations/organizations_controller.rb | 1 + app/controllers/organizations/teams_controller.rb | 5 ++++- app/forms/organizations/create_form.rb | 8 ++++++++ app/forms/organizations/create_team_form.rb | 8 ++++++++ .../organizations/organizations/_detail.json.jbuilder | 2 +- 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 app/forms/organizations/create_form.rb create mode 100644 app/forms/organizations/create_team_form.rb diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 73335cf11..09c12fd5a 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -25,6 +25,7 @@ class Organizations::OrganizationsController < Organizations::BaseController def create ActiveRecord::Base.transaction do + Organizations::CreateForm.new(organization_params).validate! @organization = Organizations::CreateService.call(current_user, organization_params) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? end diff --git a/app/controllers/organizations/teams_controller.rb b/app/controllers/organizations/teams_controller.rb index 04b748c8a..a8d06ce46 100644 --- a/app/controllers/organizations/teams_controller.rb +++ b/app/controllers/organizations/teams_controller.rb @@ -33,7 +33,10 @@ class Organizations::TeamsController < Organizations::BaseController end def create - @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + ActiveRecord::Base.transaction do + Organizations::CreateTeamForm.new(team_params).validate! + @team = Organizations::Teams::CreateService.call(current_user, @organization, team_params) + end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/forms/organizations/create_form.rb b/app/forms/organizations/create_form.rb new file mode 100644 index 000000000..00c1dd15e --- /dev/null +++ b/app/forms/organizations/create_form.rb @@ -0,0 +1,8 @@ +class Organizations::CreateForm < BaseForm + NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 + attr_accessor :name, :description, :website, :location, :repo_admin_change_team_access, :visibility, :max_repo_creation, :nickname + + validates :name, :nickname, :visibility, presence: true + validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } + +end diff --git a/app/forms/organizations/create_team_form.rb b/app/forms/organizations/create_team_form.rb new file mode 100644 index 000000000..67b81c5f2 --- /dev/null +++ b/app/forms/organizations/create_team_form.rb @@ -0,0 +1,8 @@ +class Organizations::CreateTeamForm < BaseForm + NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 + attr_accessor :name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types + + validates :name, :nickname, :authorize, :includes_all_project, presence: true + validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } + +end diff --git a/app/views/organizations/organizations/_detail.json.jbuilder b/app/views/organizations/organizations/_detail.json.jbuilder index 64feadca1..4a8b512b9 100644 --- a/app/views/organizations/organizations/_detail.json.jbuilder +++ b/app/views/organizations/organizations/_detail.json.jbuilder @@ -1,6 +1,6 @@ json.id organization.id json.name organization.login -json.nickname organization.nickname +json.nickname organization.nickname.blank? ? organization.name : organization.nickname json.description organization.description json.website organization.website json.location organization.location From 55e081ba2b1f8668dfb1d6eb554b3d8715ebd7a0 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:09:38 +0800 Subject: [PATCH 20/32] fix --- app/forms/organizations/create_team_form.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/forms/organizations/create_team_form.rb b/app/forms/organizations/create_team_form.rb index 67b81c5f2..898d69a1d 100644 --- a/app/forms/organizations/create_team_form.rb +++ b/app/forms/organizations/create_team_form.rb @@ -2,7 +2,7 @@ class Organizations::CreateTeamForm < BaseForm NAME_REGEX = /^(?!_)(?!.*?_$)[a-zA-Z0-9_-]+$/ #只含有数字、字母、下划线不能以下划线开头和结尾 attr_accessor :name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project, :unit_types - validates :name, :nickname, :authorize, :includes_all_project, presence: true + validates :name, :nickname, :authorize, presence: true validates :name, format: { with: NAME_REGEX, multiline: true, message: "只能含有数字、字母、下划线且不能以下划线开头和结尾" } end From 2976742b293aff9745ca74af6bc197ac5665bf21 Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Mon, 19 Apr 2021 12:14:11 +0800 Subject: [PATCH 21/32] fix: org team nickname change error --- app/services/organizations/teams/update_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/organizations/teams/update_service.rb b/app/services/organizations/teams/update_service.rb index 71c82c40b..b5b273d8a 100644 --- a/app/services/organizations/teams/update_service.rb +++ b/app/services/organizations/teams/update_service.rb @@ -27,7 +27,7 @@ class Organizations::Teams::UpdateService < ApplicationService if team.authorize == "owner" update_params = params.slice(:description) else - update_params = params.slice(:name, :description, :authorize, :includes_all_project, :can_create_org_project) + update_params = params.slice(:name, :nickname, :description, :authorize, :includes_all_project, :can_create_org_project) end update_params end From da98efe04f9447266aa48904054414aac977517c Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Tue, 20 Apr 2021 10:49:47 +0800 Subject: [PATCH 22/32] add: org project field --- app/views/organizations/team_projects/_detail.json.jbuilder | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/views/organizations/team_projects/_detail.json.jbuilder b/app/views/organizations/team_projects/_detail.json.jbuilder index 9af32d1df..dde707002 100644 --- a/app/views/organizations/team_projects/_detail.json.jbuilder +++ b/app/views/organizations/team_projects/_detail.json.jbuilder @@ -1,6 +1,7 @@ json.id team_project.id json.project do - json.owner_name team_project&.project&.owner&.login + json.owner_login team_project&.project&.owner&.login + json.owner_name team_project&.project&.owner&.real_name json.owner_image_url url_to_avatar(team_project&.project&.owner) json.name team_project&.project&.name json.identifier team_project&.project&.identifier From 84e48d25c1b5c0327330f8a2a7d4bb197c6e9713 Mon Sep 17 00:00:00 2001 From: jasder Date: Tue, 20 Apr 2021 18:35:41 +0800 Subject: [PATCH 23/32] =?UTF-8?q?FIX=20render=20user=20bug=20with=20=20pul?= =?UTF-8?q?l=E2=80=98s=20commits=20and=20repo's=20commits=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/pull_requests/_commit.json.jbuilder | 4 ++-- app/views/repositories/commits.json.jbuilder | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/views/pull_requests/_commit.json.jbuilder b/app/views/pull_requests/_commit.json.jbuilder index 072e53c91..7a9232efe 100644 --- a/app/views/pull_requests/_commit.json.jbuilder +++ b/app/views/pull_requests/_commit.json.jbuilder @@ -1,10 +1,10 @@ json.author do - author = User.find_by(login: commit['Author']['Name']) + author = User.find_by(mail: commit['Author']['Email']) json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] } end json.committer do - author = User.find_by(login: commit['Committer']['Name']) + author = User.find_by(mail: commit['Committer']['Email']) json.partial! 'repositories/commit_author', locals: { user: author, name: commit['Committer']['Name'] } end json.timestamp render_unix_time(commit['Committer']['When']) diff --git a/app/views/repositories/commits.json.jbuilder b/app/views/repositories/commits.json.jbuilder index 82cd17133..d123daf54 100644 --- a/app/views/repositories/commits.json.jbuilder +++ b/app/views/repositories/commits.json.jbuilder @@ -5,12 +5,15 @@ else json.total_count @hash_commit[:total_count] json.commits do json.array! @hash_commit[:body] do |commit| - json.commit1 commit commiter = commit['committer'] - if commiter.present? - commit_user_id = commiter['id'] - forge_user = User.simple_select.find_by(gitea_uid: commit_user_id) - end + + forge_user = + if commiter.present? + User.simple_select.find_by(mail: commiter['email']) + else + User.simple_select.find_by(mail: commit['commit']['committer']['email']) + end + json.sha commit['sha'] json.message commit['commit']['message'] json.timestamp render_unix_time(commit['commit']['author']['date']) From 45f05c9fc475721efe2769d622f42dea9b74fb20 Mon Sep 17 00:00:00 2001 From: jasder Date: Tue, 20 Apr 2021 18:58:14 +0800 Subject: [PATCH 24/32] FIX render commmiter and author avatar bug --- app/models/user/avatar.rb | 11 ++++++++--- app/views/repositories/_commit_author.json.jbuilder | 2 +- app/views/repositories/commits.json.jbuilder | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb index 7a1a174c3..d6f88bb01 100644 --- a/app/models/user/avatar.rb +++ b/app/models/user/avatar.rb @@ -11,11 +11,16 @@ class User end def get_letter_avatar_url(size = :lg) - avatar_path(size).split('public/')&.last + avatar_path(self.username, size).split('public/')&.last end - def avatar_path(size) - LetterAvatar.generate self.username, avatar_size(size) + def self.get_letter_avatar_url(name, size = :lg) + return "" if name.blank? + avatar_path(Pinyin.t(name), size).split('public/')&.last + end + + def avatar_path(username, size) + LetterAvatar.generate username, avatar_size(size) end # 返回头像尺寸 diff --git a/app/views/repositories/_commit_author.json.jbuilder b/app/views/repositories/_commit_author.json.jbuilder index d57e7c534..fec311426 100644 --- a/app/views/repositories/_commit_author.json.jbuilder +++ b/app/views/repositories/_commit_author.json.jbuilder @@ -7,5 +7,5 @@ else json.id nil json.login name json.name name - json.image_url File.join("avatars/User","b") + json.image_url User.get_letter_avatar_url(name) end diff --git a/app/views/repositories/commits.json.jbuilder b/app/views/repositories/commits.json.jbuilder index d123daf54..750976e55 100644 --- a/app/views/repositories/commits.json.jbuilder +++ b/app/views/repositories/commits.json.jbuilder @@ -26,7 +26,7 @@ else json.login commit['commit']['author']['name'] json.type nil json.name commit['commit']['author']['name'] - json.image_url File.join("avatars/User","b") + json.image_url User.get_letter_avatar_url(commit['commit']['author']['name']) end end end From 002c7737469a8793ccc902f36044175f6744ca96 Mon Sep 17 00:00:00 2001 From: jasder Date: Tue, 20 Apr 2021 19:06:31 +0800 Subject: [PATCH 25/32] FIX code bug --- app/models/user/avatar.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/models/user/avatar.rb b/app/models/user/avatar.rb index d6f88bb01..22f770cdd 100644 --- a/app/models/user/avatar.rb +++ b/app/models/user/avatar.rb @@ -14,9 +14,10 @@ class User avatar_path(self.username, size).split('public/')&.last end - def self.get_letter_avatar_url(name, size = :lg) + def self.get_letter_avatar_url(name) return "" if name.blank? - avatar_path(Pinyin.t(name), size).split('public/')&.last + avatar = LetterAvatar.generate Pinyin.t(name), 120 + avatar.split('public/')&.last end def avatar_path(username, size) From 6a3d297b30aec6b35cb3ff2edfff21188f1c3fbd Mon Sep 17 00:00:00 2001 From: jasder Date: Tue, 20 Apr 2021 19:07:48 +0800 Subject: [PATCH 26/32] FIX code bug --- app/views/repositories/_commit_author.json.jbuilder | 2 +- app/views/repositories/commits.json.jbuilder | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/repositories/_commit_author.json.jbuilder b/app/views/repositories/_commit_author.json.jbuilder index fec311426..1478cca0e 100644 --- a/app/views/repositories/_commit_author.json.jbuilder +++ b/app/views/repositories/_commit_author.json.jbuilder @@ -7,5 +7,5 @@ else json.id nil json.login name json.name name - json.image_url User.get_letter_avatar_url(name) + json.image_url User::Avatar.get_letter_avatar_url(name) end diff --git a/app/views/repositories/commits.json.jbuilder b/app/views/repositories/commits.json.jbuilder index 750976e55..16744858e 100644 --- a/app/views/repositories/commits.json.jbuilder +++ b/app/views/repositories/commits.json.jbuilder @@ -26,7 +26,7 @@ else json.login commit['commit']['author']['name'] json.type nil json.name commit['commit']['author']['name'] - json.image_url User.get_letter_avatar_url(commit['commit']['author']['name']) + json.image_url User::Avatar.get_letter_avatar_url(commit['commit']['author']['name']) end end end From 841778900c25dfc9d083fa8be03d16ef806e99e2 Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 22 Apr 2021 16:35:54 +0800 Subject: [PATCH 27/32] FIX code review --- app/views/users/courses/index.json.jbuilder | 3 -- .../courses/shared/_course.json.jbuilder | 18 ----------- app/views/users/shixuns/index.json.jbuilder | 3 -- .../shixuns/shared/_shixun.json.jbuilder | 10 ------- app/views/users/videos/_video.json.jbuilder | 6 ---- app/views/users/videos/index.json.jbuilder | 2 -- app/views/users/videos/review.json.jbuilder | 7 ----- app/views/users/videos/update.json.jbuilder | 1 - .../weapps/code_sessions/create.json.jbuilder | 3 -- .../weapps/courses/basic_info.json.jbuilder | 8 ----- .../courses/course_activities.json.jbuilder | 12 -------- app/views/weapps/courses/edit.json.jbuilder | 2 -- .../shixun_homework_category.json.jbuilder | 3 -- app/views/weapps/courses/show.json.jbuilder | 4 --- .../weapps/courses/students.json.jbuilder | 7 ----- .../weapps/courses/teachers.json.jbuilder | 3 -- app/views/weapps/homes/show.json.jbuilder | 30 ------------------- .../weapps/registers/create.json.jbuilder | 4 --- app/views/weapps/searchs/index.json.jbuilder | 14 --------- .../weapps/sessions/create.json.jbuilder | 3 -- app/views/weapps/shared/_user.json.jbuilder | 15 ---------- .../weapps/unbind_accounts/show.json.jbuilder | 1 - 22 files changed, 159 deletions(-) delete mode 100644 app/views/users/courses/index.json.jbuilder delete mode 100644 app/views/users/courses/shared/_course.json.jbuilder delete mode 100644 app/views/users/shixuns/index.json.jbuilder delete mode 100644 app/views/users/shixuns/shared/_shixun.json.jbuilder delete mode 100644 app/views/users/videos/_video.json.jbuilder delete mode 100644 app/views/users/videos/index.json.jbuilder delete mode 100644 app/views/users/videos/review.json.jbuilder delete mode 100644 app/views/users/videos/update.json.jbuilder delete mode 100644 app/views/weapps/code_sessions/create.json.jbuilder delete mode 100644 app/views/weapps/courses/basic_info.json.jbuilder delete mode 100644 app/views/weapps/courses/course_activities.json.jbuilder delete mode 100644 app/views/weapps/courses/edit.json.jbuilder delete mode 100644 app/views/weapps/courses/shixun_homework_category.json.jbuilder delete mode 100644 app/views/weapps/courses/show.json.jbuilder delete mode 100644 app/views/weapps/courses/students.json.jbuilder delete mode 100644 app/views/weapps/courses/teachers.json.jbuilder delete mode 100644 app/views/weapps/homes/show.json.jbuilder delete mode 100644 app/views/weapps/registers/create.json.jbuilder delete mode 100644 app/views/weapps/searchs/index.json.jbuilder delete mode 100644 app/views/weapps/sessions/create.json.jbuilder delete mode 100644 app/views/weapps/shared/_user.json.jbuilder delete mode 100644 app/views/weapps/unbind_accounts/show.json.jbuilder diff --git a/app/views/users/courses/index.json.jbuilder b/app/views/users/courses/index.json.jbuilder deleted file mode 100644 index 614e06391..000000000 --- a/app/views/users/courses/index.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ - -json.count @count -json.courses @courses, partial: 'users/courses/shared/course', as: :course diff --git a/app/views/users/courses/shared/_course.json.jbuilder b/app/views/users/courses/shared/_course.json.jbuilder deleted file mode 100644 index a0c5ddc73..000000000 --- a/app/views/users/courses/shared/_course.json.jbuilder +++ /dev/null @@ -1,18 +0,0 @@ -json.id course.id -json.name course.name -# json.members_count course.members_count -json.members_count course.course_members_count -# json.homework_commons_count course.homework_commons_count -json.homework_commons_count get_tasks_count course -json.attachments_count course.attachments.count -json.visits course.visits -json.school course.school&.name - -json.first_category_url module_url(course.course_modules.where(hidden: 0).order(position: :desc).first, course) - -json.is_public course.is_public -json.can_visited observed_logged_user? || course.can_visited? - -json.teacher do - json.partial! 'users/shared/real_user', user: course.teacher -end \ No newline at end of file diff --git a/app/views/users/shixuns/index.json.jbuilder b/app/views/users/shixuns/index.json.jbuilder deleted file mode 100644 index a5321f1cd..000000000 --- a/app/views/users/shixuns/index.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ - -json.count @count -json.shixuns @shixuns, partial: 'users/shixuns/shared/shixun', as: :shixun, locals: { user: observed_user } diff --git a/app/views/users/shixuns/shared/_shixun.json.jbuilder b/app/views/users/shixuns/shared/_shixun.json.jbuilder deleted file mode 100644 index 663522e53..000000000 --- a/app/views/users/shixuns/shared/_shixun.json.jbuilder +++ /dev/null @@ -1,10 +0,0 @@ -json.id shixun.id -json.identifier shixun.identifier -json.tag shixun.first_tag_repertoire&.name -json.image_url url_to_avatar(shixun) -json.name shixun.name -json.status shixun.status -json.human_status shixun.human_status -json.challenges_count shixun.challenges_count -json.finished_challenges_count @finished_challenges_count_map&.fetch(shixun.id, 0) || shixun.finished_challenges_count(user) -json.is_jupyter shixun.is_jupyter \ No newline at end of file diff --git a/app/views/users/videos/_video.json.jbuilder b/app/views/users/videos/_video.json.jbuilder deleted file mode 100644 index 1e09ca4b9..000000000 --- a/app/views/users/videos/_video.json.jbuilder +++ /dev/null @@ -1,6 +0,0 @@ -json.extract! video, :id, :title, :cover_url, :file_url, :play_url, :vv, :user_id - -json.play_duration video.video_play_duration -json.published_at video.display_published_at -json.created_at video.display_created_at -json.updated_at video.display_updated_at \ No newline at end of file diff --git a/app/views/users/videos/index.json.jbuilder b/app/views/users/videos/index.json.jbuilder deleted file mode 100644 index f4a34aa00..000000000 --- a/app/views/users/videos/index.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.count @count -json.videos @videos, partial: 'video', as: :video \ No newline at end of file diff --git a/app/views/users/videos/review.json.jbuilder b/app/views/users/videos/review.json.jbuilder deleted file mode 100644 index 3e0fe8b93..000000000 --- a/app/views/users/videos/review.json.jbuilder +++ /dev/null @@ -1,7 +0,0 @@ -json.count @count -json.videos do - json.array! @videos.each do |video| - json.partial! 'video', video: video - json.file_url nil - end -end \ No newline at end of file diff --git a/app/views/users/videos/update.json.jbuilder b/app/views/users/videos/update.json.jbuilder deleted file mode 100644 index ed69a174c..000000000 --- a/app/views/users/videos/update.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.partial! 'video', video: current_video \ No newline at end of file diff --git a/app/views/weapps/code_sessions/create.json.jbuilder b/app/views/weapps/code_sessions/create.json.jbuilder deleted file mode 100644 index 280086948..000000000 --- a/app/views/weapps/code_sessions/create.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.user do - json.partial! 'weapps/shared/user', locals: { user: current_user } -end \ No newline at end of file diff --git a/app/views/weapps/courses/basic_info.json.jbuilder b/app/views/weapps/courses/basic_info.json.jbuilder deleted file mode 100644 index 09639072d..000000000 --- a/app/views/weapps/courses/basic_info.json.jbuilder +++ /dev/null @@ -1,8 +0,0 @@ -json.course do - json.(@course, :id, :name) - json.code_halt @course.invite_code_halt == 1 - json.invite_code @course.invite_code_halt == 0 ? @course.generate_invite_code : "" - json.teacher_name @course.teacher.real_name - json.teacher_img url_to_avatar(@course.teacher) - json.teacher_school @course.school.try(:name) -end \ No newline at end of file diff --git a/app/views/weapps/courses/course_activities.json.jbuilder b/app/views/weapps/courses/course_activities.json.jbuilder deleted file mode 100644 index 498189cf8..000000000 --- a/app/views/weapps/courses/course_activities.json.jbuilder +++ /dev/null @@ -1,12 +0,0 @@ -json.activities @activities do |activity| - json.(activity, :course_act_id, :course_act_type) - json.author do - user = activity.user - json.name user.real_name - json.login user.login - json.img url_to_avatar(user) - end - json.created_at activity.created_at.strftime('%m-%d %H:%M:') - json.container_name activity.container_name - json.container_type activity.course_act_type == "HomeworkCommon" ? activity.course_act&.homework_type : "" -end \ No newline at end of file diff --git a/app/views/weapps/courses/edit.json.jbuilder b/app/views/weapps/courses/edit.json.jbuilder deleted file mode 100644 index 1b7d5aaa2..000000000 --- a/app/views/weapps/courses/edit.json.jbuilder +++ /dev/null @@ -1,2 +0,0 @@ -json.(@course, :id, :name, :credit, :end_date) -json.course_list_name @course.course_list&.name \ No newline at end of file diff --git a/app/views/weapps/courses/shixun_homework_category.json.jbuilder b/app/views/weapps/courses/shixun_homework_category.json.jbuilder deleted file mode 100644 index b38748597..000000000 --- a/app/views/weapps/courses/shixun_homework_category.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.categories @categories.each do |category| - json.(category, :id, :name) -end \ No newline at end of file diff --git a/app/views/weapps/courses/show.json.jbuilder b/app/views/weapps/courses/show.json.jbuilder deleted file mode 100644 index c22b24426..000000000 --- a/app/views/weapps/courses/show.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.(@course, :id, :name, :course_members_count, :credit, :invite_code_halt) -json.teachers_count @course.teachers.count -json.students_count @course.students.count -json.course_identity @current_user.course_identity(@course) \ No newline at end of file diff --git a/app/views/weapps/courses/students.json.jbuilder b/app/views/weapps/courses/students.json.jbuilder deleted file mode 100644 index 8c51393f0..000000000 --- a/app/views/weapps/courses/students.json.jbuilder +++ /dev/null @@ -1,7 +0,0 @@ -json.students student_list @students, @course.excellent, @user_course_identity -json.students_count @students_count -if @course_group - json.course_group do - json.(@course_group, :id, :name, :invite_code, :course_members_count) - end -end \ No newline at end of file diff --git a/app/views/weapps/courses/teachers.json.jbuilder b/app/views/weapps/courses/teachers.json.jbuilder deleted file mode 100644 index 684c12517..000000000 --- a/app/views/weapps/courses/teachers.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.teacher_list teacher_list(@teacher_list, @user_course_identity) -json.teacher_list_size @teacher_list_size -json.apply_size @applications_size \ No newline at end of file diff --git a/app/views/weapps/homes/show.json.jbuilder b/app/views/weapps/homes/show.json.jbuilder deleted file mode 100644 index f307d64fe..000000000 --- a/app/views/weapps/homes/show.json.jbuilder +++ /dev/null @@ -1,30 +0,0 @@ -json.carousels do - json.array! @carousels do |carousel| - json.extract! carousel, :id, :link, :position - - json.path carousel.link - json.image_url Util::FileManage.source_disk_file_url(carousel) - end -end - -if @advert.present? - json.advert do - json.extract! @advert, :id, :link - json.image_url Util::FileManage.source_disk_file_url(@advert) - end -else - json.advert nil -end - -json.course_count @course_count -json.courses @courses.each do |course| - json.(course, :id, :name, :visits, :course_members_count, :is_end, :invite_code_halt) - json.creator course.teacher.real_name - json.avatar_url url_to_avatar(course.teacher) - json.invite_code course.invite_code_halt == 0 ? course.generate_invite_code : "" - json.school course.school&.name - course_member = @category == "study" ? course.students.where(user_id: @user.id).first : course.teachers.where(user_id: @user.id).first - json.sticky course_member.sticky - json.course_identity current_user.course_identity(course) -end - diff --git a/app/views/weapps/registers/create.json.jbuilder b/app/views/weapps/registers/create.json.jbuilder deleted file mode 100644 index 0cfb5e30f..000000000 --- a/app/views/weapps/registers/create.json.jbuilder +++ /dev/null @@ -1,4 +0,0 @@ -json.status 0 -json.user do - json.partial! 'weapps/shared/user', locals: { user: @user } -end \ No newline at end of file diff --git a/app/views/weapps/searchs/index.json.jbuilder b/app/views/weapps/searchs/index.json.jbuilder deleted file mode 100644 index 11855fb77..000000000 --- a/app/views/weapps/searchs/index.json.jbuilder +++ /dev/null @@ -1,14 +0,0 @@ -json.count @results.total_count -json.results do - json.array! @results.with_highlights(multiple: true) do |obj, highlights| - json.merge! obj.to_searchable_json - json.type obj.class.name.downcase - - json.title highlights.delete(:name)&.join('...') || obj.searchable_title - json.cover url_to_avatar(obj) - - if obj.is_a?(Course) - json.author_avatar_url url_to_avatar(obj.teacher) - end - end -end \ No newline at end of file diff --git a/app/views/weapps/sessions/create.json.jbuilder b/app/views/weapps/sessions/create.json.jbuilder deleted file mode 100644 index 280086948..000000000 --- a/app/views/weapps/sessions/create.json.jbuilder +++ /dev/null @@ -1,3 +0,0 @@ -json.user do - json.partial! 'weapps/shared/user', locals: { user: current_user } -end \ No newline at end of file diff --git a/app/views/weapps/shared/_user.json.jbuilder b/app/views/weapps/shared/_user.json.jbuilder deleted file mode 100644 index 53212ec15..000000000 --- a/app/views/weapps/shared/_user.json.jbuilder +++ /dev/null @@ -1,15 +0,0 @@ -json.username user.full_name -json.real_name user.real_name -json.login user.login -json.user_id user.id -json.image_url url_to_avatar(user) -json.admin user.admin? -json.business user.business? -json.is_teacher user.user_extension&.teacher? -json.user_identity user.identity -json.identity user.user_extension&.identity -json.tidding_count 0 -json.user_phone_binded user.phone.present? -json.phone user.phone -json.profile_completed user.profile_completed? -json.professional_certification user.professional_certification \ No newline at end of file diff --git a/app/views/weapps/unbind_accounts/show.json.jbuilder b/app/views/weapps/unbind_accounts/show.json.jbuilder deleted file mode 100644 index c4223a021..000000000 --- a/app/views/weapps/unbind_accounts/show.json.jbuilder +++ /dev/null @@ -1 +0,0 @@ -json.user_account @user.phone.present? ? @user.phone : (@user.mail.present? ? @user.mail : @user.login) From 908cda56f39e15bceced9ab25017a54dfba9fb7b Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 22 Apr 2021 16:36:40 +0800 Subject: [PATCH 28/32] ADD users/hovercard api --- app/controllers/users_controller.rb | 7 +++++-- app/helpers/application_helper.rb | 6 ------ app/models/concerns/watchable.rb | 19 +++++++++++++++++++ app/models/user.rb | 4 ---- app/views/users/hovercard.json.jbuilder | 15 +++++++++++++++ config/routes.rb | 1 + 6 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 app/views/users/hovercard.json.jbuilder diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 14c296906..7f49ab614 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -2,8 +2,8 @@ class UsersController < ApplicationController include ApplicationHelper include Ci::DbConnectable - 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 :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users, :hovercard] + before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users, :hovercard] before_action :require_login, only: %i[me list sync_user_info] before_action :connect_to_ci_db, only: [:get_user_info] skip_before_action :check_sign, only: [:attachment_show] @@ -56,6 +56,9 @@ class UsersController < ApplicationController @watchers = paginate(watchers) end + def hovercard + end + def update @user = User.find params[:id] @user.update!(user_params) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index b22954bb1..ccc45df0e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -35,12 +35,6 @@ module ApplicationHelper course.course_modules.find_by(module_type: "graduation").try(:id) end - # 是否关注 - # from_user_id为被关注的用户 - def follow?(from_user_id, user_id) - Watcher.where(watchable_type: 'Principal', watchable_id: from_user_id, user_id: user_id).exists? - end - # git用户 # git用户命名规则:login+"@educoder.net" def git_username(email) diff --git a/app/models/concerns/watchable.rb b/app/models/concerns/watchable.rb index 4c52cf99a..3ab43d95a 100644 --- a/app/models/concerns/watchable.rb +++ b/app/models/concerns/watchable.rb @@ -6,6 +6,7 @@ module Watchable has_many :watcher_users, through: :watchers, source: :user, validate: false scope :watched_by, -> (user_id) { includes(:watchers).where(watchers: { user_id: user_id }) } + scope :following, -> (user_id) { watched_by } end def watched?(watchable) @@ -21,6 +22,24 @@ module Watchable obj.destroy! if obj.present? end + # 我正在关注的、我追随的 + def following + User.following(self.id) + end + + def following_count + following.size + end + + # 关注我的、我的粉丝、我的追随者 + def followers + watcher_users + end + + def followers_count + followers.size + end + module ClassMethods end end diff --git a/app/models/user.rb b/app/models/user.rb index 2bc2dc2c9..e16e5ca02 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -137,10 +137,6 @@ class User < Owner has_many :attachments,foreign_key: :author_id, :dependent => :destroy - # 关注 - # has_many :be_watchers, foreign_key: :user_id, dependent: :destroy # 我的关注 - # has_many :be_watcher_users, through: :be_watchers, dependent: :destroy # 我关注的用户 - has_one :ci_cloud_account, class_name: 'Ci::CloudAccount', dependent: :destroy # 认证 diff --git a/app/views/users/hovercard.json.jbuilder b/app/views/users/hovercard.json.jbuilder new file mode 100644 index 000000000..d74a14314 --- /dev/null +++ b/app/views/users/hovercard.json.jbuilder @@ -0,0 +1,15 @@ +json.id @user.id +json.login @user.login +json.name @user.full_name +json.image_url url_to_avatar(@user) +json.url "#{request.base_url }/users/#{@user.login}" +json.followers_count @user.followers_count +json.following_count @user.following_count +json.projects_count @user.projects_count +json.is_watch current_user&.watched?(@user) +json.organizations @user.organizations do |organization| + json.login organization.login + json.name organization.full_name + json.image_url url_to_avatar(organization) + json.url "#{request.base_url }/organize/#{organization.login}" +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 66c9d97af..bbcc29231 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -198,6 +198,7 @@ Rails.application.routes.draw do get :projects get :watch_users get :fan_users + get :hovercard end collection do post :following From d07543111a5722b887deb355e385fb59cb65449b Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 22 Apr 2021 16:42:50 +0800 Subject: [PATCH 29/32] FIX code bug --- app/models/concerns/watchable.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/concerns/watchable.rb b/app/models/concerns/watchable.rb index 3ab43d95a..008d382f3 100644 --- a/app/models/concerns/watchable.rb +++ b/app/models/concerns/watchable.rb @@ -6,7 +6,7 @@ module Watchable has_many :watcher_users, through: :watchers, source: :user, validate: false scope :watched_by, -> (user_id) { includes(:watchers).where(watchers: { user_id: user_id }) } - scope :following, -> (user_id) { watched_by } + scope :following, -> (user_id) { watched_by(user_id) } end def watched?(watchable) From ddacf2a733bd90c0ab33c9be6a47363f15e011a4 Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 22 Apr 2021 16:45:26 +0800 Subject: [PATCH 30/32] FIX get organzition's name bug --- app/views/users/hovercard.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/users/hovercard.json.jbuilder b/app/views/users/hovercard.json.jbuilder index d74a14314..973cc6fa4 100644 --- a/app/views/users/hovercard.json.jbuilder +++ b/app/views/users/hovercard.json.jbuilder @@ -9,7 +9,7 @@ json.projects_count @user.projects_count json.is_watch current_user&.watched?(@user) json.organizations @user.organizations do |organization| json.login organization.login - json.name organization.full_name + json.name organization.real_name json.image_url url_to_avatar(organization) json.url "#{request.base_url }/organize/#{organization.login}" end \ No newline at end of file From 37e17048974e42cf390d3fd03a5af9481c85cbe2 Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 22 Apr 2021 18:10:20 +0800 Subject: [PATCH 31/32] ADD location column for user hovercard api --- app/views/users/hovercard.json.jbuilder | 1 + 1 file changed, 1 insertion(+) diff --git a/app/views/users/hovercard.json.jbuilder b/app/views/users/hovercard.json.jbuilder index 973cc6fa4..43977c9be 100644 --- a/app/views/users/hovercard.json.jbuilder +++ b/app/views/users/hovercard.json.jbuilder @@ -1,6 +1,7 @@ json.id @user.id json.login @user.login json.name @user.full_name +json.location @user.location json.image_url url_to_avatar(@user) json.url "#{request.base_url }/users/#{@user.login}" json.followers_count @user.followers_count From aa314c141cdce9ed0749e9b413049a5383bbbf5e Mon Sep 17 00:00:00 2001 From: jasder Date: Fri, 23 Apr 2021 14:40:26 +0800 Subject: [PATCH 32/32] ADD some url with in hovercoard api --- app/controllers/application_controller.rb | 7 ++++++- app/views/users/hovercard.json.jbuilder | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ee81765a5..6875b8155 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -28,7 +28,7 @@ class ApplicationController < ActionController::Base DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) OPENKEY = "79e33abd4b6588941ab7622aed1e67e8" - helper_method :current_user + helper_method :current_user, :base_url # 所有请求必须合法签名 def check_sign @@ -770,6 +770,11 @@ class ApplicationController < ActionController::Base @repository ||= load_project&.repository end + def base_url + request.base_url + end + + private def object_not_found uid_logger("Missing template or cant't find record, responding with 404") diff --git a/app/views/users/hovercard.json.jbuilder b/app/views/users/hovercard.json.jbuilder index 43977c9be..79f1793fe 100644 --- a/app/views/users/hovercard.json.jbuilder +++ b/app/views/users/hovercard.json.jbuilder @@ -5,12 +5,16 @@ json.location @user.location json.image_url url_to_avatar(@user) json.url "#{request.base_url }/users/#{@user.login}" json.followers_count @user.followers_count +json.followers_url "#{base_url}/users/#{@user.login}/fan_users" json.following_count @user.following_count +json.following_url "#{base_url}/users/#{@user.login}/watchers" +json.projects_count @user.projects_count +json.projects_url "#{base_url}/users/#{@user.login}" json.projects_count @user.projects_count json.is_watch current_user&.watched?(@user) json.organizations @user.organizations do |organization| json.login organization.login json.name organization.real_name json.image_url url_to_avatar(organization) - json.url "#{request.base_url }/organize/#{organization.login}" + json.url "#{base_url}/organize/#{organization.login}" end \ No newline at end of file