rwadurian/backend/services/mpc-service/prisma/schema.prisma

81 lines
3.2 KiB
Plaintext

// =============================================================================
// MPC Party Service - Prisma Schema
// =============================================================================
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
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_party_id")
@@index([sessionId], name: "idx_session_id")
@@index([status], name: "idx_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_session_id")
@@index([partyId], name: "idx_party_id")
@@index([status], name: "idx_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")
}