import { isNonEmptyString, isString, isUnsignedInteger } from 'jet-validators'; import { parseObject, Schema, testObject } from 'jet-validators/utils'; import { transformIsDate } from '@src/common/utils/validators'; import { Entity } from './common/types'; /****************************************************************************** Constants ******************************************************************************/ const GetDefaults = (): IUser => ({ id: 0, name: '', email: '', created: new Date(), }); const schema: Schema = { id: isUnsignedInteger, name: isString, email: isString, created: transformIsDate, }; /****************************************************************************** Types ******************************************************************************/ /** * @entity users */ export interface IUser extends Entity { name: string; email: string; } /****************************************************************************** Setup ******************************************************************************/ // Set the "parseUser" function const parseUser = parseObject(schema); // For the APIs make sure the right fields are complete const isCompleteUser = testObject({ ...schema, name: isNonEmptyString, email: isNonEmptyString, }); /****************************************************************************** Functions ******************************************************************************/ /** * New user object. */ function new_(user?: Partial): IUser { return parseUser({ ...GetDefaults(), ...user }, (errors) => { throw new Error('Setup new user failed ' + JSON.stringify(errors, null, 2)); }); } /****************************************************************************** Export default ******************************************************************************/ export default { new: new_, isComplete: isCompleteUser, } as const;