parent
							
								
									c1988ef6b3
								
							
						
					
					
						commit
						26e2093f77
					
				| @ -0,0 +1,2 @@ | |||||||
|  | // Place all the behaviors and hooks related to the matching controller here.
 | ||||||
|  | // All this logic will automatically be available in application.js.
 | ||||||
| @ -0,0 +1,3 @@ | |||||||
|  | // Place all the styles related to the version_releases controller here. | ||||||
|  | // They will automatically be included in application.css. | ||||||
|  | // You can use Sass (SCSS) here: http://sass-lang.com/ | ||||||
| @ -0,0 +1,125 @@ | |||||||
|  | class VersionReleasesController < ApplicationController | ||||||
|  |   before_action :set_user_and_project | ||||||
|  |   before_action :require_login, except: [:index] | ||||||
|  |   before_action :find_version , only: [:edit, :update, :destroy] | ||||||
|  | 
 | ||||||
|  |   def index | ||||||
|  |     version_releases = @repository.version_releases.includes(:user) | ||||||
|  |     version_releases = version_releases.where(draft: false) unless current_user.present? && (current_user == @user || current_user.admin?) | ||||||
|  | 
 | ||||||
|  |     @version_releases_size = version_releases.size | ||||||
|  |     page = params[:page] | ||||||
|  |     @limit = params[:limit] || 15 | ||||||
|  |     @version_releases = version_releases.order("created_at desc").page(page).limit(@limit) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def create | ||||||
|  |     if params[:name].nil? | ||||||
|  |       normal_status(-1, "名称不能为空") | ||||||
|  |     elsif params[:tag_name].blank? | ||||||
|  |       normal_status(-1, "标签名称不能为空") | ||||||
|  |     else | ||||||
|  |       ActiveRecord::Base.transaction do | ||||||
|  |         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_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, @repository.try(:login), @repository.try(:identifier), version_params).call | ||||||
|  | 
 | ||||||
|  |           if git_version_release | ||||||
|  |             update_params = { | ||||||
|  |               tarball_url: git_version_release["tarball_url"], | ||||||
|  |               zipball_url: git_version_release["zipball_url"], | ||||||
|  |               url: git_version_release["url"], | ||||||
|  |               version_gid: git_version_release["id"], | ||||||
|  |             } | ||||||
|  |             version_release.update_attributes!(update_params) | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |       rescue => e | ||||||
|  |         puts "create version release error: #{e.message}" | ||||||
|  |         raise Error, e.message | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def edit | ||||||
|  | 
 | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def update | ||||||
|  |     if params[:name].nil? | ||||||
|  |       normal_status(-1, "名称不能为空") | ||||||
|  |     elsif params[:tag_name].blank? | ||||||
|  |       normal_status(-1, "标签名称不能为空") | ||||||
|  |     else | ||||||
|  |       ActiveRecord::Base.transaction do | ||||||
|  |         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"  #分支 | ||||||
|  |         } | ||||||
|  |         if @version.update_attributes!(version_params) | ||||||
|  |           git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call | ||||||
|  |           unless git_version_release | ||||||
|  |             raise Error, "更新失败" | ||||||
|  |           end | ||||||
|  |         end | ||||||
|  |       rescue => e | ||||||
|  |         puts "update version release error: #{e.message}" | ||||||
|  |         raise Error, e.message | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def destroy | ||||||
|  |     ActiveRecord::Base.transaction do | ||||||
|  |       if @version.destroy | ||||||
|  |         git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call | ||||||
|  |         unless git_version_release | ||||||
|  |           raise Error, "删除失败" | ||||||
|  |         end | ||||||
|  |       end | ||||||
|  |     rescue => e | ||||||
|  |       puts "destroy version release error: #{e.message}" | ||||||
|  |       raise Error, e.message | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   # def set_project | ||||||
|  |   #   @project = Project.find_by_id(params[:project_id]) | ||||||
|  |   #   @repository = @project.repository  #项目的仓库 | ||||||
|  |   #   unless @project.present? && @repository.present? | ||||||
|  |   #     normal_status(-1, "仓库不存在") | ||||||
|  |   #   end | ||||||
|  |   # end | ||||||
|  | 
 | ||||||
