forked from Gitlink/forgeplus
新增:项目访客记录
This commit is contained in:
parent
78875db3d0
commit
c49a73f6b5
|
@ -0,0 +1,27 @@
|
||||||
|
class Projects::ProjectVisitorsController < Projects::BaseController
|
||||||
|
|
||||||
|
def index
|
||||||
|
project_visitors = @project.project_visitors.joins(:user).order(:created_at)
|
||||||
|
project_visitors = project_visitors.merge(User.like(params[:search]))
|
||||||
|
@project_visitors = kaminari_paginate(project_visitors)
|
||||||
|
end
|
||||||
|
|
||||||
|
def create
|
||||||
|
@project_visitor = @project.project_visitors.new(project_visitor_params.merge!(user_id: current_user.id) )
|
||||||
|
if @project_visitor.save!
|
||||||
|
render_ok
|
||||||
|
else
|
||||||
|
render_error(@project_visitor.errors.full_messages)
|
||||||
|
end
|
||||||
|
rescue Exception => e
|
||||||
|
uid_logger_error(e.message)
|
||||||
|
tip_exception(e.message)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def project_visitor_params
|
||||||
|
params.require(:project_visitor).permit(:contact, :contact_phone, :contact_unit)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
|
@ -25,7 +25,7 @@ class RepositoriesController < ApplicationController
|
||||||
# 新版项目详情
|
# 新版项目详情
|
||||||
def detail
|
def detail
|
||||||
@user = current_user
|
@user = current_user
|
||||||
UserAction.find_or_create_by!(action_id: @user.id, action_type: "ViewProject-#{@project.id}", user_id: @user.id) if @project.actionable
|
# UserAction.find_or_create_by!(action_id: @user.id, action_type: "ViewProject-#{@project.id}", user_id: @user.id) if @project.actionable
|
||||||
@result = Repositories::DetailService.call(@owner, @repository, @user)
|
@result = Repositories::DetailService.call(@owner, @repository, @user)
|
||||||
cache_total_forks = $redis_cache.get("ProjectSpecialForks:#{@project.id}")
|
cache_total_forks = $redis_cache.get("ProjectSpecialForks:#{@project.id}")
|
||||||
if cache_total_forks.present?
|
if cache_total_forks.present?
|
||||||
|
|
|
@ -142,6 +142,7 @@ class Project < ApplicationRecord
|
||||||
has_one :project_dataset, dependent: :destroy
|
has_one :project_dataset, dependent: :destroy
|
||||||
has_many :sync_repositories, dependent: :destroy
|
has_many :sync_repositories, dependent: :destroy
|
||||||
has_many :home_top_settings, as: :top, dependent: :destroy
|
has_many :home_top_settings, as: :top, dependent: :destroy
|
||||||
|
has_many :project_visitors, dependent: :destroy
|
||||||
after_create :incre_user_statistic, :incre_platform_statistic
|
after_create :incre_user_statistic, :incre_platform_statistic
|
||||||
after_save :check_project_members
|
after_save :check_project_members
|
||||||
before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned, :reset_cache_data
|
before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned, :reset_cache_data
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
class ProjectVisitor < ApplicationRecord
|
||||||
|
|
||||||
|
belongs_to :user
|
||||||
|
belongs_to :project
|
||||||
|
|
||||||
|
end
|
|
@ -198,7 +198,7 @@ class User < Owner
|
||||||
scope :like, lambda { |keywords|
|
scope :like, lambda { |keywords|
|
||||||
# 表情处理
|
# 表情处理
|
||||||
keywords = keywords.to_s.each_char.select { |c| c.bytes.first < 240 }.join('')
|
keywords = keywords.to_s.each_char.select { |c| c.bytes.first < 240 }.join('')
|
||||||
sql = "CONCAT(lastname, firstname) LIKE :search OR nickname LIKE :search OR login LIKE :search OR mail LIKE :search OR phone LIKE :search"
|
sql = "CONCAT(users.lastname, users.firstname) LIKE :search OR users.nickname LIKE :search OR users.login LIKE :search OR users.mail LIKE :search OR users.phone LIKE :search"
|
||||||
where(sql, :search => "%#{keywords.strip}%") unless keywords.blank?
|
where(sql, :search => "%#{keywords.strip}%") unless keywords.blank?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
json.total_count @project_visitors.total_count
|
||||||
|
json.project_visitors @project_visitors do |project_visitor|
|
||||||
|
json.id project_visitor.id
|
||||||
|
json.contact project_visitor.contact
|
||||||
|
json.contact_phone project_visitor.contact_phone
|
||||||
|
json.contact_unit project_visitor.contact_unit
|
||||||
|
json.user do
|
||||||
|
json.partial! "/users/user_simple", locals: {user: project_visitor.user}
|
||||||
|
end
|
||||||
|
end
|
|
@ -779,6 +779,11 @@ Rails.application.routes.draw do
|
||||||
end
|
end
|
||||||
|
|
||||||
scope module: :projects do
|
scope module: :projects do
|
||||||
|
resources :project_visitors, only: [:index] do
|
||||||
|
collection do
|
||||||
|
post :create
|
||||||
|
end
|
||||||
|
end
|
||||||
resources :members, only: [:index]
|
resources :members, only: [:index]
|
||||||
resources :teams, only: [:index, :create, :destroy]
|
resources :teams, only: [:index, :create, :destroy]
|
||||||
resources :project_units, only: [:index, :create]
|
resources :project_units, only: [:index, :create]
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
class CreateProjectVisitors < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
create_table :project_visitors do |t|
|
||||||
|
t.references :user
|
||||||
|
t.references :project
|
||||||
|
t.string :contact
|
||||||
|
t.string :contact_phone
|
||||||
|
t.string :contact_unit
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe ProjectVisitor, type: :model do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in New Issue