import OB, {AnyBoolean} from "@onebro/oba-common"; import OBACore from "@onebro/oba-core"; import {Schema} from "mongoose"; import {ModelFactoryConfig,ModelFactory,getMiscReferenceSchemaDef} from "@onebro/oba-mongoose"; import {Upload,UploadSignature,DocStatuses} from "../00-model-types"; export type UploadFactoryConfig = ModelFactoryConfig; export const uploadAsPropSchema = (arr?:AnyBoolean) => { switch(true){ case !!arr:{ return { type:[Schema.Types.ObjectId], ref:"Upload", default:[] as Upload["instance"][], get:(p:Upload["instance"][]) => p.map(o => o.preview), }; } default:{ return { type:Schema.Types.ObjectId, ref:"Upload", get:(p:Upload["instance"]) => p?p.preview:null, }; } } }; export const uploadSchemaDef:UploadFactoryConfig["definition"] = { qid:{type:String,default:() => "ob_" + OB.longId().replace(/-/g,""),immutable:true}, owner:{...getMiscReferenceSchemaDef(),required:true}, filename:{type:String,required:true,trim:true}, bucket:{type:String,required:true,trim:true}, path:{type:String,required:true,trim:true}, loc:new Schema({str:{type:String},coords:{type:[Number]}},{_id:false}), type:{type:String,trim:true,required:true,enum:["jpeg","jpg","png"]}, size:{type:Number,required:true}, title:{type:String,trim:true}, slug:{type:String,trim:true}, }; export const uploadRefs_:UploadFactoryConfig["refs"] = []; export const uploadRefs:UploadFactoryConfig["refs"] = [...uploadRefs_]; export const uploadVirtuals:UploadFactoryConfig["virtuals"] = { preview:{ get:function(){ const s = this as Upload["instance"]; const p = {} as Upload["preview"]; p.bucket = s.bucket; p.path = s.path; p.filename = s.filename; return p; } } }; export const uploadMethods:UploadFactoryConfig["methods"] = { json:function(){ const s = this as Upload["instance"]; const j = {} as Upload["json"]; j._type_ = "upload"; 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.filename = s.filename; j.size = s.size; j.bucket = s.bucket; j.path = s.path; j.loc = s.loc; j.owner = s.owner; j.published = s.created; return j; } }; export const UploadFactoryConfig:UploadFactoryConfig = { modelName:"Upload", businessName:"upload", collectionName:"cctx_playground_uploads", statuses:DocStatuses, definition:uploadSchemaDef, opts:{}, refs:uploadRefs, virtuals:uploadVirtuals, methods:uploadMethods, }; export class UploadFactory extends ModelFactory {constructor(api:OBACore){super(api as any,UploadFactoryConfig);}}