import OB, {AnyBoolean} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Schema} from "mongoose"; import { ModelFactoryConfig, ModelFactory, getInfoMapSchemaDef, getSettingsSchemaDef, getSpecialTypeSchemaDef, } from "@onebro/oba-mongoose"; import { Vendor, VendorSignature, UserStatuses, UserRoles, } from "../00-model-types"; import { vendorItemAsPropSchema } from "./04-vendor-item"; export type VendorFactoryConfig = ModelFactoryConfig; export const vendorAsPropSchema = (arr?:AnyBoolean,useracct?:AnyBoolean) => { switch(true){ case !!arr:return { type:[Schema.Types.ObjectId], ref:"Vendor", default:[] as Vendor["instance"][], get:(p:Vendor["instance"][]) => p.map(o => useracct?o.json():o.preview), }; default:return { type:Schema.Types.ObjectId, ref:"Vendor", get:(p:Vendor["instance"]) => p?useracct?p.json():p.preview:null, }; } }; export const vendorSchemaDef:VendorFactoryConfig["definition"] = { qid:{type:String,default:() => "ob_" + OB.longId().replace(/-/g,""),immutable:true}, email:{type:String,trim:true,required:true,index:true,unique:true,maxLength:40}, name:{type:String,required:true,trim:true,maxLength:20}, phn:{type:String,trim:true}, addr:{type:String,trim:true}, settings:getSettingsSchemaDef(), items:vendorItemAsPropSchema(1), }; export const vendorRefs_:VendorFactoryConfig["refs"] = []; export const vendorRefs:VendorFactoryConfig["refs"] = [...vendorRefs_]; export const vendorVirtuals:VendorFactoryConfig["virtuals"] = { preview:{ get:function(){ const s = this as Vendor["instance"]; const p = {} as Vendor["preview"]; p.id = s.id; p.stat = s.stat; p.name = s.name; p.email = s.email; p.phn = s.phn; p.addr = s.addr; p.items = s.items.map(o => o.preview); return p; } }, }; export const vendorMethods:VendorFactoryConfig["methods"] = { json:function(){ const s = this as Vendor["instance"]; const j = {} as Vendor["json"]; j._type_ = "vendor"; j.id = s.id; j.qid = s.qid; j.status = s.status as any; j.stat = s.stat; s.desc?j.desc = s.desc:null; s.info?j.info = s.info:null; j.email = s.email; j.phn = s.phn; j.addr = s.addr; j.items = s.items.map(o => o.preview); return j; }, jsonAuth:function(auth:boolean){ const s = this as Vendor["instance"]; const j = {} as Vendor["json"]; j._type_ = "vendor"; j.id = s.id; j.qid = s.qid; j.status = s.status as any; j.stat = s.stat; s.desc?j.desc = s.desc:null; s.info?j.info = s.info:null; j.email = s.email; j.phn = s.phn; j.addr = s.addr; j.items = s.items.map(o => o.preview); return j; } }; export const VendorFactoryConfig:VendorFactoryConfig = { modelName:"Vendor", businessName:"user account", collectionName:"cctx_playground_user_accts", statuses:UserStatuses, definition:vendorSchemaDef, opts:{}, refs:vendorRefs, virtuals:vendorVirtuals, methods:vendorMethods, }; export class VendorFactory extends ModelFactory {constructor(api:OBACore){super(api as any,VendorFactoryConfig);}}