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"); const AlphaInvitation = require("./AlphaInvitation"); const Feedback = require("./Feedback"); 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" }); 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(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(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", }); // AlphaInvitation associations AlphaInvitation.belongsTo(User, { as: "user", foreignKey: "usedBy", }); User.hasMany(AlphaInvitation, { as: "alphaInvitations", foreignKey: "usedBy", }); // Feedback associations User.hasMany(Feedback, { as: "feedbacks", foreignKey: "userId" }); Feedback.belongsTo(User, { as: "user", foreignKey: "userId" }); module.exports = { sequelize, User, Item, Rental, Message, ItemRequest, ItemRequestResponse, UserAddress, ConditionCheck, AlphaInvitation, Feedback, };