Files
rentall-app/backend/models/Rental.js

126 lines
2.3 KiB
JavaScript

const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
const Rental = sequelize.define('Rental', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true
},
itemId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: 'Items',
key: 'id'
}
},
renterId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: 'Users',
key: 'id'
}
},
ownerId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: 'Users',
key: 'id'
}
},
startDate: {
type: DataTypes.DATE,
allowNull: false
},
endDate: {
type: DataTypes.DATE,
allowNull: false
},
startTime: {
type: DataTypes.STRING
},
endTime: {
type: DataTypes.STRING
},
totalAmount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false
},
status: {
type: DataTypes.ENUM('pending', 'confirmed', 'active', 'completed', 'cancelled'),
defaultValue: 'pending'
},
paymentStatus: {
type: DataTypes.ENUM('pending', 'paid', 'refunded'),
defaultValue: 'pending'
},
deliveryMethod: {
type: DataTypes.ENUM('pickup', 'delivery'),
defaultValue: 'pickup'
},
deliveryAddress: {
type: DataTypes.TEXT
},
notes: {
type: DataTypes.TEXT
},
// Renter's review of the item (existing fields renamed for clarity)
itemRating: {
type: DataTypes.INTEGER,
validate: {
min: 1,
max: 5
}
},
itemReview: {
type: DataTypes.TEXT
},
itemReviewSubmittedAt: {
type: DataTypes.DATE
},
itemReviewVisible: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
// Owner's review of the renter
renterRating: {
type: DataTypes.INTEGER,
validate: {
min: 1,
max: 5
}
},
renterReview: {
type: DataTypes.TEXT
},
renterReviewSubmittedAt: {
type: DataTypes.DATE
},
renterReviewVisible: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
// Private messages (always visible to recipient)
itemPrivateMessage: {
type: DataTypes.TEXT
},
renterPrivateMessage: {
type: DataTypes.TEXT
},
// Legacy fields for backwards compatibility
rating: {
type: DataTypes.INTEGER,
validate: {
min: 1,
max: 5
}
},
review: {
type: DataTypes.TEXT
}
});
module.exports = Rental;