import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, Index, Unique, } from 'typeorm'; import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; @Entity('positions') @Unique(['userId', 'brokerId', 'symbol', 'market', 'assetType']) export class Position { @ApiProperty({ description: '持仓ID', example: 1 }) @PrimaryGeneratedColumn({ name: 'position_id' }) positionId: number; @ApiProperty({ description: '用户ID', example: 1, }) @Column({ name: 'user_id', type: 'bigint' }) @Index() userId: number; @ApiProperty({ description: '券商ID', example: 1, }) @Column({ name: 'broker_id', type: 'bigint' }) @Index() brokerId: number; @ApiProperty({ description: '资产类型', example: 'stock', enum: ['stock', 'fund', 'cash', 'bond', 'other'], }) @Column({ name: 'asset_type', type: 'varchar', length: 20, }) @Index() assetType: string; @ApiProperty({ description: '资产代码(股票代码、基金代码等)', example: '600519', maxLength: 50, }) @Column({ name: 'symbol', type: 'varchar', length: 50 }) @Index() symbol: string; @ApiProperty({ description: '资产名称', example: '贵州茅台', maxLength: 100, }) @Column({ name: 'name', type: 'varchar', length: 100 }) name: string; @ApiPropertyOptional({ description: '市场(A股/港股/美股等)', example: 'sh', maxLength: 20, }) @Column({ name: 'market', type: 'varchar', length: 20, nullable: true }) market?: string; @ApiProperty({ description: '持仓份额/数量', example: 100, }) @Column({ name: 'shares', type: 'decimal', precision: 18, scale: 4, default: 0, }) shares: number; @ApiProperty({ description: '成本价(每股/每份)', example: 1600.0, }) @Column({ name: 'cost_price', type: 'decimal', precision: 18, scale: 4, }) costPrice: number; @ApiPropertyOptional({ description: '最新市场价(系统自动更新)', example: 1850.0, }) @Column({ name: 'current_price', type: 'decimal', precision: 18, scale: 4, nullable: true, }) currentPrice?: number; @ApiProperty({ description: '货币类型', example: 'CNY', default: 'CNY', maxLength: 10, }) @Column({ name: 'currency', type: 'varchar', length: 10, default: 'CNY', }) currency: string; @ApiPropertyOptional({ description: '汇率(用于多货币)', example: 1.0, default: 1, }) @Column({ name: 'exchange_rate', type: 'decimal', precision: 10, scale: 6, default: 1, }) exchangeRate?: number; @ApiProperty({ description: '是否自动更新价格(付费用户功能)', example: false, default: false, }) @Column({ name: 'auto_price_update', type: 'boolean', default: false, }) autoPriceUpdate: boolean; @ApiProperty({ description: '状态', example: 'active', enum: ['active', 'suspended', 'delisted'], default: 'active', }) @Column({ name: 'status', type: 'varchar', length: 20, default: 'active', }) @Index() status: string; @ApiProperty({ description: '创建时间', example: '2024-01-01T00:00:00.000Z', }) @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @ApiProperty({ description: '更新时间', example: '2024-01-01T00:00:00.000Z', }) @UpdateDateColumn({ name: 'updated_at' }) updatedAt: Date; }