import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, ManyToOne, JoinColumn, OneToMany, } from 'typeorm'; import { User } from './user.entity'; import { Course } from './course.entity'; import { Payment } from './payment.entity'; export enum OrderStatus { PENDING = 'pending', PAID = 'paid', CANCELLED = 'cancelled', REFUNDED = 'refunded', } export enum OrderType { PURCHASE = 'purchase', DONATION = 'donation', VIP = 'vip', } @Entity('orders') export class Order { @PrimaryGeneratedColumn() id: number; @Column({ type: 'varchar', length: 32, unique: true, name: 'order_no' }) orderNo: string; @Column({ name: 'user_id' }) userId: number; @Column({ name: 'course_id', nullable: true }) courseId: number; @Column({ type: 'decimal', precision: 10, scale: 2 }) amount: number; @Column({ type: 'varchar', default: OrderStatus.PENDING }) status: OrderStatus; @Column({ type: 'varchar', default: OrderType.PURCHASE, name: 'order_type' }) orderType: OrderType; @Column({ type: 'varchar', length: 255, nullable: true }) message: string; @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @Column({ type: 'datetime', nullable: true, name: 'paid_at' }) paidAt: Date; @ManyToOne(() => User, (user) => user.orders) @JoinColumn({ name: 'user_id' }) user: User; @ManyToOne(() => Course, (course) => course.orders) @JoinColumn({ name: 'course_id' }) course: Course; @OneToMany(() => Payment, (payment) => payment.order) payments: Payment[]; }