Skip to content

Commit

Permalink
feat(models): Implement model timestamps
Browse files Browse the repository at this point in the history
  • Loading branch information
zakhenry committed Jun 30, 2016
1 parent a4da45f commit afeed29
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 16 deletions.
4 changes: 4 additions & 0 deletions src/common/metadata/metadata.ts
Expand Up @@ -9,6 +9,10 @@ export interface ModelMetadata {
relations?: Map<RelationType, Map<string, Relation>>;
storedProperties?: Map<string, any>
identifierKey?:string;
timestamps?: {
created?:string
updated?:string
}
}

export function initializeMetadata(target: RegistryEntityConstructor) {
Expand Down
4 changes: 0 additions & 4 deletions src/common/models/model.ts
Expand Up @@ -4,10 +4,6 @@ import { RegistryEntityConstructor } from '../registry/entityRegistry';
import { RelationType, Relation } from './relations/index';
import { ModelMetadata } from '../metadata/metadata';

export interface EntityNest extends Map<string, BaseModel|Collection<BaseModel>> {

}

export type identifier = string | number | symbol;

/**
Expand Down
1 change: 1 addition & 0 deletions src/common/models/types/index.ts
@@ -1,2 +1,3 @@
export * from './primary.decorator';
export * from './storedProperty.decorator';
export * from './timestamp.decorator';
31 changes: 31 additions & 0 deletions src/common/models/types/timestamp.decorator.ts
@@ -0,0 +1,31 @@
import { ModelConstructor } from '../model';
import { initializeMetadata } from '../../metadata/metadata';

function initTimestamps(target: ModelConstructor<any>) {
initializeMetadata(target);

if (!target.constructor.__metadata.timestamps) {
target.constructor.__metadata.timestamps = {};
}
}

export function CreatedDate(): PropertyDecorator {

return function createdDate(target: ModelConstructor<any>, propertyKey: string): void {
initTimestamps(target);

target.constructor.__metadata.timestamps.created = propertyKey;
};

}

export function UpdatedDate(): PropertyDecorator {

return function updatedDate(target: ModelConstructor<any>, propertyKey: string): void {

initTimestamps(target);

target.constructor.__metadata.timestamps.updated = propertyKey;
};

}
37 changes: 25 additions & 12 deletions src/server/bootstrap/models.bootstrapper.ts
@@ -1,8 +1,8 @@
import { ResolvedReflectiveProvider } from '@angular/core';
import { EntityBootstrapper } from './entity.bootstrapper';
import { ModelStatic } from '../../common/models/model';
import {Table} from 'typeorm/tables';
import { PrimaryColumn, Column } from 'typeorm/columns';
import { Table } from 'typeorm/tables';
import { PrimaryColumn, Column, UpdateDateColumn, CreateDateColumn } from 'typeorm/columns';
import { ModelMetadata } from '../../common/metadata/metadata';

export class ModelBootstrapper extends EntityBootstrapper {
Expand All @@ -12,21 +12,34 @@ export class ModelBootstrapper extends EntityBootstrapper {
}

public bootstrap(): void {
this.getFromRegistry('model').forEach((model: ModelStatic<any>) => {
const meta:ModelMetadata = model.getMetadata();
this.getFromRegistry('model')
.forEach((model: ModelStatic<any>) => {
const meta: ModelMetadata = model.getMetadata();

this.logger.info(`initializing ${model.name}`, meta);
this.logger.info(`initializing ${model.name}`, meta);

Table(meta.storageKey, meta.tableOptions)(model);
PrimaryColumn()(model.prototype, meta.identifierKey);
Table(meta.storageKey, meta.tableOptions)(model);
PrimaryColumn()(model.prototype, meta.identifierKey);

for(const [property, type] of meta.storedProperties){
Column()(model.prototype, property)
}
for (const [property, type] of meta.storedProperties) {
Column()(model.prototype, property)
}

//@todo assign table/columns etc
if (meta.timestamps) {

});
if (meta.timestamps.updated) {
UpdateDateColumn()(model.prototype, meta.timestamps.updated);
}

if (meta.timestamps.created) {
CreateDateColumn()(model.prototype, meta.timestamps.created);
}

}

//@todo assign table/columns etc

});
}

}

0 comments on commit afeed29

Please sign in to comment.