Dealer_Onboarding_Backend/src/database/models/FnFLineItem.ts

78 lines
2.0 KiB
TypeScript

import { Model, DataTypes, Sequelize } from 'sequelize';
export interface FnFLineItemAttributes {
id: string;
fnfId: string;
itemType: 'Payable' | 'Receivable' | 'Deduction' | 'Recovery';
description: string;
department: string;
amount: number;
addedBy: string | null;
}
export interface FnFLineItemInstance extends Model<FnFLineItemAttributes>, FnFLineItemAttributes { }
export default (sequelize: Sequelize) => {
const FnFLineItem = sequelize.define<FnFLineItemInstance>('FnFLineItem', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true
},
fnfId: {
type: DataTypes.UUID,
allowNull: false,
references: {
model: 'fnf_settlements',
key: 'id'
}
},
itemType: {
type: DataTypes.ENUM('Payable', 'Receivable', 'Deduction', 'Recovery'),
allowNull: false
},
description: {
type: DataTypes.STRING,
allowNull: false
},
department: {
type: DataTypes.STRING,
allowNull: false
},
amount: {
type: DataTypes.DECIMAL(15, 2),
allowNull: false,
defaultValue: 0
},
addedBy: {
type: DataTypes.UUID,
allowNull: true,
references: {
model: 'users',
key: 'id'
}
}
}, {
tableName: 'fnf_line_items',
timestamps: true,
indexes: [
{ fields: ['fnfId'] },
{ fields: ['itemType'] },
{ fields: ['department'] }
]
});
(FnFLineItem as any).associate = (models: any) => {
FnFLineItem.belongsTo(models.FnF, {
foreignKey: 'fnfId',
as: 'settlement'
});
FnFLineItem.belongsTo(models.User, {
foreignKey: 'addedBy',
as: 'creator'
});
};
return FnFLineItem;
};