83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
const { DataTypes } = require('sequelize');
|
|
const { sequelize } = require('../config/database');
|
|
|
|
const PaymentRequest = sequelize.define('PaymentRequest', {
|
|
id: {
|
|
type: DataTypes.INTEGER,
|
|
primaryKey: true,
|
|
autoIncrement: true,
|
|
comment: '결제 요청 고유 ID'
|
|
},
|
|
clubId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
comment: '클럽 ID'
|
|
},
|
|
planId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
comment: '선택한 구독 플랜 ID'
|
|
},
|
|
currentPlanId: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: true,
|
|
comment: '현재 구독 중인 플랜 ID'
|
|
},
|
|
isUpgrade: {
|
|
type: DataTypes.BOOLEAN,
|
|
defaultValue: false,
|
|
comment: '업그레이드 여부 (true: 업그레이드, false: 다운그레이드 또는 신규)'
|
|
},
|
|
planDuration: {
|
|
type: DataTypes.INTEGER,
|
|
defaultValue: 1,
|
|
comment: '구독 기간 (개월 단위)'
|
|
},
|
|
features: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
comment: '추가 기능 목록 (JSON 문자열)'
|
|
},
|
|
totalAmount: {
|
|
type: DataTypes.INTEGER,
|
|
allowNull: false,
|
|
comment: '총 결제 금액 (원)'
|
|
},
|
|
status: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
defaultValue: 'pending',
|
|
comment: '결제 상태 (pending: 대기, success: 성공, failed: 실패, cancelled: 취소)'
|
|
},
|
|
orderId: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
unique: true,
|
|
comment: '주문 고유 ID'
|
|
},
|
|
paymentKey: {
|
|
type: DataTypes.STRING,
|
|
allowNull: true,
|
|
comment: '결제 서비스 제공자의 결제 키'
|
|
},
|
|
paymentData: {
|
|
type: DataTypes.TEXT,
|
|
allowNull: true,
|
|
comment: '결제 관련 추가 데이터 (JSON 문자열)'
|
|
},
|
|
planChange: {
|
|
type: DataTypes.BOOLEAN,
|
|
defaultValue: false,
|
|
comment: '플랜 변경 여부 (true: 플랜 변경, false: 신규 구독 또는 기능만 추가)'
|
|
},
|
|
failReason: {
|
|
type: DataTypes.STRING,
|
|
allowNull: true,
|
|
comment: '결제 실패 사유'
|
|
}
|
|
}, {
|
|
timestamps: true
|
|
});
|
|
|
|
module.exports = PaymentRequest;
|