issue的动态

dev_forge
SylorHuang 5 years ago
parent 05cb2181f1
commit 01fb509e75

@ -328,7 +328,7 @@ class ApplicationController < ActionController::Base
def current_user
# User.current
User.find_by_id 36401
User.find_by_id 1
end
## 默认输出json

@ -49,7 +49,7 @@ class IssuesController < ApplicationController
order_name = params[:order_name] || "created_on" #或者"updated_on"
@page = params[:page]
@limit = params[:limit] || "15"
@limit = params[:limit] || 15
@issues = issues.order("#{order_name} #{order_type}")
@issues_size = issues.size
@issues = issues.order("#{order_name} #{order_type}").page(@page).per(@limit)
@ -175,6 +175,7 @@ class IssuesController < ApplicationController
parent_container_id: @project.id, parent_container_type: "Project",
tiding_type: 'issue', status: 0)
end
@issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create")
normal_status(0, "创建成功")
else
normal_status(-1, "创建失败")
@ -300,6 +301,7 @@ class IssuesController < ApplicationController
end
if @issue.update_attribute(:status_id, type)
if type == 5
@issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "close")
@issue.issue_times.update_all(end_time: Time.now)
end
@issue.create_journal_detail(false, [], [])

@ -35,6 +35,8 @@ class JournalsController < ApplicationController
end
end
end
@issue.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "journal")
normal_status(0, "评论成功")
else
normal_status(-1, "评论失败")

@ -0,0 +1,49 @@
class ProjectTrendsController < ApplicationController
before_action :set_project
before_action :check_project_public
def index
@project_issues_count = @project.get_issues_count(nil)
@project_open_issues_count = @project.get_issues_count([1,2,3,4,6])
@project_close_issues_count = @project.get_issues_count(5)
project_trends = @project.project_trends.includes(:user, trend: :user)
check_time = params[:time] #时间的筛选
check_type = params[:type] #动态类型的筛选,目前已知的有 Issue, PullRequest, Version
check_status = params[:status] #类型的选择 "create", "close", "journal",
if check_time.present?
check_time = check_time.to_i
project_trends = project_trends.where("created_at between ? and ?",(Time.now.beginning_of_day - check_time.days), Time.now.end_of_day)
end
if check_type.present?
project_trends = project_trends.where(trend_type: check_type.to_s.titleize)
end
if check_status.present?
project_trends = project_trends.where(action_type: check_status.to_s)
end
project_trends = project_trends.order("created_at desc")
@page = params[:page]
@limit = params[:limit] || 15
@project_trends_size = project_trends.size
@project_trends = project_trends.page(@page).per(@limit)
end
private
def set_project
@project = Project.find_by_id(params[:project_id])
unless @project.present?
normal_status(-1, "项目不存在")
end
end
def check_project_public
unless @project.is_public || @project.member?(current_user) || current_user.admin?
normal_status(-1, "您没有权限")
end
end
end

@ -2,6 +2,7 @@ class Issue < ApplicationRecord
#issue_type 1为普通2为悬赏
belongs_to :project
belongs_to :tracker
has_many :project_trends, as: :trend, dependent: :destroy
# belongs_to :issue_tag,optional: true
belongs_to :priority, :class_name => 'IssuePriority', foreign_key: :priority_id,optional: true #
belongs_to :version, foreign_key: :fixed_version_id,optional: true
@ -17,6 +18,7 @@ class Issue < ApplicationRecord
has_many :issue_times, dependent: :destroy
has_many :issue_depends, dependent: :destroy
scope :issue_includes, ->{includes(:user)}
scope :issue_many_includes, ->{includes(journals: :user)}
def get_assign_user
@ -78,4 +80,8 @@ class Issue < ApplicationRecord
end
end
def only_reply_journals
journals.where.not(notes: [nil, ""]).journal_includes.limit(2)
end
end

@ -9,6 +9,7 @@ class Project < ApplicationRecord
belongs_to :owner, class_name: 'User', foreign_key: :user_id
belongs_to :project_category , :counter_cache => true
belongs_to :project_language , :counter_cache => true
has_many :project_trends, dependent: :destroy
has_many :commits
@ -51,4 +52,13 @@ class Project < ApplicationRecord
self.identifier.parameterize
end
def get_issues_count(status_id)
if status_id.present?
self&.issues.select(:id, :status_id).where(status_id: status_id)&.pluck(:id).size
else
self&.issues.select(:id)&.pluck(:id).size
end
end
end

@ -0,0 +1,5 @@
class ProjectTrend < ApplicationRecord
belongs_to :project
belongs_to :trend, polymorphic: true, optional: true
belongs_to :user
end

@ -166,6 +166,8 @@ class User < ApplicationRecord
has_many :composes, dependent: :destroy
has_many :compose_users, dependent: :destroy
has_many :project_trends, dependent: :destroy
# Groups and active users
scope :active, lambda { where(status: STATUS_ACTIVE) }

@ -0,0 +1,18 @@
json.name issue.subject
json.created_at format_time(issue.created_on)
json.updated_at format_time(issue.updated_on)
json.assign_user_name issue.get_assign_user.try(:show_real_name)
json.assign_user_login issue.get_assign_user.try(:login)
json.issue_journal_size issue.get_journals_size
journals = issue.only_reply_journals
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.content j.try(:notes)
json.created_at time_from_now(j.created_on)
end
end

@ -0,0 +1,24 @@
json.partial! "commons/success"
json.issues_count @project_issues_count
json.open_issues_count @project_open_issues_count
json.close_issues_count @project_close_issues_count
json.limit @limit
json.project_trends_size @project_trends_size
json.project_trends do
json.array! @project_trends.to_a.each do |trend|
json.id trend.id
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_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}
end
#后续需要天际pullrequest 和 版本的内容
end
end

@ -14,6 +14,15 @@ zh-CN:
'processed': '已审批'
'refused': '已拒绝'
'agreed': '已同意'
trend:
Issue: 工单
PullRequest: 合并请求
Version: 版本发布
create: 创建了
journal: 回复了
close: 关闭了
merge: 合并了
push: 发布了
journal_detail:
issue_tags_value: 标签

@ -45,6 +45,7 @@ Rails.application.routes.draw do
resources :licenses, only: [:index, :show]
resources :projects, only: [:index, :create, :show] do
resources :project_trends, only: [:index, :create]
resources :issues do
collection do
get :commit_issues

@ -0,0 +1,12 @@
class CreateProjectTrends < ActiveRecord::Migration[5.2]
def change
create_table :project_trends do |t|
t.integer :user_id
t.integer :project_id
t.references :trend, polymorphic: true, index: true
t.string :action_type
t.timestamps
end
add_index :project_trends, [:user_id, :project_id]
end
end

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