diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d3f65a6bc..843be8bbb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -328,7 +328,7 @@ class ApplicationController < ActionController::Base def current_user # User.current - User.find_by_id 1 + User.find_by_id 36390 end ## 默认输出json diff --git a/app/controllers/version_releases_controller.rb b/app/controllers/version_releases_controller.rb index 52f5f10a2..da3669475 100644 --- a/app/controllers/version_releases_controller.rb +++ b/app/controllers/version_releases_controller.rb @@ -4,13 +4,35 @@ class VersionReleasesController < ApplicationController 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_tags_releases = Gitea::Repository::Tags::ListService.new(@user, @repository.try(:identifier)).call + version_releases = Gitea::Versions::ListService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier)).call + tag_names = [] + if version_releases.length > 0 + version_releases.each do |r| + tag_names.push(r["tag_name"]) + end + end + @version_releases = [] + if tag_names.size > 0 && version_tags_releases.length > 0 + version_tags_releases.each do |r| + if tag_names.include?(r["name"]) + @version_releases.push(r) + end + end + else + @version_releases = version_tags_releases + end + + # @version_releases = version_tags_releases + # @version_releases = Gitea::Versions::ListService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier)).call - @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) + # 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 new @@ -44,7 +66,6 @@ class VersionReleasesController < ApplicationController 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"], @@ -53,6 +74,7 @@ class VersionReleasesController < ApplicationController version_gid: git_version_release["id"], } version_release.update_attributes!(update_params) + version_release.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") normal_status(0, "发布成功") else normal_status(-1, "发布失败") @@ -109,11 +131,15 @@ class VersionReleasesController < ApplicationController ActiveRecord::Base.transaction do begin 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, "删除失败" + git_version_release = Gitea::Versions::DeleteService.new(@user.gitea_token, @repository.try(:login), @repository.try(:identifier), @version.try(:version_gid)).call + + if git_version_release.status == 204 + normal_status(0, "删除成功") + elsif git_version_release.status == 401 + normal_status(0, "发布版本不存在") + else + normal_status(-1, "删除失败") end - normal_status(0, "删除成功") else normal_status(-1, "删除失败") end diff --git a/app/models/project.rb b/app/models/project.rb index 02ecd7a79..9141f0c8c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -29,6 +29,8 @@ class Project < ApplicationRecord has_many :praise_treads, as: :praise_tread_object, dependent: :destroy has_and_belongs_to_many :trackers, :order => "#{Tracker.table_name}.position" + after_save :check_project_members + # 创建者 def creator @@ -40,7 +42,7 @@ class Project < ApplicationRecord end def member?(user) - members.exists?(user_id: user.id) + members.exists?(user_id: user.id) || user.id == self.user_id end def members_user_infos @@ -59,7 +61,20 @@ class Project < ApplicationRecord else self&.issues.select(:id)&.pluck(:id).size end + end + #创建项目管理员 + def check_project_members + unless members.present? && members.exists(user_id: self.user_id) + member_params = { + user_id: self.user_id, + project_id: self.id + } + user_member = Member.new(member_params) + if user_member.save + MemberRole.create(member_id: user_member.id ,role_id: 3) + end + end end end diff --git a/app/models/version_release.rb b/app/models/version_release.rb index 22157e8a0..89907c613 100644 --- a/app/models/version_release.rb +++ b/app/models/version_release.rb @@ -1,4 +1,5 @@ class VersionRelease < ApplicationRecord belongs_to :repository belongs_to :user + has_many :project_trends, as: :trend, dependent: :destroy end diff --git a/app/services/gitea/client_service.rb b/app/services/gitea/client_service.rb index 2995e7207..c5d7f8dfd 100644 --- a/app/services/gitea/client_service.rb +++ b/app/services/gitea/client_service.rb @@ -43,11 +43,10 @@ class Gitea::ClientService < ApplicationService def delete(url, params={}) auth_token = authen_params(params[:token]) - response = conn(auth_token).delete do |req| + conn(auth_token).delete do |req| req.url full_url(url) req.body = params[:data].to_json end - render_status(response) end def update(url, params={}) @@ -55,7 +54,7 @@ class Gitea::ClientService < ApplicationService request_url = [api_url, url].join('').freeze auth_token = authen_params(params[:token]) - response = conn(auth_token).put do |req| + response = conn(auth_token).patch do |req| req.url "#{request_url}" req.body = params[:data].to_json end diff --git a/app/services/gitea/versions/create_service.rb b/app/services/gitea/versions/create_service.rb index 6f9b6e445..de21ad97a 100644 --- a/app/services/gitea/versions/create_service.rb +++ b/app/services/gitea/versions/create_service.rb @@ -28,7 +28,7 @@ class Gitea::Versions::CreateService < Gitea::ClientService end def url - "/repos/#{@user}/#{@repo}/releases".freeze + "/repos/#{@user_name}/#{@repo}/releases".freeze end end diff --git a/app/services/gitea/versions/delete_service.rb b/app/services/gitea/versions/delete_service.rb index 98a649932..08839fc5f 100644 --- a/app/services/gitea/versions/delete_service.rb +++ b/app/services/gitea/versions/delete_service.rb @@ -19,6 +19,7 @@ class Gitea::Versions::DeleteService < Gitea::ClientService end def url - "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze + "/repos/#{@user_name}/#{@repo}/releases/#{@version_gid}".freeze end + end diff --git a/app/services/gitea/versions/list_service.rb b/app/services/gitea/versions/list_service.rb new file mode 100644 index 000000000..40db0d149 --- /dev/null +++ b/app/services/gitea/versions/list_service.rb @@ -0,0 +1,35 @@ +# Get a list of all commits from a repository +class Gitea::Versions::ListService < Gitea::ClientService + attr_reader :token, :user_name, :repo + + # sha: SHA or branch to start listing commits from (usually 'master') + def initialize(token, user_name, repo) + @token = token + @user_name = user_name + @repo = repo + end + + def call + response = get(url, params) + render_result(response) + end + + private + def params + Hash.new.merge(token: token) + end + + def url + "/repos/#{@user_name}/#{@repo}/releases".freeze + end + + def render_result(response) + body = JSON.parse(response.body) + case response.status + when 200 + body + else + {status: -1, message: "#{body['message']}"} + end + end +end diff --git a/app/services/gitea/versions/update_service.rb b/app/services/gitea/versions/update_service.rb index d9bc778e5..6998c7fc9 100644 --- a/app/services/gitea/versions/update_service.rb +++ b/app/services/gitea/versions/update_service.rb @@ -29,7 +29,7 @@ class Gitea::Versions::UpdateService < Gitea::ClientService end def url - "/repos/#{@user}/#{@repo}/releases/#{@version_gid}".freeze + "/repos/#{@user_name}/#{@repo}/releases/#{@version_gid}".freeze end end diff --git a/app/services/projects/migrate_service.rb b/app/services/projects/migrate_service.rb index c29d58a8e..0a5c8dfde 100644 --- a/app/services/projects/migrate_service.rb +++ b/app/services/projects/migrate_service.rb @@ -40,7 +40,8 @@ class Projects::MigrateService < ApplicationService hidden: get_is_public, identifier: params[:repository_name], mirror_url: params[:clone_addr], - user_id: user.id + user_id: user.id, + login: user.login } end diff --git a/app/views/issues/_simple_issue_item.json.jbuilder b/app/views/issues/_simple_issue_item.json.jbuilder index e701d179e..a93582a8a 100644 --- a/app/views/issues/_simple_issue_item.json.jbuilder +++ b/app/views/issues/_simple_issue_item.json.jbuilder @@ -10,7 +10,7 @@ json.issue_journals do json.array! journals.to_a.each do |j| json.user_name j.user.try(:show_real_name) json.user_login j.user.try(:login) - json.user_picture url_to_avatar(j.user) + json.user_avatar url_to_avatar(j.user) json.content j.try(:notes) json.created_at time_from_now(j.created_on) end diff --git a/app/views/project_trends/index.json.jbuilder b/app/views/project_trends/index.json.jbuilder index 1a573007f..e6aefa2f7 100644 --- a/app/views/project_trends/index.json.jbuilder +++ b/app/views/project_trends/index.json.jbuilder @@ -10,11 +10,14 @@ json.project_trends do json.trend_type trend.trend_type json.action_type l("trend.#{trend.action_type}") + l("trend.#{trend.trend_type}") json.trend_id trend.trend_id + json.user_name trend.user.try(:show_real_name) json.user_login trend.user.login json.user_avatar url_to_avatar(trend.user) if trend.trend_type == "Issue" json.partial! "issues/simple_issue_item", locals: {issue: trend.trend} + elsif trend.trend_type == "VersionRelease" + json.partial! "version_releases/simple_version_release", locals: {version: trend.trend} end #后续需要天际pullrequest 和 版本的内容 diff --git a/app/views/version_releases/_simple_version_release.json.jbuilder b/app/views/version_releases/_simple_version_release.json.jbuilder new file mode 100644 index 000000000..5eb3bcc09 --- /dev/null +++ b/app/views/version_releases/_simple_version_release.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! version, :id, :name,:tag_name, :target_commitish, :tarball_url, :zipball_url,:url, :version_gid + diff --git a/app/views/version_releases/index.json.jbuilder b/app/views/version_releases/index.json.jbuilder index c2706aee9..c7462fd77 100644 --- a/app/views/version_releases/index.json.jbuilder +++ b/app/views/version_releases/index.json.jbuilder @@ -1,21 +1,22 @@ 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 \ No newline at end of file +json.releases @version_releases +# 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 \ No newline at end of file diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 63148bbd8..734ba8304 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -17,7 +17,7 @@ zh-CN: trend: Issue: 工单 PullRequest: 合并请求 - Version: 版本发布 + VersionRelease: 版本发布 create: 创建了 journal: 回复了 close: 关闭了