81 lines
3.2 KiB
Plaintext
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")
|
|
}
|