chore: Add contact note model (#2462)

This commit is contained in:
Muhsin Keloth 2021-06-21 15:16:26 +05:30 committed by GitHub
parent f809431074
commit 3d748aa8d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 96 additions and 0 deletions

View file

@ -37,6 +37,7 @@ class Account < ApplicationRecord
has_many :data_imports, dependent: :destroy
has_many :users, through: :account_users
has_many :inboxes, dependent: :destroy
has_many :notes, dependent: :destroy
has_many :campaigns, dependent: :destroy
has_many :conversations, dependent: :destroy
has_many :messages, dependent: :destroy

View file

@ -41,6 +41,7 @@ class Contact < ApplicationRecord
has_many :contact_inboxes, dependent: :destroy
has_many :inboxes, through: :contact_inboxes
has_many :messages, as: :sender, dependent: :destroy
has_many :notes, dependent: :destroy
before_validation :prepare_email_attribute
after_create_commit :dispatch_create_event, :ip_lookup

34
app/models/note.rb Normal file
View file

@ -0,0 +1,34 @@
# == Schema Information
#
# Table name: notes
#
# id :bigint not null, primary key
# content :text not null
# created_at :datetime not null
# updated_at :datetime not null
# account_id :bigint not null
# contact_id :bigint not null
# user_id :bigint
#
# Indexes
#
# index_notes_on_account_id (account_id)
# index_notes_on_contact_id (contact_id)
# index_notes_on_user_id (user_id)
#
# Foreign Keys
#
# fk_rails_... (account_id => accounts.id)
# fk_rails_... (contact_id => contacts.id)
# fk_rails_... (user_id => users.id)
#
class Note < ApplicationRecord
validates :content, presence: true
validates :account_id, presence: true
validates :contact_id, presence: true
validates :user_id, presence: true
belongs_to :account
belongs_to :contact
belongs_to :user
end

View file

@ -82,6 +82,7 @@ class User < ApplicationRecord
has_many :notification_subscriptions, dependent: :destroy
has_many :team_members, dependent: :destroy
has_many :teams, through: :team_members
has_many :notes, dependent: :nullify
before_validation :set_password_and_uid, on: :create

View file

@ -0,0 +1,11 @@
class CreateNotes < ActiveRecord::Migration[6.0]
def change
create_table :notes do |t|
t.text :content, null: false
t.references :account, foreign_key: true, null: false
t.references :contact, foreign_key: true, null: false
t.references :user, foreign_key: true
t.timestamps
end
end
end

View file

@ -438,6 +438,18 @@ ActiveRecord::Schema.define(version: 2021_06_18_095823) do
t.index ["source_id"], name: "index_messages_on_source_id"
end
create_table "notes", force: :cascade do |t|
t.text "content", null: false
t.bigint "account_id", null: false
t.bigint "contact_id", null: false
t.bigint "user_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["account_id"], name: "index_notes_on_account_id"
t.index ["contact_id"], name: "index_notes_on_contact_id"
t.index ["user_id"], name: "index_notes_on_user_id"
end
create_table "notification_settings", force: :cascade do |t|
t.integer "account_id"
t.integer "user_id"
@ -629,6 +641,9 @@ ActiveRecord::Schema.define(version: 2021_06_18_095823) do
add_foreign_key "conversations", "contact_inboxes"
add_foreign_key "conversations", "teams"
add_foreign_key "data_imports", "accounts"
add_foreign_key "notes", "accounts"
add_foreign_key "notes", "contacts"
add_foreign_key "notes", "users"
add_foreign_key "team_members", "teams"
add_foreign_key "team_members", "users"
add_foreign_key "teams", "accounts"

10
spec/factories/notes.rb Normal file
View file

@ -0,0 +1,10 @@
# frozen_string_literal: true
FactoryBot.define do
factory :note do
content { 'Hey welcome to chatwoot' }
account
user
contact
end
end

23
spec/models/note_spec.rb Normal file
View file

@ -0,0 +1,23 @@
require 'rails_helper'
RSpec.describe Note, type: :model do
describe 'validations' do
it { is_expected.to validate_presence_of(:content) }
it { is_expected.to validate_presence_of(:account_id) }
it { is_expected.to validate_presence_of(:user_id) }
it { is_expected.to validate_presence_of(:contact_id) }
end
describe 'associations' do
it { is_expected.to belong_to(:account) }
it { is_expected.to belong_to(:user) }
it { is_expected.to belong_to(:contact) }
end
describe 'validates_factory' do
it 'creates valid note object' do
note = create(:note)
expect(note.content).to eq 'Hey welcome to chatwoot'
end
end
end