Initial Code Commit

This commit is contained in:
2025-12-25 07:23:24 +00:00
commit 920f892ca7
56 changed files with 5043 additions and 0 deletions

View 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
View 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
View 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
View 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);