appointment_system/backend/src/models/Withdrawal.js
2025-12-11 22:50:18 +08:00

85 lines
1.7 KiB
JavaScript

const { DataTypes } = require('sequelize');
const { sequelize } = require('../config/database');
/**
* Withdrawal Model
* Represents user withdrawal requests
*/
const Withdrawal = sequelize.define('Withdrawal', {
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true,
},
userId: {
type: DataTypes.UUID,
allowNull: false,
field: 'user_id',
references: {
model: 'user',
key: 'id',
},
},
withdrawalNo: {
type: DataTypes.STRING(50),
allowNull: false,
unique: true,
field: 'withdrawal_no',
},
amount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false,
},
paymentMethod: {
type: DataTypes.ENUM('wechat', 'alipay', 'bank'),
allowNull: false,
field: 'payment_method',
},
paymentDetails: {
type: DataTypes.JSON,
allowNull: false,
field: 'payment_details',
},
status: {
type: DataTypes.ENUM('waiting', 'processing', 'completed', 'rejected'),
defaultValue: 'waiting',
allowNull: false,
},
reviewedBy: {
type: DataTypes.UUID,
allowNull: true,
field: 'reviewed_by',
references: {
model: 'admin',
key: 'id',
},
},
reviewedAt: {
type: DataTypes.DATE,
allowNull: true,
field: 'reviewed_at',
},
rejectionReason: {
type: DataTypes.TEXT,
allowNull: true,
field: 'rejection_reason',
},
completedAt: {
type: DataTypes.DATE,
allowNull: true,
field: 'completed_at',
},
}, {
tableName: 'withdrawal',
timestamps: true,
underscored: true,
indexes: [
{ fields: ['user_id'] },
{ fields: ['withdrawal_no'] },
{ fields: ['status'] },
{ fields: ['reviewed_by'] },
],
});
module.exports = Withdrawal;