Initial Code Commit
This commit is contained in:
58
src/lib/models/PrintJob.ts
Normal file
58
src/lib/models/PrintJob.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
const printJobSchema = new mongoose.Schema({
|
||||
user_id: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'User',
|
||||
required: true
|
||||
},
|
||||
spool_id: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'Spool',
|
||||
required: true
|
||||
},
|
||||
printer_id: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'Printer',
|
||||
required: true
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
default: 'Untitled Print'
|
||||
},
|
||||
duration_minutes: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
filament_used_g: {
|
||||
type: Number,
|
||||
required: true
|
||||
},
|
||||
filament_used_m: {
|
||||
type: Number
|
||||
},
|
||||
calculated_cost_filament: {
|
||||
type: Number
|
||||
},
|
||||
calculated_cost_energy: {
|
||||
type: Number
|
||||
},
|
||||
status: {
|
||||
type: String,
|
||||
enum: ['In Progress', 'Success', 'Fail', 'Cancelled'],
|
||||
default: 'Success'
|
||||
},
|
||||
started_at: {
|
||||
type: Date
|
||||
},
|
||||
notes: String,
|
||||
date: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
}
|
||||
}, {
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
export const PrintJob = mongoose.models.PrintJob || mongoose.model('PrintJob', printJobSchema);
|
||||
34
src/lib/models/Printer.ts
Normal file
34
src/lib/models/Printer.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
const printerSchema = new mongoose.Schema({
|
||||
user_id: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'User',
|
||||
required: true
|
||||
},
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
model: {
|
||||
type: String,
|
||||
trim: true
|
||||
},
|
||||
nozzle_diameter_mm: {
|
||||
type: Number,
|
||||
default: 0.4
|
||||
},
|
||||
power_consumption_watts: {
|
||||
type: Number,
|
||||
default: 0 // Used for energy calculation
|
||||
},
|
||||
bed_size_x_mm: Number,
|
||||
bed_size_y_mm: Number,
|
||||
bed_size_z_mm: Number,
|
||||
image_url: String, // Optional URL for printer image
|
||||
}, {
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
export const Printer = mongoose.models.Printer || mongoose.model('Printer', printerSchema);
|
||||
51
src/lib/models/Spool.ts
Normal file
51
src/lib/models/Spool.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
const spoolSchema = new mongoose.Schema({
|
||||
user_id: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: 'User',
|
||||
required: true
|
||||
},
|
||||
brand: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true
|
||||
},
|
||||
material: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: ['PLA', 'PETG', 'ABS', 'ASA', 'TPU', 'Nylon', 'PC', 'Other'],
|
||||
default: 'PLA'
|
||||
},
|
||||
color_hex: {
|
||||
type: String,
|
||||
default: '#ffffff'
|
||||
},
|
||||
weight_initial_g: {
|
||||
type: Number,
|
||||
required: true,
|
||||
min: 0
|
||||
},
|
||||
weight_remaining_g: {
|
||||
type: Number,
|
||||
required: true,
|
||||
min: 0
|
||||
},
|
||||
price: {
|
||||
type: Number,
|
||||
min: 0
|
||||
},
|
||||
purchased_at: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
},
|
||||
is_active: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
}, {
|
||||
timestamps: true
|
||||
});
|
||||
|
||||
// Check if model already exists to prevent overwrite error in HMR/dev mode
|
||||
export const Spool = mongoose.models.Spool || mongoose.model('Spool', spoolSchema);
|
||||
37
src/lib/models/User.ts
Normal file
37
src/lib/models/User.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import mongoose from 'mongoose';
|
||||
|
||||
const userSchema = new mongoose.Schema({
|
||||
username: {
|
||||
type: String,
|
||||
required: true,
|
||||
unique: true,
|
||||
trim: true,
|
||||
minlength: 3
|
||||
},
|
||||
password: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
role: {
|
||||
type: String,
|
||||
default: 'Maker'
|
||||
},
|
||||
location: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
electricity_rate: {
|
||||
type: Number,
|
||||
default: 0.12 // Default rate in $/kWh
|
||||
},
|
||||
currency: {
|
||||
type: String,
|
||||
default: 'USD'
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
default: Date.now
|
||||
}
|
||||
});
|
||||
|
||||
export const User = mongoose.models.User || mongoose.model('User', userSchema);
|
||||
Reference in New Issue
Block a user