Compare commits

...
Author SHA1 Message Date
Sojan 1d6d30493b chore: initial commit 2025-01-04 16:26:30 +05:30
3 changed files with 155 additions and 1 deletions
+21 -1
View File
@@ -170,16 +170,36 @@ Rails.application.routes.draw do
end
end
resources :labels, only: [:index, :show, :create, :update, :destroy]
resources :response_sources, only: [:create] do
resources :response_sources do
collection do
post :parse
end
member do
post :add_document
post :remove_document
get :search
post :chat
post :copilot
post :ingest_content
end
end
resources :response_documents do
collection do
post :bulk_create
get :search
end
member do
get :responses
end
end
resources :responses do
collection do
get :search
end
end
end
resources :notifications, only: [:index, :update, :destroy] do
collection do
post :read_all
@@ -0,0 +1,75 @@
class Api::V1::Accounts::ResponseSourcesController < Api::V1::Accounts::BaseController
before_action :current_account
before_action :check_authorization
before_action :find_document, except: [:index, :create, :bulk_create, :search]
before_action :set_current_page, only: [:index, :search]
RESULTS_PER_PAGE = 25
def index
@documents = account.response_documents.page(@current_page).per(RESULTS_PER_PAGE).order(created_at: :desc)
@documents_count = account.response_documents.count
end
def search
documents = account.response_documents.where('external_link ILIKE :query', query: "%#{params[:query]}%")
@documents = documents.page(@current_page).per(RESULTS_PER_PAGE) if documents.present?
@documents_count = documents.count
end
def show
render json: @document
end
def create
document = account.response_documents.new(document_params)
if document.save
render json: document, status: :created
else
render json: { errors: document.errors.full_messages }, status: :unprocessable_entity
end
end
def bulk_create
documents = params[:external_links].map do |doc_params|
account.response_documents.new(doc_params.permit(:name, :external_link).merge(assistant_id: params[:assistant_id]))
end
documents.each do |document|
render json: { errors: document.errors.full_messages }, status: :unprocessable_entity and return unless document.save
end
render json: documents, status: :created
end
def update
if @document.update(document_params.except(:assistant_id, :external_link))
render json: @document
else
render json: { errors: @document.errors.full_messages }, status: :unprocessable_entity
end
end
def destroy
@document.destroy
head :no_content
end
def responses
render json: @document.responses
end
private
def find_document
@document = account.response_documents.find(params[:id])
end
def document_params
params.require(:document).permit(:name, :content, :external_link, :assistant_id, external_links: [:name, :external_link])
end
def set_current_page
@current_page = params[:page] || 1
end
end
@@ -0,0 +1,59 @@
class Api::V1::Accounts::ResponsesController < Api::V1::Accounts::BaseController
before_action :current_account
before_action :check_authorization
before_action :find_response, only: [:show, :update, :destroy]
before_action :set_current_page, only: [:index, :search]
RESULTS_PER_PAGE = 25
def index
@responses = account.responses.page(@current_page).per(RESULTS_PER_PAGE).order(created_at: :desc)
@responses_count = account.responses.count
end
def search
responses = account.responses.where('question ILIKE :query OR answer ILIKE :query', query: "%#{params[:query]}%")
@responses = responses.page(@current_page).per(RESULTS_PER_PAGE) if responses.present?
@responses_count = responses.count
end
def show
render json: @response
end
def create
response = account.responses.new(response_params)
if response.save
render json: response, status: :created
else
render json: { errors: response.errors.full_messages }, status: :unprocessable_entity
end
end
def update
if @response.update(response_params)
render json: @response
else
render json: { errors: @response.errors.full_messages }, status: :unprocessable_entity
end
end
def destroy
@response.destroy
head :no_content
end
private
def response_params
params.require(:response).permit(:question, :answer, :document_id, :assistant_id)
end
def find_response
@response = account.responses.find(params[:id])
end
def set_current_page
@current_page = params[:page] || 1
end
end