// ============================================================================= // MPC Party Service - Prisma Schema // ============================================================================= generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } // ============================================================================= // Party Shares Table // ============================================================================= model PartyShare { id String @id @db.VarChar(255) partyId String @map("party_id") @db.VarChar(255) sessionId String @map("session_id") @db.VarChar(255) shareType String @map("share_type") @db.VarChar(20) shareData String @map("share_data") @db.Text publicKey String @map("public_key") @db.Text thresholdN Int @map("threshold_n") thresholdT Int @map("threshold_t") status String @default("active") @db.VarChar(20) createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") lastUsedAt DateTime? @map("last_used_at") @@unique([partyId, sessionId], name: "uk_party_session") @@index([partyId], name: "idx_ps_party_id") @@index([sessionId], name: "idx_ps_session_id") @@index([status], name: "idx_ps_status") @@map("party_shares") } // ============================================================================= // Session States Table // ============================================================================= model SessionState { id String @id @db.VarChar(255) sessionId String @map("session_id") @db.VarChar(255) partyId String @map("party_id") @db.VarChar(255) partyIndex Int @map("party_index") sessionType String @map("session_type") @db.VarChar(20) participants String @db.Text // JSON array thresholdN Int @map("threshold_n") thresholdT Int @map("threshold_t") status String @db.VarChar(20) currentRound Int @default(0) @map("current_round") errorMessage String? @map("error_message") @db.Text publicKey String? @map("public_key") @db.Text messageHash String? @map("message_hash") @db.VarChar(66) signature String? @db.Text startedAt DateTime @default(now()) @map("started_at") completedAt DateTime? @map("completed_at") @@unique([sessionId, partyId], name: "uk_session_party") @@index([sessionId], name: "idx_ss_session_id") @@index([partyId], name: "idx_ss_party_id") @@index([status], name: "idx_ss_status") @@map("session_states") } // ============================================================================= // Share Backups Table (for disaster recovery) // ============================================================================= model ShareBackup { id String @id @db.VarChar(255) shareId String @map("share_id") @db.VarChar(255) backupData String @map("backup_data") @db.Text backupType String @map("backup_type") @db.VarChar(20) createdAt DateTime @default(now()) @map("created_at") createdBy String? @map("created_by") @db.VarChar(255) @@index([shareId], name: "idx_share_id") @@index([createdAt], name: "idx_created_at") @@map("share_backups") }