Re_Backend/src/models/index.ts

146 lines
3.4 KiB
TypeScript

import { sequelize } from '@config/database';
// Import all models
import { User } from './User';
import { WorkflowRequest } from './WorkflowRequest';
import { ApprovalLevel } from './ApprovalLevel';
import { Participant } from './Participant';
import { Document } from './Document';
import { Subscription } from './Subscription';
import { Activity } from './Activity';
import { WorkNote } from './WorkNote';
import { WorkNoteAttachment } from './WorkNoteAttachment';
import { TatAlert } from './TatAlert';
import { Holiday } from './Holiday';
import { Notification } from './Notification';
import ConclusionRemark from './ConclusionRemark';
import RequestSummary from './RequestSummary';
import SharedSummary from './SharedSummary';
// Define associations
const defineAssociations = () => {
// User associations
User.hasMany(WorkflowRequest, {
as: 'initiatedRequests',
foreignKey: 'initiatorId',
sourceKey: 'userId'
});
User.hasMany(ApprovalLevel, {
as: 'approvalLevels',
foreignKey: 'approverId',
sourceKey: 'userId'
});
User.hasMany(Participant, {
as: 'participations',
foreignKey: 'userId',
sourceKey: 'userId'
});
User.hasMany(Document, {
as: 'uploadedDocuments',
foreignKey: 'uploadedBy',
sourceKey: 'userId'
});
// WorkflowRequest associations
WorkflowRequest.hasMany(ApprovalLevel, {
as: 'approvalLevels',
foreignKey: 'requestId',
sourceKey: 'requestId'
});
WorkflowRequest.hasMany(Participant, {
as: 'participants',
foreignKey: 'requestId',
sourceKey: 'requestId'
});
WorkflowRequest.hasMany(Document, {
as: 'documents',
foreignKey: 'requestId',
sourceKey: 'requestId'
});
WorkflowRequest.hasOne(ConclusionRemark, {
as: 'conclusion',
foreignKey: 'requestId',
sourceKey: 'requestId'
});
ConclusionRemark.belongsTo(WorkflowRequest, {
foreignKey: 'requestId',
targetKey: 'requestId'
});
ConclusionRemark.belongsTo(User, {
as: 'editor',
foreignKey: 'editedBy',
targetKey: 'userId'
});
// RequestSummary associations
// Note: belongsTo associations are defined in the model files to avoid duplicate alias conflicts
// Only hasOne/hasMany associations are defined here
WorkflowRequest.hasOne(RequestSummary, {
as: 'summary',
foreignKey: 'requestId',
sourceKey: 'requestId'
});
RequestSummary.hasMany(SharedSummary, {
as: 'sharedSummaries',
foreignKey: 'summaryId',
sourceKey: 'summaryId'
});
// User associations for summaries
User.hasMany(RequestSummary, {
as: 'createdSummaries',
foreignKey: 'initiatorId',
sourceKey: 'userId'
});
User.hasMany(SharedSummary, {
as: 'sharedByMe',
foreignKey: 'sharedBy',
sourceKey: 'userId'
});
User.hasMany(SharedSummary, {
as: 'sharedWithMe',
foreignKey: 'sharedWith',
sourceKey: 'userId'
});
// Note: belongsTo associations are defined in individual model files to avoid duplicate alias conflicts
// Only hasMany associations from WorkflowRequest are defined here since they're one-way
};
// Initialize associations
defineAssociations();
// Export models and sequelize instance
export {
sequelize,
User,
WorkflowRequest,
ApprovalLevel,
Participant,
Document,
Subscription,
Activity,
WorkNote,
WorkNoteAttachment,
TatAlert,
Holiday,
Notification,
ConclusionRemark,
RequestSummary,
SharedSummary
};
// Export default sequelize instance
export default sequelize;