1.9 KiB
1.9 KiB
4. Database Architecture (Revised with Prisma)
The database schema will be defined declaratively using the Prisma schema language in a single source of truth file: prisma/schema.prisma. Prisma will be responsible for generating SQL migrations and providing a type-safe client for all database interactions.
Prisma Schema (prisma/schema.prisma)
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
// User-friendly metadata associated with a public key.
model Registry {
publicKey String @id
citizenName String
avatarUrl String?
isActive Boolean @default(true)
createdAt DateTime @default(now())
}
// The core, immutable data model.
// Once a row is written, it is never updated or deleted.
model LedgerEntry {
id BigInt @id @default(autoincrement())
previousHash String?
entryHash String @unique
citizenPublicKey String
signature String
actionType String
payload Json? // The actual data for the action, e.g., cell details
createdAt DateTime @default(now())
@@index([citizenPublicKey])
@@index([payload], name: "idx_ledger_payload_entity") // Example for indexing specific payload keys
}
Migrations Workflow
Database migrations will be managed exclusively by Prisma Migrate.
- Development: After any change to
schema.prisma, a new migration will be created and applied using the command:npx prisma migrate dev --name <descriptive_migration_name> - Production: Migrations will be applied during the deployment process using:
npx prisma migrate deploy
This ensures that the database schema is always in sync with the Prisma schema definition.