Skip to main content

Prisma Multi-File Schema

The Prisma schema is split into domain-organized files under apps/api/prisma/. All .prisma files in the directory are merged automatically by Prisma 7.4+.

Directory Structure

apps/api/prisma/
schema.prisma -- generator, datasource, shared enums
organization.prisma -- Organization, WowGuild, Team, Community, FriendGroup
user.prisma -- User, Session, Account, Verification
character.prisma -- Character, CharacterSyncSession, RosterMember, RosterSyncSession
event.prisma -- Event, EventSlot, Participation, PendingEventInvite, EventVoicePresence
membership.prisma -- Role, Membership, RoleAssignmentHistory
content.prisma -- OrganizationTextContent/History, OrganizationPost/History/DraftViewer
journal.prisma -- JournalExpansion, JournalInstance, JournalEncounter, JournalSyncSession
platform.prisma -- PlatformConfig
migrations/ -- Prisma migration history

Key Rules

  • schema.prisma is the main file containing the generator and datasource blocks. It must stay at the root of the prisma/ directory.
  • Enums are colocated with the domain that owns them. Shared enums (like Faction) live in schema.prisma.
  • Cross-file references work automatically -- a model in event.prisma can reference a type defined in user.prisma.
  • Migrations are unaffected -- they continue to work from prisma/migrations/ as before.

Configuration

The prisma.config.ts points to the directory, not a single file:

import 'dotenv/config';
import { defineConfig, env } from 'prisma/config';

export default defineConfig({
schema: 'prisma/',
migrations: {
path: 'prisma/migrations',
},
datasource: {
url: env('DATABASE_URL'),
},
});

Adding New Models

When adding a new model:

  1. Place it in the most relevant domain file, or create a new .prisma file if it represents a new domain.
  2. Colocate any enums the model introduces in the same file.
  3. Run pnpm db:generate to regenerate the client.
  4. Run pnpm db:migrate to create a migration if schema changed.

File-to-Domain Mapping

FileEnumsModels
schema.prismaFaction(none -- generator/datasource only)
organization.prismaOrganizationType, GuildSyncSourceOrganization, WowGuild, Team, Community, FriendGroup
user.prismaUser, Session, Account, Verification
character.prismaCharacterSyncSource, CharacterTemplateCharacter, CharacterSyncSession, RosterMember, RosterSyncSession
event.prismaEventType, EventStatus, EventScope, EventVisibility, ParticipationStatusEvent, EventSlot, Participation, PendingEventInvite, EventVoicePresence
membership.prismaMembershipStatusRole, Membership, RoleAssignmentHistory
content.prismaPostStatus, PostVisibility, PostDraftVisibilityOrganizationTextContent/History, OrganizationPost/History/DraftViewer
journal.prismaJournalSyncSession, JournalExpansion, JournalInstance, JournalEncounter
platform.prismaPlatformConfig