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:
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