zurri / src /entities /CreatorProfile.ts
nexusbert's picture
add features
2fe81ea
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;
}