|  |   def set_user_and_project | ||||||
|  |     @project = Project.find_by_id(params[:project_id]) | ||||||
|  |     @repository = @project.repository  #项目的仓库 | ||||||
|  |     @user = @project.owner | ||||||
|  |     unless @user.present? && @project.present? && @repository.present? | ||||||
|  |       normal_status(-1, "仓库不存在") | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def find_version | ||||||
|  |     @version = VersionRelease.find_by_id(params[:id]) | ||||||
|  |     unless @version.present? | ||||||
|  |       normal_status(-1, "版本不存在") | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | end | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | module VersionReleasesHelper | ||||||
|  | end | ||||||
| @ -0,0 +1,4 @@ | |||||||
|  | class VersionRelease < ApplicationRecord | ||||||
|  |   belongs_to :repository | ||||||
|  |   belongs_to :user | ||||||
|  | end | ||||||
| @ -0,0 +1,34 @@ | |||||||
|  | class Gitea::Versions::CreateService < Gitea::ClientService | ||||||
|  |   attr_reader :token, :user_name, :repo, :params | ||||||
|  | 
 | ||||||
|  |   # params EX: | ||||||
|  |   # { | ||||||
|  |   #   "body": "sylor",  #user_name | ||||||
|  |   #   "draft": false, | ||||||
|  |   #   "name": "string", | ||||||
|  |   #   "prerelease": true, | ||||||
|  |   #   "tag_name": "string", | ||||||
|  |   #   "target_commitish": "string" | ||||||
|  |   # } | ||||||
|  |   def initialize(token, user_name, repo, params) | ||||||
|  |     @token = token | ||||||
|  |     @params = params | ||||||
|  |     @user_name = user_name | ||||||
|  |     @repo = repo | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def call | ||||||
|  |     post(url, request_params) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def request_params | ||||||
|  |     Hash.new.merge(token: token, data: params) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def url | ||||||
|  |     "/repos/#{@user}/#{@repo}/releases".freeze | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | end | ||||||
| @ -0,0 +1,24 @@ | |||||||
|  | class Gitea::Versions::DeleteService < Gitea::ClientService | ||||||
|  |   attr_reader :token, :user_name, :repo,:version_gid | ||||||
|  | 
 | ||||||
|  |   def initialize(token, user_name, repo,version_gid) | ||||||
|  |     @token = token | ||||||
|  |     @user_name = user_name | ||||||
|  |     @repo = repo | ||||||
|  |     @version_gid = version_gid | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def call | ||||||
|  |     delete(url, params) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def params | ||||||
|  |     Hash.new.merge(token: @token) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def url | ||||||
|  |     "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -0,0 +1,35 @@ | |||||||
|  | class Gitea::Versions::UpdateService < Gitea::ClientService | ||||||
|  |   attr_reader :token, :user_name, :repo, :params, :version_gid | ||||||
|  | 
 | ||||||
|  |   # params EX: | ||||||
|  |   # { | ||||||
|  |   #   "body": "sylor",  #user_name | ||||||
|  |   #   "draft": false, | ||||||
|  |   #   "name": "string", | ||||||
|  |   #   "prerelease": true, | ||||||
|  |   #   "tag_name": "string", | ||||||
|  |   #   "target_commitish": "string" | ||||||
|  |   # } | ||||||
|  |   def initialize(token, user_name, repo, params,version_gid) | ||||||
|  |     @token = token | ||||||
|  |     @params = params | ||||||
|  |     @user_name = user_name | ||||||
|  |     @repo = repo | ||||||
|  |     @version_gid = version_gid | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def call | ||||||
|  |     update(url, request_params) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   private | ||||||
|  | 
 | ||||||
