41 lines
1.3 KiB
Ruby
41 lines
1.3 KiB
Ruby
require_dependency 'post_excerpt_serializer'
|
|
|
|
class ExcerptController < ApplicationController
|
|
|
|
|
|
def show
|
|
requires_parameter(:url)
|
|
|
|
uri = URI.parse(params[:url])
|
|
route = Rails.application.routes.recognize_path(uri.path)
|
|
|
|
case route[:controller]
|
|
when 'topics'
|
|
|
|
# If we have a post number, retrieve the last post. Otherwise, first post.
|
|
topic_posts = Post.where(topic_id: route[:topic_id].to_i).order(:post_number)
|
|
post = route.has_key?(:post_number) ? topic_posts.last : topic_posts.first
|
|
guardian.ensure_can_see!(post)
|
|
|
|
render json: post, serializer: PostExcerptSerializer, root: false
|
|
when 'users'
|
|
user = User.where(username_lower: route[:username].downcase).first
|
|
guardian.ensure_can_see!(user)
|
|
render json: user, serializer: UserExcerptSerializer, root: false
|
|
when 'list'
|
|
if route[:action] == 'category'
|
|
category = Category.where(slug: route[:category]).first
|
|
guardian.ensure_can_see!(category)
|
|
render json: category, serializer: CategoryExcerptSerializer, root: false
|
|
end
|
|
else
|
|
render nothing: true, status: 404
|
|
end
|
|
|
|
rescue ActionController::RoutingError, Discourse::NotFound
|
|
render nothing: true, status: 404
|
|
end
|
|
|
|
|
|
end
|