SELECT application_chat_record_temp.id                     AS id,
       application_chat."id"                               as chat_id,
       application_chat.abstract                           as abstract,
       application_chat_record_temp.problem_text           as problem_text,
       application_chat_record_temp.answer_text            as answer_text,
       application_chat_record_temp.message_tokens         as message_tokens,
       application_chat_record_temp.answer_tokens          as answer_tokens,
       application_chat_record_temp.run_time               as run_time,
       application_chat_record_temp.details::JSON as details, application_chat_record_temp."index" as "index",
       application_chat_record_temp.improve_paragraph_list as improve_paragraph_list,
       application_chat_record_temp.vote_status            as vote_status,
       application_chat_record_temp.vote_reason            as vote_reason,
       application_chat_record_temp.vote_other_content     as vote_other_content,
       application_chat_record_temp.create_time            as create_time,
       (CASE
            WHEN "chat_user".id is NULL THEN application_chat.asker
            ELSE jsonb_build_object('id', chat_user.id, 'username',
                                    chat_user.username) END)::json AS asker, application_chat_record_temp.ip_address as ip_address,
       application_chat_record_temp.source::json AS source
FROM application_chat application_chat
         left join chat_user chat_user on chat_user.id::varchar = application_chat.chat_user_id
	LEFT JOIN (
	SELECT
		*,
	CASE
			WHEN array_length( application_chat_record.improve_paragraph_id_list, 1 ) IS NULL THEN
			'{}' ELSE ( SELECT ARRAY_AGG ( row_to_json ( paragraph ) ) FROM paragraph WHERE "id" = ANY ( application_chat_record.improve_paragraph_id_list ) )
		END as improve_paragraph_list
		FROM
		application_chat_record application_chat_record
	) application_chat_record_temp
ON application_chat_record_temp.chat_id = application_chat."id"
    ${default_queryset}