package BaseObject;
use base 'Rose::DB::Object';

use DBConn;
sub init_db {
    return DBConn->new
}

package TableA;
use base 'BaseObject';

__PACKAGE__->meta->setup(
    table => 'tableA',

    columns => [
        id       => { type => 'serial', not_null => 1 },
        enum_val => { type => 'enum', default => 'A', values => [ 'A', 'B' ] },
    ],

    primary_key_columns => ['id'],
);

package TableB;
use base 'BaseObject';

__PACKAGE__->meta->setup(
    table => 'tableB',

    columns => [
        id  => { type => 'serial', not_null => 1 },
    ],

    primary_key_columns => ['id'],
    relationships => [
        tableAs => {
            type => 'many to many',
            map_class => 'JoinAB',
            map_from => "tableB",
            map_to => "tableA",
        },
    ]
);

package JoinAB;
use base "BaseObject";

__PACKAGE__->meta->setup(
    table => 'join_AB',

    columns => [
        tableA_id => { type => 'integer', not_null => 1},
        tableB_id => { type => 'integer', not_null => 1}
    ],

    primary_key_columns => ['tableA_id', 'tableB_id'],
    foreign_keys => [
        tableA => {
            class       => 'TableA',
            key_columns => {
                tableA_id => 'id'
            }
        },
        tableB => {
            class       => 'TableB',
            key_columns => {
                tableB_id => 'id'
            }
        }
    ]
);

1;
