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", }, }, startDateTime: { type: DataTypes.DATE, allowNull: false, }, endDateTime: { type: DataTypes.DATE, allowNull: false, }, totalAmount: { type: DataTypes.DECIMAL(10, 2), allowNull: false, }, platformFee: { type: DataTypes.DECIMAL(10, 2), allowNull: false, }, payoutAmount: { 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", }, payoutStatus: { type: DataTypes.ENUM("pending", "processing", "completed", "failed"), defaultValue: "pending", }, payoutProcessedAt: { type: DataTypes.DATE, }, stripeTransferId: { type: DataTypes.STRING, }, // Refund tracking fields refundAmount: { type: DataTypes.DECIMAL(10, 2), }, refundProcessedAt: { type: DataTypes.DATE, }, refundReason: { type: DataTypes.TEXT, }, stripeRefundId: { type: DataTypes.STRING, }, cancelledBy: { type: DataTypes.ENUM("renter", "owner"), }, cancelledAt: { type: DataTypes.DATE, }, stripePaymentMethodId: { type: DataTypes.STRING, }, stripePaymentIntentId: { type: DataTypes.STRING, }, 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, }, }); module.exports = Rental;