From 31e8b8384bf4f26b14e0676f2b95e3f579bc040f Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 24 Mar 2026 17:09:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E4=B8=80=E4=BA=9Bjs?= =?UTF-8?q?on=E6=95=B0=E6=8D=AE=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/resident_experts_controller.rb | 2 ++ .../api/v1/users/memos_controller.rb | 18 ++++++++++++++++++ app/models/memo.rb | 5 +++++ .../_resident_expert.json.jbuilder | 17 +++++++++++++++++ .../_user_simple.json.jbuilder | 8 ++++++++ .../v1/resident_experts/current.json.jbuilder | 3 +++ .../api/v1/users/memos/_memo.json.jbuilder | 18 ++++++++++++++++++ .../api/v1/users/memos/index.json.jbuilder | 7 +++++++ 8 files changed, 78 insertions(+) create mode 100644 app/controllers/api/v1/users/memos_controller.rb create mode 100644 app/views/api/v1/resident_experts/_resident_expert.json.jbuilder create mode 100644 app/views/api/v1/users/memos/_memo.json.jbuilder create mode 100644 app/views/api/v1/users/memos/index.json.jbuilder diff --git a/app/controllers/api/v1/resident_experts_controller.rb b/app/controllers/api/v1/resident_experts_controller.rb index 5cf2fc6a0..1ba09d71c 100644 --- a/app/controllers/api/v1/resident_experts_controller.rb +++ b/app/controllers/api/v1/resident_experts_controller.rb @@ -1,4 +1,6 @@ class Api::V1::ResidentExpertsController < Api::V1::BaseController + before_action :require_login, except: [:index] + def index all_resident_experts = ResidentExpert.approved.includes(:user) @resident_experts = all_resident_experts.where(expert_category: params[:expert_category]) if params[:expert_category].present? diff --git a/app/controllers/api/v1/users/memos_controller.rb b/app/controllers/api/v1/users/memos_controller.rb new file mode 100644 index 000000000..2a76433b7 --- /dev/null +++ b/app/controllers/api/v1/users/memos_controller.rb @@ -0,0 +1,18 @@ +class Api::V1::Users::MemosController < Api::V1::BaseController + before_action :load_observe_user + + def index + @resident_expert = @observe_user.resident_expert + @memos = @observe_user.memos.order("#{sort_by} #{sort_direction}") + @memos = kaminari_paginate(@memos) + end + + private + def sort_by + Memo.column_names.include?(params[:sort_by]) ? params[:sort_by] : "created_at" + end + + def sort_direction + %w(asc desc).include?(params[:sort_direction]) ? params[:sort_direction] : "desc" + end +end diff --git a/app/models/memo.rb b/app/models/memo.rb index 2f927b646..850d76fee 100644 --- a/app/models/memo.rb +++ b/app/models/memo.rb @@ -42,6 +42,11 @@ class Memo < ApplicationRecord + include Watchable belongs_to :author, :class_name => "User", foreign_key: :author_id, counter_cache: true + + def meno_tag_name + tag_id.to_i > 3 ? "" : ["", "交流", "求助", "新闻"][tag_id.to_i] + end end diff --git a/app/views/api/v1/resident_experts/_resident_expert.json.jbuilder b/app/views/api/v1/resident_experts/_resident_expert.json.jbuilder new file mode 100644 index 000000000..348dc4b19 --- /dev/null +++ b/app/views/api/v1/resident_experts/_resident_expert.json.jbuilder @@ -0,0 +1,17 @@ +json.user do + json.partial! 'user_simple', locals: { user: resident_expert.user } +end +json.id resident_expert.id +json.name resident_expert.name +json.gender resident_expert.gender +json.expert_category resident_expert.expert_category +json.academic_degree resident_expert.academic_degree +json.department resident_expert.department +json.title resident_expert.title +json.territory_area1 resident_expert.territory_area1 +json.territory_area2 resident_expert.territory_area2 +json.territory_area3 resident_expert.territory_area3 +json.introduction resident_expert.introduction +json.status resident_expert.status +json.created_at resident_expert.created_at.strftime("%Y-%m-%d %H:%M:%S") +json.updated_at resident_expert.updated_at.strftime("%Y-%m-%d %H:%M:%S") \ No newline at end of file diff --git a/app/views/api/v1/resident_experts/_user_simple.json.jbuilder b/app/views/api/v1/resident_experts/_user_simple.json.jbuilder index ddc59a43b..589c9cd65 100644 --- a/app/views/api/v1/resident_experts/_user_simple.json.jbuilder +++ b/app/views/api/v1/resident_experts/_user_simple.json.jbuilder @@ -4,11 +4,19 @@ if user.present? json.name user.real_name json.login user.login json.image_url url_to_avatar(user) + json.admin user.admin + json.identity user.identity json.memos_count user.memos_count + json.fans_count user.watcher_users.size + json.stars_count user.watchers.size else json.name "已注销" json.login user&.login json.type "User" json.image_url Rails.application.config_for(:configuration)['platform_url'] + "/" + "images/account/del.svg" + json.admin false + json.identity nil json.memos_count 0 + json.fans_count 0 + json.stars_count 0 end \ No newline at end of file diff --git a/app/views/api/v1/resident_experts/current.json.jbuilder b/app/views/api/v1/resident_experts/current.json.jbuilder index af0af90f6..94d9ef691 100644 --- a/app/views/api/v1/resident_experts/current.json.jbuilder +++ b/app/views/api/v1/resident_experts/current.json.jbuilder @@ -1,3 +1,6 @@ +json.user do + json.partial! 'user_simple', locals: { user: @resident_expert.user } +end json.id @resident_expert.id json.name @resident_expert.name json.gender @resident_expert.gender diff --git a/app/views/api/v1/users/memos/_memo.json.jbuilder b/app/views/api/v1/users/memos/_memo.json.jbuilder new file mode 100644 index 000000000..a7278b7d1 --- /dev/null +++ b/app/views/api/v1/users/memos/_memo.json.jbuilder @@ -0,0 +1,18 @@ +json.apply_destroy memo.apply_destroy +json.banned_permission memo.banned_permission +json.content memo.content +json.cover_url memo.cover_url +json.forum_section_id memo.forum_section_id +json.forum_section_title memo.forum_section_title +json.id memo.id +json.is_fine memo.is_fine +json.is_original memo.is_original +json.memo_watched current_user.watched?(memo) +json.new_reply memo.new_reply +json.praises_count memo.praises_count +json.published_time memo.published_at.strftime("%Y-%m-%d %H:%M:%S") +json.replies_count memo.replies_count +json.sticky memo.sticky +json.subject memo.subject +json.viewed_count memo.viewed_count +json.tag_name memo.meno_tag_name diff --git a/app/views/api/v1/users/memos/index.json.jbuilder b/app/views/api/v1/users/memos/index.json.jbuilder new file mode 100644 index 000000000..019db1394 --- /dev/null +++ b/app/views/api/v1/users/memos/index.json.jbuilder @@ -0,0 +1,7 @@ +json.total_count @memos.total_count +json.resident_expert do + json.partial! 'api/v1/resident_experts/resident_expert', locals: { resident_expert: @resident_expert } +end +json.memos do |memo| + json.partial! 'api/v1/users/memos/memo', locals: { memo: memo } +end \ No newline at end of file