mirror of
https://github.com/wahyd4/libr-2.git
synced 2026-08-09 05:15:53 +10:00
#11 Add each post serializer for post list apis
This commit is contained in:
@@ -40,7 +40,7 @@ class Api::V1::ApplicationController < ActionController::Base
|
||||
end
|
||||
|
||||
def load_post
|
||||
@target_post = Post.find_by id: params[:post_id]
|
||||
@target_post = Post.find_by id: params[:post_id] || params[:id]
|
||||
render json: {msg: '不能找到该文章'}, status: 404 unless @target_post
|
||||
end
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@ class Api::V1::DashboardController < Api::V1::ApplicationController
|
||||
def top
|
||||
case params[:type]
|
||||
when 'web_page'
|
||||
render json: Post.where(type: 'WebPage').order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.where(type: 'WebPage').order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
|
||||
else
|
||||
render json: Post.where(type: 'Article').order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.where(type: 'Article').order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def top_all
|
||||
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class Api::V1::PostsController < Api::V1::ApplicationController
|
||||
|
||||
before_action :permit_params, :map_post_type, :get_post, only: [:create]
|
||||
before_action :load_post, only: [:add_viewed_times]
|
||||
before_action :load_post, only: [:add_viewed_times, :show]
|
||||
|
||||
after_action :process_post, only: :create
|
||||
|
||||
@@ -20,6 +20,7 @@ class Api::V1::PostsController < Api::V1::ApplicationController
|
||||
end
|
||||
|
||||
def show
|
||||
render json: @target_post, serializer: PostSerializer
|
||||
end
|
||||
|
||||
def index
|
||||
@@ -33,12 +34,12 @@ class Api::V1::PostsController < Api::V1::ApplicationController
|
||||
|
||||
def liked_posts
|
||||
ids = Like.where(user_id: @current_user.id).order(:created_at).pluck(:likable_id)
|
||||
render json: Post.where(id: ids).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.where(id: ids).page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
def search
|
||||
params.permit(:keywords)
|
||||
render json: Post.where('title LIKE ?',"%#{params[:keywords]}%").page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.where('title LIKE ?',"%#{params[:keywords]}%").page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -3,11 +3,11 @@ class Api::V1::TimelineController < Api::V1::ApplicationController
|
||||
skip_before_action :authenticate_user_from_token
|
||||
|
||||
def latest
|
||||
render json: Post.order(created_at: :desc).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.order(created_at: :desc).page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
def hottest
|
||||
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: PostSerializer
|
||||
render json: Post.order(viewed_times: :desc).page(params[:page]), each_serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
class EachPostSerializer < ActiveModel::Serializer
|
||||
|
||||
attributes :id, :viewed_times, :url, :title, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
|
||||
:summary, :thumbnail
|
||||
|
||||
def thumbnail
|
||||
object.thumbnail.try(:file).try(:url)
|
||||
end
|
||||
end
|
||||
@@ -1,6 +1,6 @@
|
||||
class PostSerializer < ActiveModel::Serializer
|
||||
|
||||
attributes :id, :viewed_times, :url, :title, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
|
||||
attributes :id, :viewed_times, :url, :title, :content, :type, :processed, :good_format, :created_at, :likes_count, :comments_count,
|
||||
:summary, :thumbnail
|
||||
|
||||
def thumbnail
|
||||
|
||||
@@ -2,5 +2,5 @@ class ShareInstanceSerializer < ActiveModel::Serializer
|
||||
|
||||
attributes :id, :description, :sharable_type
|
||||
|
||||
belongs_to :sharable, serializer: PostSerializer
|
||||
belongs_to :sharable, serializer: EachPostSerializer
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user