import {
BaseEntity,
Entity, PrimaryGeneratedColumn, Column,
createConnection,
ManyToOne, OneToMany,
RelationId
} from "typeorm";
import * as express from "express";
import { Database, Resource, UseAsTitle, UseForSearch } from "admin-bro-typeorm";
import { validate } from 'class-validator'
import AdminBro from "admin-bro";
import * as AdminBroExpress from "admin-bro-expressjs"
Resource.validate = validate;
AdminBro.registerAdapter({ Database, Resource });
@Entity({name: "Organizations"})
export class Organization extends BaseEntity
{
@PrimaryGeneratedColumn()
public id: number;
@UseForSearch()
@Column({type: 'varchar', unique: true})
public govRegCode: string;
@Column({type: 'varchar', unique: true})
public name: string;
@OneToMany(type => Person, person => person.organization)
public employees?: Array<Person>;
@UseAsTitle()
public toString(): string
{
return `${this.firstName} ${this.lastName}`;
}
}
@Entity({name: "Persons"})
export class Person extends BaseEntity
{
@PrimaryGeneratedColumn()
public id: number;
@Column({type: 'varchar'})
public firstName: string;
@Column({type: 'varchar'})
public lastName: string;
@ManyToOne(type => Organization, org => org.employees)
@JoinColumn({ name: "organizationId" })
public organization?: Organization;
@Column("int", { nullable: true })
public organizationId: number | null;
@UseAsTitle()
public toString(): string
{
return `${this.firstName} ${this.lastName}`;
}
}
( async () =>
{
const connection = await createConnection({});
Organization.useConnection(connection);
Person.useConnection(connection);
const adminBro = new AdminBro({
resources: [
{ resource: Organization, options: { parent: { name: "foobar" } } },
{ resource: Person, options: { parent: { name: "foobar" } } }
],
rootPath: '/admin',
});
const app = express();
const router = AdminBroExpress.buildRouter(adminBro);
app.use(adminBro.options.rootPath, router);
app.listen(3000);
})();