forked from berserker/microblog
Public profile endorsements (accounts picked by profile owner) (#8146)
parent
80176a3814
commit
f2404de871
21 changed files with 298 additions and 6 deletions
@ -0,0 +1,32 @@ |
||||
# frozen_string_literal: true |
||||
|
||||
class Api::V1::Accounts::PinsController < Api::BaseController |
||||
include Authorization |
||||
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:accounts' } |
||||
before_action :require_user! |
||||
before_action :set_account |
||||
|
||||
respond_to :json |
||||
|
||||
def create |
||||
AccountPin.create!(account: current_account, target_account: @account) |
||||
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter |
||||
end |
||||
|
||||
def destroy |
||||
pin = AccountPin.find_by(account: current_account, target_account: @account) |
||||
pin&.destroy! |
||||
render json: @account, serializer: REST::RelationshipSerializer, relationships: relationships_presenter |
||||
end |
||||
|
||||
private |
||||
|
||||
def set_account |
||||
@account = Account.find(params[:account_id]) |
||||
end |
||||
|
||||
def relationships_presenter |
||||
AccountRelationshipsPresenter.new([@account.id], current_user.account_id) |
||||
end |
||||
end |
@ -0,0 +1,26 @@ |
||||
# frozen_string_literal: true |
||||
# == Schema Information |
||||
# |
||||
# Table name: account_pins |
||||
# |
||||
# id :bigint(8) not null, primary key |
||||
# account_id :bigint(8) |
||||
# target_account_id :bigint(8) |
||||
# created_at :datetime not null |
||||
# updated_at :datetime not null |
||||
# |
||||
|
||||
class AccountPin < ApplicationRecord |
||||
include RelationshipCacheable |
||||
|
||||
belongs_to :account |
||||
belongs_to :target_account, class_name: 'Account' |
||||
|
||||
validate :validate_follow_relationship |
||||
|
||||
private |
||||
|
||||
def validate_follow_relationship |
||||
errors.add(:base, I18n.t('accounts.pin_errors.following')) unless account.following?(target_account) |
||||
end |
||||
end |
@ -0,0 +1,12 @@ |
||||
class CreateAccountPins < ActiveRecord::Migration[5.2] |
||||
def change |
||||
create_table :account_pins do |t| |
||||
t.belongs_to :account, foreign_key: { on_delete: :cascade } |
||||
t.belongs_to :target_account, foreign_key: { on_delete: :cascade, to_table: :accounts } |
||||
|
||||
t.timestamps |
||||
end |
||||
|
||||
add_index :account_pins, [:account_id, :target_account_id], unique: true |
||||
end |
||||
end |
@ -0,0 +1,4 @@ |
||||
Fabricator(:account_pin) do |
||||
account nil |
||||
target_account nil |
||||
end |
@ -0,0 +1,5 @@ |
||||
require 'rails_helper' |
||||
|
||||
RSpec.describe AccountPin, type: :model do |
||||
pending "add some examples to (or delete) #{__FILE__}" |
||||
end |
Loading…
Reference in new issue