email plus return item statuses
This commit is contained in:
53
backend/models/ConditionCheck.js
Normal file
53
backend/models/ConditionCheck.js
Normal file
@@ -0,0 +1,53 @@
|
||||
const { DataTypes } = require("sequelize");
|
||||
const sequelize = require("../config/database");
|
||||
|
||||
const ConditionCheck = sequelize.define("ConditionCheck", {
|
||||
id: {
|
||||
type: DataTypes.UUID,
|
||||
defaultValue: DataTypes.UUIDV4,
|
||||
primaryKey: true,
|
||||
},
|
||||
rentalId: {
|
||||
type: DataTypes.UUID,
|
||||
allowNull: false,
|
||||
references: {
|
||||
model: "Rentals",
|
||||
key: "id",
|
||||
},
|
||||
},
|
||||
checkType: {
|
||||
type: DataTypes.ENUM(
|
||||
"pre_rental_owner",
|
||||
"rental_start_renter",
|
||||
"rental_end_renter",
|
||||
"post_rental_owner"
|
||||
),
|
||||
allowNull: false,
|
||||
},
|
||||
photos: {
|
||||
type: DataTypes.ARRAY(DataTypes.STRING),
|
||||
defaultValue: [],
|
||||
},
|
||||
notes: {
|
||||
type: DataTypes.TEXT,
|
||||
},
|
||||
submittedBy: {
|
||||
type: DataTypes.UUID,
|
||||
allowNull: false,
|
||||
references: {
|
||||
model: "Users",
|
||||
key: "id",
|
||||
},
|
||||
},
|
||||
submittedAt: {
|
||||
type: DataTypes.DATE,
|
||||
allowNull: false,
|
||||
defaultValue: DataTypes.NOW,
|
||||
},
|
||||
metadata: {
|
||||
type: DataTypes.JSONB,
|
||||
defaultValue: {},
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = ConditionCheck;
|
||||
@@ -57,7 +57,11 @@ const Rental = sequelize.define("Rental", {
|
||||
"confirmed",
|
||||
"active",
|
||||
"completed",
|
||||
"cancelled"
|
||||
"cancelled",
|
||||
"returned_late",
|
||||
"returned_late_and_damaged",
|
||||
"damaged",
|
||||
"lost"
|
||||
),
|
||||
defaultValue: "pending",
|
||||
},
|
||||
@@ -153,6 +157,29 @@ const Rental = sequelize.define("Rental", {
|
||||
renterPrivateMessage: {
|
||||
type: DataTypes.TEXT,
|
||||
},
|
||||
// Condition check and return handling fields
|
||||
actualReturnDateTime: {
|
||||
type: DataTypes.DATE,
|
||||
},
|
||||
lateFees: {
|
||||
type: DataTypes.DECIMAL(10, 2),
|
||||
defaultValue: 0.0,
|
||||
},
|
||||
damageFees: {
|
||||
type: DataTypes.DECIMAL(10, 2),
|
||||
defaultValue: 0.0,
|
||||
},
|
||||
replacementFees: {
|
||||
type: DataTypes.DECIMAL(10, 2),
|
||||
defaultValue: 0.0,
|
||||
},
|
||||
itemLostReportedAt: {
|
||||
type: DataTypes.DATE,
|
||||
},
|
||||
damageAssessment: {
|
||||
type: DataTypes.JSONB,
|
||||
defaultValue: {},
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = Rental;
|
||||
|
||||
@@ -1,41 +1,75 @@
|
||||
const sequelize = require('../config/database');
|
||||
const User = require('./User');
|
||||
const Item = require('./Item');
|
||||
const Rental = require('./Rental');
|
||||
const Message = require('./Message');
|
||||
const ItemRequest = require('./ItemRequest');
|
||||
const ItemRequestResponse = require('./ItemRequestResponse');
|
||||
const UserAddress = require('./UserAddress');
|
||||
const sequelize = require("../config/database");
|
||||
const User = require("./User");
|
||||
const Item = require("./Item");
|
||||
const Rental = require("./Rental");
|
||||
const Message = require("./Message");
|
||||
const ItemRequest = require("./ItemRequest");
|
||||
const ItemRequestResponse = require("./ItemRequestResponse");
|
||||
const UserAddress = require("./UserAddress");
|
||||
const ConditionCheck = require("./ConditionCheck");
|
||||
|
||||
User.hasMany(Item, { as: 'ownedItems', foreignKey: 'ownerId' });
|
||||
Item.belongsTo(User, { as: 'owner', foreignKey: 'ownerId' });
|
||||
User.hasMany(Item, { as: "ownedItems", foreignKey: "ownerId" });
|
||||
Item.belongsTo(User, { as: "owner", foreignKey: "ownerId" });
|
||||
|
||||
User.hasMany(Rental, { as: 'rentalsAsRenter', foreignKey: 'renterId' });
|
||||
User.hasMany(Rental, { as: 'rentalsAsOwner', foreignKey: 'ownerId' });
|
||||
User.hasMany(Rental, { as: "rentalsAsRenter", foreignKey: "renterId" });
|
||||
User.hasMany(Rental, { as: "rentalsAsOwner", foreignKey: "ownerId" });
|
||||
|
||||
Item.hasMany(Rental, { as: 'rentals', foreignKey: 'itemId' });
|
||||
Rental.belongsTo(Item, { as: 'item', foreignKey: 'itemId' });
|
||||
Rental.belongsTo(User, { as: 'renter', foreignKey: 'renterId' });
|
||||
Rental.belongsTo(User, { as: 'owner', foreignKey: 'ownerId' });
|
||||
Item.hasMany(Rental, { as: "rentals", foreignKey: "itemId" });
|
||||
Rental.belongsTo(Item, { as: "item", foreignKey: "itemId" });
|
||||
Rental.belongsTo(User, { as: "renter", foreignKey: "renterId" });
|
||||
Rental.belongsTo(User, { as: "owner", foreignKey: "ownerId" });
|
||||
|
||||
User.hasMany(Message, { as: 'sentMessages', foreignKey: 'senderId' });
|
||||
User.hasMany(Message, { as: 'receivedMessages', foreignKey: 'receiverId' });
|
||||
Message.belongsTo(User, { as: 'sender', foreignKey: 'senderId' });
|
||||
Message.belongsTo(User, { as: 'receiver', foreignKey: 'receiverId' });
|
||||
Message.hasMany(Message, { as: 'replies', foreignKey: 'parentMessageId' });
|
||||
Message.belongsTo(Message, { as: 'parentMessage', foreignKey: 'parentMessageId' });
|
||||
User.hasMany(Message, { as: "sentMessages", foreignKey: "senderId" });
|
||||
User.hasMany(Message, { as: "receivedMessages", foreignKey: "receiverId" });
|
||||
Message.belongsTo(User, { as: "sender", foreignKey: "senderId" });
|
||||
Message.belongsTo(User, { as: "receiver", foreignKey: "receiverId" });
|
||||
Message.hasMany(Message, { as: "replies", foreignKey: "parentMessageId" });
|
||||
Message.belongsTo(Message, {
|
||||
as: "parentMessage",
|
||||
foreignKey: "parentMessageId",
|
||||
});
|
||||
|
||||
User.hasMany(ItemRequest, { as: 'itemRequests', foreignKey: 'requesterId' });
|
||||
ItemRequest.belongsTo(User, { as: 'requester', foreignKey: 'requesterId' });
|
||||
User.hasMany(ItemRequest, { as: "itemRequests", foreignKey: "requesterId" });
|
||||
ItemRequest.belongsTo(User, { as: "requester", foreignKey: "requesterId" });
|
||||
|
||||
User.hasMany(ItemRequestResponse, { as: 'itemRequestResponses', foreignKey: 'responderId' });
|
||||
ItemRequest.hasMany(ItemRequestResponse, { as: 'responses', foreignKey: 'itemRequestId' });
|
||||
ItemRequestResponse.belongsTo(User, { as: 'responder', foreignKey: 'responderId' });
|
||||
ItemRequestResponse.belongsTo(ItemRequest, { as: 'itemRequest', foreignKey: 'itemRequestId' });
|
||||
ItemRequestResponse.belongsTo(Item, { as: 'existingItem', foreignKey: 'existingItemId' });
|
||||
User.hasMany(ItemRequestResponse, {
|
||||
as: "itemRequestResponses",
|
||||
foreignKey: "responderId",
|
||||
});
|
||||
ItemRequest.hasMany(ItemRequestResponse, {
|
||||
as: "responses",
|
||||
foreignKey: "itemRequestId",
|
||||
});
|
||||
ItemRequestResponse.belongsTo(User, {
|
||||
as: "responder",
|
||||
foreignKey: "responderId",
|
||||
});
|
||||
ItemRequestResponse.belongsTo(ItemRequest, {
|
||||
as: "itemRequest",
|
||||
foreignKey: "itemRequestId",
|
||||
});
|
||||
ItemRequestResponse.belongsTo(Item, {
|
||||
as: "existingItem",
|
||||
foreignKey: "existingItemId",
|
||||
});
|
||||
|
||||
User.hasMany(UserAddress, { as: 'addresses', foreignKey: 'userId' });
|
||||
UserAddress.belongsTo(User, { as: 'user', foreignKey: 'userId' });
|
||||
User.hasMany(UserAddress, { as: "addresses", foreignKey: "userId" });
|
||||
UserAddress.belongsTo(User, { as: "user", foreignKey: "userId" });
|
||||
|
||||
// ConditionCheck associations
|
||||
Rental.hasMany(ConditionCheck, {
|
||||
as: "conditionChecks",
|
||||
foreignKey: "rentalId",
|
||||
});
|
||||
ConditionCheck.belongsTo(Rental, { as: "rental", foreignKey: "rentalId" });
|
||||
User.hasMany(ConditionCheck, {
|
||||
as: "conditionChecks",
|
||||
foreignKey: "submittedBy",
|
||||
});
|
||||
ConditionCheck.belongsTo(User, {
|
||||
as: "submittedByUser",
|
||||
foreignKey: "submittedBy",
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
sequelize,
|
||||
@@ -45,5 +79,6 @@ module.exports = {
|
||||
Message,
|
||||
ItemRequest,
|
||||
ItemRequestResponse,
|
||||
UserAddress
|
||||
};
|
||||
UserAddress,
|
||||
ConditionCheck,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user