forked from Trustie/forgeplus
新增:组织仓库代码搜索功能
This commit is contained in:
parent
bf021a48de
commit
f89188f1a0
|
|
@ -1,5 +1,6 @@
|
|||
class Api::V1::Projects::ExploreCodeController < Api::V1::BaseController
|
||||
before_action :require_login, only: [:index]
|
||||
before_action :require_public_and_member_above, only: [:code]
|
||||
def index
|
||||
@page = params[:page].to_i || 1
|
||||
@keyword = params[:keyword]
|
||||
|
|
@ -9,4 +10,14 @@ class Api::V1::Projects::ExploreCodeController < Api::V1::BaseController
|
|||
return render_error("请输入关键字") if @keyword.blank?
|
||||
@result = Gitea::Repository::GetExploreCodeService.new(@user, @page, @keyword, @language, @query_type).call
|
||||
end
|
||||
|
||||
def code
|
||||
@page = params[:page].to_i || 1
|
||||
@keyword = params[:keyword]
|
||||
@language = params[:language]
|
||||
@query_type = params[:query_type]
|
||||
@user = current_user
|
||||
return render_error("请输入关键字") if @keyword.blank?
|
||||
@result = Gitea::Repository::GetCodeService.new(@project, @user, @page, @keyword, @language, @query_type).call
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
class Api::V1::Users::CodeController < Api::V1::BaseController
|
||||
before_action :load_observe_user
|
||||
before_action :require_login, only: [:index]
|
||||
def index
|
||||
@page = params[:page].to_i || 1
|
||||
@keyword = params[:keyword]
|
||||
@language = params[:language]
|
||||
@query_type = params[:query_type]
|
||||
@user = current_user
|
||||
return render_error("请输入关键字") if @keyword.blank?
|
||||
@result = Gitea::Repository::GetUserCodeService.new(@observe_user, @user, @page, @keyword, @language, @query_type).call
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -4,7 +4,7 @@ module Api::UserHelper
|
|||
def load_observe_user
|
||||
username = params[:owner]
|
||||
|
||||
@observe_user = User.find_by(login: username)
|
||||
@observe_user = User.find_by(login: username) || Organization.find_by(login: username)
|
||||
|
||||
if @observe_user
|
||||
logger.info "###########observe_user not founded"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,41 @@
|
|||
class Gitea::Repository::GetCodeService < Gitea::ClientService
|
||||
attr_reader :project, :user, :keyword, :language, :query_type, :page
|
||||
|
||||
def initialize(project, user, page, keyword, language=nil, query_type=nil)
|
||||
@project = project
|
||||
@user = user
|
||||
@keyword = keyword
|
||||
@language = language
|
||||
@query_type = query_type
|
||||
@page = page
|
||||
@user = user
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params, true)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
params = Hash.new.merge(token: user.gitea_token)
|
||||
params.merge!(keyword: keyword) if keyword.present?
|
||||
params.merge!(language: language) if language.present?
|
||||
params.merge!(query_type: query_type) if query_type.present?
|
||||
params.merge!(page: page) if page.present?
|
||||
params
|
||||
end
|
||||
|
||||
def url
|
||||
"/repos/#{project&.owner&.login}/#{project&.identifier}/code".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
case response.status
|
||||
when 200
|
||||
{total_count: response.headers["x-total-count"], data: JSON.parse(response.body)}
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
class Gitea::Repository::GetUserCodeService < Gitea::ClientService
|
||||
attr_reader :observe_user, :user, :keyword, :language, :query_type, :page
|
||||
|
||||
def initialize(observe_user, user, page, keyword, language=nil, query_type=nil)
|
||||
@observe_user = observe_user
|
||||
@user = user
|
||||
@keyword = keyword
|
||||
@language = language
|
||||
@query_type = query_type
|
||||
@page = page
|
||||
@user = user
|
||||
end
|
||||
|
||||
def call
|
||||
response = get(url, params, true)
|
||||
render_result(response)
|
||||
end
|
||||
|
||||
private
|
||||
def params
|
||||
params = Hash.new.merge(token: user.gitea_token)
|
||||
params.merge!(keyword: keyword) if keyword.present?
|
||||
params.merge!(language: language) if language.present?
|
||||
params.merge!(query_type: query_type) if query_type.present?
|
||||
params.merge!(page: page) if page.present?
|
||||
params
|
||||
end
|
||||
|
||||
def url
|
||||
"/users/#{observe_user.login}/code".freeze
|
||||
end
|
||||
|
||||
def render_result(response)
|
||||
case response.status
|
||||
when 200
|
||||
{total_count: response.headers["x-total-count"], data: JSON.parse(response.body)}
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
json.total_count @result[:total_count]
|
||||
json.results @result[:data]["SearchResults"] do |repo|
|
||||
project = Project.find_by(gpid: repo["RepoID"])
|
||||
json.project do
|
||||
if project.present?
|
||||
json.partial! "api/v1/projects/detail", project: project
|
||||
else
|
||||
json.nil!
|
||||
end
|
||||
end
|
||||
json.filename repo["Filename"]
|
||||
json.language repo["Language"]
|
||||
json.sha repo["Co mmitID"]
|
||||
json.updated_unix repo["UpdatedUnix"]
|
||||
json.line_numbers repo["LineNumbers"]
|
||||
json.formatted_lines repo["FormattedLines"]
|
||||
json.redirect_url Rails.application.config_for(:configuration)['platform_url'] + "/#{project&.owner&.login}/#{project&.identifier}/tree/#{repo["CommitID"][0...10]}/#{repo["Filename"]}" if project.present? && project.owner.present? && repo["CommitID"].present? && repo["Filename"].present?
|
||||
end
|
||||
json.language_results @result[:data]["SearchResultLanguages"] do |language|
|
||||
json.language language["Language"]
|
||||
json.count language["Count"]
|
||||
end
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
json.total_count @result[:total_count]
|
||||
json.results @result[:data]["SearchResults"] do |repo|
|
||||
project = Project.find_by(gpid: repo["RepoID"])
|
||||
json.project do
|
||||
if project.present?
|
||||
json.partial! "api/v1/projects/detail", project: project
|
||||
else
|
||||
json.nil!
|
||||
end
|
||||
end
|
||||
json.filename repo["Filename"]
|
||||
json.language repo["Language"]
|
||||
json.sha repo["CommitID"]
|
||||
json.updated_unix repo["UpdatedUnix"]
|
||||
json.line_numbers repo["LineNumbers"]
|
||||
json.formatted_lines repo["FormattedLines"]
|
||||
json.redirect_url Rails.application.config_for(:configuration)['platform_url'] + "/#{project&.owner&.login}/#{project&.identifier}/tree/#{repo["CommitID"][0...10]}/#{repo["Filename"]}" if project.present? && project.owner.present? && repo["CommitID"].present? && repo["Filename"].present?
|
||||
end
|
||||
json.language_results @result[:data]["SearchResultLanguages"] do |language|
|
||||
json.language language["Language"]
|
||||
json.count language["Count"]
|
||||
end
|
||||
|
|
@ -84,6 +84,7 @@ defaults format: :json do
|
|||
end
|
||||
end
|
||||
scope module: :users do
|
||||
resources :code, only: [:index]
|
||||
resources :projects, only: [:index]
|
||||
resources :feedbacks, only: [:create]
|
||||
resources :home_top_settings, only: [:create] do
|
||||
|
|
@ -258,6 +259,7 @@ defaults format: :json do
|
|||
end
|
||||
end
|
||||
end
|
||||
get '/code', to: 'projects/explore_code#code'
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue