const { DataTypes } = require("sequelize"); const sequelize = require("../config/database"); const Item = sequelize.define("Item", { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true, }, name: { type: DataTypes.STRING, allowNull: false, }, description: { type: DataTypes.TEXT, allowNull: false, }, pickUpAvailable: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, localDeliveryAvailable: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, localDeliveryRadius: { type: DataTypes.INTEGER, validate: { min: 1, max: 100, }, }, shippingAvailable: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, inPlaceUseAvailable: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, pricePerHour: { type: DataTypes.DECIMAL(10, 2), }, pricePerDay: { type: DataTypes.DECIMAL(10, 2), }, replacementCost: { type: DataTypes.DECIMAL(10, 2), allowNull: false, }, address1: { type: DataTypes.STRING, }, address2: { type: DataTypes.STRING, }, city: { type: DataTypes.STRING, }, state: { type: DataTypes.STRING, }, zipCode: { type: DataTypes.STRING, }, country: { type: DataTypes.STRING, }, latitude: { type: DataTypes.DECIMAL(10, 8), }, longitude: { type: DataTypes.DECIMAL(11, 8), }, images: { type: DataTypes.ARRAY(DataTypes.STRING), defaultValue: [], }, availability: { type: DataTypes.BOOLEAN, defaultValue: true, }, specifications: { type: DataTypes.JSONB, defaultValue: {}, }, rules: { type: DataTypes.TEXT, }, minimumRentalDays: { type: DataTypes.INTEGER, defaultValue: 1, }, maximumRentalDays: { type: DataTypes.INTEGER, }, needsTraining: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false, }, unavailablePeriods: { type: DataTypes.JSONB, defaultValue: [], }, availableAfter: { type: DataTypes.STRING, defaultValue: "09:00", }, availableBefore: { type: DataTypes.STRING, defaultValue: "17:00", }, specifyTimesPerDay: { type: DataTypes.BOOLEAN, defaultValue: false, }, weeklyTimes: { type: DataTypes.JSONB, defaultValue: { sunday: { availableAfter: "09:00", availableBefore: "17:00" }, monday: { availableAfter: "09:00", availableBefore: "17:00" }, tuesday: { availableAfter: "09:00", availableBefore: "17:00" }, wednesday: { availableAfter: "09:00", availableBefore: "17:00" }, thursday: { availableAfter: "09:00", availableBefore: "17:00" }, friday: { availableAfter: "09:00", availableBefore: "17:00" }, saturday: { availableAfter: "09:00", availableBefore: "17:00" }, }, }, ownerId: { type: DataTypes.UUID, allowNull: false, references: { model: "Users", key: "id", }, }, }); module.exports = Item;