import { Sequelize } from 'sequelize'; import config from '../../common/config/database.js'; // Import individual model factories import createUser from './User.js'; import createApplication from './Application.js'; import createResignation from './Resignation.js'; import createConstitutionalChange from './ConstitutionalChange.js'; import createRelocationRequest from './RelocationRequest.js'; import createOutlet from './Outlet.js'; import createWorknote from './Worknote.js'; import createDocument from './Document.js'; import createAuditLog from './AuditLog.js'; import createFinancePayment from './FinancePayment.js'; import createFnF from './FnF.js'; import createFnFLineItem from './FnFLineItem.js'; import createRegion from './Region.js'; import createZone from './Zone.js'; import createSLAConfiguration from './SLAConfiguration.js'; import createSLAReminder from './SLAReminder.js'; import createSLAEscalationConfig from './SLAEscalationConfig.js'; import createWorkflowStageConfig from './WorkflowStageConfig.js'; import createNotification from './Notification.js'; // Batch 1: Organizational Hierarchy & User Management import createRole from './Role.js'; import createPermission from './Permission.js'; import createRolePermission from './RolePermission.js'; import createState from './State.js'; import createDistrict from './District.js'; import createArea from './Area.js'; import createUserRole from './UserRole.js'; import createZoneManager from './ZoneManager.js'; import createRegionManager from './RegionManager.js'; import createAreaManager from './AreaManager.js'; import createDistrictManager from './DistrictManager.js'; // Batch 2: Opportunity & Application Framework import createOpportunity from './Opportunity.js'; import createApplicationStatusHistory from './ApplicationStatusHistory.js'; import createApplicationProgress from './ApplicationProgress.js'; // Batch 3: Questionnaire & Interview Systems import createQuestionnaire from './Questionnaire.js'; import createQuestionnaireQuestion from './QuestionnaireQuestion.js'; import createQuestionnaireOption from './QuestionnaireOption.js'; import createQuestionnaireResponse from './QuestionnaireResponse.js'; import createQuestionnaireScore from './QuestionnaireScore.js'; import createInterview from './Interview.js'; import createInterviewParticipant from './InterviewParticipant.js'; import createInterviewEvaluation from './InterviewEvaluation.js'; import createKTMatrixScore from './KTMatrixScore.js'; import createInterviewFeedback from './InterviewFeedback.js'; import createAiSummary from './AiSummary.js'; // Batch 4: Dealer Entity, Documents & Work Notes import createDealer from './Dealer.js'; import createDealerCode from './DealerCode.js'; import createDocumentVersion from './DocumentVersion.js'; import createWorkNoteTag from './WorkNoteTag.js'; import createWorkNoteAttachment from './WorkNoteAttachment.js'; import createRequestParticipant from './RequestParticipant.js'; // Batch 5: FDD, LOI, LOA, EOR & Security Deposit import createFddAssignment from './FddAssignment.js'; import createFddReport from './FddReport.js'; import createLoiRequest from './LoiRequest.js'; import createLoiApproval from './LoiApproval.js'; import createLoiDocumentGenerated from './LoiDocumentGenerated.js'; import createLoiAcknowledgement from './LoiAcknowledgement.js'; import createSecurityDeposit from './SecurityDeposit.js'; import createLoaRequest from './LoaRequest.js'; import createLoaApproval from './LoaApproval.js'; import createLoaDocumentGenerated from './LoaDocumentGenerated.js'; import createLoaAcknowledgement from './LoaAcknowledgement.js'; import createEorChecklist from './EorChecklist.js'; import createEorChecklistItem from './EorChecklistItem.js'; // Batch 6: Offboarding & F&F Settlement import createTerminationRequest from './TerminationRequest.js'; import createExitFeedback from './ExitFeedback.js'; // Batch 7: Notifications, Logs & Templates import createEmailTemplate from './EmailTemplate.js'; // Batch 8: SLA & TAT Tracking import createSLATracking from './SLATracking.js'; import createSLABreach from './SLABreach.js'; const env = process.env.NODE_ENV || 'development'; const dbConfig = config[env]; // Initialize Sequelize const sequelize = new Sequelize( dbConfig.database!, dbConfig.username!, dbConfig.password!, { host: dbConfig.host, port: dbConfig.port as number, dialect: dbConfig.dialect as any, logging: dbConfig.logging, pool: dbConfig.pool, dialectOptions: dbConfig.dialectOptions } ); const db: any = {}; // Initialize models db.User = createUser(sequelize); db.Application = createApplication(sequelize); db.Resignation = createResignation(sequelize); db.ConstitutionalChange = createConstitutionalChange(sequelize); db.RelocationRequest = createRelocationRequest(sequelize); db.Outlet = createOutlet(sequelize); db.Worknote = createWorknote(sequelize); db.Document = createDocument(sequelize); db.AuditLog = createAuditLog(sequelize); db.FinancePayment = createFinancePayment(sequelize); db.FnF = createFnF(sequelize); db.FnFLineItem = createFnFLineItem(sequelize); db.Region = createRegion(sequelize); db.Zone = createZone(sequelize); db.SLAConfiguration = createSLAConfiguration(sequelize); db.SLAReminder = createSLAReminder(sequelize); db.SLAEscalationConfig = createSLAEscalationConfig(sequelize); db.WorkflowStageConfig = createWorkflowStageConfig(sequelize); db.Notification = createNotification(sequelize); // Batch 1: Organizational Hierarchy & User Management db.Role = createRole(sequelize); db.Permission = createPermission(sequelize); db.RolePermission = createRolePermission(sequelize); db.State = createState(sequelize); db.District = createDistrict(sequelize); db.Area = createArea(sequelize); db.UserRole = createUserRole(sequelize); db.ZoneManager = createZoneManager(sequelize); db.RegionManager = createRegionManager(sequelize); db.AreaManager = createAreaManager(sequelize); db.DistrictManager = createDistrictManager(sequelize); // Batch 2: Opportunity & Application Framework db.Opportunity = createOpportunity(sequelize); db.ApplicationStatusHistory = createApplicationStatusHistory(sequelize); db.ApplicationProgress = createApplicationProgress(sequelize); // Batch 3: Questionnaire & Interview Systems db.Questionnaire = createQuestionnaire(sequelize); db.QuestionnaireQuestion = createQuestionnaireQuestion(sequelize); db.QuestionnaireOption = createQuestionnaireOption(sequelize); db.QuestionnaireResponse = createQuestionnaireResponse(sequelize); db.QuestionnaireScore = createQuestionnaireScore(sequelize); db.Interview = createInterview(sequelize); db.InterviewParticipant = createInterviewParticipant(sequelize); db.InterviewEvaluation = createInterviewEvaluation(sequelize); db.KTMatrixScore = createKTMatrixScore(sequelize); db.InterviewFeedback = createInterviewFeedback(sequelize); db.AiSummary = createAiSummary(sequelize); // Batch 4: Dealer Entity, Documents & Work Notes db.Dealer = createDealer(sequelize); db.DealerCode = createDealerCode(sequelize); db.DocumentVersion = createDocumentVersion(sequelize); db.WorkNoteTag = createWorkNoteTag(sequelize); db.WorkNoteAttachment = createWorkNoteAttachment(sequelize); db.RequestParticipant = createRequestParticipant(sequelize); // Batch 5: FDD, LOI, LOA, EOR & Security Deposit db.FddAssignment = createFddAssignment(sequelize); db.FddReport = createFddReport(sequelize); db.LoiRequest = createLoiRequest(sequelize); db.LoiApproval = createLoiApproval(sequelize); db.LoiDocumentGenerated = createLoiDocumentGenerated(sequelize); db.LoiAcknowledgement = createLoiAcknowledgement(sequelize); db.SecurityDeposit = createSecurityDeposit(sequelize); db.LoaRequest = createLoaRequest(sequelize); db.LoaApproval = createLoaApproval(sequelize); db.LoaDocumentGenerated = createLoaDocumentGenerated(sequelize); db.LoaAcknowledgement = createLoaAcknowledgement(sequelize); db.EorChecklist = createEorChecklist(sequelize); db.EorChecklistItem = createEorChecklistItem(sequelize); // Batch 6: Offboarding & F&F Settlement db.TerminationRequest = createTerminationRequest(sequelize); db.ExitFeedback = createExitFeedback(sequelize); // Batch 7: Notifications, Logs & Templates db.EmailTemplate = createEmailTemplate(sequelize); // Batch 8: SLA & TAT Tracking db.SLATracking = createSLATracking(sequelize); db.SLABreach = createSLABreach(sequelize); // Define associations Object.keys(db).forEach((modelName) => { if (db[modelName].associate) { db[modelName].associate(db); } }); db.sequelize = sequelize; db.Sequelize = Sequelize; export default db; export { sequelize, Sequelize };