新增:项目访客记录

This commit is contained in:
yystopf 2025-06-10 15:24:43 +08:00
parent 78875db3d0
commit c49a73f6b5
9 changed files with 69 additions and 2 deletions

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -0,0 +1,6 @@
class ProjectVisitor < ApplicationRecord
belongs_to :user
belongs_to :project
end

View File

@ -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?
} }

View File

@ -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

View File

@ -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]

View File

@ -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

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe ProjectVisitor, type: :model do
pending "add some examples to (or delete) #{__FILE__}"
end