Updated

app/controllers/api/v1/accounts / contacts_controller.rb

D
68 lines of codes
7 methods
7.6 complexity/method
18 churn
52.93 complexity
97 duplications
class Api::V1::Accounts::ContactsController < Api::V1::InternalController
  1. Api::V1::Accounts::ContactsController assumes too much for instance variable '@contact'
  2. Api::V1::Accounts::ContactsController assumes too much for instance variable '@contacts'
  3. Api::V1::Accounts::ContactsController assumes too much for instance variable '@pagy'
  4. Api::V1::Accounts::ContactsController has no descriptive comment
before_action :set_contact, only: %i[show destroy] def show render json: @contact, include: %i[deals events], status: :ok end def create
  1. Similar code found in 5 nodes Locations: 0 1 2 3 4
@contact = Contact.new(contact_params) if @contact.save render json: @contact, status: :created else render json: { errors: @contact.errors.full_messages }, status: :unprocessable_entity end end def upsert
  1. Api::V1::Accounts::ContactsController#upsert has approx 8 statements
existing_contact = Accounts::Contacts::GetByParams.call(Account.first, contact_params.to_h)[:ok] if existing_contact.nil?
  1. Api::V1::Accounts::ContactsController#upsert performs a nil-check
@contact = Contact.new(contact_params) status = :created else @contact = existing_contact @contact.assign_attributes(contact_params) status = :ok end if @contact.save render(json: @contact, status:) else render json: @contact.errors, status: :unprocessable_entity end end def search
  1. Similar code found in 3 nodes Locations: 0 1 2
contacts = Contact.ransack(params[:query]) @pagy, @contacts = pagy(contacts.result, metadata: %i[page items count pages from last to prev next]) render json: { data: @contacts, pagination: pagy_metadata(@pagy) } rescue ArgumentError => e
  1. Api::V1::Accounts::ContactsController#search has the variable name 'e'
render json: { errors: 'Invalid search parameters', details: e.message }, status: :unprocessable_entity end def destroy
  1. Similar code found in 2 nodes Locations: 0 1
if @contact.destroy head :no_content else render json: { errors: @contact.errors.full_messages }, status: :unprocessable_entity end end private def contact_params params.permit(:full_name, :phone, :email, :label_list, custom_attributes: {}) end def set_contact @contact = Contact.find(params[:id]) end end