diff --git a/app/controllers/organizations/team_projects_controller.rb b/app/controllers/organizations/team_projects_controller.rb index 2badca177..7dfab8e96 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.where(id: project_mark).take || @organization.projects.where(identifier: project_mark).take tip_exception("项目不存在") if @operate_project.nil? end diff --git a/app/docs/slate/source/includes/_teams.md b/app/docs/slate/source/includes/_teams.md index c50f6973a..eaaf6bf63 100644 --- a/app/docs/slate/source/includes/_teams.md +++ b/app/docs/slate/source/includes/_teams.md @@ -1 +1,78 @@ # Teams + +## 团队下新增所有的项目 +团队下新增所有的项目 + +> 示例: + +```shell +curl -X POST \ +http://localhost:3000/api/organizations/ceshi_org/teams/28/team_projects/create_all +``` + +```javascript +await octokit.request('POST /api/organizations/ceshi_org/teams/28/team_projects/create_all.json') +``` + +### HTTP 请求 +`POST /api/organizations/:organization/teams/:id/team_projects/create_all.json` + +### 请求参数: +参数 | 必选 | 默认 | 类型 | 字段说明 +--------- | ------- | ------- | -------- | ---------- +|organization |是| | string |组织标识 | +|id |是| | integer|团队 ID| + +### 返回字段说明: + + +> 返回的JSON示例: + +```json +{ + "status": 0, + "message": "success" +} +``` + + + +## 团队下删除所有的项目 +团队下删除所有的项目 + +> 示例: + +```shell +curl -X DELETE \ +http://localhost:3000/api/organizations/ceshi_org/teams/28/team_projects/destroy_all +``` + +```javascript +await octokit.request('DELETE /api/organizations/ceshi_org/teams/28/team_projects/destroy_all.json') +``` + +### HTTP 请求 +`DELETE /api/organizations/:organization/teams/:id/team_projects/destroy_all.json` + +### 请求参数: +参数 | 必选 | 默认 | 类型 | 字段说明 +--------- | ------- | ------- | -------- | ---------- +|organization |是| | string |组织标识 | +|id |是| | integer|团队 ID| + +### 返回字段说明: + + +> 返回的JSON示例: + +```json +{ + "status": 0, + "message": "success" +} +``` + \ No newline at end of file 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 1c0e4a49c..e78d9654a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -136,7 +136,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 diff --git a/public/docs/api.html b/public/docs/api.html index c43f7c403..b41272321 100644 --- a/public/docs/api.html +++ b/public/docs/api.html @@ -646,6 +646,14 @@
团队下新增所有的项目
+ +++示例:
+
curl -X POST \
+http://localhost:3000/api/organizations/ceshi_org/teams/28/team_projects/create_all
+
await octokit.request('POST /api/organizations/ceshi_org/teams/28/team_projects/create_all.json')
+
POST /api/organizations/:organization/teams/:id/team_projects/create_all.json
参数 | +必选 | +默认 | +类型 | +字段说明 | +
---|---|---|---|---|
organization | +是 | ++ | string | +组织标识 | +
id | +是 | ++ | integer | +团队 ID | +
++返回的JSON示例:
+
{
+ "status": 0,
+ "message": "success"
+}
+
团队下删除所有的项目
+ +++示例:
+
curl -X DELETE \
+http://localhost:3000/api/organizations/ceshi_org/teams/28/team_projects/destroy_all
+
await octokit.request('DELETE /api/organizations/ceshi_org/teams/28/team_projects/destroy_all.json')
+
DELETE /api/organizations/:organization/teams/:id/team_projects/destroy_all.json
参数 | +必选 | +默认 | +类型 | +字段说明 | +
---|---|---|---|---|
organization | +是 | ++ | string | +组织标识 | +
id | +是 | ++ | integer | +团队 ID | +
++返回的JSON示例:
+
{
+ "status": 0,
+ "message": "success"
+}
+