import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn, CreateDateColumn, UpdateDateColumn, Index } from 'typeorm'; import { User } from './User'; export enum VerificationStatus { UNVERIFIED = 'UNVERIFIED', PENDING = 'PENDING', } @Entity('creator_profiles') @Index(['username'], { unique: true }) export class CreatorProfile { @PrimaryGeneratedColumn('uuid') id: string; @OneToOne(() => User) @JoinColumn({ name: 'userId' }) user: User; @Column({ unique: true }) userId: string; // Basic Information @Column() fullName: string; @Column({ unique: true }) username: string; // e.g. @neuralnex (store without @) @Column({ nullable: true }) profileImage?: string; // URL/IPFS @Column({ length: 200, nullable: true }) bio?: string; // Professional Information @Column({ nullable: true }) organization?: string; @Column({ nullable: true }) role?: string; // e.g., AI Engineer @Column({ nullable: true }) website?: string; @Column({ nullable: true }) linkedinUrl?: string; @Column({ nullable: true }) githubUrl?: string; @Column({ nullable: true }) huggingfaceUrl?: string; // Technical Stack & Focus @Column('text', { array: true, default: '{}' }) primaryLanguages: string[]; @Column('text', { array: true, default: '{}' }) frameworks: string[]; @Column('text', { array: true, default: '{}' }) agentSpecialties: string[]; @Column({ nullable: true }) preferredCompute?: string; @Column({ nullable: true }) endpointHosting?: string; // Payout & Monetization @Column({ nullable: true }) walletAddress?: string; @Column('jsonb', { nullable: true }) bankAccount?: { accountName?: string; accountNumber?: string; bankCode?: string }; @Column({ nullable: true }) preferredCurrency?: string; @Column({ nullable: true }) country?: string; @Column({ nullable: true }) taxId?: string; // Verification @Column({ nullable: true }) idDocumentUrl?: string; @Column({ type: 'enum', enum: VerificationStatus, default: VerificationStatus.UNVERIFIED }) verificationStatus: VerificationStatus; @Column({ default: false }) portfolioApproved: boolean; @CreateDateColumn() createdAt: Date; @UpdateDateColumn() updatedAt: Date; }