diff --git a/app/controllers/organizations/team_projects_controller.rb b/app/controllers/organizations/team_projects_controller.rb index 2badca177..bbf3264f0 100644 --- a/app/controllers/organizations/team_projects_controller.rb +++ b/app/controllers/organizations/team_projects_controller.rb @@ -21,6 +21,17 @@ class Organizations::TeamProjectsController < Organizations::BaseController tip_exception(e.message) end + def create_all + tip_exception("该组织团队项目包括组织所有项目,不允许更改") if @team.includes_all_project + ActiveRecord::Base.transaction do + @organization.projects.each do |project| + TeamProject.build(@organization.id, @team.id, project.id) + end + Gitea::Organization::TeamProject::CreateAllService.call(@organization.gitea_token, @team.gtid, @organization.login) + render_ok + end + end + def destroy tip_exception("该组织团队项目包括组织所有项目,不允许更改") if @team.includes_all_project ActiveRecord::Base.transaction do @@ -33,6 +44,17 @@ class Organizations::TeamProjectsController < Organizations::BaseController tip_exception(e.message) end + def destroy_all + tip_exception("该组织团队项目包括组织所有项目,不允许更改") if @team.includes_all_project + ActiveRecord::Base.transaction do + @team.team_projects.each do |project| + project.destroy! + end + Gitea::Organization::TeamProject::DeleteAllService.call(@organization.gitea_token, @team.gtid, @organization.login) + render_ok + end + end + private def load_organization @organization = Organization.find_by(login: params[:organization_id]) || Organization.find_by(id: params[:organization_id]) @@ -47,7 +69,7 @@ class Organizations::TeamProjectsController < Organizations::BaseController end def load_operate_project - @operate_project = Project.find_by(id: project_mark) || Project.find_by(identifier: project_mark) + @operate_project = @organization.projects.find_by(id: project_mark) || @organization.find_by(identifier: project_mark) tip_exception("项目不存在") if @operate_project.nil? end diff --git a/app/services/gitea/organization/team_project/create_all_service.rb b/app/services/gitea/organization/team_project/create_all_service.rb new file mode 100644 index 000000000..5ba6b58b2 --- /dev/null +++ b/app/services/gitea/organization/team_project/create_all_service.rb @@ -0,0 +1,23 @@ +class Gitea::Organization::TeamProject::CreateAllService < Gitea::ClientService + attr_reader :token, :gtid, :org_name + + def initialize(token, gtid, org_name) + @token = token + @gtid = gtid + @org_name = org_name + end + + def call + response = put(url, request_params) + render_status(response) + end + + private + def request_params + Hash.new.merge(token: token) + end + + def url + "/teams/#{gtid}/repos/#{org_name}".freeze + end +end \ No newline at end of file diff --git a/app/services/gitea/organization/team_project/delete_all_service.rb b/app/services/gitea/organization/team_project/delete_all_service.rb new file mode 100644 index 000000000..e7b9f932f --- /dev/null +++ b/app/services/gitea/organization/team_project/delete_all_service.rb @@ -0,0 +1,23 @@ +class Gitea::Organization::TeamProject::DeleteAllService < Gitea::ClientService + attr_reader :token, :gtid, :org_name + + def initialize(token, gtid, org_name) + @token = token + @gtid = gtid + @org_name = org_name + end + + def call + response = delete(url, params) + render_status(response) + end + + private + def params + Hash.new.merge(token: token) + end + + def url + "/teams/#{gtid}/repos/#{org_name}".freeze + end +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 5f8f9f74d..01cfe2b7d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -135,7 +135,12 @@ Rails.application.routes.draw do delete :quit end end - resources :team_projects, only: [:index, :create, :destroy] do ;end + resources :team_projects, only: [:index, :create, :destroy] do + collection do + post :create_all + delete :destroy_all + end + end end resources :projects, only: [:index] do collection do