import { Database , RDBType , Relationship , EngineerSchema } from '../index' ; export interface ModuleSchema { _id : string ; name : string ; ownerId : string ; programmer ? : Object ; parentId : string ; } export default ( db ) => db . defineSchema < ModuleSchema > ( 'Module' , { _id : { type : RDBType . STRING , primaryKey : true } , name : { type : RDBType . STRING , unique : true } , ownerId : { type : RDBType . STRING } , parentId : { type : RDBType . STRING } , programmer : { type : Relationship . oneToOne , virtual : { name : 'Engineer' , where : ( ref ) => ( { ownerId : ref . _id } ) } } , dispose ( rootEntities , scope ) { const [ matcher , disposer ] = scope ( 'Engineer' ) ; return matcher ( { _id : { $in : rootEntities . map ( entity => entity . ownerId ) } } ) . do ( disposer ) ; } } ) ;