import mongoose from 'mongoose'; import { generateId } from '../../utils.js'; const filamentProfileSchema = new mongoose.Schema( { _reference: { type: String, default: () => generateId()() }, name: { type: String, required: true }, filamentType: { type: String, required: true }, filament: { type: mongoose.Schema.Types.ObjectId, refPath: 'filamentType', required: true, }, filamentIsSupport: { type: Boolean }, filamentSoluble: { type: Boolean }, filamentPrintable: { type: Number }, filamentAdhesivenessCategory: { type: Number }, temperatureVitrification: { type: Number }, idleTemperature: { type: Number }, pelletFlowCoefficient: { type: Number }, requiredNozzleHrc: { type: Number }, filamentFlowRatio: { type: Number }, enablePressureAdvance: { type: Boolean }, pressureAdvance: { type: Number }, adaptivePressureAdvance: { type: Boolean }, adaptivePressureAdvanceBridges: { type: Boolean }, adaptivePressureAdvanceOverhangs: { type: Boolean }, adaptivePressureAdvanceModel: { type: String }, activateChamberTempControl: { type: Boolean }, chamberTemperature: { type: Number }, chamberMinimalTemperature: { type: Number }, nozzleTemperatureInitialLayer: { type: Number }, nozzleTemperature: { type: Number }, nozzleTemperatureRangeLow: { type: Number }, nozzleTemperatureRangeHigh: { type: Number }, hotPlateTempInitialLayer: { type: Number }, hotPlateTemp: { type: Number }, coolPlateTempInitialLayer: { type: Number }, coolPlateTemp: { type: Number }, engPlateTempInitialLayer: { type: Number }, engPlateTemp: { type: Number }, texturedPlateTempInitialLayer: { type: Number }, texturedPlateTemp: { type: Number }, texturedCoolPlateTempInitialLayer: { type: Number }, texturedCoolPlateTemp: { type: Number }, supertackPlateTempInitialLayer: { type: Number }, supertackPlateTemp: { type: Number }, filamentAdaptiveVolumetricSpeed: { type: Boolean }, filamentMaxVolumetricSpeed: { type: Number }, volumetricSpeedCoefficients: { type: String }, closeFanTheFirstXLayers: { type: Number }, fullFanSpeedLayer: { type: Number }, fanMinSpeed: { type: Number }, fanMaxSpeed: { type: Number }, reduceFanStopStartFreq: { type: Boolean }, slowDownForLayerCooling: { type: Boolean }, dontSlowDownOuterWall: { type: Boolean }, slowDownMinSpeed: { type: Number }, slowDownLayerTime: { type: Number }, fanCoolingLayerTime: { type: Number }, enableOverhangBridgeFan: { type: Boolean }, overhangFanThreshold: { type: String }, overhangFanSpeed: { type: Number }, internalBridgeFanSpeed: { type: Number }, supportMaterialInterfaceFanSpeed: { type: Number }, ironingFanSpeed: { type: Number }, initialLayerFanSpeed: { type: Number }, firstXLayerFanSpeed: { type: Number }, additionalCoolingFanSpeed: { type: Number }, additionalFanFullSpeedLayer: { type: Number }, closeAdditionalFanFirstXLayers: { type: Boolean }, activateAirFiltration: { type: Boolean }, activateAirFiltrationDuringPrint: { type: Boolean }, activateAirFiltrationOnCompletion: { type: Boolean }, duringPrintExhaustFanSpeed: { type: Number }, completePrintExhaustFanSpeed: { type: Number }, filamentRetractionLength: { type: Number }, filamentRetractionSpeed: { type: Number }, filamentDeretractionSpeed: { type: Number }, filamentRetractionMinimumTravel: { type: Number }, filamentRetractWhenChangingLayer: { type: Boolean }, filamentRetractBeforeWipe: { type: Number }, filamentRetractAfterWipe: { type: Number }, filamentRetractRestartExtra: { type: Number }, filamentRetractLiftAbove: { type: Number }, filamentRetractLiftBelow: { type: Number }, filamentRetractLiftEnforce: { type: String }, filamentWipe: { type: Boolean }, filamentWipeDistance: { type: Number }, filamentZHop: { type: Number }, filamentZHopTypes: { type: String }, filamentLongRetractionsWhenCut: { type: Boolean }, filamentRetractionDistancesWhenCut: { type: Number }, longRetractionsWhenEc: { type: Boolean }, retractionDistancesWhenEc: { type: Number }, filamentLoadingSpeed: { type: Number }, filamentLoadingSpeedStart: { type: Number }, filamentUnloadingSpeed: { type: Number }, filamentUnloadingSpeedStart: { type: Number }, filamentChangeLength: { type: Number }, filamentChangeLengthNc: { type: Number }, filamentToolchangeDelay: { type: Number }, filamentExtruderCompatibility: { type: Number }, filamentExtruderVariant: { type: String }, filamentMultitoolRamming: { type: Boolean }, filamentMultitoolRammingFlow: { type: Number }, filamentMultitoolRammingVolume: { type: Number }, filamentRammingParameters: { type: String }, filamentRammingTravelTime: { type: Number }, filamentRammingTravelTimeNc: { type: Number }, filamentRammingVolumetricSpeed: { type: Number }, filamentRammingVolumetricSpeedNc: { type: Number }, filamentMinimalPurgeOnWipeTower: { type: Number }, filamentTowerInterfacePreExtrusionDist: { type: Number }, filamentTowerInterfacePreExtrusionLength: { type: Number }, filamentTowerInterfacePrintTemp: { type: Number }, filamentTowerInterfacePurgeVolume: { type: Number }, filamentTowerIroningArea: { type: Number }, filamentCoolingBeforeTower: { type: Number }, filamentCoolingInitialSpeed: { type: Number }, filamentCoolingFinalSpeed: { type: Number }, filamentCoolingMoves: { type: Number }, filamentFlushTemp: { type: Number }, filamentFlushTempFast: { type: Number }, filamentFlushVolumetricSpeed: { type: Number }, filamentPreCoolingTemperature: { type: Number }, filamentPreCoolingTemperatureNc: { type: Number }, filamentPreheatTemperatureDelta: { type: Number }, filamentPrimeVolumeNc: { type: Number }, filamentRetractLengthNc: { type: Number }, filamentStampingDistance: { type: Number }, filamentStampingLoadingSpeed: { type: Number }, filamentStartGcode: { type: String }, filamentEndGcode: { type: String }, filamentChangeExtrusionRoleGcode: { type: String }, filamentShrink: { type: String }, filamentShrinkageCompensationZ: { type: String }, filamentDevAmsDryingTemperature: { type: Number }, filamentDevAmsDryingTime: { type: Number }, filamentDevAmsDryingHeatDistortionTemperature: { type: Number }, filamentDevAmsDryingAmsLimitations: { type: String }, filamentDevChamberDryingBedTemperature: { type: Number }, filamentDevChamberDryingTime: { type: Number }, filamentDevDryingCoolingTemperature: { type: Number }, filamentDevDryingSofteningTemperature: { type: Number }, compatiblePrinters: [ { type: mongoose.Schema.Types.ObjectId, ref: 'printerProfile' }, ], compatiblePrintersCondition: { type: String }, compatiblePrints: [{ type: String }], compatiblePrintsCondition: { type: String }, filamentNotes: { type: String }, }, { timestamps: true } ); filamentProfileSchema.index({ name: 'text', filamentNotes: 'text' }); filamentProfileSchema.virtual('id').get(function () { return this._id; }); filamentProfileSchema.set('toJSON', { virtuals: true }); export const filamentProfileModel = mongoose.model('filamentProfile', filamentProfileSchema);