Feature: Knowledge Base APIs (#1002)
- Introduce models & migrations for portals, categories, folders and articles - CRUD API for portals - CRUD API for categories Addresses: #714 Co-authored-by: Sojan <sojan@pepalo.com>
This commit is contained in:
@@ -48,6 +48,9 @@ class Account < ApplicationRecord
|
||||
has_many :labels, dependent: :destroy
|
||||
has_many :notification_settings, dependent: :destroy
|
||||
has_many :hooks, dependent: :destroy, class_name: 'Integrations::Hook'
|
||||
has_many :kbase_portals, dependent: :destroy, class_name: '::Kbase::Portal'
|
||||
has_many :kbase_categories, dependent: :destroy, class_name: '::Kbase::Category'
|
||||
has_many :kbase_articles, dependent: :destroy, class_name: '::Kbase::Article'
|
||||
has_flags ACCOUNT_SETTINGS_FLAGS.merge(column: 'settings_flags').merge(DEFAULT_QUERY_SETTING)
|
||||
|
||||
enum locale: LANGUAGES_CONFIG.map { |key, val| [val[:iso_639_1_code], key] }.to_h
|
||||
|
||||
5
app/models/kbase.rb
Normal file
5
app/models/kbase.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
module Kbase
|
||||
def self.table_name_prefix
|
||||
'kbase_'
|
||||
end
|
||||
end
|
||||
40
app/models/kbase/article.rb
Normal file
40
app/models/kbase/article.rb
Normal file
@@ -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
|
||||
29
app/models/kbase/category.rb
Normal file
29
app/models/kbase/category.rb
Normal file
@@ -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
|
||||
20
app/models/kbase/folder.rb
Normal file
20
app/models/kbase/folder.rb
Normal file
@@ -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
|
||||
30
app/models/kbase/portal.rb
Normal file
30
app/models/kbase/portal.rb
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user