Browse Source

#282

feature/282
みてるぞ 2 weeks ago
parent
commit
6330a05148
11 changed files with 54 additions and 43 deletions
  1. +2
    -2
      backend/app/controllers/deerjikists_controller.rb
  2. +1
    -1
      backend/app/controllers/nico_tags_controller.rb
  3. +2
    -2
      backend/app/controllers/posts_controller.rb
  4. +1
    -1
      backend/app/controllers/tags_controller.rb
  5. +2
    -2
      backend/app/controllers/wiki_pages_controller.rb
  6. +27
    -3
      backend/app/models/tag.rb
  7. +9
    -15
      backend/app/models/user.rb
  8. +1
    -1
      backend/app/models/wiki_line.rb
  9. +6
    -13
      backend/app/models/wiki_page.rb
  10. +1
    -1
      backend/app/models/wiki_revision.rb
  11. +2
    -2
      backend/spec/requests/tags_spec.rb

+ 2
- 2
backend/app/controllers/deerjikists_controller.rb View File

@@ -17,7 +17,7 @@ class DeerjikistsController < ApplicationController

def update
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

platform = params[:platform].to_s.strip
code = params[:code].to_s.strip
@@ -34,7 +34,7 @@ class DeerjikistsController < ApplicationController

def destroy
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

platform = params[:platform].to_s.strip
code = params[:code].to_s.strip


+ 1
- 1
backend/app/controllers/nico_tags_controller.rb View File

@@ -25,7 +25,7 @@ class NicoTagsController < ApplicationController

def update
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

id = params[:id].to_i



+ 2
- 2
backend/app/controllers/posts_controller.rb View File

@@ -78,7 +78,7 @@ class PostsController < ApplicationController

def create
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

# TODO: サイトに応じて thumbnail_base 設定
title = params[:title].presence
@@ -122,7 +122,7 @@ class PostsController < ApplicationController

def update
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

title = params[:title].presence
tag_names = params[:tags].to_s.split(' ')


+ 1
- 1
backend/app/controllers/tags_controller.rb View File

@@ -109,7 +109,7 @@ class TagsController < ApplicationController

def update
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

name = params[:name].presence
category = params[:category].presence


+ 2
- 2
backend/app/controllers/wiki_pages_controller.rb View File

@@ -83,7 +83,7 @@ class WikiPagesController < ApplicationController

def create
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

name = params[:title]&.strip
body = params[:body].to_s
@@ -105,7 +105,7 @@ class WikiPagesController < ApplicationController

def update
return head :unauthorized unless current_user
return head :forbidden unless current_user.member?
return head :forbidden unless current_user.gte_member?

title = params[:title]&.strip
body = params[:body].to_s


+ 27
- 3
backend/app/models/tag.rb View File

@@ -64,9 +64,7 @@ class Tag < ApplicationRecord
(self.tag_name ||= build_tag_name).name = val
end

def has_wiki
wiki_page.present?
end
def has_wiki = wiki_page.present?

def self.tagme
@tagme ||= find_or_create_by_tag_name!('タグ希望', category: :meta)
@@ -142,6 +140,32 @@ class Tag < ApplicationRecord
retry
end

def self.merge_tags target_tag, source_tags
target_tag => Tag

Tag.transaction do
Array(source_tags).compact.uniq.each do |st|
st => Tag

next if st == target_tag

st.post_tags.find_each do |pt|
begin
pt.update!(tag: target_tag)
rescue ActiveRecord::RecordNotUnique
pt.discard_by!(nil)
end
end

tag_name = st.tag_name
st.destroy!
tag_name.update!(canonical: target_tag.tag_name)
end
end

target_tag
end

private

def nico_tag_name_must_start_with_nico


+ 9
- 15
backend/app/models/user.rb View File

@@ -1,29 +1,23 @@
class User < ApplicationRecord
enum :role, { guest: 'guest', member: 'member', admin: 'admin' }
enum :role, guest: 'guest', member: 'member', admin: 'admin'

