This commit is contained in:
Alvin
2025-10-21 20:54:03 +02:00
parent 97c80d7800
commit a5c73ad907
35 changed files with 4899 additions and 0 deletions

33
models/Item.js Normal file
View File

@@ -0,0 +1,33 @@
const mongoose = require('mongoose');
const itemSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
description: {
type: String,
default: ''
},
location: {
type: String,
enum: ['Heerlen', 'Maastricht', 'Sittard'],
required: true
},
quantity: {
type: Number,
required: true,
min: 0
},
imageUrl: {
type: String,
default: '/images/default-item.png'
},
reserved: {
type: Number,
default: 0,
min: 0
}
}, { timestamps: true });
module.exports = mongoose.model('Item', itemSchema);

31
models/Reservation.js Normal file
View File

@@ -0,0 +1,31 @@
const mongoose = require('mongoose');
const reservationSchema = new mongoose.Schema({
itemId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Item',
required: true
},
quantity: {
type: Number,
required: true,
min: 1,
default: 1
},
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true
},
status: {
type: String,
enum: ['PENDING', 'APPROVED', 'REJECTED', 'RETURNED', 'ARCHIVED'],
default: 'PENDING'
},
reservedDate: {
type: Date,
default: Date.now
}
}, { timestamps: true });
module.exports = mongoose.model('Reservation', reservationSchema);

34
models/User.js Normal file
View File

@@ -0,0 +1,34 @@
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
email: {
type: String,
required: function() {
return this.role === 'student';
},
sparse: true,
unique: true,
validate: {
validator: function(email) {
return /^\d{6}@vistacollege\.nl$/.test(email);
},
message: 'Email must be in the format: 123456@vistacollege.nl'
}
},
role: {
type: String,
enum: ['admin', 'student'],
required: true
}
}, { timestamps: true });
module.exports = mongoose.model('User', userSchema);