model - 컬렉션 정의 시작점model Admin {
id String @id
email String
}
model 하나 = MongoDB의 컬렉션 하나
Admin → admin 컬렉션이 되는 것
안에는 "문서의 필드 구조" 정의
이름 타입 속성구조는 항상 아래 순서
email String
필드명 타입 @속성 @속성
| Prisma 타입 | MongoDB 대응 | 설명 |
|---|---|---|
String | string | 문자열 |
Int | int | 정수 |
Boolean | bool | true / false |
DateTime | date | 날짜 |
Float | double | 실수 |
Json | object | 자유 구조 JSON |
id String @id @default(auto()) @map("_id") @db.ObjectId
String → Prisma에서는 ObjectId를 String으로 다룸@id → primary key@default(auto()) → MongoDB가 ObjectId 자동 생성@map("_id") → Prisma의 id ↔ MongoDB의 _id 매핑@db.ObjectId → 실제 DB 타입이 ObjectId임을 명시MongoDB + Prisma에서 ID 필드는 거의 항상 이 패턴
name String?
? = 없어도 되는 필드lastLoginAt DateTime?
→ 아직 로그인 안 한 관리자도 저장 가능
@default()status String @default("ACTIVE")
loginFailCount Int @default(0)
createdAt DateTime @default(now())
@updatedAtupdatedAt DateTime @updatedAt
update가 발생할 때enum - 값 제한enum AdminRole {
SUPER_ADMIN
ADMIN
CS
}
###
role AdminRole
"admin", "Admin" 같은 오타 방지enum AdminStatus {
ACTIVE
SUSPENDED
DELETED
}
유니크 제약
email String @unique
일반 인덱스
@@index([role])
@@index([status])
permissions String[]
"permissions": ["notice:write", "user:read"]
createdById String? @db.ObjectId
createdBy Admin? @relation("AdminCreatedBy", fields: [createdById], references: [id])