added join table and column metadatas

This commit is contained in:
Umed Khudoiberdiev 2016-04-26 21:53:05 +05:00
parent c435802678
commit 3a55d797ed
7 changed files with 152 additions and 0 deletions

View File

@ -0,0 +1,13 @@
import {defaultMetadataStorage} from "../../typeorm";
import {JoinTableOptions} from "../../metadata-builder/options/JoinTableOptions";
import {JoinColumnMetadata} from "../../metadata-builder/metadata/JoinColumnMetadata";
/**
*/
export function JoinColumn<T>(options: JoinTableOptions): Function {
return function (object: Object, propertyName: string) {
const metadata = new JoinColumnMetadata(object.constructor, propertyName, options);
defaultMetadataStorage().addJoinColumnMetadata(metadata);
};
}

View File

@ -0,0 +1,13 @@
import {defaultMetadataStorage} from "../../typeorm";
import {JoinTableOptions} from "../../metadata-builder/options/JoinTableOptions";
import {JoinTableMetadata} from "../../metadata-builder/metadata/JoinTableMetadata";
/**
*/
export function JoinTable<T>(options: JoinTableOptions): Function {
return function (object: Object, propertyName: string) {
const metadata = new JoinTableMetadata(object.constructor, propertyName, options);
defaultMetadataStorage().addJoinTableMetadata(metadata);
};
}

View File

@ -8,6 +8,8 @@ import {ColumnMetadata} from "./metadata/ColumnMetadata";
import {EventSubscriberMetadata} from "./metadata/EventSubscriberMetadata";
import {EntityListenerMetadata} from "./metadata/EntityListenerMetadata";
import {NamingStrategyMetadata} from "./metadata/NamingStrategyMetadata";
import {JoinColumnMetadata} from "./metadata/JoinColumnMetadata";
import {JoinTableMetadata} from "./metadata/JoinTableMetadata";
/**
* Storage all metadatas of all available types: tables, fields, subscribers, relations, etc.
@ -27,6 +29,8 @@ export class MetadataStorage {
private compoundIndexMetadatas: CompoundIndexMetadata[] = [];
private namingStrategyMetadatas: NamingStrategyMetadata[] = [];
private relationMetadatas: RelationMetadata[] = [];
private joinColumnMetadatas: JoinColumnMetadata[] = [];
private joinTableMetadatas: JoinTableMetadata[] = [];
// -------------------------------------------------------------------------
// Adder Methods
@ -100,6 +104,18 @@ export class MetadataStorage {
this.entityListenerMetadatas.push(metadata);
}
addJoinTableMetadata(metadata: JoinTableMetadata) {
// if (this.hasFieldMetadataOnProperty(metadata.target, metadata.propertyName)) // todo later
// throw new MetadataAlreadyExistsError("EventListener", metadata.target);
this.joinTableMetadatas.push(metadata);
}
addJoinColumnMetadata(metadata: JoinColumnMetadata) {
// if (this.hasFieldMetadataOnProperty(metadata.target, metadata.propertyName)) // todo later
// throw new MetadataAlreadyExistsError("EventListener", metadata.target);
this.joinColumnMetadatas.push(metadata);
}
// -------------------------------------------------------------------------
// Public Methods
// -------------------------------------------------------------------------

View File

@ -0,0 +1,35 @@
import {PropertyMetadata} from "./PropertyMetadata";
import {JoinColumnOptions} from "../options/JoinColumnOptions";
/**
*/
export class JoinColumnMetadata extends PropertyMetadata {
// ---------------------------------------------------------------------
// Public Properties
// ---------------------------------------------------------------------
/**
* Naming strategy used to generate and normalize column name.
*/
// namingStrategy: NamingStrategyInterface;
// ---------------------------------------------------------------------
// Readonly Properties
// ---------------------------------------------------------------------
/**
* Join table options.
*/
readonly options: JoinColumnOptions;
// ---------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------
constructor(target: Function, propertyName: string, options: JoinColumnOptions) {
super(target, propertyName);
this.options = options;
}
}

View File

@ -0,0 +1,35 @@
import {PropertyMetadata} from "./PropertyMetadata";
import {JoinTableOptions} from "../options/JoinTableOptions";
/**
*/
export class JoinTableMetadata extends PropertyMetadata {
// ---------------------------------------------------------------------
// Public Properties
// ---------------------------------------------------------------------
/**
* Naming strategy used to generate and normalize column name.
*/
// namingStrategy: NamingStrategyInterface;
// ---------------------------------------------------------------------
// Readonly Properties
// ---------------------------------------------------------------------
/**
* Join table options.
*/
readonly options: JoinTableOptions;
// ---------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------
constructor(target: Function, propertyName: string, options: JoinTableOptions) {
super(target, propertyName);
this.options = options;
}
}

View File

@ -0,0 +1,16 @@
/**
* Describes column options.
*/
export interface JoinColumnOptions {
/**
* Name of the column.
*/
name?: string;
/**
* Name of the column in the entity to which this column is referenced.
*/
referencedColumnName?: string;
}

View File

@ -0,0 +1,24 @@
import {JoinColumnOptions} from "./JoinColumnOptions";
/**
* Describes all relation's options.
*/
export interface JoinTableOptions {
/**
* Name of the table that will be created to store values of the both tables (join table).
* By default is auto generated.
*/
name?: string;
/**
* First column of the join table.
*/
joinColumn?: JoinColumnOptions;
/**
* Second (inverse) column of the join table.
*/
inverseJoinColumn?: JoinColumnOptions;
}