forked from chatwoot/chatwoot
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: Knowledge Base APIs (chatwoot#1002)
- Introduce models & migrations for portals, categories, folders and articles - CRUD API for portals - CRUD API for categories Addresses: chatwoot#714 Co-authored-by: Sojan <[email protected]>
- Loading branch information
1 parent
4b27ac6
commit 701eccb
Showing
34 changed files
with
659 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
class Api::V1::Accounts::Kbase::BaseController < Api::V1::Accounts::BaseController | ||
before_action :portal | ||
|
||
private | ||
|
||
def portal | ||
@portal ||= Current.account.kbase_portals.find_by(id: params[:portal_id]) | ||
end | ||
end |
32 changes: 32 additions & 0 deletions
32
app/controllers/api/v1/accounts/kbase/categories_controller.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
class Api::V1::Accounts::Kbase::CategoriesController < Api::V1::Accounts::Kbase::BaseController | ||
before_action :fetch_category, except: [:index, :create] | ||
|
||
def index | ||
@categories = @portal.categories | ||
end | ||
|
||
def create | ||
@category = @portal.categories.create!(category_params) | ||
end | ||
|
||
def update | ||
@category.update!(category_params) | ||
end | ||
|
||
def destroy | ||
@category.destroy | ||
head :ok | ||
end | ||
|
||
private | ||
|
||
def fetch_category | ||
@category = @portal.categories.find(params[:id]) | ||
end | ||
|
||
def category_params | ||
params.require(:category).permit( | ||
:name, :description, :position | ||
) | ||
end | ||
end |
32 changes: 32 additions & 0 deletions
32
app/controllers/api/v1/accounts/kbase/portals_controller.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
class Api::V1::Accounts::Kbase::PortalsController < Api::V1::Accounts::Kbase::BaseController | ||
before_action :fetch_portal, except: [:index, :create] | ||
|
||
def index | ||
@portals = Current.account.kbase_portals | ||
end | ||
|
||
def create | ||
@portal = Current.account.kbase_portals.create!(portal_params) | ||
end | ||
|
||
def update | ||
@portal.update!(portal_params) | ||
end | ||
|
||
def destroy | ||
@portal.destroy | ||
head :ok | ||
end | ||
|
||
private | ||
|
||
def fetch_portal | ||
@portal = current_account.kbase_portals.find(params[:id]) | ||
end | ||
|
||
def portal_params | ||
params.require(:portal).permit( | ||
:account_id, :color, :custom_domain, :header_text, :homepage_link, :name, :page_title, :slug | ||
) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
module Kbase | ||
def self.table_name_prefix | ||
'kbase_' | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
# == Schema Information | ||
# | ||
# Table name: kbase_articles | ||
# | ||
# id :bigint not null, primary key | ||
# content :text | ||
# description :text | ||
# status :integer | ||
# title :string | ||
# views :integer | ||
# created_at :datetime not null | ||
# updated_at :datetime not null | ||
# account_id :integer not null | ||
# author_id :integer | ||
# category_id :integer | ||
# folder_id :integer | ||
# portal_id :integer not null | ||
# | ||
class Kbase::Article < ApplicationRecord | ||
belongs_to :account | ||
belongs_to :category | ||
belongs_to :portal | ||
belongs_to :folder | ||
belongs_to :author, class_name: 'User' | ||
|
||
before_validation :ensure_account_id | ||
validates :account_id, presence: true | ||
validates :category_id, presence: true | ||
validates :author_id, presence: true | ||
validates :title, presence: true | ||
validates :content, presence: true | ||
|
||
enum status: { draft: 0, published: 1 } | ||
|
||
private | ||
|
||
def ensure_account_id | ||
self.account_id = portal&.account_id | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
# == Schema Information | ||
# | ||
# Table name: kbase_categories | ||
# | ||
# id :bigint not null, primary key | ||
# description :text | ||
# name :string | ||
# position :integer | ||
# created_at :datetime not null | ||
# updated_at :datetime not null | ||
# account_id :integer not null | ||
# portal_id :integer not null | ||
# | ||
class Kbase::Category < ApplicationRecord | ||
belongs_to :account | ||
belongs_to :portal | ||
has_many :folders, dependent: :destroy | ||
has_many :articles, dependent: :nullify | ||
|
||
before_validation :ensure_account_id | ||
validates :account_id, presence: true | ||
validates :name, presence: true | ||
|
||
private | ||
|
||
def ensure_account_id | ||
self.account_id = portal&.account_id | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# == Schema Information | ||
# | ||
# Table name: kbase_folders | ||
# | ||
# id :bigint not null, primary key | ||
# name :string | ||
# created_at :datetime not null | ||
# updated_at :datetime not null | ||
# account_id :integer not null | ||
# category_id :integer not null | ||
# | ||
class Kbase::Folder < ApplicationRecord | ||
belongs_to :account | ||
belongs_to :category | ||
has_many :articles, dependent: :nullify | ||
|
||
validates :account_id, presence: true | ||
validates :category_id, presence: true | ||
validates :name, presence: true | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# == Schema Information | ||
# | ||
# Table name: kbase_portals | ||
# | ||
# id :bigint not null, primary key | ||
# account_id :integer not null | ||
# color :string | ||
# custom_domain :string | ||
# header_text :text | ||
# homepage_link :string | ||
# name :string not null | ||
# page_title :string | ||
# slug :string not null | ||
# created_at :datetime not null | ||
# updated_at :datetime not null | ||
# | ||
# Indexes | ||
# | ||
# index_kbase_portals_on_slug (slug) UNIQUE | ||
# | ||
class Kbase::Portal < ApplicationRecord | ||
belongs_to :account | ||
has_many :categories, dependent: :destroy | ||
has_many :folders, through: :categories | ||
has_many :articles, dependent: :destroy | ||
|
||
validates :account_id, presence: true | ||
validates :name, presence: true | ||
validates :slug, presence: true | ||
end |
5 changes: 5 additions & 0 deletions
5
app/views/api/v1/accounts/kbase/categories/_category.json.jbuilder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
json.id category.id | ||
json.name category.name | ||
json.description category.description | ||
json.position category.position | ||
json.account_id category.account_id |
3 changes: 3 additions & 0 deletions
3
app/views/api/v1/accounts/kbase/categories/create.json.jbuilder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.partial! 'category', category: @category | ||
end |
3 changes: 3 additions & 0 deletions
3
app/views/api/v1/accounts/kbase/categories/index.json.jbuilder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.array! @categories, partial: 'category', as: :category | ||
end |
3 changes: 3 additions & 0 deletions
3
app/views/api/v1/accounts/kbase/categories/update.json.jbuilder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.partial! 'category', category: @category | ||
end |
8 changes: 8 additions & 0 deletions
8
app/views/api/v1/accounts/kbase/portals/_portal.json.jbuilder
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
json.id portal.id | ||
json.color portal.color | ||
json.custom_domain portal.custom_domain | ||
json.header_text portal.header_text | ||
json.homepage_link portal.homepage_link | ||
json.name portal.name | ||
json.page_title portal.page_title | ||
json.slug portal.slug |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.partial! 'portal', portal: @portal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.array! @portals, partial: 'portal', as: :portal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
json.payload do | ||
json.partial! 'portal', portal: @portal | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
class CreateKbasePortals < ActiveRecord::Migration[6.0] | ||
def change | ||
create_table :kbase_portals do |t| | ||
t.integer :account_id, null: false | ||
t.string :name, null: false | ||
t.string :slug, null: false | ||
t.string :custom_domain | ||
t.string :color | ||
t.string :homepage_link | ||
t.string :page_title | ||
t.text :header_text | ||
|
||
t.index :slug, unique: true | ||
t.timestamps | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
class CreateKbaseCategories < ActiveRecord::Migration[6.0] | ||
def change | ||
create_table :kbase_categories do |t| | ||
t.integer :account_id, null: false | ||
t.integer :portal_id, null: false | ||
t.string :name | ||
t.text :description | ||
t.integer :position | ||
|
||
t.timestamps | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
class CreateKbaseFolders < ActiveRecord::Migration[6.0] | ||
def change | ||
create_table :kbase_folders do |t| | ||
t.integer :account_id, null: false | ||
t.integer :category_id, null: false | ||
t.string :name | ||
|
||
t.timestamps | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
class CreateKbaseArticles < ActiveRecord::Migration[6.0] | ||
def change | ||
create_table :kbase_articles do |t| | ||
t.integer :account_id, null: false | ||
t.integer :portal_id, null: false | ||
t.integer :category_id | ||
t.integer :folder_id | ||
t.integer :author_id | ||
t.string :title | ||
t.text :description | ||
t.text :content | ||
t.integer :status | ||
t.integer :views | ||
|
||
t.timestamps | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.