add: user pinned projects
This commit is contained in:
parent
422fd35f1e
commit
ea79772bd2
|
@ -0,0 +1,27 @@
|
|||
class Users::IsPinnedProjectsController < Users::BaseController
|
||||
before_action :private_user_resources!, only: [:pin]
|
||||
def index
|
||||
@is_pinned_projects = observed_user.is_pinned_projects.includes(:project_category, :project_language, :repository).order(position: :desc)
|
||||
@is_pinned_projects = kaminari_paginate(@is_pinned_projects)
|
||||
end
|
||||
|
||||
def pin
|
||||
observed_user.is_pinned_project_ids = is_pinned_project_ids
|
||||
render_ok
|
||||
rescue ActiveRecord::RecordNotFound => e
|
||||
render_not_found
|
||||
rescue Exception => e
|
||||
uid_logger_error(e.message)
|
||||
tip_exception(e.message)
|
||||
end
|
||||
|
||||
private
|
||||
def is_pinned_project_ids
|
||||
if params[:is_pinned_project_ids].present?
|
||||
return params[:is_pinned_project_ids].select{|id| observed_user.full_member_projects.pluck(:id).include?(id.to_i) }
|
||||
end
|
||||
if params[:is_pinned_project_id].present?
|
||||
return observed_user.is_pinned_project_ids.include?(params[:is_pinned_project_id].to_i) ? observed_user.is_pinned_project_ids : observed_user.is_pinned_project_ids.push(params[:is_pinned_project_id].to_i)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,7 +1,7 @@
|
|||
<!--
|
||||
* @Date: 2021-03-01 10:35:21
|
||||
* @LastEditors: viletyy
|
||||
* @LastEditTime: 2021-05-27 10:27:14
|
||||
* @LastEditTime: 2021-05-27 14:22:52
|
||||
* @FilePath: /forgeplus/app/docs/slate/source/includes/_users.md
|
||||
-->
|
||||
# Users
|
||||
|
@ -47,6 +47,135 @@ await octokit.request('GET /api/users/me.json')
|
|||
Success Data.
|
||||
</aside>
|
||||
|
||||
## 获取用户星标项目
|
||||
获取用户星标项目
|
||||
|
||||
> 示例:
|
||||
|
||||
```shell
|
||||
curl -X GET http://localhost:3000/api/users/yystopf/is_pinned_projects.json
|
||||
```
|
||||
|
||||
```javascript
|
||||
await octokit.request('GET /api/users/:login/is_pinned_projects.json')
|
||||
```
|
||||
|
||||
### HTTP 请求
|
||||
`GET api/users/:login/is_pinned_projects.json`
|
||||
|
||||
### 返回字段说明:
|
||||
参数 | 类型 | 字段说明
|
||||
--------- | ----------- | -----------
|
||||
|total_count |int |星标项目数量 |
|
||||
|identifier |string |项目标识 |
|
||||
|name |string |项目名称 |
|
||||
|description |string |项目描述 |
|
||||
|visits |int |项目访问数量|
|
||||
|praises_count |int |项目点赞数量|
|
||||
|watchers_count |int |项目关注数量|
|
||||
|issues_count |int |项目issue数量|
|
||||
|pull_requests_count |int |项目合并请求数量|
|
||||
|forked_count |int |项目复刻数量|
|
||||
|is_public |bool |项目是否公开|
|
||||
|mirror_url |string |镜像地址|
|
||||
|type |int |项目类型 0 普通项目 1 普通镜像项目 2 同步镜像项目|
|
||||
|time_ago |string |上次更新时间|
|
||||
|open_devops |int |是否开启devops|
|
||||
|forked_from_project_id |int |fork项目id|
|
||||
|platform |string |项目平台|
|
||||
|author.name |string |项目拥有者名称|
|
||||
|author.type |string |项目拥有者类型|
|
||||
|author.login |string |项目拥有者用户名|
|
||||
|author.image_url |string |项目拥有者头像|
|
||||
|category.name |string |项目分类名称|
|
||||
|language.name |string |项目语言名称|
|
||||
|
||||
|
||||
> 返回的JSON示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"total_count": 1,
|
||||
"projects": [
|
||||
{
|
||||
"id": 89,
|
||||
"repo_id": 89,
|
||||
"identifier": "monkey",
|
||||
"name": "boke",
|
||||
"description": "dkkd",
|
||||
"visits": 4,
|
||||
"praises_count": 0,
|
||||
"watchers_count": 0,
|
||||
"issues_count": 0,
|
||||
"pull_requests_count": 0,
|
||||
"forked_count": 0,
|
||||
"is_public": true,
|
||||
"mirror_url": "https://github.com/viletyy/monkey.git",
|
||||
"type": 1,
|
||||
"last_update_time": 1619685144,
|
||||
"time_ago": "27天前",
|
||||
"forked_from_project_id": null,
|
||||
"open_devops": false,
|
||||
"platform": "forge",
|
||||
"author": {
|
||||
"name": "测试组织",
|
||||
"type": "Organization",
|
||||
"login": "ceshi_org",
|
||||
"image_url": "images/avatars/Organization/9?t=1612706073"
|
||||
},
|
||||
"category": {
|
||||
"id": 3,
|
||||
"name": "深度学习"
|
||||
},
|
||||
"language": {
|
||||
"id": 2,
|
||||
"name": "C"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
<aside class="success">
|
||||
Success Data.
|
||||
</aside>
|
||||
|
||||
## 用户添加星标项目
|
||||
用户添加星标项目
|
||||
|
||||
> 示例:
|
||||
|
||||
```shell
|
||||
curl -X POST http://localhost:3000/api/users/yystopf/is_pinned_projects/pin.json
|
||||
```
|
||||
|
||||
```javascript
|
||||
await octokit.request('GET /api/users/:login/is_pinned_projects/pin.json')
|
||||
```
|
||||
|
||||
### HTTP 请求
|
||||
`POST /api/users/:login/is_pinned_projects/pin.json`
|
||||
|
||||
### 请求字段说明:
|
||||
#### 同时设定多个星标项目
|
||||
参数 | 类型 | 字段说明
|
||||
--------- | ----------- | -----------
|
||||
|is_pinned_project_ids |array |设定为星标项目的id |
|
||||
|
||||
#### 只设定一个星标项目
|
||||
参数 | 类型 | 字段说明
|
||||
--------- | ----------- | -----------
|
||||
|is_pinned_project_id |integer |设定为星标项目的id |
|
||||
|
||||
> 返回的JSON示例:
|
||||
|
||||
```json
|
||||
{
|
||||
"status": 0,
|
||||
"message": "success"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 获取用户贡献度
|
||||
获取用户贡献度
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: pinned_projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# user_id :integer
|
||||
# project_id :integer
|
||||
# position :integer default("0")
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_pinned_projects_on_project_id (project_id)
|
||||
# index_pinned_projects_on_user_id (user_id)
|
||||
#
|
||||
|
||||
class PinnedProject < ApplicationRecord
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :project
|
||||
end
|
|
@ -1,76 +1,76 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) default(""), not null
|
||||
# description :text(4294967295)
|
||||
# homepage :string(255) default("")
|
||||
# is_public :boolean default("1"), not null
|
||||
# parent_id :integer
|
||||
# created_on :datetime
|
||||
# updated_on :datetime
|
||||
# identifier :string(255)
|
||||
# status :integer default("1"), not null
|
||||
# lft :integer
|
||||
# rgt :integer
|
||||
# inherit_members :boolean default("0"), not null
|
||||
# project_type :integer default("0")
|
||||
# hidden_repo :boolean default("0"), not null
|
||||
# attachmenttype :integer default("1")
|
||||
# user_id :integer
|
||||
# dts_test :integer default("0")
|
||||
# enterprise_name :string(255)
|
||||
# organization_id :integer
|
||||
# project_new_type :integer
|
||||
# gpid :integer
|
||||
# forked_from_project_id :integer
|
||||
# forked_count :integer default("0")
|
||||
# publish_resource :integer default("0")
|
||||
# visits :integer default("0")
|
||||
# hot :integer default("0")
|
||||
# invite_code :string(255)
|
||||
# qrcode :string(255)
|
||||
# qrcode_expiretime :integer default("0")
|
||||
# script :text(65535)
|
||||
# training_status :integer default("0")
|
||||
# rep_identifier :string(255)
|
||||
# project_category_id :integer
|
||||
# project_language_id :integer
|
||||
# praises_count :integer default("0")
|
||||
# watchers_count :integer default("0")
|
||||
# issues_count :integer default("0")
|
||||
# pull_requests_count :integer default("0")
|
||||
# language :string(255)
|
||||
# versions_count :integer default("0")
|
||||
# issue_tags_count :integer default("0")
|
||||
# closed_issues_count :integer default("0")
|
||||
# open_devops :boolean default("0")
|
||||
# gitea_webhook_id :integer
|
||||
# open_devops_count :integer default("0")
|
||||
# recommend :boolean default("0")
|
||||
# platform :integer default("0")
|
||||
# license_id :integer
|
||||
# ignore_id :integer
|
||||
# default_branch :string(255) default("master")
|
||||
# website :string(255)
|
||||
# lesson_url :string(255)
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_projects_on_forked_from_project_id (forked_from_project_id)
|
||||
# index_projects_on_identifier (identifier)
|
||||
# index_projects_on_is_public (is_public)
|
||||
# index_projects_on_lft (lft)
|
||||
# index_projects_on_name (name)
|
||||
# index_projects_on_platform (platform)
|
||||
# index_projects_on_project_type (project_type)
|
||||
# index_projects_on_recommend (recommend)
|
||||
# index_projects_on_rgt (rgt)
|
||||
# index_projects_on_status (status)
|
||||
# index_projects_on_updated_on (updated_on)
|
||||
#
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: projects
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# name :string(255) default(""), not null
|
||||
# description :text(4294967295)
|
||||
# homepage :string(255) default("")
|
||||
# is_public :boolean default("1"), not null
|
||||
# parent_id :integer
|
||||
# created_on :datetime
|
||||
# updated_on :datetime
|
||||
# identifier :string(255)
|
||||
# status :integer default("1"), not null
|
||||
# lft :integer
|
||||
# rgt :integer
|
||||
# inherit_members :boolean default("0"), not null
|
||||
# project_type :integer default("0")
|
||||
# hidden_repo :boolean default("0"), not null
|
||||
# attachmenttype :integer default("1")
|
||||
# user_id :integer
|
||||
# dts_test :integer default("0")
|
||||
# enterprise_name :string(255)
|
||||
# organization_id :integer
|
||||
# project_new_type :integer
|
||||
# gpid :integer
|
||||
# forked_from_project_id :integer
|
||||
# forked_count :integer default("0")
|
||||
# publish_resource :integer default("0")
|
||||
# visits :integer default("0")
|
||||
# hot :integer default("0")
|
||||
# invite_code :string(255)
|
||||
# qrcode :string(255)
|
||||
# qrcode_expiretime :integer default("0")
|
||||
# script :text(65535)
|
||||
# training_status :integer default("0")
|
||||
# rep_identifier :string(255)
|
||||
# project_category_id :integer
|
||||
# project_language_id :integer
|
||||
# praises_count :integer default("0")
|
||||
# watchers_count :integer default("0")
|
||||
# issues_count :integer default("0")
|
||||
# pull_requests_count :integer default("0")
|
||||
# language :string(255)
|
||||
# versions_count :integer default("0")
|
||||
# issue_tags_count :integer default("0")
|
||||
# closed_issues_count :integer default("0")
|
||||
# open_devops :boolean default("0")
|
||||
# gitea_webhook_id :integer
|
||||
# open_devops_count :integer default("0")
|
||||
# recommend :boolean default("0")
|
||||
# platform :integer default("0")
|
||||
# license_id :integer
|
||||
# ignore_id :integer
|
||||
# default_branch :string(255) default("master")
|
||||
# website :string(255)
|
||||
# lesson_url :string(255)
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_projects_on_forked_from_project_id (forked_from_project_id)
|
||||
# index_projects_on_identifier (identifier)
|
||||
# index_projects_on_is_public (is_public)
|
||||
# index_projects_on_lft (lft)
|
||||
# index_projects_on_name (name)
|
||||
# index_projects_on_platform (platform)
|
||||
# index_projects_on_project_type (project_type)
|
||||
# index_projects_on_recommend (recommend)
|
||||
# index_projects_on_rgt (rgt)
|
||||
# index_projects_on_status (status)
|
||||
# index_projects_on_updated_on (updated_on)
|
||||
#
|
||||
|
||||
|
||||
class Project < ApplicationRecord
|
||||
include Matchable
|
||||
|
@ -114,6 +114,8 @@ class Project < ApplicationRecord
|
|||
has_many :team_projects, dependent: :destroy
|
||||
has_many :project_units, dependent: :destroy
|
||||
has_one :applied_transfer_project,-> { order created_at: :desc }, dependent: :destroy
|
||||
has_many :pinned_projects, dependent: :destroy
|
||||
has_many :has_pinned_users, through: :pinned_projects, source: :user
|
||||
|
||||
after_save :check_project_members
|
||||
scope :project_statics_select, -> {select(:id,:name, :is_public, :identifier, :status, :project_type, :user_id, :forked_count, :visits, :project_category_id, :project_language_id, :license_id, :ignore_id, :watchers_count, :created_on)}
|
||||
|
|
|
@ -164,6 +164,9 @@ class User < Owner
|
|||
|
||||
has_many :organization_users, dependent: :destroy
|
||||
has_many :organizations, through: :organization_users
|
||||
has_many :pinned_projects, dependent: :destroy
|
||||
has_many :is_pinned_projects, through: :pinned_projects, source: :project
|
||||
accepts_nested_attributes_for :is_pinned_projects
|
||||
|
||||
# Groups and active users
|
||||
scope :active, lambda { where(status: STATUS_ACTIVE) }
|
||||
|
@ -195,6 +198,13 @@ class User < Owner
|
|||
validate :validate_sensitive_string
|
||||
validate :validate_password_length
|
||||
|
||||
# 用户参与的所有项目
|
||||
def full_member_projects
|
||||
normal_projects = Project.members_projects(self.id).to_sql
|
||||
org_projects = Project.joins(team_projects: [team: :team_users]).where(team_users: {user_id: self.id}).to_sql
|
||||
return Project.from("( #{ normal_projects} UNION #{ org_projects } ) AS projects").distinct
|
||||
end
|
||||
|
||||
def name
|
||||
login
|
||||
end
|
||||
|
|
|
@ -5,6 +5,9 @@ json.name project.name
|
|||
json.description Nokogiri::HTML(project.description).text
|
||||
json.visits project.visits
|
||||
json.praises_count project.praises_count.to_i
|
||||
json.watchers_count project.watchers_count.to_i
|
||||
json.issues_count project.issues_count.to_i
|
||||
json.pull_requests_count project.pull_requests_count.to_i
|
||||
json.forked_count project.forked_count.to_i
|
||||
json.is_public project.is_public
|
||||
json.mirror_url project.repository&.mirror_url
|
||||
|
|
|
@ -12,4 +12,5 @@ json.permission render_permission(current_user, @project)
|
|||
json.is_transfering @project.is_transfering
|
||||
json.transfer do
|
||||
json.partial! "/users/user_simple", locals: {user: @project&.applied_transfer_project&.owner}
|
||||
end
|
||||
end
|
||||
json.is_pinned @project.has_pinned_users.include?(current_user)
|
|
@ -0,0 +1,4 @@
|
|||
json.total_count @is_pinned_projects.total_count
|
||||
json.projects @is_pinned_projects.each do |project|
|
||||
json.partial! "projects/project_detail", project: project
|
||||
end
|
|
@ -266,6 +266,11 @@ Rails.application.routes.draw do
|
|||
end
|
||||
end
|
||||
resources :headmaps, only: [:index]
|
||||
resources :is_pinned_projects, only: [:index] do
|
||||
collection do
|
||||
post :pin
|
||||
end
|
||||
end
|
||||
resources :organizations, only: [:index]
|
||||
# resources :projects, only: [:index]
|
||||
# resources :subjects, only: [:index]
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
class CreatePinnedProjects < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :pinned_projects do |t|
|
||||
t.references :user
|
||||
t.references :project
|
||||
t.integer :position, default: 0
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
|
@ -331,6 +331,12 @@
|
|||
<li>
|
||||
<a href="#1ae74893b1" class="toc-h2 toc-link" data-title="获取当前登陆用户信息">获取当前登陆用户信息</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#16a4666845" class="toc-h2 toc-link" data-title="获取用户星标项目">获取用户星标项目</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#3064477f38" class="toc-h2 toc-link" data-title="用户添加星标项目">用户添加星标项目</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#04cb758654" class="toc-h2 toc-link" data-title="获取用户贡献度">获取用户贡献度</a>
|
||||
</li>
|
||||
|
@ -590,7 +596,7 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<!--
|
||||
* @Date: 2021-03-01 10:35:21
|
||||
* @LastEditors: viletyy
|
||||
* @LastEditTime: 2021-05-27 10:27:14
|
||||
* @LastEditTime: 2021-05-27 14:22:52
|
||||
* @FilePath: /forgeplus/app/docs/slate/source/includes/_users.md
|
||||
-->
|
||||
<h1 id='users'>Users</h1><h2 id='1ae74893b1'>获取当前登陆用户信息</h2>
|
||||
|
@ -652,7 +658,235 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<aside class="success">
|
||||
Success Data.
|
||||
</aside>
|
||||
<h2 id='04cb758654'>获取用户贡献度</h2>
|
||||
<h2 id='16a4666845'>获取用户星标项目</h2>
|
||||
<p>获取用户星标项目</p>
|
||||
|
||||
<blockquote>
|
||||
<p>示例:</p>
|
||||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/users/yystopf/is_pinned_projects.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/is_pinned_projects.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-2'>HTTP 请求</h3>
|
||||
<p><code>GET api/users/:login/is_pinned_projects.json</code></p>
|
||||
<h3 id='7447e4874e-2'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
<th>类型</th>
|
||||
<th>字段说明</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>total_count</td>
|
||||
<td>int</td>
|
||||
<td>星标项目数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>identifier</td>
|
||||
<td>string</td>
|
||||
<td>项目标识</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>string</td>
|
||||
<td>项目名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>description</td>
|
||||
<td>string</td>
|
||||
<td>项目描述</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>visits</td>
|
||||
<td>int</td>
|
||||
<td>项目访问数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>praises_count</td>
|
||||
<td>int</td>
|
||||
<td>项目点赞数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>watchers_count</td>
|
||||
<td>int</td>
|
||||
<td>项目关注数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>issues_count</td>
|
||||
<td>int</td>
|
||||
<td>项目issue数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pull_requests_count</td>
|
||||
<td>int</td>
|
||||
<td>项目合并请求数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>forked_count</td>
|
||||
<td>int</td>
|
||||
<td>项目复刻数量</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>is_public</td>
|
||||
<td>bool</td>
|
||||
<td>项目是否公开</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>mirror_url</td>
|
||||
<td>string</td>
|
||||
<td>镜像地址</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>type</td>
|
||||
<td>int</td>
|
||||
<td>项目类型 0 普通项目 1 普通镜像项目 2 同步镜像项目</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>time_ago</td>
|
||||
<td>string</td>
|
||||
<td>上次更新时间</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>open_devops</td>
|
||||
<td>int</td>
|
||||
<td>是否开启devops</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>forked_from_project_id</td>
|
||||
<td>int</td>
|
||||
<td>fork项目id</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>platform</td>
|
||||
<td>string</td>
|
||||
<td>项目平台</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>author.name</td>
|
||||
<td>string</td>
|
||||
<td>项目拥有者名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>author.type</td>
|
||||
<td>string</td>
|
||||
<td>项目拥有者类型</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>author.login</td>
|
||||
<td>string</td>
|
||||
<td>项目拥有者用户名</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>author.image_url</td>
|
||||
<td>string</td>
|
||||
<td>项目拥有者头像</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>category.name</td>
|
||||
<td>string</td>
|
||||
<td>项目分类名称</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>language.name</td>
|
||||
<td>string</td>
|
||||
<td>项目语言名称</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<blockquote>
|
||||
<p>返回的JSON示例:</p>
|
||||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"total_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"projects"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">89</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"repo_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">89</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"identifier"</span><span class="p">:</span><span class="w"> </span><span class="s2">"monkey"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"boke"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"description"</span><span class="p">:</span><span class="w"> </span><span class="s2">"dkkd"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"visits"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"praises_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"watchers_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"issues_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"pull_requests_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"forked_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"is_public"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"mirror_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://github.com/viletyy/monkey.git"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"last_update_time"</span><span class="p">:</span><span class="w"> </span><span class="mi">1619685144</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"time_ago"</span><span class="p">:</span><span class="w"> </span><span class="s2">"27天前"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"forked_from_project_id"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"open_devops"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"platform"</span><span class="p">:</span><span class="w"> </span><span class="s2">"forge"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"author"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"测试组织"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Organization"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"login"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ceshi_org"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"image_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"images/avatars/Organization/9?t=1612706073"</span><span class="w">
|
||||
</span><span class="p">},</span><span class="w">
|
||||
</span><span class="nl">"category"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"深度学习"</span><span class="w">
|
||||
</span><span class="p">},</span><span class="w">
|
||||
</span><span class="nl">"language"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre></div>
|
||||
<aside class="success">
|
||||
Success Data.
|
||||
</aside>
|
||||
<h2 id='3064477f38'>用户添加星标项目</h2>
|
||||
<p>用户添加星标项目</p>
|
||||
|
||||
<blockquote>
|
||||
<p>示例:</p>
|
||||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> POST http://localhost:3000/api/users/yystopf/is_pinned_projects/pin.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/is_pinned_projects/pin.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-3'>HTTP 请求</h3>
|
||||
<p><code>POST /api/users/:login/is_pinned_projects/pin.json</code></p>
|
||||
<h3 id='aa883f5d52'>请求字段说明:</h3><h4 id='0ca7f0efb8'>同时设定多个星标项目</h4>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
<th>类型</th>
|
||||
<th>字段说明</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>is_pinned_project_ids</td>
|
||||
<td>array</td>
|
||||
<td>设定为星标项目的id</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h4 id='f4b9f10991'>只设定一个星标项目</h4>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
<th>类型</th>
|
||||
<th>字段说明</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>is_pinned_project_id</td>
|
||||
<td>integer</td>
|
||||
<td>设定为星标项目的id</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<blockquote>
|
||||
<p>返回的JSON示例:</p>
|
||||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight json tab-json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre></div><h2 id='04cb758654'>获取用户贡献度</h2>
|
||||
<p>获取用户贡献度</p>
|
||||
|
||||
<blockquote>
|
||||
|
@ -660,9 +894,9 @@ Success — a happy kitten is an authenticated kitten!
|
|||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/users/yystopf/headmaps.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/headmaps.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-2'>HTTP 请求</h3>
|
||||
</code></pre></div><h3 id='http-4'>HTTP 请求</h3>
|
||||
<p><code>GET api/users/:login/headmaps.json</code></p>
|
||||
<h3 id='7447e4874e-2'>返回字段说明:</h3>
|
||||
<h3 id='7447e4874e-3'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -791,9 +1025,9 @@ Success — a happy kitten is an authenticated kitten!
|
|||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/users/yystopf/applied_messages.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/applied_messages.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-3'>HTTP 请求</h3>
|
||||
</code></pre></div><h3 id='http-5'>HTTP 请求</h3>
|
||||
<p><code>GET /api/users/:login/applied_messages.json</code></p>
|
||||
<h3 id='aa883f5d52'>请求字段说明:</h3>
|
||||
<h3 id='aa883f5d52-2'>请求字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -807,7 +1041,7 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<td>用户标识</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h3 id='7447e4874e-3'>返回字段说明:</h3>
|
||||
<h3 id='7447e4874e-4'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1028,9 +1262,9 @@ Success — a happy kitten is an authenticated kitten!
|
|||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> GET http://localhost:3000/api/users/yystopf/applied_transfer_projects.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/applied_transfer_projects.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-4'>HTTP 请求</h3>
|
||||
</code></pre></div><h3 id='http-6'>HTTP 请求</h3>
|
||||
<p><code>GET /api/users/:login/applied_transfer_projects.json</code></p>
|
||||
<h3 id='aa883f5d52-2'>请求字段说明:</h3>
|
||||
<h3 id='aa883f5d52-3'>请求字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1044,7 +1278,7 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<td>用户标识</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h3 id='7447e4874e-4'>返回字段说明:</h3>
|
||||
<h3 id='7447e4874e-5'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1220,9 +1454,9 @@ Success — a happy kitten is an authenticated kitten!
|
|||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> POST http://localhost:3000/api/users/yystopf/applied_transfer_projects/2/accept.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/applied_transfer_projects/:id/accept.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-5'>HTTP 请求</h3>
|
||||
</code></pre></div><h3 id='http-7'>HTTP 请求</h3>
|
||||
<p><code>GET /api/users/:login/applied_transfer_projects/:id/accept.json</code></p>
|
||||
<h3 id='aa883f5d52-3'>请求字段说明:</h3>
|
||||
<h3 id='aa883f5d52-4'>请求字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1241,7 +1475,7 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<td>迁移id</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h3 id='7447e4874e-5'>返回字段说明:</h3>
|
||||
<h3 id='7447e4874e-6'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1411,9 +1645,9 @@ Success — a happy kitten is an authenticated kitten!
|
|||
</blockquote>
|
||||
<div class="highlight"><pre class="highlight shell tab-shell"><code>curl <span class="nt">-X</span> POST http://localhost:3000/api/users/yystopf/applied_transfer_projects/2/refuse.json
|
||||
</code></pre></div><div class="highlight"><pre class="highlight javascript tab-javascript"><code><span class="k">await</span> <span class="nx">octokit</span><span class="p">.</span><span class="nx">request</span><span class="p">(</span><span class="dl">'</span><span class="s1">GET /api/users/:login/applied_transfer_projects/:id/refuse.json</span><span class="dl">'</span><span class="p">)</span>
|
||||
</code></pre></div><h3 id='http-6'>HTTP 请求</h3>
|
||||
</code></pre></div><h3 id='http-8'>HTTP 请求</h3>
|
||||
<p><code>GET /api/users/:login/applied_transfer_projects/:id/refuse.json</code></p>
|
||||
<h3 id='aa883f5d52-4'>请求字段说明:</h3>
|
||||
<h3 id='aa883f5d52-5'>请求字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
@ -1432,7 +1666,7 @@ Success — a happy kitten is an authenticated kitten!
|
|||
<td>迁移id</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
<h3 id='7447e4874e-6'>返回字段说明:</h3>
|
||||
<h3 id='7447e4874e-7'>返回字段说明:</h3>
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe PinnedProject, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
end
|
Loading…
Reference in New Issue