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.prismais the main file containing thegeneratoranddatasourceblocks. It must stay at the root of theprisma/directory.- Enums are colocated with the domain that owns them. Shared enums (like
Faction) live inschema.prisma. - Cross-file references work automatically -- a model in
event.prismacan reference a type defined inuser.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:
- Place it in the most relevant domain file, or create a new
.prismafile if it represents a new domain. - Colocate any enums the model introduces in the same file.
- Run
pnpm db:generateto regenerate the client. - Run
pnpm db:migrateto create a migration if schema changed.
File-to-Domain Mapping
| File | Enums | Models |
|---|---|---|
schema.prisma | Faction | (none -- generator/datasource only) |
organization.prisma | OrganizationType, GuildSyncSource | Organization, WowGuild, Team, Community, FriendGroup |
user.prisma | User, Session, Account, Verification | |
character.prisma | CharacterSyncSource, CharacterTemplate | Character, CharacterSyncSession, RosterMember, RosterSyncSession |
event.prisma | EventType, EventStatus, EventScope, EventVisibility, ParticipationStatus | Event, EventSlot, Participation, PendingEventInvite, EventVoicePresence |
membership.prisma | MembershipStatus | Role, Membership, RoleAssignmentHistory |
content.prisma | PostStatus, PostVisibility, PostDraftVisibility | OrganizationTextContent/History, OrganizationPost/History/DraftViewer |
journal.prisma | JournalSyncSession, JournalExpansion, JournalInstance, JournalEncounter | |
platform.prisma | PlatformConfig |