The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::Netdisco::DB::Result::Virtual::ApRadioChannelPower;

use strict;
use warnings;

use base 'DBIx::Class::Core';

__PACKAGE__->table_class('DBIx::Class::ResultSource::View');

__PACKAGE__->table('ap_radio_channel_power');
__PACKAGE__->result_source_instance->is_virtual(1);
__PACKAGE__->result_source_instance->view_definition(<<ENDSQL
SELECT w.channel,
       w.power,
       w.ip,
       w.port,
       dp.name AS port_name,
       dp.descr,
       d.name AS device_name,
       d.dns,
       d.model,
       d.location,
       CASE
           WHEN w.power > 0 THEN round((10.0 * log(w.power) / log(10))::numeric, 1)
           ELSE NULL
       END AS power2
FROM device_port_wireless AS w
JOIN device_port AS dp ON dp.port = w.port
AND dp.ip = w.ip
JOIN device AS d ON d.ip = w.ip
WHERE w.channel != '0'
ENDSQL
);

__PACKAGE__->add_columns(
  'channel' => {
    data_type => 'integer',
  },
  'power' => {
    data_type => 'integer',
  },
  'ip' => {
    data_type => 'inet',
  },
  'port' => {
    data_type => 'text',
  },
  'port_name' => {
    data_type => 'text',
  },
  'descr' => {
    data_type => 'text',
  },
  'device_name' => {
    data_type => 'text',
  },
  'dns' => {
    data_type => 'text',
  },
  'model' => {
    data_type => 'text',
  },
  'location' => {
    data_type => 'text',
  },
  'power2' => {
    data_type => 'numeric',
  },
);

1;