/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/models/index.js const { Sequelize, DataTypes } = require("sequelize"); const dbConfig = require("../config/db.config"); const loggingOption = process.env.NODE_ENV === "development" ? console.log : false; const sequelize = new Sequelize( dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, port: dbConfig.PORT, dialect: dbConfig.DIALECT, pool: dbConfig.pool, logging: loggingOption } ); const db = {}; db.Sequelize = Sequelize; db.sequelize = sequelize; /* Register db models */ // User and Authentication db.User = require("./user/user.model")(sequelize, DataTypes); db.Customer = require("./user/customer.model")(sequelize, DataTypes); db.BusinessCustomer = require("./user/businessCustomer.model")(sequelize, DataTypes); db.AuthSession = require("./user/authSession.model")(sequelize, DataTypes); db.UserIdentity = require("./user/userIdentity.model")(sequelize, DataTypes); db.UserActivity = require("./activities/userActivities.model")(sequelize, DataTypes); db.Profile = require("./user/profile.model")(sequelize, DataTypes); db.Address = require("./user/address.model")(sequelize, DataTypes); db.BusinessApplication = require("./user/businessApplication.model")(sequelize, DataTypes); db.BusinessContact = require("./user/businessContact.model")(sequelize, DataTypes); db.BusinessCreditAccount = require("./user/businessCreditAccount.model")(sequelize, DataTypes); db.SettlementTerm = require("./user/settlementTerm.model")(sequelize, DataTypes); // Uploads db.Upload = require("./upload/upload.model")(sequelize, DataTypes); // Roles and Permissions db.roles = require("./permission/role.model")(sequelize, DataTypes); db.permission = require("./permission/permission.model")(sequelize, DataTypes); db.rolePermission = require("./permission/rolePermission.model")(sequelize, DataTypes); db.userPermission = require("./permission/userPermission.model")(sequelize, DataTypes); db.UserRole = require("./permission/userRole.model")(sequelize, DataTypes); // Document Management db.Document = require("./document/document.model")(sequelize, DataTypes); db.DocumentType = require("./document/documentType.model")(sequelize, DataTypes); // Reference Numbers db.referenceNumber = require("./referenceNumbers/referenceNumber.model")(sequelize, DataTypes); // Notifications db.notification = require("./notification/notification.model")(sequelize, DataTypes); db.userNotification = require("./notification/userNotification.model")(sequelize, DataTypes); db.NotificationDelivery = require("./notification/notificationDelivery.model")(sequelize, DataTypes); // Catalogue and localized content db.Brand = require("./catalogue/brand.model")(sequelize, DataTypes); db.Category = require("./catalogue/category.model")(sequelize, DataTypes); db.CategoryTranslation = require("./catalogue/categoryTranslation.model")(sequelize, DataTypes); db.Product = require("./catalogue/product.model")(sequelize, DataTypes); db.ProductTranslation = require("./catalogue/productTranslation.model")(sequelize, DataTypes); db.ProductCategory = require("./catalogue/productCategory.model")(sequelize, DataTypes); db.ProductVariant = require("./catalogue/productVariant.model")(sequelize, DataTypes); db.ProductOption = require("./catalogue/productOption.model")(sequelize, DataTypes); db.ProductOptionValue = require("./catalogue/productOptionValue.model")(sequelize, DataTypes); db.VariantOptionValue = require("./catalogue/variantOptionValue.model")(sequelize, DataTypes); db.ProductAttribute = require("./catalogue/productAttribute.model")(sequelize, DataTypes); db.ProductMedia = require("./catalogue/productMedia.model")(sequelize, DataTypes); db.Collection = require("./catalogue/collection.model")(sequelize, DataTypes); db.CollectionTranslation = require("./catalogue/collectionTranslation.model")(sequelize, DataTypes); db.CollectionProduct = require("./catalogue/collectionProduct.model")(sequelize, DataTypes); db.SizeGuide = require("./catalogue/sizeGuide.model")(sequelize, DataTypes); db.ProductRelation = require("./catalogue/productRelation.model")(sequelize, DataTypes); db.ProductReview = require("./catalogue/productReview.model")(sequelize, DataTypes); db.Warehouse=require("./inventory/warehouse.model")(sequelize,DataTypes);db.InventoryBalance=require("./inventory/inventoryBalance.model")(sequelize,DataTypes);db.InventoryTransaction=require("./inventory/inventoryTransaction.model")(sequelize,DataTypes);db.InventoryReservation=require("./inventory/inventoryReservation.model")(sequelize,DataTypes);db.InventoryTransfer=require("./inventory/inventoryTransfer.model")(sequelize,DataTypes); db.BusinessTier=require("./pricing/businessTier.model")(sequelize,DataTypes);db.VariantBusinessPrice=require("./pricing/variantBusinessPrice.model")(sequelize,DataTypes);db.BusinessPriceTier=require("./pricing/businessPriceTier.model")(sequelize,DataTypes); db.Promotion=require("./merchandising/promotion.model")(sequelize,DataTypes);db.PromotionTarget=require("./merchandising/promotionTarget.model")(sequelize,DataTypes);db.Coupon=require("./merchandising/coupon.model")(sequelize,DataTypes);db.Banner=require("./merchandising/banner.model")(sequelize,DataTypes);db.BannerTranslation=require("./merchandising/bannerTranslation.model")(sequelize,DataTypes); db.Cart=require("./shopping/cart.model")(sequelize,DataTypes);db.CartItem=require("./shopping/cartItem.model")(sequelize,DataTypes);db.WishlistItem=require("./shopping/wishlistItem.model")(sequelize,DataTypes);db.CheckoutSession=require("./shopping/checkoutSession.model")(sequelize,DataTypes);db.CheckoutItem=require("./shopping/checkoutItem.model")(sequelize,DataTypes); db.ShippingZone=require("./shipping/shippingZone.model")(sequelize,DataTypes);db.ShippingZoneRegion=require("./shipping/shippingZoneRegion.model")(sequelize,DataTypes);db.ShippingMethod=require("./shipping/shippingMethod.model")(sequelize,DataTypes);db.ShippingRate=require("./shipping/shippingRate.model")(sequelize,DataTypes); db.Order=require("./commerce/order.model")(sequelize,DataTypes);db.OrderItem=require("./commerce/orderItem.model")(sequelize,DataTypes);db.Payment=require("./commerce/payment.model")(sequelize,DataTypes);db.PaymentAttempt=require("./commerce/paymentAttempt.model")(sequelize,DataTypes);db.PaymentWebhookEvent=require("./commerce/paymentWebhookEvent.model")(sequelize,DataTypes);db.Invoice=require("./commerce/invoice.model")(sequelize,DataTypes);db.Refund=require("./commerce/refund.model")(sequelize,DataTypes);db.RefundItem=require("./commerce/refundItem.model")(sequelize,DataTypes);db.ReturnRequest=require("./commerce/returnRequest.model")(sequelize,DataTypes);db.ReturnItem=require("./commerce/returnItem.model")(sequelize,DataTypes);db.CouponRedemption=require("./commerce/couponRedemption.model")(sequelize,DataTypes); /* Associations */ Object.keys(db).forEach(model => { if (db[model].associate) { db[model].associate(db); } }); module.exports = db;