validates :name, length: { maximum: 255 }
validates :inheritance_code, presence: true, length: { maximum: 64 }
validates :role, presence: true, inclusion: { in: roles.keys }
validates :banned, inclusion: { in: [true, false] }

has_many :posts
has_many :created_posts,
class_name: 'Post', foreign_key: :uploaded_user_id, dependent: :nullify
has_many :settings
has_many :user_ips, dependent: :destroy
has_many :ip_addresses, through: :user_ips
has_many :user_post_views, dependent: :destroy
has_many :viewed_posts, through: :user_post_views, source: :post
has_many :created_wiki_pages, class_name: 'WikiPage', foreign_key: 'created_user_id', dependent: :nullify
has_many :updated_wiki_pages, class_name: 'WikiPage', foreign_key: 'updated_user_id', dependent: :nullify
has_many :created_wiki_pages,
class_name: 'WikiPage', foreign_key: :created_user_id, dependent: :nullify
has_many :updated_wiki_pages,
class_name: 'WikiPage', foreign_key: :updated_user_id, dependent: :nullify

def viewed? post
user_post_views.exists? post_id: post.id
end

def member?
['member', 'admin'].include?(role)
end

def admin?
role == 'admin'
end
def viewed?(post) = user_post_views.exists?(post_id: post.id)
def gte_member? = member? || admin?
end

+ 1
- 1
backend/app/models/wiki_line.rb View File

@@ -8,7 +8,7 @@ class WikiLine < ApplicationRecord
sha = Digest::SHA256.hexdigest(body)
now = Time.current

upsert({ sha256: sha, body:, created_at: now, updated_at: now })
upsert(sha256: sha, body:, created_at: now, updated_at: now)

find_by!(sha256: sha)
end


+ 6
- 13
backend/app/models/wiki_page.rb View File

@@ -14,17 +14,13 @@ class WikiPage < ApplicationRecord
belongs_to :tag_name
validates :tag_name, presence: true

def title
tag_name.name
end
def title = tag_name.name

def title= val
(self.tag_name ||= build_tag_name).name = val
end

def current_revision
wiki_revisions.order(id: :desc).first
end
def current_revision = wiki_revisions.order(id: :desc).first

def body
rev = current_revision
@@ -49,11 +45,8 @@ class WikiPage < ApplicationRecord
page
end

def pred_revision_id revision_id
wiki_revisions.where('id < ?', revision_id).order(id: :desc).limit(1).pick(:id)
end

def succ_revision_id revision_id
wiki_revisions.where('id > ?', revision_id).order(id: :asc).limit(1).pick(:id)
end
def pred_revision_id(revision_id) =
wiki_revisions.where('id < ?', revision_id).order(id: :desc).limit(1).pick(:id)
def succ_revision_id(revision_id) =
wiki_revisions.where('id > ?', revision_id).order(id: :asc).limit(1).pick(:id)
end

+ 1
- 1
backend/app/models/wiki_revision.rb View File

@@ -7,7 +7,7 @@ class WikiRevision < ApplicationRecord
has_many :wiki_revision_lines, dependent: :delete_all
has_many :wiki_lines, through: :wiki_revision_lines

enum :kind, { content: 0, redirect: 1 }
enum :kind, content: 0, redirect: 1

validates :kind, presence: true
validates :lines_count, numericality: { only_integer: true, greater_than_or_equal_to: 0 }


+ 2
- 2
backend/spec/requests/tags_spec.rb View File

@@ -106,8 +106,8 @@ RSpec.describe 'Tags API', type: :request do
end

before do
allow(member_user).to receive(:member?).and_return(true)
allow(non_member_user).to receive(:member?).and_return(false)
allow(member_user).to receive(:gte_member?).and_return(true)
allow(non_member_user).to receive(:gte_member?).and_return(false)
end

describe "PATCH /tags/:id" do


Loading…
Cancel
Save