Models¶
Models are the data structure that holds the current state of your application, the framework doesn’t make many assumptions on it and only requires have a deserialize
method that should initialize it based on
an object of attributes and a serialize
method that should return a JSON.stringify
able structure to then store in the session attributes.
/*
* Copyright (c) 2018 Rain Agency <contact@rain.agency>
* Author: Rain Agency <contact@rain.agency>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
import * as _ from "lodash";
import { IBag, IVoxaEvent } from "./VoxaEvent";
export class Model {
[key: string]: any;
public static deserialize(
data: IBag,
voxaEvent: IVoxaEvent,
): Promise<Model> | Model {
return new this(data);
}
public state?: string;
constructor(data: any = {}) {
_.assign(this, data);
}
public async serialize(): Promise<any> {
return this;
}
}
export interface IModel {
new (data?: any): Model;
deserialize(data: IBag, event: IVoxaEvent): Model | Promise<Model>;
serialize(): Promise<any>;
}