# Pull Request Template ## Description * add Company model with validations for name, domain, description and avatar * Add database migration fo * Implement endpoints for company CRUD operations * Add optional company relationship for contacts * Add test for models, controllers, factories and policies * Add authorization policies restricting delete to admins * support JSON API responses Please include a summary of the change and issue(s) fixed. Also, mention relevant motivation, context, and any dependencies that this change requires. Fixes #(cw-5650) ## Type of change Please delete options that are not relevant. - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality not to work as expected) - [ ] This change requires a documentation update ## How Has This Been Tested? Tests are implemented using `RSpec` ``` $ bundle exec rails db:migrate $ bundle exec rspec spec/models/company_spec.rb spec/controllers/api/v1/accounts/companies_controller_spec.rb ``` ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [x] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules
34 lines
1.1 KiB
Ruby
34 lines
1.1 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: companies
|
|
#
|
|
# id :bigint not null, primary key
|
|
# description :text
|
|
# domain :string
|
|
# name :string not null
|
|
# created_at :datetime not null
|
|
# updated_at :datetime not null
|
|
# account_id :bigint not null
|
|
#
|
|
# Indexes
|
|
#
|
|
# index_companies_on_account_id (account_id)
|
|
# index_companies_on_domain_and_account_id (domain,account_id)
|
|
# index_companies_on_name_and_account_id (name,account_id)
|
|
#
|
|
class Company < ApplicationRecord
|
|
include Avatarable
|
|
validates :account_id, presence: true
|
|
validates :name, presence: true, length: { maximum: Limits::COMPANY_NAME_LENGTH_LIMIT }
|
|
validates :domain, allow_blank: true, format: {
|
|
with: /\A[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)+\z/,
|
|
message: I18n.t('errors.companies.domain.invalid')
|
|
}
|
|
validates :description, length: { maximum: Limits::COMPANY_DESCRIPTION_LENGTH_LIMIT }
|
|
|
|
belongs_to :account
|
|
has_many :contacts, dependent: :nullify
|
|
|
|
scope :ordered_by_name, -> { order(:name) }
|
|
end
|