|  |   def request_params | ||||||
|  |     Hash.new.merge(token: token, data: params) | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  |   def url | ||||||
|  |     "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze | ||||||
|  |   end | ||||||
|  | 
 | ||||||
|  | end | ||||||
| @ -0,0 +1 @@ | |||||||
|  | json.extract! @version, :id, :name, :body, :tag_name, :target_commitish, :draft, :prerelease,:version_gid | ||||||
| @ -0,0 +1,21 @@ | |||||||
|  | json.partial! "commons/success" | ||||||
|  | json.all_count @version_releases_size | ||||||
|  | json.limit @limit | ||||||
|  | json.version_releases do | ||||||
|  |   json.array! @version_releases.to_a.each do |re| | ||||||
|  |     json.id re.id | ||||||
|  |     json.version_gid re.version_gid | ||||||
|  |     json.name re.name | ||||||
|  |     json.body re.body | ||||||
|  |     json.tag_name re.tag_name | ||||||
|  |     json.target_commitish re.target_commitish | ||||||
|  |     json.release_type re.draft ? "草稿" : (re.prerelease ? "预发行" : "稳定") | ||||||
|  |     json.tarball_url re.tarball_url | ||||||
|  |     json.zipball_url re.zipball_url | ||||||
|  |     json.url re.zipball_url | ||||||
|  |     json.user_login re.user.try(:login) | ||||||
|  |     json.user_avatar url_to_avatar(re.user) | ||||||
|  |     json.created_at format_time(re.created_at) | ||||||
|  |     json.format_created time_from_now(re.created_at) | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -0,0 +1,18 @@ | |||||||
|  | class CreateVersionReleases < ActiveRecord::Migration[5.2] | ||||||
|  |   def change | ||||||
|  |     create_table :version_releases do |t| | ||||||
|  |       t.integer :user_id | ||||||
|  |       t.string :name | ||||||
|  |       t.text :body | ||||||
|  |       t.string :tag_name | ||||||
|  |       t.string :target_commitish | ||||||
|  |       t.boolean :draft, default: false | ||||||
|  |       t.boolean :prerelease, default: false | ||||||
|  |       t.string :tarball_url | ||||||
|  |       t.string :zipball_url | ||||||
|  |       t.string :url | ||||||
|  |       t.string :version_gid | ||||||
|  |       t.timestamps | ||||||
|  |     end | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -0,0 +1,6 @@ | |||||||
|  | class AddProjectIdToVersionRelease < ActiveRecord::Migration[5.2] | ||||||
|  |   def change | ||||||
|  |     add_column :version_releases, :repository_id, :integer | ||||||
|  |     add_index :version_releases, [:repository_id] | ||||||
|  |   end | ||||||
|  | end | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | RSpec.describe VersionReleasesController, type: :controller do | ||||||
|  | 
 | ||||||
|  | end | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | # Specs in this file have access to a helper object that includes | ||||||
|  | # the VersionReleasesHelper. For example: | ||||||
|  | # | ||||||
|  | # describe VersionReleasesHelper do | ||||||
|  | #   describe "string concat" do | ||||||
|  | #     it "concats two strings with spaces" do | ||||||
|  | #       expect(helper.concat_strings("this","that")).to eq("this that") | ||||||
|  | #     end | ||||||
|  | #   end | ||||||
|  | # end | ||||||
|  | RSpec.describe VersionReleasesHelper, type: :helper do | ||||||
|  |   pending "add some examples to (or delete) #{__FILE__}" | ||||||
|  | end | ||||||
| @ -0,0 +1,5 @@ | |||||||
|  | require 'rails_helper' | ||||||
|  | 
 | ||||||
|  | RSpec.describe VersionRelease, type: :model do | ||||||
|  |   pending "add some examples to (or delete) #{__FILE__}" | ||||||
|  | end | ||||||
					Loading…
					
					
				
		Reference in new issue