import OB, {AnyBoolean} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Schema} from "mongoose"; import {ModelFactoryConfig,ModelFactory} from "@onebro/oba-mongoose"; import {VendorItem,VendorItemSignature,DocStatuses} from "../00-model-types"; import { uploadRefs,uploadAsPropSchema } from "./02-upload"; export type VendorItemFactoryConfig = ModelFactoryConfig; export const vendorItemAsPropSchema = (arr?:AnyBoolean) => { switch(true){ case !!arr:{ return { type:[Schema.Types.ObjectId], ref:"VendorItem", default:[] as VendorItem["instance"][], get:(p:VendorItem["instance"][]) => p.map(o => o.preview), }; } default:{ return { type:Schema.Types.ObjectId, ref:"VendorItem", get:(p:VendorItem["instance"]) => p?p.preview:null, }; } } }; export const vendorItemSchemaDef:VendorItemFactoryConfig["definition"] = { qid:{type:String,default:() => "ob_" + OB.longId().replace(/-/g,""),immutable:true}, type:{type:String,required:true,trim:true}, cur:{type:String,defaullt:"USD"}, price:{type:Number,required:true}, img:uploadAsPropSchema(), prefs:{type:Object}, }; export const vendorItemRefs_:VendorItemFactoryConfig["refs"] = [ {path:"img",model:"Upload",populate:uploadRefs}, ]; export const vendorItemRefs:VendorItemFactoryConfig["refs"] = [...vendorItemRefs_]; export const vendorItemVirtuals:VendorItemFactoryConfig["virtuals"] = { preview:{ get:function(){ const s = this as VendorItem["instance"]; const p = {} as VendorItem["preview"]; p.id = s.id; p.stat = s.stat; p.type = s.type; p.price = s.price; p.img = s.img as any; p.prefs = s.prefs; return p; } } }; export const vendorItemMethods:VendorItemFactoryConfig["methods"] = { json:function(){ const s = this as VendorItem["instance"]; const j = {} as VendorItem["json"]; j._type_ = "vendor-item"; 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.service = s.service; j.type = s.type; j.price = s.price; j.cur = s.cur; j.img = s.img as any; j.prefs = s.prefs; j.published = s.created; return j; } }; export const VendorItemFactoryConfig:VendorItemFactoryConfig = { modelName:"VendorItem", businessName:"vendor item", collectionName:"cctx_playground_vendor_items", statuses:DocStatuses, definition:vendorItemSchemaDef, opts:{}, refs:vendorItemRefs, virtuals:vendorItemVirtuals, methods:vendorItemMethods, }; export class VendorItemFactory extends ModelFactory {constructor(api:OBACore){super(api as any,VendorItemFactoryConfig);}}