From f197f41839383df46de409b1334b6aedeb23acc1 Mon Sep 17 00:00:00 2001 From: "sylor_huang@126.com" Date: Wed, 20 May 2020 14:43:14 +0800 Subject: [PATCH] add version_releases attachments --- app/controllers/hooks_controller.rb | 2 + .../version_releases_controller.rb | 51 ++++++++++++------- app/models/version_release.rb | 2 +- app/views/issues/show.json.jbuilder | 2 +- app/views/version_releases/edit.json.jbuilder | 8 ++- .../version_releases/index.json.jbuilder | 8 ++- 6 files changed, 50 insertions(+), 23 deletions(-) diff --git a/app/controllers/hooks_controller.rb b/app/controllers/hooks_controller.rb index f95488250..92b1d7227 100644 --- a/app/controllers/hooks_controller.rb +++ b/app/controllers/hooks_controller.rb @@ -56,6 +56,8 @@ class HooksController < ApplicationController hook_params = params[:hook_params] Gitea::Hooks::CreateService.new(@user, @repository.try(:identifier), hook_params).call #创建gitea的hook功能 + Gitea::Hooks::CreateService.new(user, p.try(:identifier), hook_params).call #创建gitea的hook功能 + end def update diff --git a/app/controllers/version_releases_controller.rb b/app/controllers/version_releases_controller.rb index 26644050b..8a944475e 100644 --- a/app/controllers/version_releases_controller.rb +++ b/app/controllers/version_releases_controller.rb @@ -8,7 +8,7 @@ class VersionReleasesController < ApplicationController version_releases = Gitea::Versions::ListService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier)).call @version_releases = version_releases @user_permission = current_user.present? && (current_user == @user || current_user.admin?) - + @forge_releases = @repository.version_releases.select(:id,:version_gid).includes(:attachments) end def new @@ -34,14 +34,7 @@ class VersionReleasesController < ApplicationController else ActiveRecord::Base.transaction do begin - version_params = { - body: params[:body], - draft: params[:draft] || false, - name: params[:name].to_s.first(32), - prerelease: params[:prerelease] || false, - tag_name: params[:tag_name], - target_commitish: params[:target_commitish] || "master" #分支 - } + version_params = releases_params version_release = VersionRelease.new(version_params.merge(user_id: current_user.id, repository_id: @repository.id)) if version_release.save! git_version_release = Gitea::Versions::CreateService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier), version_params).call @@ -54,6 +47,9 @@ class VersionReleasesController < ApplicationController } version_release.update_attributes!(update_params) version_release.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") + if params[:attachment_ids].present? + create_attachments(params[:attachment_ids], version_release) + end normal_status(0, "发布成功") else normal_status(-1, "发布失败") @@ -70,7 +66,7 @@ class VersionReleasesController < ApplicationController end def edit - + @version_attachments = @version.attachments end def update @@ -81,19 +77,15 @@ class VersionReleasesController < ApplicationController else ActiveRecord::Base.transaction do begin - version_params = { - body: params[:body], - draft: params[:draft] || false, - name: params[:name], - prerelease: params[:prerelease], - tag_name: params[:tag_name], - target_commitish: params[:target_commitish] || "master" #分支 - } + version_params = releases_params + if @version.update_attributes!(version_params) + create_attachments(params[:attachment_ids], @version) if params[:attachment_ids].present? git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call unless git_version_release raise Error, "更新失败" end + normal_status(0, "更新成功") else normal_status(-1, "更新失败") @@ -148,4 +140,27 @@ class VersionReleasesController < ApplicationController end end + def releases_params + { + body: params[:body], + draft: params[:draft] || false, + name: params[:name], + prerelease: params[:prerelease], + tag_name: params[:tag_name], + target_commitish: params[:target_commitish] || "master" #分支 + } + end + + def create_attachments(attachment_ids, target) + attachment_ids.each do |id| + attachment = Attachment.select(:id, :container_id, :container_type)&.find_by_id(id) + unless attachment.blank? + attachment.container = target + attachment.author_id = current_user.id + attachment.description = "" + attachment.save + end + end + end + end diff --git a/app/models/version_release.rb b/app/models/version_release.rb index 9ed9acee9..7d733fb1f 100644 --- a/app/models/version_release.rb +++ b/app/models/version_release.rb @@ -3,5 +3,5 @@ class VersionRelease < ApplicationRecord belongs_to :user has_many :project_trends, as: :trend, dependent: :destroy scope :releases_size, ->{where(draft: false, prerelease: false).size} - # has_many :attachments, as: :container, dependent: :destroy + has_many :attachments, as: :container, dependent: :destroy end diff --git a/app/views/issues/show.json.jbuilder b/app/views/issues/show.json.jbuilder index e64751375..0624ee439 100644 --- a/app/views/issues/show.json.jbuilder +++ b/app/views/issues/show.json.jbuilder @@ -14,7 +14,7 @@ json.issue_status @issue.issue_status.try(:name) json.priority @issue.priority.try(:name) json.version @issue.version.try(:name) json.issue_tags @issue.get_issue_tags -json.done_ratio @issue.done_ratio.to_s + "%" +json.done_ratio @issue.done_ratio.to_s + "%" json.issue_type @issue.issue_type == "1" ? "普通" : "悬赏" json.token @issue.issue_type == "2" ? @issue.token : "" json.join_users @join_users diff --git a/app/views/version_releases/edit.json.jbuilder b/app/views/version_releases/edit.json.jbuilder index 4fbaca78d..a06413458 100644 --- a/app/views/version_releases/edit.json.jbuilder +++ b/app/views/version_releases/edit.json.jbuilder @@ -1 +1,7 @@ -json.extract! @version, :id, :name, :body, :tag_name, :target_commitish, :draft, :prerelease,:version_gid \ No newline at end of file +json.extract! @version, :id, :name, :body, :tag_name, :target_commitish, :draft, :prerelease,:version_gid + +json.attachments do + json.array! @version_attachments do |attachment| + json.partial! "attachments/attachment_simple", locals: {attachment: attachment} + end +end \ No newline at end of file diff --git a/app/views/version_releases/index.json.jbuilder b/app/views/version_releases/index.json.jbuilder index a026f82bd..6c69fca03 100644 --- a/app/views/version_releases/index.json.jbuilder +++ b/app/views/version_releases/index.json.jbuilder @@ -4,7 +4,7 @@ json.user_permission @user_permission json.releases do json.array! @version_releases.to_a.each do |re| user = User.select(:id, :gitea_uid, :login, :lastname,:firstname, :nickname).find_by_gitea_uid(re["author"]["id"]) - version = VersionRelease.select(:id).find_by_version_gid(re["id"]) + version = @forge_releases.find_by(version_gid: re["id"]) if @user_permission && re["draft"] json.version_id version.try(:id) json.id re["id"] @@ -38,6 +38,10 @@ json.releases do json.image_url user.present? ? url_to_avatar(user) : "" end end - + json.attachments do + json.array! version.attachments do |attachment| + json.partial! "attachments/attachment_simple", locals: {attachment: attachment} + end + end end end