146 lines
3.4 KiB
TypeScript
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;
|