package local::db::dbi; use base 'Class::DBI'; use config; local::db::dbi->connection(@{$config::config{db}}); package local::db::download; use base 'local::db::dbi'; local::db::download->table('download'); local::db::download->columns(All => qw/download_id owner size time category name description completed processing/); local::db::download->has_a(owner => 'local::db::owner'); local::db::download->has_a(category => 'local::db::category'); local::db::download->has_many(seen => 'local::db::seen'); package local::db::category; use base 'local::db::dbi'; local::db::category->table('category'); local::db::category->columns(All => qw/category_id name/); local::db::category->has_many(download => 'local::db::download'); package local::db::owner; use base 'local::db::dbi'; local::db::owner->table('owner'); local::db::owner->columns(All => qw/owner_id name quoata quota_used admin/); local::db::owner->has_many(download => 'local::db::download'); local::db::owner->has_many(seen => 'local::db::seen'); local::db::owner->has_many(ip => 'local::db::ip'); package local::db::seen; use base 'local::db::dbi'; local::db::seen->table('seen'); local::db::seen->columns(All => qw/seen_id download user/); local::db::seen->has_a(download => 'local::db::download'); local::db::seen->has_a(user => 'local::db::owner'); local::db::seen->set_sql(count_download => qq{ SELECT COUNT(user) as dlcount ,download FROM seen GROUP BY download }); package local::db::ip; use base 'local::db::dbi'; local::db::ip->table('ip'); local::db::ip->columns(All => qw/ip_id owner subnet mask/); local::db::ip->has_a(owner => 'local::db::owner');