breeze-sequelize
Version:
Breeze Sequelize server implementation
97 lines (96 loc) • 3.54 kB
TypeScript
import { EntityType, KeyMapping, MetadataStore, SaveOptions } from "breeze-client";
import { BaseError, Transaction } from "sequelize";
import { SaveMap } from "./SaveMap";
import { KeyGenerator, SequelizeManager } from "./SequelizeManager";
export interface OpenObj {
[k: string]: any;
}
export declare type ServerEntityState = "Added" | "Deleted" | "Modified";
/** Save bundle from breeze client */
export interface SaveRequest {
body: {
entities: ServerEntity[];
saveOptions?: SaveOptions;
};
}
/** Server-side representation of entity that came from the client */
export interface ServerEntityInfo {
entity: ServerEntity;
entityType: EntityType;
wasAddedOnServer?: boolean;
forceUpdate?: boolean;
unmapped?: any;
entityAspect: ServerEntityAspect;
}
export interface ServerEntity {
[k: string]: any;
entityAspect: ServerEntityAspect;
}
export interface ServerEntityAspect {
entityTypeName: string;
defaultResourceName: string;
entityState: ServerEntityState;
entity?: ServerEntity;
autoGeneratedKey?: {
autoGeneratedKeyType: string;
propertyName?: string;
};
originalValuesMap?: {
[prop: string]: any;
};
}
export declare type ServerSaveResult = ServerGoodSaveResult | ServerBadSaveResult;
export interface ServerGoodSaveResult {
entities: OpenObj[];
keyMappings: KeyMapping[];
}
export interface ServerBadSaveResult {
errors: any[];
message: string;
[k: string]: any;
}
export declare class ServerSaveError extends Error {
entityErrors: ServerEntityError[];
constructor(m: string, entityErrors?: ServerEntityError[]);
}
export declare class SequelizeSaveError extends Error {
entity: OpenObj;
entityState: ServerEntityState;
constructor(e: BaseError, entity: OpenObj, entityState?: ServerEntityState);
}
/** Validation error created on the server */
export interface ServerEntityError {
entityTypeName: string;
errorName: string;
errorMessage: string;
propertyName: string;
keyValues: any[];
}
export declare type BeforeSaveEntityFn = (e: ServerEntityInfo) => boolean;
export declare type BeforeSaveEntitiesFn = (sm: SaveMap, trx?: Transaction) => Promise<SaveMap>;
/** Handles saving entities from Breeze SaveChanges requests */
export declare class SequelizeSaveHandler {
readonly sequelizeManager: SequelizeManager;
readonly metadataStore: MetadataStore;
readonly entitiesFromClient: ServerEntity[];
saveOptions: SaveOptions;
private _keyMappings;
private _fkFixupMap;
private _savedEntities;
/** Generates keys for entity types where autoGeneratedKeyType = "KeyGenerator" */
keyGenerator: KeyGenerator;
/** Process an entity before save. If false is returned, entity is not saved. */
beforeSaveEntity: BeforeSaveEntityFn;
/** Process all entities before save. The entities in the returned SaveMap are saved. */
beforeSaveEntities: BeforeSaveEntitiesFn;
/** Create an instance for the given save request */
constructor(sequelizeManager: SequelizeManager, req: SaveRequest);
/** Save the entities in the save request, returning either the saved entities or an error collection */
save(): Promise<ServerSaveResult>;
private _saveWithTransaction;
private _saveCore;
private _processEntityGroup;
private _saveEntityAsync;
private _addToResults;
private _coerceData;
}